江
江小南
V1
2022/10/23阅读:118主题:默认主题
【CKA、CKS篇】CKA真题解析——使用 sidecar 代理容器日志
真题解析
题目:
使用 busybox Image 来将名为 sidecar 的 sidecar 容器添加到现有的 pod 11-factor-app 中。
新的 sidecar 容器必须运行以下命令:
/bin/sh -c tail -n+1 -f /var/log/11-factor-app.log
使用挂载在 /var/log 的 Volume,使日志文件 11-factor-app.log可用于 sidecar 容器。
除了添加所需要的 volume mount 以外,请勿更改现有容器的规格。
考察点:
pod 两个容器共享存储卷
解析:
我们将题目翻译成更通顺的语句。
-
添加一个名为 sidecar 的边车容器(使用 busybox 镜像),加到已有的 pod 11-factor-app 中。 -
确保 sidecar 容器能够输出 /var/log/11-factor-app.log 的信息。 -
使用 volume 挂载 /var/log 目录,确保 sidecar 能访问 11-factor-app.log 文件
帮助文档:
https://kubernetes.io/zh-cn/docs/concepts/cluster-administration/logging/

实际操作:
-
将原始 pod 到处yaml。
kubectl get pod 11-factor-app -o yaml > varlog.yaml
-
yaml备份
cp varlog.yaml varlog-bak.yaml
candidate@node01:~$ cp varlog.yaml varlog-bak.yaml
candidate@node01:~$ ll
total 64
...
-rw-rw-r-- 1 candidate candidate 3181 Sep 7 22:22 varlog-bak.yaml
-rw-rw-r-- 1 candidate candidate 3181 Sep 7 22:20 varlog.yaml
...
candidate@node01:~$
备份 yaml 文件,防止改错了,方便回退。
-
修改yaml
vim varlog.yaml
apiVersion: v1
kind: Pod
metadata:
name: 11-factor-app
spec:
containers:
- args:
- /bin/sh
- -c
- |
i=0; while true; do
echo "$(date) INFO $i" >> /var/log/11-factor-app.log;
i=$((i+1));
sleep 1;
done
image: busybox
imagePullPolicy: IfNotPresent
name: count
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: kube-api-access-7m2k4
readOnly: true
- name: varlog
mountPath: /var/log
- name: sidecar
image: busybox
args: [/bin/sh, -c, 'tail -n+1 -F /var/log/11-factor-app.log']
volumeMounts:
- name: varlog
mountPath: /var/log
dnsPolicy: ClusterFirst
enableServiceLinks: true
nodeName: node01
preemptionPolicy: PreemptLowerPriority
priority: 0
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: default
serviceAccountName: default
terminationGracePeriodSeconds: 30
tolerations:
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
tolerationSeconds: 300
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
volumes:
- name: kube-api-access-7m2k4
projected:
defaultMode: 420
sources:
- serviceAccountToken:
expirationSeconds: 3607
path: token
- configMap:
items:
- key: ca.crt
path: ca.crt
name: kube-root-ca.crt
- downwardAPI:
items:
- fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
path: namespace
- name: varlog
emptyDir: {}
...


-
删除原有的 pod
kubectl delete pod 11-factor-app
-
部署新 pod
candidate@node01:~$ kubectl apply -f varlog.yaml
pod/11-factor-app created
candidate@node01:~$
-
检查验证
candidate@node01:~$ kubectl get pod 11-factor-app
NAME READY STATUS RESTARTS AGE
11-factor-app 2/2 Running 0 42s
candidate@node01:~$
kubectl exec 11-factor-app -c sidecar -- tail -f /var/log/11-factor-app.log

日子每秒打印一次。
至此本道题目完成。
作者介绍
江
江小南
V1