B站ID:老白嫖大怪兽
【赛程名称】云计算赛项第二场-容器云
说明:完成本任务需要两台安装了 CentOS7.9 操作系统的云主机:master 和 node。Chinaskill_Cloud_PaaS.iso 镜像包中有本次容器云部署所需的所有文件,运维所需的文件见附件。
某公司技术部产品开发上线周期长,客户的需求经常得不到及时响应。引入 CICD (Continuous Integration 持续集成、Continuous Delivery 持续交付) 成了公司的当务之急,研 发团队决定搭建基于 Kubernetes 的 CICD 环境,希望基于这个平台来实现 DevOps 的部分流 程,来减轻开发、部署、运维的负担。
为了能够让公司开发的 web 应用系统产品能够基于服务器的性能、可靠性、高可用性 与方便维护,研发部决定使用微服务架构,实现基于 Kubernetes 的容器化部署。
节点规划如表所示。
节点角色 | 主机名 | VCPUS | 内存 | 硬盘 | IP地址 |
---|---|---|---|---|---|
Master、Harbor、CICD | master | 4 | 12G | 100G | 10.18.4.10 |
Worker Node | node | 4 | 8G | 100G | 10.18.4.11 |
登录 OpenStack 私有云平台,使用 CentOS7.9 镜像创建两台云主机,使用 kubeeasy 工具 完成 Kubernetes 1.22.1 集群的搭建。然后使用 nginx 镜像在 default 命名空间下创建一个名为 exam 的 Pod,并为该 Pod 设置环境变量 exam,其值为 2022。
完成后提交 master 节点的用户名、密码和 IP 到答题框。
部署kubernets 1.22.1集群
curl -O http://10.18.4.46/chinaskills_cloud_paas_v2.0.2.iso
mount chinaskills_cloud_paas_v2.0.2.iso /mnt
cp -rvf /mnt/* /opt
cp /opt/kubeeasy /usr/bin
kubeeasy --help
#[install dependencies package cluster]
kubeeasy install dependencies \
--host 10.18.4.10,10.18.4.11 \
--user root \
--password 000000 \
--offline-file /opt/dependencies/base-rpms.tar.gz
#[install k8s cluster offline]
kubeeasy install kubernetes \
--master 10.18.4.10 \
--worker 10.18.4.11 \
--user root \
--password 000000 \
--version 1.22.1 \
--offline-file /opt/kubernetes.tar.gz
基础创建
kubectl run exam --image nginx:latest --env="exam=2022" --image-pull-policy='IfNotPresent'
在 Kubernetes 集群上完成 Istio 服务网格环境的安装,然后新建命名空间 exam,为该命名空间开启自动注入 Sidecar。
kubeeasy add --istio istio
#创建exam命名空间
kubectl create ns exam
#通过为命名空间打标签来实现自动注入
kubect label ns exam istio-injection=enabled
在 Kubernetes 集群上完成 KubeVirt 虚拟化环境的安装。 完成后提交 master 节点的用户名、密码和 IP 到答题框。
kubeeasy add --virt kubevirt
在 master 节点上完成 Harbor 镜像仓库及 Helm 包管理工具的部署。然后使用 nginx 镜像 自定义一个 Chart,Deployment 名称为 nginx,副本数为 1,然后将该 Chart 部署到 default 命名空间下,Release 名称为 web。 完成后提交 master 节点的用户名、密码和 IP 到答题框。
#[add harbor]
kubeeasy add --registry harbor
helm部署nginx应用
#使用helm工具创建nginx项目
helm create nginx
rm -rf nginx/templates/*
#创建deployment模板
kubectl create deployment nginx -oyaml --image=nginx:latest --replicas=1 --dry-run --port=80 > /root/nginx/templates/deployment.yaml
cat > /root/nginx/templates/deployment <apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
EOF
#创建helm应用的文档简介
cat > /root/nginx/templates/NOTES.txt <name: nginx
EOF
#部署以Release为web命名的helm任务
cd /root
helm install web nginx
helm uninstall web
Kubernetes 使用 ETCD 来存储集群的实时运行数据,为防止服务器宕机导致 Kubernetes 集群数据丢失,请将 Kubernetes 集群数据备份到/root/etcd.db 中。 完成后提交 master 节点的 IP 地址、用户名和密码到答题框。
备份etcd数据需要集群中有etcdctl的命令行工具。这个工具的获取方式可以是在官网中找对应部署etcd镜像的etcd的源码包。链接如下:https://github.com/etcd-io/etcd/releases。但是这种方式下载很慢,并且不能保证赛项提供了这个包。所以可以使用我的这种方式:
检查etcd状态:
#查看etcd集群成员列表
ETCDCTL_API=3 /usr/local/bin/etcdctl \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
--endpoints="https://127.0.0.1:2379" member list
#查看etcd端点状态
ETCDCTL_API=3 /usr/local/bin/etcdctl \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
--endpoints="https://127.0.0.1:2379" endpoint status
开始备份etcd数据:
#基础格式
ETCDCTL_API=3 etcdctl \
--cacert="${CACERT}" --cert="${CERT}" --key="${KEY}" \
--endpoints=${ENDPOINTS} \
snapshot save /root/etcd.db
ETCDCTL_API=3 /usr/local/bin/etcdctl \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
--endpoints="https://127.0.0.1:2379" snapshot save /root/etcd.db