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

相关推荐
做个文艺程序员2 小时前
第04篇:K8s 弹性伸缩实战:HPA、VPA、KEDA——Java SaaS 应对流量洪峰的秘密武器
java·容器·kubernetes·弹性伸缩·自动扩容·ai 推理伸缩
做个文艺程序员11 小时前
第02篇:K8s 存储与配置管理:ConfigMap、Secret、PV/PVC 实战——Java SaaS 多租户配置最佳实践
java·容器·kubernetes
张忠琳13 小时前
【kubevirt】(virt-launcher Part 6)virt-launcher 设备/网络/存储/外设层
云原生·架构·kubernetes·kubevirt
qq_3564086615 小时前
Kubernetes Loki 日志收集系统部署文档 (读写分离模式 + Ceph S3 + Nginx 日志分离)
ceph·nginx·kubernetes
宇明一不急19 小时前
K8S-中nodePort、port、targetPort和containerPort
云原生·容器·kubernetes
做个文艺程序员21 小时前
第03篇:K8s 网络深度解析:Ingress、Service Mesh 与 CoreDNS——Java 微服务通信全链路剖析(生产级实战)
网络·kubernetes·service_mesh
成为你的宁宁21 小时前
【Kubernetes监控实战:NFS持久化存储 + Prometheus Operator + etcd监控】
kubernetes·prometheus·etcd
江华森21 小时前
Sealos 部署 Kubernetes 高可用集群 — 生产级技术笔记
笔记·容器·kubernetes
JAVA社区1 天前
Java高级全套教程(十一)—— Kubernetes 超详细企业级实战详解
java·运维·微服务·容器·面试·kubernetes
陈陈CHENCHEN2 天前
【Kubernetes】Kubeadm 搭建生产级 K8s 高可用集群
云原生·容器·kubernetes