一、私有云运维
1、cinder创建硬盘
2、heat安装
3、镜像管理
4、网络管理
5、云主机管理
6、快照管理
7、数据库安装
1、安装完后登入数据库中创建chinaskilldb库,在chinaskilldb库中创建表testable (id int not null primary key,Teamname varchar(50), remarks varchar(255)),在表中插入记录(1,“cloud”,“chinaskill”)。
2、将memcached的缓存大小从64Mib改成256Mib。
3、使用命令 创建用户chinaskill,并设置Administrators限权
完成后提交控制节点的用户名、密码和IP地址到答题框。
8、keystone安装
在controller节点上使用iaas-install-keystone.sh 脚本安装Keystone服务。创建一个用户chinaskill完成后提交控制节点的用户名、密码和IP地址到答题框。
9、heat模板管理
在openstack私有云平台上,在/root目录下编写模板server.yaml,创建名为“m1.flavor”、 ID 为 1234、内存为1024MB、硬盘为20GB、vcpu数量为 1的云主机类型。完成后提交控制节点的用户名、密码和IP地址到答题框。(在提交信息前请准备好yaml模板执行的环境)
[root@controller ~]# cat server.yaml
heat_template_version: 2014-10-16
description: deploy a single flavor
resources:
server:
type: OS::Nova::Flavor
properties:
disk: 20
flavorid: 1234
name: m1.flavor
ram: 1024
vcpus: 1
[root@controller ~]# openstack stack create -t server.yaml test1
10、openstack动态调整云主机类型
动态将云主机类型调整为2核2G内存 云主机类型。
修改controller和各个computer节点的nova.cnf文件
[root@controller ~]# vim /etc/nova/nova.conf
[DEFAULT]
allow_resize_to_same_host=True
scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter
[root@controller ~]# systemctl restart openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
[root@compute ~]# systemctl restart libvirtd.service openstack-nova-compute.service
需要把云主机关机,然后进行调整云主机类型,需要进行确认。
10、swift作为glance镜像服务的后端存储
使用swift对象存储作为glance镜像服务的后端存储。
[root@controller ~]# cat /etc/glance/glance-api.conf |egrep -v '^$|^#'
[glance_store]
stores = glance.store.swift.Store
default_store = swift
swift_store_region = RegionOne
swift_store_endpoint_type = internalURL
swift_store_container = glance
swift_store_large_object_size = 5120
swift_store_large_object_chunk_size = 200
swift_store_create_container_on_put = True
swift_store_multi_tenant = True
swift_store_admin_tenants = service
swift_store_auth_address = http://controller:5000/v3.0/
swift_store_user = glance
swift_store_key = 000000
上传镜像之后,验证
[root@controller ~]# openstack container list
11、云平台安全策略提升,openstack中http转https
[root@controller ~]# yum install -y mod_wsgi mod_ssl
[root@controller ~]# vim /etc/httpd/conf.d/ssl.conf
75行 SSLProtocol all -SSLv2 -SSLv3 删除-SSLv3
[root@controller ~]# vim /etc/openstack-dashboard/local_settings
49行起
CSRF_COOKIE_SECURE = True 取消注释
SESSION_COOKIE_SECURE = True 取消注释
USE_SSL = True 添加该行
SESSION_COOKIE_HTTPONLY = True 添加该行
[root@controller ~]# systemctl restart httpd memcached
272 history
可以用https访问 https://192.168.100.10/dashboard
12、python 程序对接openstack api
在 controller 节点的/root 目录下编写 Python 程序 create_flavor.py 文件,对接 openstack api,,创建一个云主机类型 centos7:vcpu 为 2 个、内存为 2048M、硬盘大小 40G。
解压,配Python源
1、yum install -y python3
2、pip3 install certifi-2019.11.28-py2.py3-none-any.whl
3、pip3 install urllib3-1.25.11-py3-none-any.whl
4、pip3 install idna-2.8-py2.py3-none-any.whl
5、pip3 install chardet-3.0.4-py2.py3-none-any.whl
6、pip3 install requests-2.24.0-py2.py3-none-any.whl
[root@controller ~]# cat create_flavor.py
import requests
import json
osurl = "http://192.168.100.10"
body={
"auth":{
"identity":{
"methods":["password"],
"password":{
"user":{
"id":"d618c8ee2d234997889b62ee18562ee0",
"password":"000000"
}
}
},
"scope":{
"project":{
"id":"5e7709cbbd7c4c0e8733c3f7360d1d38"
}
}
}
}
headers = {}
def get_token():
url = osurl+":5000/v3/auth/tokens"
re = requests.post(url,headers=headers,data=json.dumps(body)).headers["X-Subject-Token"]
return re
def flavor_create():
url = osurl+":8774/v2.1/flavors"
headers["X-Auth-Token"] = get_token()
body = {
"flavor":{
"name": "centos7",
"id": 302,
"vcpus": 2,
"ram": 2048,
"disk": 40,
}
}
re = requests.post(url,data=json.dumps(body),headers=headers).json()
print(re)
return re
flavor_create()
13、创建云主机命令
#1.1、创建外网
openstack network create --share --external --provider-physical-network provider --provider-network-type flat pb1
# --share 允许所有项目都可以使用该网络
# --external 定义连通外部的虚拟网络
# --provider-physical-network 指定物理网络的提供者,由ml2_conf.ini文件的flat_networks确定
# --provider-network-type flat 映射到虚拟主机的网卡eth0,由linuxbridge_agent.ini文件中的physical_interface_mappings确定
##openstack network create --share --external --provider-physical-network provider --provider-network-type flat provider
#1.2、创建外网子网
openstack subnet create --network pb1 --allocation-pool start=192.168.121.100,end=192.168.121.200 --gateway 192.168.121.2 --dns-nameserver 114.114.114.114 --subnet-range 192.168.121.0/24 pb1-sn1
#2.1、创建内网
openstack network create --share --internal --provider-physical-network provider --provider-network-type vlan sn-1
#2.2 创建内网的子网
openstack subnet create --network sn-1 --allocation-pool start=10.10.10.100,end=10.10.10.200 --gateway 10.10.10.1 --dns-nameserver 114.114.114.114 --subnet-range 10.10.10.0/24 sn-s1
#3、上传镜像
glance image-create --name centos7.5 --disk-format=qcow2 --container-format=bare --visibility=public --file /opt/iaas/images/CentOS_7.5_x86_64_XD.qcow2
#4、创建实例-云主机类型
openstack flavor create --id 0 --vcpus 2 --ram 2048 --disk 20 m1
#5、创建云主机
openstack server create --flavor m1 --image centos7.5 --nic net-id='61267aba-282b-4802-8429-3e94044145b9' c1
14、heat模板管理2
14.1 创建网络模板
编写Heat模板create_net.yaml,创建名为Heat-Network网络,选择不共享;创建子网名为Heat-Subnet,子网网段设置为10.20.2.0/24,开启DHCP服务,地址池为10.20.2.20-10.20.2.100。模板内容如下:
[root@controller ~]# cat create_net.yaml
heat_template_version: 2014-10-16
description: Generated template
resources:
network_1:
type: OS::Neutron::Net
properties:
admin_state_up: true
name: Heat-Network
shared: false
subnet_1:
type: OS::Neutron::Subnet
properties:
allocation_pools:
- end: 10.20.2.100
start: 10.20.2.10
cidr: 10.20.2.0/24
enable_dhcp: true
host_routes: []
ip_version: 4
name: Heat-Subnet
network_id:
get_resource: network_1
[root@controller ~]# openstack stack create -t create_net.yaml test2
[root@controller ~]# openstack network list
14.2 创建用户模板
编写Heat模板create_user.yaml,创建名为heat-user的用户,属于admin项目包,并赋予heat-user用户admin的权限,配置用户密码为123456。模板内容如下:
[root@controller ~]# cat create_user.yaml
heat_template_version: 2014-10-16
resources:
user:
type: OS::Keystone::User
properties:
name: heat-user
password: "123456"
domain: demo
default_project: admin
roles: [{"role": admin, "project": admin}]
[root@controller heat]# openstack stack create -t create_user.yaml test-user
+---------------------+--------------------------------------+
| Field | Value |
+---------------------+--------------------------------------+
| id | dc70f9dc-f784-4eff-beae-f541a97b455d |
| stack_name | test-user |
| description | No description |
| creation_time | 2021-08-05T07:52:00Z |
| updated_time | None |
| stack_status | CREATE_IN_PROGRESS |
| stack_status_reason | Stack CREATE started |
+---------------------+--------------------------------------+
[root@controller heat]# openstack user list
+----------------------------------+-------------------+
| ID | Name |
+----------------------------------+-------------------+
| 11cb4d06948046dc86b660b94ece5c08 | chinaskill |
| 270b1696605349aab7d3e7e091ba92c6 | swift |
| 3d37d0c087df482480c8b6510081187e | placement |
| 451764b10f18410db820aa6b82964b0d | cinder |
| 60b741e3d6074174a4c0bf7a4760c4eb | neutron |
| 68e9e28cea1e4438b707282343368a10 | heat_domain_admin |
| 74dd9fd47f244ca6be5319b33116187a | heat |
| 7f85ba56fc7e4717a93ee7d543d97447 | c1 |
| 8dc6d5efeaf84b58bdfc6a128ae1a413 | glance |
| 9fd039c7fed84df2b805c5b4b81351ee | heat-user |
| a4056eb015294f98b2dce60f0c4b24b1 | nova |
| ab90102932f34d5f83da5f59ca19df08 | demo |
| f6bec50fd4c84560a81bff3ec4267224 | admin |
+----------------------------------+-------------------+
二、容器云运维
1、安装
节点角色 | 主机名 | VCPUS | 内存 | 磁盘 |
---|---|---|---|---|
master、harbor、CI/CD | master | 4 | 8 | 100G |
worker node | node | 4 | 8 | 100G |
安装 Docker CE 和 Docker Compose[2 分]
使用提供的 centos7.5-paas 镜像启动两台云主机 master 和 node,flavor 如上表所示。在master、node 各节点中分别安装 DockerCE 和 docker-compose。完成后提交 master 节点的用
户名、密码和 IP 到答题框
1.1 虚拟机准备
准备两台虚拟机,一个master ,一个node节点
192.168.121.21/22
1) 关闭SELinux
所有节点关闭SELinux:
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
2) 所有节点关闭防火墙:
systemctl stop firewalld.service
systemctl disable firewalld.service
1.2 初始配置
上传镜像(集群环境则使用包含PASS资源包的云主机镜像)
1、配置域名解析
2、配置yum源
1.3 执行脚本
master节点:
1. k8s_harbor_install.sh 安装docker-CE harbor load
2. k8s_image_push.sh 本地镜像上传到harbor仓库
3. k8s_master_install.sh master安装k8s
node节点:
4. k8s_node_install.sh node安装docker-ce harbor 加入k8s集群
[root@master opt]# docker -v
Docker version 19.03.13, build 4484c46d9d
[root@master opt]# docker-compose -v
docker-compose version 1.25.5, build 8a1c60f6
补充:
1、复制docker-compose
[root@master ~]# scp /usr/local/bin/docker-compose node:/usr/local/bin/docker-compose
2、node节点加入k8s集群
[root@node ~]# sh token.sh
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 10m v1.18.1
node Ready <none> 40s v1.18.1
2、docker-compose编排
2.1 wordpress编排
wordpress: 建博客工具
在node节点上从仓库中拉取mysql:latest和wordpress:latest镜像,创建/root/wproject/docker-compse.yaml文件,编排部署wordpress,并设置 restart策略。
node节点拉取镜像
[root@node ~]# mkdir wproject/
[root@node wproject]# cat docker-compose.yaml
version: '2'
services:
mysql:
image: 192.168.121.111/library/mysql:5.6
expose:
- "3306"
restart: always
environment:
- MYSQL_ROOT_PASSWORD=123456
wordpress:
image: 192.168.121.111/library/wordpress
ports:
- "80:80"
restart: always
environment:
- WORDPRESS_DB_HOST=mysql
- WORDPRESS_DB_USER=root
- WORDPRESS_DB_PASSWORD=123456
[root@node ~]# docker-compose -f docker-compose.yaml up
浏览器访问192.168.121.22
##停止并删除wordpress容器
[root@node ~]# docker-compose -f docker-compos.yaml stop
[root@node ~]# docker rm `docker ps -qa`
2.2 owncloud编排
owncloud: 云网盘
在node1节点上从仓库中拉取mysql:latest和owncloud:latest镜像,创建/root/wproject/docker-compse.yaml文件,编排部署owncloud,并设置 restart策略。
在node1节点上停止并删除上述部署的owncloud容器。
1)拉取镜像
2)创建docker-compose.yaml
[root@node ~]# mkdir ownproject
[root@node ~]# cd wproject/
[root@node ownproject]# vim docker-compose.yaml
owncloud:
image: 192.168.121.21/library/owncloud
restart: always
links:
- mysql:mysql
ports:
- 80:80
mysql:
image: 192.168.121.21/library/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
2.3 lychee
云相册
在node1节点上从仓库中拉取mysql:latest和lychee:latest镜像,创建/root/wproject/docker-compse.yaml文件,编排部署lychee,并设置 restart策略。
在node1节点上停止并删除上述部署的lychee容器。
[root@node lychee]# cat docker-compose.yaml
mysql:
image: 192.168.121.21/library/mysql
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: lychee
MYSQL_USER: lychee
MYSQL_PASSWORD: 123456
ports:
- "3306:3306"
restart: always
lychee:
image: 192.168.121.21/library/lychee
ports:
- 80:80
links:
- "mysql:mysql"
environment:
WONCLOUD_DB_NAME: lychee
WONCLOUD_DB_USER: lychee
WONCLOUD_DB_PASSWORD: 123456
restart: always
3、web全容器化应用系统部署
1) 使用提供的gmall.tar.gz压缩包,压缩包包含部署的所有文件,包含Dockerfile和docker-compose.yml,docker-compose程序文件
2) 将6个dockerfile分别构建成镜像。 jar:2021 nginx:2021 mysql:2021 redis:2021 zk:2021 kafka:2021
3) 编写docker-compose.yaml文件, 使用docker-compose up 编排部署
4)测试访问
4、CI /CD 持续集成/持续交付
该公司决定采用GitLab + Jenkins来构建CICD环境,以缩短新功能开发上线周期,及时满足客户的需求,实现DevOps的部分流程,来减轻部署运维的负担,可视化容器生命周期管理、应用发布和版本迭代更新,请完成GitLab + Jenkins的CICD环境部署:
1.从私有仓库中拉取gitlab:latest镜像,创建/root/devops/docker-compose.yaml文件,启动gitlab服务,实现web浏览器正常访问gitlab服务。
gitlab,版本控制工具
[root@node devops]# pwd
/root/devops
[root@node devops]# cat docker-compose.yaml
version: '2'
services:
gitlab:
image: 192.168.121.21/library/gitlab-ce:12.9.2-ce.0
container_name: "gitlab"
restart: unless-stopped
privileged: true
hostname: 'gitlab'
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://192.168.121.22'
gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab_rails['gitlab_shell_ssh_port'] = 22
ports:
- "80:80"
- '443:443'
- '2222:22'
volumes:
- /opt/gitlab/config:/etc/gitlab
- /opt/gitlab/data:/var/opt/gitlab
- /opt/gitlab/logs:/var/log/gitlab
### docker-compose up
###192.168.121.22访问
2.创建gitlab用户(用户名:Chinaskill),创建gitlab项目(项目名:ChinaskillProject),实现通过SSH链接克隆项目。
1) 改为中文界面
2) 管理中心--->用户--->新用户--- 设定密码
3) 登录新用户,-改中文界面--创建项目
4) 添加密钥
[root@node .ssh]# cat /root/.ssh/id_rsa.pub
5)登录方式
[root@node ~]# vim /root/.ssh/config
HOST 192.168.121.22
Port 2222
IdentityFile ~/.ssh/id_rsa
User git
[root@node ~]# mkdir Chinaskill
[root@node ~]# cd Chinaskill/
克隆项目
5.1) [root@node Chinaskill]# git clone git@192.168.121.22:gitlab/chinaskillproject.git
##克隆地址 可以在项目中找到
5.2)
[root@node Chinaskill]# git clone ssh://192.168.121.22/gitlab/chinaskillproject.git
3.从私有镜像仓库中拉取Jenkins镜像,在cicd-node节点上运行部署Jenkins容器,将容器的8080端口映射为宿主机的8080端口。
[root@node ~]# docker run -itd -p 8080:8080 -p 50000:50000 -v jenkis-data:/var/jenkins_home \
> -v /var/run/docker.sock:/var/run/docker.sock 192.168.121.21/library/jenkins
262a6eb4a043628c42ba3ffcfb0c0edbd96ebc46f3c92cc556132d732a232c43
[root@node ~]# cd /var/lib/docker/volumes/jenkis-data/_data
[root@node _data]# cat secrets/initialAdminPassword
5.在node节点/root目录下克隆ChinaskillProject项目,修改项目中的index.html文件(/root/ChinaskillProject/templates/index.html)中的“Hello,word!”修改为“Hello,ChinaSkill!”,提交并推送(push)代码。
1) 进入到项目的目录
[root@node ~]# cd -
/root/Chinaskill/chinaskillproject
[root@node chinaskillproject]# ls
README.md
[root@node chinaskillproject]# pwd
/root/Chinaskill/chinaskillproject
[root@node chinaskillproject]# vi index.html
hello,chinaskill
[root@node chinaskillproject]# git add index.html
[root@node chinaskillproject]# git commit -a -m "first upload index.html"
[root@node chinaskillproject]# git config --global user.name gitlab
[root@node chinaskillproject]# git config --global user.email gitlab@qq.com
[root@node chinaskillproject]# git commit -a -m "first upload index.html"
[root@node chinaskillproject]# git push
查看项目中是否存在文件。
5、k8s运维
【题目1】Pod管理
在master节点/root目录下编写yaml文件nginx.yaml,具体要求如下:
(1)Pod名称:nginx-pod;
(2)命名空间:default;
(3)容器名称:mynginx;
(4)镜像:nginx;拉取策略:IfNotPresent;
(5)容器端口:80。
完成后使用该yaml文件创建Pod,并提交master节点的用户名、密码和IP到答题框。
[root@master ~]# vim nginx.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: mynginx
name: nginx-pod
namespace: default
spec:
containers:
- image: 192.168.121.21/library/nginx:latest
name: mynginx
ports:
- containerPort: 80
imagePullPolicy: IfNotPresent
[root@master ~]# kubectl create -f nginx.yaml
【题目2】Deployment管理
在master节点/root目录下编写yaml文件nginx-deployment.yaml,具体要求如下:
(1)Deployment名称:nginx-deployment;
(2)命名空间:default;
(3)Pod名称:nginx-deployment,副本数:2;
(4)网络:hostNetwork;
(5)镜像:nginx;
(6)容器端口:80
完成后使用该yaml文件创建Deployment,并提交master节点的用户名、密码和IP到答题框。
apiVersion: apps/v1 ##版本号/pod资源
kind: Deployment ##类型/控制器
metadata: ##数据标签
name: nginx-deployment
namespace: default
labels: ##子标签
app: nginx-deployment ##业务容器
spec: ###容器的详细定义
replicas: 2 ##副本集
selector: ##选择器
matchLabels: ##匹配标签
app: nginx-deployment ##对应业务标签
template: ##模板
metadata:
labels:
app: nginx-deployment
spec:
hostNetwork: true
containers:
- name: nginx-deployment ##对应业务容器
image: 192.168.121.21/library/nginx:latest #镜像
ports:
- containerPort: 80 ##容器端口
【题目3】ReplicaSet管理
在master节点/root目录下编写yaml文件replicaset.yaml,具体要求如下:
(1)Replicaset名称:nginx;
(2)命名空间:default;
(3)副本数:3;
(4)镜像:nginx。
完成后使用该yaml文件创建ReplicaSet,并提交master节点的用户名、密码和IP到答题框。
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx
namespace: default
spec:
replicas: 3
selector:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: 192.168.121.21/library/nginx:latest
【题目4】健康检查
在master节点/root目录下编写yaml文件liveness_httpget.yaml,具体要求如下:
(1)Pod名称:liveness-http;
(2)命名空间:default;
(3)镜像:nginx;端口:80;
(4)容器启动时运行命令“echo Healty > /usr/share/nginx/html/healthz”;
(5)httpGet请求的资源路径为/healthz,地址默认为Pod IP,端口使用容器中定义的端口名称HTTP;
(6)启动后延时30秒开始运行检测;
(7)每隔3秒执行一次liveness probe。
完成后使用该yaml文件创建Pod,并提交master节点的用户名、密码和IP到答题框。
apiVersion: v1
kind: Pod
metadata:
name: liveness-http
namespace: default
spec:
containers:
- name: nginx
image: 192.168.100.10/library/nginx:latest
ports:
- containerPort: 80
args:
- /bin/sh
- -c
- echo Healty > /usr/share/nginx/html/healthz
livenessProbe:
httpGet:
path: /healthz
port: http
initialDelaySeconds: 30
periodSeconds: 3
三、公有云
任务1 基础设施构建
1.按照1核CPU、4G内存、40G硬盘创建两台名为ChinaSkill-node-1和ChinaSkill-node-2的云主机。
2.在公有云中完成一个名为intnetX的内部网络为192.168.X.0的云主机网络区域配置,将该网络网关设为192.168.X.254,使得ChinaSkill-node-1和ChinaSkill-node-2接入内部网络,并使云主机可以正常接入公共外部网络。
3.创建一个40G的文件块存储disk-1,并将云硬盘格式化为EXT4格式,挂载到ChinaSkill-node-2的/nfs/code目录下。