江小南

V1

2022/10/23阅读:54主题:默认主题

【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 两个容器共享存储卷

解析

我们将题目翻译成更通顺的语句。

  1. 添加一个名为 sidecar 的边车容器(使用 busybox 镜像),加到已有的 pod 11-factor-app 中。
  2. 确保 sidecar 容器能够输出 /var/log/11-factor-app.log 的信息。
  3. 使用 volume 挂载 /var/log 目录,确保 sidecar 能访问 11-factor-app.log 文件

帮助文档

https://kubernetes.io/zh-cn/docs/concepts/cluster-administration/logging/

实际操作

  1. 将原始 pod 到处yaml。
kubectl get pod 11-factor-app -o yaml > varlog.yaml
  1. 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 文件,防止改错了,方便回退。

  1. 修改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: {}
...
  1. 删除原有的 pod
kubectl delete pod 11-factor-app
  1. 部署新 pod
candidate@node01:~$ kubectl apply -f varlog.yaml
pod/11-factor-app created
candidate@node01:~$
  1. 检查验证
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