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

相关推荐
weixin_453965001 小时前
[单master节点k8s部署]30.ceph分布式存储(一)
分布式·ceph·kubernetes
weixin_453965001 小时前
[单master节点k8s部署]32.ceph分布式存储(三)
分布式·ceph·kubernetes
tangdou3690986551 小时前
1分钟搞懂K8S中的NodeSelector
云原生·容器·kubernetes
later_rql4 小时前
k8s-集群部署1
云原生·容器·kubernetes
weixin_453965006 小时前
[单master节点k8s部署]31.ceph分布式存储(二)
分布式·ceph·kubernetes
大G哥9 小时前
记一次K8S 环境应用nginx stable-alpine 解析内部域名失败排查思路
运维·nginx·云原生·容器·kubernetes
妍妍的宝贝9 小时前
k8s 中微服务之 MetailLB 搭配 ingress-nginx 实现七层负载
nginx·微服务·kubernetes
福大大架构师每日一题11 小时前
23.1 k8s监控中标签relabel的应用和原理
java·容器·kubernetes
程序那点事儿11 小时前
k8s 之动态创建pv失败(踩坑)
云原生·容器·kubernetes
唐大爹1 天前
项目实战:k8s部署考试系统
云原生·容器·kubernetes