Kubernetes - Explorer le modèle Sidecar

Expliquer le modèle Sidecar avec un exemple

Kubernetes est un moteur d'orchestration de conteneurs open source pour le déploiement, la mise à l'échelle et la gestion automatiques des applications conteneurisées. Pod est un concept de base lors de la conception d'applications dans Kubernetes. Kubernetes fonctionne sur des pods, pas sur des conteneurs, et les pods incluent des conteneurs. Un pod peut contenir des descriptions d'un ou plusieurs conteneurs, des partitions montées, des adresses IP et des paramètres de fonctionnement des conteneurs à l'intérieur du pod.





, , - Kubernetes. , , - . - — sidecar. .





  • Sidecar













  • Deployment





  • Resource Limits

















Sidecar-

Sidecar- — , . . , , . .





, , , - , . - ? Sidecar .





, Sidecar . . sidecar- .






, Kubernetes:





  • Init Container Pattern





  • Adapter Container Pattern





  • Ambassador Container Pattern






, . Minikube.





https://github.com/bbachi/k8s-sidecar-container-pattern.git







, . , sidecar . Nginx, 80, index.html volume, location workdir. sidecar- busybox, timestamp . sidecar- , Nginx , .





apiVersion: v1
kind: Pod
metadata:
  name: sidecar-container-demo
spec:
  containers:
  - image: busybox
    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: nginx
    name: main-container
    resources: {}
    ports:
      - containerPort: 80
    volumeMounts:
    - name: var-logs
      mountPath: /usr/share/nginx/html
  dnsPolicy: Default
  volumes:
  - name: var-logs
    emptyDir: {}
      
      



// create the pod
kubectl create -f pod.yml
// list the pods
kubectl get po
// exec into pod
kubectl exec -it sidecar-container-demo -c main-container -- /bin/sh
# apt-get update && apt-get install -y curl
# curl localhost
      
      



curl localhost, .





Test de conteneurs Sidecar
Sidecar Container

Deployment

deployment 5 . service NodePort, deployment . deployment controller, IP , service, . service 80 ( ).  .





Déploiement
Deployment

deployment, sidecar-. . sidecar- /var/log. Nginx , 80. .





apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: nginx-webapp
  name: nginx-webapp
spec:
  replicas: 5
  selector:
    matchLabels:
      app: nginx-webapp
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx-webapp
    spec:
      containers:
      - image: busybox
        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: busybox
        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: 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: nginx-webapp
  labels:
    run: nginx-webapp
spec:
  ports:
  - port: 80
    protocol: TCP
  selector:
    app: nginx-webapp
  type: NodePort
      
      



, deployment.





// create a deployment
kubectl create -f manifest.yml
// list the deployment, pods, and service
kubectl get deploy -o wide
kubectl get po -o wide
kubectl get svc -o wide
      
      



déploiement en action
deployment

5 , IP- service, 32123 80. deployment IP - Kubernetes 192.168.64.2 32123:





http://192.168.64.2:32123







:





// exec into main container of the pod
kubectl exec -it nginx-webapp-7c8b4d4f8d-9qmdm -c main-container -- /bin/sh
// install curl
# apt-get update && apt-get install -y curl
# curl localhost
      
      



Le modèle Sidecar en action
Sidecar

, sidecar-. , , , , .





  • , ( ).






, :





  • ,





  • git- pull.(You can use this pattern to synchronize the main container code with the git server pull.)





  • , .





  • , (network-related tasks.).






  • , , - .





  • , , - .





  • Sidecar - , .





  • Sidecar- . sidecar- , / .





  •  Sidecar- , , . / , / .





  • health checks sidecar- , , , .





  • , deployment IP-, service, .





  • service .






kubernetes . , sidecar- , . , Sidecar- “”, health checks. , .








All Articles