如何使用Kubernetes Sidecar容器

1,684 阅读2分钟

引言

Kubernetes Sidecar容器是那些与pod中的主容器平行运行的容器。同时,这种sidecar容器在不改变容器的情况下增加了功能并提供了容器的依赖性。

尽管你有一个带有单个容器正常工作的pod。你想在不改变当前容器的情况下给它附加一些功能。但是,你怎么能把功能添加到当前的容器中呢?"边车 "容器已经填补了这种类型的情况。

Sidecar容器的YML文件

在一个pod中创建两个容器,一个sidecar容器和主容器。因此,这里是我的YML文件,创建一个pod

apiVersion: v1
kind: pod
metadata:
  name: sidecar
spec:
  volumes:
  - name: log
    emptyDir: {}

  containers:
  - image: busybox
    name: main-container
    args:
     - /bin/sh
     - -c
     - >
      while true: do
        echo "$(date) INFO hello from main-container" >> /var/log/myapp.log ;
        sleep 1;
      done
    volumeMounts:
    - name: log
      mountPath: /var/log

  - name: sidecar-container
    image: busybox
    args:
     - /bin/sh
     - -c
     - tail -fn+1 /var/log/myapp.log
    volumeMounts:
    - name: log
      mountPath: /var/log

现在了解一下这个YML文件
  • 为了便于理解,我把我的容器命名为main-container和sidecar-container。
  • 主容器,我们的应用程序(Nginx)就在其中。
  • 通过卷挂载,共享路径被挂载在两个容器中。
现在创建这个pod

为sidecar容器创建pod

kubectl apply -f sidecar.yml

现在检查pod的状态

检查pod状态,显示有两个容器,并且都处于运行状态。

kubectl get pods

列出pod中的容器

这个命令显示了pod中包含有容器的情况。因此,现在我们在这个sidecar pod中有两个容器 - 第一个是主容器,第二个是sidecar容器。

kubectl get pods sidecar -o jsonpath=' {.spec.containers[*].name}'

检查sidecar容器的日志

这个命令检查主容器和sidecar容器之间的通信情况。因此,sidecar容器的输出应该显示来自主容器的日志。

kubectl logs -f sidecar -c sidecar-container

检查sidecar pod的IP

荚内的所有容器都共享同一个网络命名空间。因此,这个命令检查sidecar pod的IP。

kubectl get pod sidecar -o wide

检查两个容器的IP

我们的sidecar pod的IP是172.17.0.5。让我们检查一下两个容器是否有相同的IP。

kubectl exec -it sidecar -c sidecar-container --ifconfig eth0