【任务 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"
使用命令进行创建:
- name: "exam"
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