openstack运维题

一、私有云运维

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目录下。

标题: openstack运维题

链接: https://zhiyong0389.github.io/2023/01/02/openstack_Om/

版权声明: 若无特殊标注皆为 智勇 原创版权, 转载请以链接形式注明作者及原始出处

最后编辑时间: 2023-06-29

本站由免费云加速(FreeCDN)提供网站加速和攻击防御服务