K8s-sidecar模式

587 阅读1分钟

K8s-sidecar模式

  • 边车模式sidecar是在不改变原有container功能的情况下,在同一个pod下增加其他container来增加对应的功能,因为在同一个Pod下的容是共享一个namespace空间的,所以对应的网络、存储等资源也是同一个空间下的,这就可以很方便的进行两个containers之间交互

    • 一个文件系统-这意味着你可以使用共享卷在同一个pod中的两个或多个容器之间共享文件。共享卷是简单的共享文件夹

    • 网络-同一Pod中的容器之间的通信可以通过回环接口 - localhost进行

简单功能演示

  • 以nginx为例,演示sidecar注入

    yaml文件如下:boc_sidecar.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: boc-sidecar-demo
    spec:
      containers:
      - image: abcsys.cn:5000/public/busybox:1.2
        command: ["/bin/sh"]
        args: ["-c", "while true; do echo echo $(date -u) 'Hi I am from Sidecar container' >> /var/log/index.html; sleep 5;done"]
        name: sidecar-container
        resources: {}
        volumeMounts:
        - name: var-logs
          mountPath: /var/log
      - image: abcsys.cn:5000/public/nginx
        name: sidecar-demo
        resources: {}
        ports:
          - containerPort: 80
        volumeMounts:
        - name: var-logs
          mountPath: /usr/share/nginx/html
      dnsPolicy: Default
      volumes:
      - name: var-logs
        emptyDir: {}
    
    //创建pod
    kubectl create -f boc_sidecar.yaml 
    //查看pod
    kubectl get po -owide |grep side
    //进入容器
    kubectl exec -it boc-sidecar-demo -c sidecar-demo  -- /bin/bash
    curl localhost
    

    image.png

  • 查看两个容器的ip

    kubectl exec -it boc-sidecar-demo -c sidecar-container  -- ifconfig 
    

    image.png

复杂功能演示

  • 多副本的deployment,并且以NodePort的模式发布

  • 两个sidecar容器

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      creationTimestamp: null
      labels:
        app: boc-sidecar
      name: boc-sidecar
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: boc-sidecar
      strategy: {}
      template:
        metadata:
          creationTimestamp: null
          labels:
            app: boc-sidecar
        spec:
          containers:
          - image: abcsys.cn:5000/public/busybox:1.2
            command: ["/bin/sh"]
            args: ["-c", "while true; do echo echo $(date -u) 'Hi I am from Sidecar container 1' >> /var/log/index.html; sleep 5;done"]
            name: sidecar-container1
            resources: {}
            volumeMounts:
              - name: var-logs
                mountPath: /var/log
          - image: abcsys.cn:5000/public/busybox:1.2
            command: ["/bin/sh"]
            args: ["-c", "while true; do echo echo $(date -u) 'Hi I am from Sidecar container 2' >> /var/log/index.html; sleep 5;done"]
            name: sidecar-container2
            resources: {}
            volumeMounts:
              - name: var-logs
                mountPath: /var/log
          - image: abcsys.cn:5000/public/nginx
            name: main-container
            resources: {}
            ports:
              - containerPort: 80
            volumeMounts:
              - name: var-logs
                mountPath: /usr/share/nginx/html
          dnsPolicy: Default
          volumes:
          - name: var-logs
            emptyDir: {}
    status: {}
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: boc-sidecar
      labels:
        run: boc-sidecar
    spec:
      ports:
      - port: 80
        protocol: TCP
      selector:
        app: boc-sidecar
      type: NodePort
    

    image.png