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

相关推荐
YCyjs12 小时前
K8S群集调度二
云原生·容器·kubernetes
Hoxy.R12 小时前
K8s小白入门
云原生·容器·kubernetes
景天科技苑1 天前
【云原生开发】K8S多集群资源管理平台架构设计
云原生·容器·kubernetes·k8s·云原生开发·k8s管理系统
wclass-zhengge1 天前
K8S篇(基本介绍)
云原生·容器·kubernetes
颜淡慕潇1 天前
【K8S问题系列 |1 】Kubernetes 中 NodePort 类型的 Service 无法访问【已解决】
后端·云原生·容器·kubernetes·问题解决
昌sit!1 天前
K8S node节点没有相应的pod镜像运行故障处理办法
云原生·容器·kubernetes
A ?Charis1 天前
Gitlab-runner running on Kubernetes - hostAliases
容器·kubernetes·gitlab
北漂IT民工_程序员_ZG1 天前
k8s集群安装(minikube)
云原生·容器·kubernetes
2301_806131362 天前
Kubernetes的基本构建块和最小可调度单元pod-0
云原生·容器·kubernetes
SilentCodeY2 天前
containerd配置私有仓库registry
容器·kubernetes·containerd·镜像·crictl