Multi container Pods (10%) - Casey-lab-95/cka GitHub Wiki

Multi-container Pods (10%) Create a Pod with two containers, both with image busybox and command "echo hello; sleep 3600". Connect to the second container and run 'ls' show

Easiest way to do it is create a pod with a single container and save its definition in a YAML file:

kubectl run busybox --image=busybox --restart=Never -o yaml --dry-run=client -- /bin/sh -c 'echo hello;sleep 3600' > pod.yaml vi pod.yaml

Copy/paste the container related values, so your final YAML should contain the following two containers (make sure those containers have a different name):

containers:

  • args:
    • /bin/sh
    • -c
    • echo hello;sleep 3600 image: busybox imagePullPolicy: IfNotPresent name: busybox resources: {}
  • args:
    • /bin/sh
    • -c
    • echo hello;sleep 3600 image: busybox name: busybox2

kubectl create -f pod.yaml

Connect to the busybox2 container within the pod

kubectl exec -it busybox -c busybox2 -- /bin/sh ls exit

or you can do the above with just an one-liner

kubectl exec -it busybox -c busybox2 -- ls

you can do some cleanup

kubectl delete po busybox

Create a pod with an nginx container exposed on port 80. Add a busybox init container which downloads a page using "wget -O /work-dir/index.html http://neverssl.com/online". Make a volume of type emptyDir and mount it in both containers. For the nginx container, mount it on "/usr/share/nginx/html" and for the initcontainer, mount it on "/work-dir". When done, get the IP of the created pod and create a busybox pod and run "wget -O- IP" show

Easiest way to do it is create a pod with a single container and save its definition in a YAML file:

kubectl run web --image=nginx --restart=Never --port=80 --dry-run=client -o yaml > pod-init.yaml

Copy/paste the container related values, so your final YAML should contain the volume and the initContainer:

Volume:

containers:

  • image: nginx ... volumeMounts:
    • name: vol mountPath: /usr/share/nginx/html volumes:
  • name: vol emptyDir: {}

initContainer:

... initContainers:

  • args:
    • /bin/sh
    • -c
    • wget -O /work-dir/index.html http://neverssl.com/online image: busybox name: box volumeMounts:
    • name: vol mountPath: /work-dir

In total you get:

apiVersion: v1 kind: Pod metadata: labels: run: box name: box spec: initContainers:

  • args:
    • /bin/sh
    • -c
    • wget -O /work-dir/index.html http://neverssl.com/online image: busybox name: box volumeMounts:
    • name: vol mountPath: /work-dir containers:
  • image: nginx name: nginx ports:
    • containerPort: 80 volumeMounts:
    • name: vol mountPath: /usr/share/nginx/html volumes:
  • name: vol emptyDir: {}

Apply pod

kubectl apply -f pod-init.yaml

Get IP

kubectl get po -o wide Multi-container Pods (10%) Create a Pod with two containers, both with image busybox and command "echo hello; sleep 3600". Connect to the second container and run 'ls' show

Easiest way to do it is create a pod with a single container and save its definition in a YAML file:

kubectl run busybox --image=busybox --restart=Never -o yaml --dry-run=client -- /bin/sh -c 'echo hello;sleep 3600' > pod.yaml vi pod.yaml

Copy/paste the container related values, so your final YAML should contain the following two containers (make sure those containers have a different name):

containers:

  • args:
    • /bin/sh
    • -c
    • echo hello;sleep 3600 image: busybox imagePullPolicy: IfNotPresent name: busybox resources: {}
  • args:
    • /bin/sh
    • -c
    • echo hello;sleep 3600 image: busybox name: busybox2

kubectl create -f pod.yaml

Connect to the busybox2 container within the pod

kubectl exec -it busybox -c busybox2 -- /bin/sh ls exit

or you can do the above with just an one-liner

kubectl exec -it busybox -c busybox2 -- ls

you can do some cleanup

kubectl delete po busybox

Create a pod with an nginx container exposed on port 80. Add a busybox init container which downloads a page using "wget -O /work-dir/index.html http://neverssl.com/online". Make a volume of type emptyDir and mount it in both containers. For the nginx container, mount it on "/usr/share/nginx/html" and for the initcontainer, mount it on "/work-dir". When done, get the IP of the created pod and create a busybox pod and run "wget -O- IP" show

Easiest way to do it is create a pod with a single container and save its definition in a YAML file:

kubectl run web --image=nginx --restart=Never --port=80 --dry-run=client -o yaml > pod-init.yaml

Copy/paste the container related values, so your final YAML should contain the volume and the initContainer:

Volume:

containers:

  • image: nginx ... volumeMounts:
    • name: vol mountPath: /usr/share/nginx/html volumes:
  • name: vol emptyDir: {}

initContainer:

... initContainers:

  • args:
    • /bin/sh
    • -c
    • wget -O /work-dir/index.html http://neverssl.com/online image: busybox name: box volumeMounts:
    • name: vol mountPath: /work-dir

In total you get:

apiVersion: v1 kind: Pod metadata: labels: run: box name: box spec: initContainers:

  • args:
    • /bin/sh
    • -c
    • wget -O /work-dir/index.html http://neverssl.com/online image: busybox name: box volumeMounts:
    • name: vol mountPath: /work-dir containers:
  • image: nginx name: nginx ports:
    • containerPort: 80 volumeMounts:
    • name: vol mountPath: /usr/share/nginx/html volumes:
  • name: vol emptyDir: {}

Apply pod

kubectl apply -f pod-init.yaml

Get IP

kubectl get po -o wide

Execute wget

kubectl run box-test --image=busybox --restart=Never -it --rm -- /bin/sh -c "wget -O- IP"

you can do some cleanup

kubectl delete po box

Execute wget

kubectl run box-test --image=busybox --restart=Never -it --rm -- /bin/sh -c "wget -O- IP"

you can do some cleanup

kubectl delete po box