Multi-Container Pods maken in Kubernetes

Pods hebben meestal een enkele container, d.w.z. single container pods zijn het meest voorkomende gebruiksgeval en het is niet nodig om een enkele container in de pod te hebben. Er zijn enkele use-cases waarin een enkele pod meerdere containers in zich kan hebben. De multi-container pods zijn de pods die twee of meer verwante containers bevatten die middelen zoals netwerkruimte, gedeelde volumes, enz. delen en als een enkele eenheid samenwerken.

Een van de redenen om een multi-container pod te gebruiken is eenvoudiger communicatie tussen containers. Alle containers binnen de pod delen dezelfde netwerkruimte om via de localhost te communiceren. Een andere reden om een multi-container pod te gebruiken is dat alle containers dezelfde levenscyclus hebben die op dezelfde node moet draaien. Als er behoefte is om alle containers hetzelfde volume te laten mounten, zodat ze met elkaar kunnen communiceren door bestanden in het opslagvolume te lezen en te wijzigen, kunnen meervoudige container pods gebruikt worden.

In dit artikel zullen we een pod maken met 2 containers erin. Dit voorbeeld zal helpen om het maken van een pod met meerdere containers te begrijpen.

Vereisten

  1. Kubernetes Cluster met minstens 1 worker node.
    Als je wilt leren hoe je een Kubernetes Cluster maakt, klik dan hier. Deze gids helpt je een Kubernetes cluster te maken met 1 Master en 2 Nodes op AWS Ubuntu 18.04 EC2 Instances.

Wat zullen we doen?

  1. Maak een Multi-container Pod

Maak een Multi-container Pod

Maak een multi-container port definitie bestand met de volgende inhoud.

vim multi-container-pod-example.yml
apiVersion: v1
kind: Pod
metadata:
  name: multi-container-pod
spec:
  containers:
  - name: container-1
    image: nginx
    ports:
    - containerPort: 80  
  - name: container-2
    image: alpine
    command: ["watch", "wget", "-qO-", "localhost"]

multi-container-pod-definitie

Dit bestand heeft een definitie voor 2 containers die hetzelfde netwerk, bronnen en volume zullen delen.

Verkrijg een lijst van bestaande poorten en maak een multi-container poort met de volgende commando’s.

kubectl get pods #Get a list of existing pods
kubectl create -f multi-container-pod-example.yml #Create a multi container pod
kubectl get pods #Check the pods after creating in the above step

create-multi-container-pod

In de bovenstaande schermafbeelding zie je dat er 2/2 pods zijn met de status READY. Het betekent dat er 2 pods zijn en dat van die 2 pods er 2 draaien.

Haal een lijst van pods op en beschrijf de pod die we net gemaakt hebben.

kubectl get pods
kubectl describe pod multi-container-pod #Get details of the Pod.

beschrijf-pod-te-zien-detail

Als je de pod beschrijft, krijg je details van de beide containers die erin zitten.

In de bovenstaande schermafbeelding zie je dat er twee containers zijn, container-1 en container-2. Deze beide containers behoren tot dezelfde pod.

Om nu de logs van een bepaalde container te bekijken kun je de containernaam appen aan het commando dat we gebruiken om de logs van de pod op te halen.

kubectl get pods
kubectl logs multi-container-pod #This does not work
kubectl logs multi-container-pod container-1 #Specify the container name to get the logs

controleer-logs-van-de-container-binnen-de-pod

In de bovenstaande schermafbeelding zie je dat als de containernaam niet aan het commando gegeven is, je een foutmelding krijgt waarin je gezegd wordt de containernaam in het commando op te geven.

Je kunt de naam van een enkele container opgeven en niet de meerdere containers kunnen in het commando opgegeven worden om de logs op te halen.

kubectl get pods
kubectl logs multi-container-pod #
kubectl logs multi-container-pod container-1 container-2 #Two containers can not be specified

controleer-logs-van-één-container-per-tijd

In de bovenstaande schermafbeelding zie je dat wanneer je 2 containers opgeeft om de logs op te halen, het commando mislukt.

Het eenvoudige commando om in te loggen in de pod werkt niet als er meerdere containers binnen een enkele pod zijn.

kubectl get pods
kubectl exec -it multi-container-pod /bin/bash

probeer-in te loggen-bij-de-pod

Om in te loggen in een bepaalde container, moeten we de containernaam in het commando opgeven. Ook kun je niet op 2 pods tegelijk inloggen.

kubectl get pods
kubectl exec -it multi-container-pod -c container-1 /bin/bash #Login into the container

inloggen-in-de-container-binnen-de-pod

Als je je pod niet meer nodig hebt kan hij verwijderd worden met het volgende commando.

kubectl get pod
kubectl delete pod multi-container-pod #Delete the pod

verwijder-de-pod

Conclusie

In dit artikel leerden we hoe een multi-container pod gemaakt kan worden. We zagen ook hoe logs van een bepaalde container opgehaald kunnen worden en hoe op een enkele container ingelogd kan worden. Een Multi-Container pod helpt ons om afhankelijke containers in dezelfde pod te hebben.