赞
踩
目录
13、考核知识:PersistentVolumeClaims
提示:
- 在模拟环境中练习时最好是每做一道题就打一个快照,做完之后再恢复!(一共 17 道题)
- 考试环境的系统是 Ubuntu
- 文件资料下载:https://download.csdn.net/download/weixin_46560589/87364476
我的 cak 模拟环境:
切换 k8s 集群环境:kubectl config use-context k8s
Task
检查集群中有多少节点为 Ready 状态(不包括被打上 Taint: NoSchedule 的节点),之后将数量写到 /opt/KUSCO0402/kusc00402.txt。
- # 考试时执行,切换集群。模拟环境中不需要执行
- [student@node-1] $ kubectl config use-context k8s
-
- # 模拟环境中创建题目指定的目录,考试时不需要,已存在
- root@cka-master1:~# mkdir -pv /opt/KUSCO0402
-
- # 开始解题:
- # 查看集群中状态为 Ready 的节点
- root@cka-master1:~# kubectl get nodes | grep -w "Ready"
- cka-master1 Ready control-plane,master 26h v1.23.1
- cka-node1 Ready <none> 26h v1.23.1
-
- # 统计 Ready 数量
- root@cka-master1:~# kubectl get nodes | grep -w "Ready" | wc -l
- 2
-
- # 统计具有污点 NoSchedule 的数量
- root@cka-master1:~# kubectl describe nodes cka-master1 cka-node1 | grep "Taint" | grep "NoSchedule" | wc -l
- 1
-
- # 把结果(2-1=1)写入题目中指定的文件
- root@cka-master1:~# echo "1" > /opt/KUSCO0402/kusc00402.txt
- root@cka-master1:~# cat /opt/KUSCO0402/kusc00402.txt
- 1
切换 k8s 集群环境:kubectl config use-context k8s
Task
创建一个 Pod,名字为 kucc1,这个 Pod 包含 4 个容器,为 nginx、redis、memcached、consul。
使用 Pod:Pod | Kubernetes
- # 考试时执行,切换集群。模拟环境中不需要执行
- [student@node-1] $ kubectl config use-context k8s
-
- # 编写 yaml 文件
- root@cka-master1:~# vim kucc1.yaml
- apiVersion: v1
- kind: Pod
- metadata:
- name: kucc1
- spec:
- containers:
- - name: nginx
- image: nginx
- imagePullPolicy: IfNotPresent
- - name: redis
- image: redis
- imagePullPolicy: IfNotPresent
- - name: memcached
- image: memcached
- imagePullPolicy: IfNotPresent
- - name: consul
- image: consul
- imagePullPolicy: IfNotPresent
-
- root@cka-master1:~# kubectl apply -f kucc1.yaml
-
- root@cka-master1:~# kubectl get pods kucc1
- NAME READY STATUS RESTARTS AGE
- kucc1 4/4 Running 0 3s
切换 k8s 集群环境:kubectl config use-context hk8s
Task
创建一个 pv,名字为 app-config,大小为 2Gi, 访问权限为 ReadWriteMany。Volume 的类型为 hostPath,路径为 /srv/app-config。
创建 PersistentVolume:配置 Pod 以使用 PersistentVolume 作为存储 | Kubernetes
- # 考试时执行,切换集群。模拟环境中不需要执行
- [student@node-1] $ kubectl config use-context hk8s
-
- # 创建题目中的目录,考试是不需要,已存在
- root@cka-master1:~# mkdir -pv /srv/app-config
-
- # 开始解题:
- # 创建 pv
- root@cka-master1:~# vim pv.yaml
- apiVersion: v1
- kind: PersistentVolume
- metadata:
- name: app-config # 题目中指定的 pv 名称
- spec:
- capacity:
- storage: 2Gi # 题目指定的 pv 大小
- accessModes:
- - ReadWriteMany # 题目指定的访问模式
- hostPath:
- path: "/srv/app-config" # 题目指定的 url
-
- root@cka-master1:~# kubectl apply -f pv.yaml
- persistentvolume/app-config created
-
- root@cka-master1:~# kubectl get pv
- NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
- app-config 2Gi RWX Retain Available 6s
切换 k8s 集群环境:kubectl config use-context ok8s
Task
创建一个名字为 pv-volume 的 pvc,指定 storageClass 为 csi-hostpath-sc,大小为 10Mi。然后创建一个 Pod,名字为 web-server,镜像为 nginx,并且挂载该 PVC 至 /usr/share/nginx/html,挂载的权限为 RedWriteOnce。之后通过 kubectl edit 或者 kubectl path 将 pvc 改成 70Mi,并且记录修改记录。
创建 PersistentVolumeClaim:配置 Pod 以使用 PersistentVolume 作为存储 | Kubernetes
- # 考试时执行,切换集群。模拟环境中不需要执行
- [student@node-1] $ kubectl config use-context ok8s
-
- # 创建 pvc 和 pod
- root@cka-master1:~# vim pvc-pod.yaml
- apiVersion: v1
- kind: PersistentVolumeClaim
- metadata:
- name: pv-volume # 题目指定的 pvc 名称
- spec:
- storageClassName: csi-hostpath-sc # 题目指定的存储类名称
- accessModes:
- - ReadWriteOnce # 题目指定的访问模式
- resources:
- requests:
- storage: 10Mi # 题目指定的 pvc 大小
- ---
- apiVersion: v1
- kind: Pod
- metadata:
- name: web-server # 题目指定的 pod 名称
- spec:
- volumes:
- - name: pv-volume # 与 volumeMounts.name 一致
- persistentVolumeClaim:
- claimName: pv-volume # 使用的 pvc 名称
- containers:
- - name: nginx
- image: nginx # 题目指定的镜像
- volumeMounts:
- - mountPath: "/usr/share/nginx/html" # 题目指定的挂载目录
- name: pv-volume
-
- root@cka-master1:~# kubectl apply -f pvc-pod.yaml
-
- # 查看是否创建成功。之所以是 pending 状态是模拟环境中没有存储类 storageClassName: csi-hostpath-sc,考试环境中存在,无需担心
- root@cka-master1:~# kubectl get pvc pv-volume
- NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
- pv-volume Pending csi-hostpath-sc 21s
- root@cka-master1:~# kubectl get pods web-server
- NAME READY STATUS RESTARTS AGE
- web-server 0/1 Pending 0 31s
-
- # pvc 扩容。将 storage: 10Mi 修改为 70Mi
- root@cka-master1:~# kubectl edit pvc pv-volume
- ······
- resources:
- requests:
- storage: 70Mi
- storageClassName: csi-hostpath-sc
- ······
切换 k8s 集群环境:kubectl config use-context k8s
Task
监控名为 foobar 的 Pod 的日志,并过滤出具有 unable-access-website 信息的行,然后将写入到 /opt/KUTR00101/foobar。
示例:常用操作:命令行工具 (kubectl) | Kubernetes
- # 考试时执行,切换集群。模拟环境中不需要执行
- [student@node-1] $ kubectl config use-context k8s
-
- [student@node-1] $ kubectl logs foobar | grep unable-access-website > /opt/KUTR00101/foobar
Context
将一个现有的 Pod 集成到 Kubernetes 的内置日志记录体系结构中 (例如 kubectl logs)。添加 streaming sidecar 容器是实现此要求的一种好方法。
Task
使用 busybox lmage 来将名为 sidecar 的 sidecar 容器添加到现有的 Pod legacy-app 上,新的 sidecar 容器必须运行以下命令:
/bin/sh -c tail -n+1 -f /var/log/legacy-app.log
使用 volume 挂载 /var/log/ 目录,确保 sidecar 能访问 /var/log/legacy-app.log 文件。
使用边车容器运行日志代理:日志架构 | Kubernetes
- # 考试时执行,切换集群。模拟环境中不需要执行
- [student@node-1] $ kubectl config use-context k8s
-
- # 在模拟环境中创建题目中提到的 pod legacy-app,考试不需要,已存在
- root@cka-master1:~# vim legacy-app.yaml
- apiVersion: v1
- kind: Pod
- metadata:
- name: legacy-app
- spec:
- containers:
- - name: count
- image: busybox
- args:
- - /bin/sh
- - -c
- - >
- i=0;
- while true;
- do
- echo "$(date) INFO $i" >> /var/log/legacy-app.log;
- i=$((i+1));
- sleep 1;
- done
-
- root@cka-master1:~# kubectl apply -f legacy-app.yaml
- root@cka-master1:~# kubectl get pods legacy-app
- NAME READY STATUS RESTARTS AGE
- legacy-app 1/1 Running 0 17s
-
- # 开始解题:
- # 首先将题目中现有的 pod legacy-app 的 yaml 导出
- root@cka-master1:~# kubectl get pods legacy-app -o yaml > sidecar.yaml
-
- # 删除一些导出的内容,结果如下
- root@cka-master1:~# vim sidecar.yaml
- apiVersion: v1
- kind: Pod
- metadata:
- name: legacy-app
- namespace: default
- spec:
- containers:
- - args:
- - /bin/sh
- - -c
- - "i=0; while true; do\n echo \"$(date) INFO $i\" >> /var/log/legacy-app.log;\n
- \ i=$((i+1));\n sleep 1;\ndone \n"
- image: busybox
- imagePullPolicy: Always
- name: count
-
- # 在 sidecar.yaml 中添加 sidecar 容器和 volume
- root@cka-master1:~# vim sidecar.yaml
- apiVersion: v1
- kind: Pod
- metadata:
- name: legacy-app
- namespace: default
- spec:
- containers:
- - args:
- - /bin/sh
- - -c
- - "i=0; while true; do\n echo \"$(date) INFO $i\" >> /var/log/legacy-app.log;\n
- \ i=$((i+1));\n sleep 1;\ndone \n"
- image: busybox
- imagePullPolicy: IfNotPresent
- name: count
- volumeMounts:
- - name: logs
- mountPath: /var/log
- - name: sidecar
- image: busybox
- imagePullPolicy: IfNotPresent
- args: [/bin/sh, -c, 'tail -n+1 -f /var/log/legacy-app.log']
- volumeMounts:
- - name: logs
- mountPath: /var/log
- volumes:
- - name: logs
- emptyDir: {}
-
- # 先删除原有的 pod 才能更新
- root@cka-master1:~# kubectl delete -f sidecar.yaml
-
- # 如果删除很慢的话,就强制删除
- root@cka-master1:~# kubectl delete -f sidecar.yaml --force --grace-period=0
-
- root@cka-master1:~# kubectl apply -f sidecar.yaml
- pod/legacy-app created
- root@cka-master1:~# kubectl get pods legacy-app
- NAME READY STATUS RESTARTS AGE
- legacy-app 2/2 Running 0 3s
-
- # 查看 sidecar 容器日志
- root@cka-master1:~# kubectl logs legacy-app -c sidecar
切换 k8s 集群环境:kubectl config use-context k8s
Task
找出标签是 name=cpu-user 的 Pod,并过滤出使用 CPU 最高的 Pod,然后把它的名字写在已经存在的 /opt/KUTR00401/KUTR00401.txt 文件里(注意他没有说指定 namespace,所以需要使用 -A 指定所有 namespace)。
指定内存请求和限制:为容器和 Pod 分配内存资源 | Kubernetes
显示资源(CPU、内存、存储)的使用情况:
- # 考试时执行,切换集群。模拟环境中不需要执行
- [student@node-1] $ kubectl config use-context k8s
-
- # 将 addon.tar.gz、metrics-server-amd64-0-3-6.tar.gz 上传到 node 并解压
- root@cka-node1:~# docker load -i addon.tar.gz
-
- root@cka-node1:~# docker load -i metrics-server-amd64-0-3-6.tar.gz
-
- # 将 metrics.yaml 上传到 master 并创建
- root@cka-master1:~# kubectl apply -f metrics.yaml
-
- # 给 pod 打上标签
- root@cka-master1:~# kubectl label pods -n kube-system metrics-server-875fcb674-snp99 name=cpu-user
-
- # 创建题目给的目录
- root@cka-master1:~# mkdir -pv /opt/KUTR00401
-
- # 以上步骤在模拟环境中创建,模拟题目给出的环境,考试时不需要,已存在
- # 开始解题:
- # 查看标签为 name=cpu-user 并且是 cpu 使用最高的 pod
- root@cka-master1:~# kubectl top pods -l name=cpu-user --sort-by=cpu -A
- NAMESPACE NAME CPU(cores) MEMORY(bytes)
- kube-system metrics-server-875fcb674-snp99 2m 17Mi
-
- # 将查到的 pod 名字写入 /opt/KUTR00401/KUTR00401.txt 文件中
- root@cka-master1:~# echo "metrics-server-875fcb674-snp99" > /opt/KUTR00401/KUTR00401.txt
- root@cka-master1:~# cat /opt/KUTR00401/KUTR00401.txt
- metrics-server-875fcb674-snp99
切换 k8s 集群环境:kubectl config use-context wk8s
Task
一个名为 wk8s-node-0 的节点状态为 NotReady,让其他恢复至正常状态,并确认所有的更改开机自动完成。
可以使用以下命令,通过 ssh 连接到 wk8s-node-0 节点:ssh wk8s-node-0
可以使用以下命令,在该节点上获取更高权限:sudo -i
- # 考试时执行,切换集群。模拟环境中不需要执行
- [student@node-1] $ kubectl config use-context wk8s
-
- # 开始解题:
- [student@node-1] $ ssh wk8s-node-0
- [student@node-1] $ sudo -i
-
- [root@wk8s-node-0 ~]# systemctl status kubelet
- [root@wk8s-node-0 ~]# systemctl restart kubelet
- [root@wk8s-node-0 ~]# systemctl enable kubelet
- [root@wk8s-node-0 ~]# systemctl status kubelet
-
- # 退出 root,退回到 student@wk8s-node-0
- [root@wk8s-node-0 ~]# exit
-
- # 退出 wk8s-node-0,退回到 student@node-1
- [student@wk8s-node-0 ~]# exit
-
- # 不要输入 exit 太多,否则会退出考试环境
上一篇文章:2023 K8s 认证工程师 CKA 考题分析和题库练习(上)_Stars.Sky的博客-CSDN博客
下一篇文章:
【Kubernetes 企业项目实战】02、基于 Prometheus 和 K8s 构建智能化监控告警系统(上)_Stars.Sky的博客-CSDN博客
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。