1.题目概述

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

    2.解析

  • 通过kubectl get pod -o yaml的方法将pod备份,删除旧pod 11-factor-app

  • copy一份新的yaml文件,添加一个名为sidecar的容器
  • 新建emptyDir的卷,确保两个容器都挂载了/var/log目录
  • 新建含有sidecar的pod,并通过kubectl logs验证

    3.参考答案

    3.1.备份pod

    1. kubectl get po 11-factor-app -o yaml > pod.yaml

    3.2.修改yaml

    apiVersion: v1
    kind: Pod
    metadata:
    name: 11-factor-app
    spec:
    containers:
    - name: 11-factor-app
      image: busybox
      args:
      - /bin/sh
      - -c
      - >
        i=0;
        while true;
        do
          echo "$i: $(date)" >> /var/log/11-factor-app.log;
          i=$((i+1));
          sleep 1;
        done      
      volumeMounts:
      - 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
    volumes:
    - name: varlog
      emptyDir: {}
    

    3.3.创建pod

    kubectl apply -f pod.yaml
    
    https://kubernetes.io/docs/concepts/cluster-administration/logging/