Context
您需要将一个传统应用程序集成到 Kubernetes 的日志架构(例如 kubectl logs)中。
实现这个要求的通常方法是添加一个流式传输并置容器。
Task
更新现有的 synergy-leverager Deployment,
将使用 busybox:stable 镜像,且名为 sidecar 的并置容器,添加到现有的 Pod 。
新的并置容器必须运行以下命令:
/bin/sh -c "tail -n+1 -f /var/log/legacy-app.log"
使用挂载在 /var/log 的 Volume,使日志文件 legacy-app.log 可供并置容器使用。
除了添加所需的卷挂载之外,请勿修改现有容器的规范。
参考:提取volumeMounts、volumes信息https://kubernetes.io/docs/concepts/cluster-administration/logging
apiVersion: v1
kind: Pod
metadata:
name: counter
spec:
containers:
- name: count
image: busybox:1.28
args:
- /bin/sh
- -c
- >
i=0;
while true;
do
echo "$i: $(date)" >> /var/log/1.log;
echo "$(date) INFO $i" >> /var/log/2.log;
i=$((i+1));
sleep 1;
done
volumeMounts:
- name: varlog
mountPath: /var/log
- name: count-log-1
image: busybox:1.28
args: [/bin/sh, -c, 'tail -n+1 -F /var/log/1.log']
volumeMounts:
- name: varlog
mountPath: /var/log
- name: count-log-2
image: busybox:1.28
args: [/bin/sh, -c, 'tail -n+1 -F /var/log/2.log']
volumeMounts:
- name: varlog
mountPath: /var/log
volumes:
- name: varlog
emptyDir: {}
解答:
步骤1导出yaml
kubectl get deployment synergy-leverager -o yaml > sidecar.yaml
步骤2.编辑 yaml
vim sidecar.yaml
spec:
containers:
# ===== 原有容器(count)=====
- args:
- /bin/sh
- -c
- |
i=0; while true; do
echo "$(date) INFO $i" >> /var/log/legacy-app.log; # 每秒写入一条带时间戳的日志到 /var/log/legacy-app.log
i=$((i+1));
sleep 1;
done
image: alpine # 使用轻量级 Alpine Linux 镜像
imagePullPolicy: Always
name: count
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
# + 已有容器 增加 3 行(以下为新增的 volumeMounts 部分)
volumeMounts: # 挂载共享卷
- name: varlog # 引用下面定义的 volumes 中的 varlog 卷
mountPath: /var/log # 将卷挂载到容器的 /var/log 目录,使日志文件可被其他容器访问
# ===== 新增 sidecar 容器 =====
# + 新容器 增加 6 行
- name: sidecar
image: busybox:stable # 使用 BusyBox 镜像,内含 tail 命令
args: [/bin/sh, -c, 'tail -n+1 -f /var/log/legacy-app.log'] # 持续跟踪日志文件并输出到标准输出
volumeMounts:
- name: varlog # 挂载同一个共享卷
mountPath: /var/log # 使 sidecar 能读取 count 容器写入的日志文件
# ===== 共享卷定义 =====
# + 增加 3 行
volumes:
- name: varlog # 卷名称,与 volumeMounts 中的 name 对应
emptyDir: {} # 临时空目录,Pod 生命周期内存在,用于容器间共享文件
步骤3. 应用更新
kubectl apply -f sidecar.yaml
提示 configured,表示配置成功
< 5 > 检查
检查新 Pod 是否 Running
kubectl get pod | grep synergy-leverager
显示 2/2 Running

372

被折叠的 条评论
为什么被折叠?



