6. Sidecar 容器

0. 简介

边车(Sidecar)一般指的一种附有单轮的设备,加装在摩托车等车侧,而边车容器指的也是这种可以随时拆卸的容器。比如我们会经常在一个 Pod 中除了设置主程序容器外,一般还会搭载一些日志收集、服务治理、健康检查等容器,这些容器就可以称之为边车容器。

1. 一个 Pod 中运行两个容器

在 k8s 1.28版本之前,如果我们想要使用边车功能,基本上就是在一个 Pod 上部署多个容器,比如我们部门现有的日志收集就是采用这种方式,这里我们仿照同 Pod 内的容器使用共享卷通信中的镜像,写如下的 Deployment:

yaml 复制代码
kind: Deployment
apiVersion: apps/v1
metadata:
  name: two-containers
spec:
  selector:
    matchLabels:
      app: two-containers
  replicas: 1
  template:
    metadata:
      labels:
        app: two-containers
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
        - name: shared-data
          mountPath: /usr/share/nginx/html
      - name: debian
        image: debian
        volumeMounts:
        - name: shared-data
          mountPath: /pod-data
        command: ["/bin/sh","-c", "echo Hello from the debian container > /pod-data/index.html"]
      volumes:
      - name: shared-data
        emptyDir: {}

以上其实就是由debian容器写了Hello from the debian container到共享卷中,而一个 Pod 中的容器共享卷,nginx容器挂载目录/usr/share/nginx/html,所以这时候执行:

bash 复制代码
kubectl exec -it two-containers-65bfd6bc69-tqqcd -c nginx bash

可以进入nginx容器,然后执行以下命令,可以展示的确实是/usr/share/nginx/html/index.html的文件内容。

bash 复制代码
~ curl localhost
Hello from the debian container

一般而言,这种方式的边车容器,和工作负载容器没有任何权限上的差异,k8s 无法控制他们之间的启动顺序,且边车容器可能会在工作负载容器退出后阻止 Pod 终止。

不过也有牛逼的大佬在看了 k8s 源码之后提出了能够控制启动和退出顺序的方式,可参考Kubernetes中Sidecar生命周期管理。

2. k8s 原生的边车容器

Kubernetes 1.28 在 Init 容器中添加了一个新的 restartPolicy 字段, 该字段在 SidecarContainers 特性门控启用时可用。

由于我的 kind 安装的 k8s 版本才 1.27,所以这里就不演示了,详情可以参考官方文档,和# 千呼万唤始出来的K8s Sidecar

相关推荐
dawnsky.liu13 小时前
OpenShift - 实现系统负载和业务负载分区隔离
kubernetes·openshift
杀不死的坏蛋c16 小时前
k8s-原理-网络-安装
kubernetes
安易算力20 小时前
GPU集群调度实践:Slurm/K8s混合部署与GPU共享优化 —— 从批处理到在线推理的统一调度架构
容器·架构·kubernetes
MrSYJ2 天前
Docker端口映射咋做的,模拟下。
docker·云原生·kubernetes
张小凡vip2 天前
Kubernetes--k8s---了解和使用configmap挂载配置文件
云原生·容器·kubernetes
小小龙学IT2 天前
Kubernetes 深度实践:架构、API 与避坑指南
容器·架构·kubernetes
MrSYJ3 天前
别人再问你路由表是啥,这篇文章摔它脸上
docker·云原生·kubernetes
吴声子夜歌3 天前
Nginx应用与运维——Nginx在Kubernetes中的应用(一)
运维·nginx·kubernetes
吴声子夜歌3 天前
Nginx应用与运维——Nginx在Kubernetes中的应用(三)
运维·nginx·kubernetes
sbjdhjd3 天前
云安全 | Docker 容器逃逸复盘(一):从隔离边界到运行时链路,如何确认自己身处容器
网络安全·docker·云原生·容器·kubernetes·云计算·云安全