【任务 1】容器云平台搭建[5 分]
【题目 1】平台部署--部署容器云平台[1.5 分]
【题目 2】平台部署--部署 Istio 服务网格[0.5 分]
【题目 3】平台部署--部署 KubeVirt 虚拟化[1 分]
【题目 4】平台部署--部署 Harbor 仓库及Helm 包管理工具[1 分]
【题目 5】集群管理--备份 ETCD 数据[1 分]
【任务 1】容器云平台搭建[5 分]
(1)安装Docker
Kubernetes默认的容器运行时仍然是Docker,使用的是kubelet中内置dockershim CRI实现。
所有节点安装Docker-ce:
yum install -y yum-utils device-mapper-persistent-data lvm2
yum install -y docker-ce
启动Docker:
systemctl start docker
systemctl enable docker
(2)安装docker-compose
在master节点安装docker-conpose:
cp -rfv /opt/paas/docker-compose/v1.25.5-docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose version
docker-compose version 1.25.5, build 8a1c60f6
【题目 1】平台部署--部署容器云平台[1.5 分]
登录OpenStack 私有云平台,使用 CentOS7.9 镜像创建两台云主机,使用 kubeeasy 工具完成Kubernetes 1.22.1 集群的搭建。然后使用 nginx 镜像在 default 命名空间下创建一个名为exam 的Pod,并为该 Pod 设置环境变量 exam,其值为 2022。 完成后提交 master 节点的用户名、密码和 IP 到答题框。
1.Kubernetes 集群部署成功得 1 分;
2.Pod 创建成功且环境变量设置正确得 0.5 分。
(1)两台节点(一台master,一台node),将提供的安装包 chinaskills_cloud_paas_v2.0.2.iso 上传至 master 节点/root 目录,并解压 到/opt 目录
root@localhost \~\]# mount -o loop chinaskills_cloud_paas_v2.0.2.iso /mnt/ \[root@localhost \~\]# cp -rfv /mnt/\* /opt/ \[root@localhost \~\]# umount /mnt/ (2)安装 kubeeasy依赖 \[root@localhost \~\]# mv /opt/kubeeasy /usr/bin/kubeeasy \[root@localhost \~\]# kubeeasy install depend \\ --host 10.24.2.10,10.24.2.11 \\ --user root --password Abc@1234 --offline-file /opt/dependencies/base-rpms.tar.gz --host:所有主机节点 IP,如:10.24.1.2-10.24.1.10,中间用"-"隔开,表示 10.24.1.2 到 10.24.1.10 范围内的所有 IP。若 IP 地址不连续,则列出所有节点 IP,用逗号隔开,如: 10.24.1.2,10.24.1.7,10.24.1.9。 --user:主机登录用户,默认为 root。 --password:主机登录密码,所有节点需保持密码一致。 --offline-file:离线安装包路径。 (3)在master节点执行以下命令部署Kubernetes集群: \[root@localhost \~\]# kubeeasy install kubernetes --master 10.24.2.10 --worker 10.24.2.11 --user root --password Abc@1234 --version 1.22.1 --offline-file /opt/kubernetes.tar.gz 部分参数解释如下: --master:Master节点IP。 --worker:Node节点IP,如有多个Node节点用逗号隔开。 --version:Kubernetes版本,此处只能为1.22.1。 可通过命令"tail -f /var/log/kubeinstall.log"查看安装详情或排查错误。 若集群部署失败或出现故障,可重置集群重新部署,重置命令如下: \[root@k8s-master-node1 \~\]# kubeeasy reset 重置完成后再次执行步骤1.1-1.2即可重新部署集群。 部署完成后查看集群状态: \[root@k8s-master-node1 \~\]# kubectl cluster-info Kubernetes control plane is running at https://apiserver.cluster.local:6443 CoreDNS is running at https://apiserver.cluster.local:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. 查看节点负载情况: \[root@k8s-master-node1 \~\]# kubectl top nodes --use-protocol-buffers NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% k8s-master-node1 389m 4% 6926Mi 43% k8s-worker-node1 875m 10% 3365Mi 21% (4)使用nginx镜像在default命名空间下创建一个名为exam的Pod,并为该Pod设置环境变量exam,其值为2022 ## docker load \< /opt/extended-images/nginx_latest.tar ## cat pod.yaml apiVersion: v1 kind: Pod metadata: name: exam spec: containers: * name: nginx image: nginx imagePullPolicy: IfNotPresent env: * name: "exam" value: "2022" 使用命令进行创建: ## kubectl apply -f pod.yaml 使用命令进行验证安装的集群环境及Pod: ## kubectl cluster-info Kubernetes control plane is running at https://apiserver.cluster.local:6443 CoreDNS is running at https://apiserver.cluster.local:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. ## kubectl exec exam -- printenv PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=exam exam=2022 【题目 2】平台部署--部署 Istio 服务网格\[0.5 分
在 Kubernetes 集群上完成 Istio 服务网格环境的安装,然后新建命名空间 exam,为该命名空间开启自动注入 Sidecar。 完成后提交 master 节点的用户名、密码和 IP 到答题框。
1.Istio 所有组件运行成功得 0.3 分;
2.命名空间 exam 自动注入成功得 0.2 分。
(1)安装istio服务
在master节点执行以下命令进行Istio服务网格环境的安装:
root@k8s-master-node1 \~\]# kubeeasy add --istio istio 查看Pod: \[root@k8s-master-node1 \~\]# kubectl -n istio-system get pods NAME READY STATUS RESTARTS AGE grafana-6ccd56f4b6-twwjv 1/1 Running 0 5m15s istio-egressgateway-7f4864f59c-nxz2l 1/1 Running 0 5m34s istio-ingressgateway-55d9fb9f-jzhnb 1/1 Running 0 5m34s istiod-555d47cb65-jwkgp 1/1 Running 0 5m40s jaeger-5d44bc5c5d-h9t29 1/1 Running 0 5m15s kiali-79b86ff5bc-v9sfk 1/1 Running 0 5m15s prometheus-64fd8ccd65-5px64 2/2 Running 0 5m15s 查看Istio版本信息: \[root@k8s-master-node1 \~\]# istioctl version client version: 1.12.0 control plane version: 1.12.0 data plane version: 1.12.0 (2 proxies) Istio可视化 访问Grafana(http://master_IP:33000),如图5所示: 图5 Grafana访问界面 访问Prometheus(http://master_IP:30090),如图6所示: 图6访问Prometheus 查看Targets,如图7所示: 图7查看Targets 访问Jaeger(http://master_IP:30686),如图所示: 图8访问Jaeger 访问Kiali(http://master_IP:20001),如图9所示: 图9访问Kiali (2)在Kubernetes集群上完成Istio服务网格环境的安装,然后新建命名空间exam,为该命名空间开启自动注入Sideca ## kubectl create namespace exam ## kubectl label namespace exam istio-injection=enabled 在master节点执行kubectl -n istio-system get all命令和kubectl get ns exam --show-labels命令进行验证: ## kubectl -n istio-system get all NAME READY STATUS RESTARTS AGE pod/grafana-6ccd56f4b6-ssmbl 1/1 Running 0 81s pod/istio-egressgateway-7f4864f59c-qm7wn 1/1 Running 0 97s pod/istio-ingressgateway-55d9fb9f-jd4pn 1/1 Running 0 97s pod/istiod-555d47cb65-p5cmq 1/1 Running 0 104s pod/jaeger-5d44bc5c5d-xqvbj 1/1 Running 0 81s pod/kiali-9f9596d69-2wsjl 1/1 Running 0 80s pod/prometheus-64fd8ccd65-w2zrg 2/2 Running 0 80s ... ## kubectl get ns exam --show-labels NAME STATUS AGE LABELS exam Active 28s istio-injection=enabled 【题目 3】平台部署--部署 KubeVirt 虚拟化\[1 分
在 Kubernetes 集群上完成KubeVirt 虚拟化环境的安装。完成后提交 master 节点的用户名、密码和 IP 到答题框。
1.KubeVirt 所有组件运行成功得 1 分。
(1)在master节点执行以下命令安装KubeVirt
root@k8s-master-node1 \~\]# kubeeasy add --virt kubevirt 查看Pod: \[root@k8s-master-node1 \~\]# kubectl -n kubevirt get pods NAME READY STATUS RESTARTS AGE virt-api-8d998846b-2xx5m 1/1 Running 0 86s virt-api-8d998846b-tqwhq 1/1 Running 0 86s virt-controller-76b86f6965-gz8m4 1/1 Running 0 62s virt-controller-76b86f6965-pjjv5 1/1 Running 0 62s virt-handler-hvf45 1/1 Running 0 62s virt-handler-x7bvj 1/1 Running 0 62s virt-operator-579f86869c-k9nw4 1/1 Running 0 2m22s virt-operator-579f86869c-vtrkn 1/1 Running 0 2m22s 【题目 4】平台部署--部署 Harbor 仓库及Helm 包管理工具\[1 分
在 master 节点上完成Harbor 镜像仓库及Helm 包管理工具的部署。然后使用 nginx 镜像自定义一个 Chart,Deployment 名称为 nginx,副本数为 1,然后将该 Chart 部署到 default 命名空间下,Release 名称为 web。 完成后提交 master 节点的用户名、密码和 IP 到答题框。
1.Harbor 仓库部署成功得 0.5 分;
2.Helm 工具安装成功得 0.2 分;
3.Chart 包部署成功得 0.3 分。
(1)在master节点执行以下命令进行Harbor仓库的安装
root@k8s-master-node1 \~\]# kubeeasy add --registry harbor 部署完成后查看Harbor仓库状态: \[root@k8s-master-node1 \~\]# systemctl status harbor ● harbor.service - Harbor Loaded: loaded (/usr/lib/systemd/system/harbor.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2021-12-06 14:34:49 CST; 30s ago 在Web端通过http://master_ip访问Harbor 使用管理员账号(admin/Harbor12345)登录Harbor (3)使用nginx镜像自定义一个Chart,Deployment名称为nginx,副本数为1,然后将该Chart部署到default命名空间下,Release名称为web \[root@k8s-master-node1 \~\]# helm create mychart Creating mychart \[root@k8s-master-node1 \~\]# rm -rf mychart/templates/\* \[root@k8s-master-node1 \~\]# vi mychart/templates/deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: nginx name: nginx spec: replicas: 1 selector: matchLabels: app: nginx strategy: {} template: metadata: creationTimestamp: null labels: app: nginx spec: containers: - image: nginx name: nginx resources: {} status: {} \[root@k8s-master-node1 \~\]# helm install web mychart NAME: web LAST DEPLOYED: Tue Sep 13 16:23:12 2022 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None 在master节点执行helm status web命令进行验证: \[root@k8s-master-node1 \~\]# helm status web NAME: web LAST DEPLOYED: Tue Sep 13 16:23:12 2022 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None 【题目 5】集群管理--备份 ETCD数据\[1 分
Kubernetes 使用 ETCD 来存储集群的实时运行数据,为防止服务器宕机导致 Kubernetes集群数据丢失,请将Kubernetes 集群数据备份到/root/etcd.db 中。完成后提交 master 节点的 IP 地址、用户名和密码到答题框。
1.etcdctl 工具安装成功得 0.2 分;
2.ETCD 数据备份成功得 0.8 分。
在master节点执行:
(1)安装etcd
首先在master节点安装etcd
root@master \~\]# yum install etcd -y 查看etcd版本 \[root@master \~\]# etcdctl -version etcdctl version: 3.3.11 API version: 2 (2)将Kubernetes 集群数据备份到/root/etcd.db 中 \[root@master \~\]# ETCDCTL_API=3 etcdctl --endpoints 192.168.248.128:2379 \\ > --cert=/etc/kubernetes/pki/etcd/server.crt > > --key=/etc/kubernetes/pki/etcd/server.key > > --cacert=/etc/kubernetes/pki/etcd/ca.crt > > snapshot save /root/etcd.db > > Snapshot saved at /root/etcd.db