Introduction
Hi, I am Akshay Rao. This series will help you in hands on experience.
Pre-requisites
have done with create pod
https://dev.to/aksrao1998/k8s-hands-on-create-a-pod-8ef
Agenda
In the last blog we saw how to create a pod of single container but we were not able to access the nginx application. In this we will access the nginx and deploy multi-container pod.
Let's Start
- we our pod named pod1 running but to access it we need to connect the container port 80 -> node port 80. So when the container port is connect to node port then the container is exposed to the outside world.
- So to connect this ports we will use another k8s component that is service, in which using the labels we will tell the controller to connect.
- we will do some slight changes in the pod1.yaml, before that if the pod is running pls delete it.
apiVersion: v1 kind: Pod metadata: name: pod1 labels: <- add this line to pod1.yaml type: webserver <- add this line to pod1.yaml spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80
- now create another file
vi service.yaml
and fill it with the below content
apiVersion: v1 kind: Service metadata: name: basicservice #name of the service spec: selector: type: webserver <- same as in the pod1.yaml type: NodePort ports: - protocol: TCP port: 80
- now deploy both of them
kubectl create -f pod1.yaml kubectl create -f service.yaml # verify kubectl get po [ts-akshay.rao@JP-FVFZ91DHL414 k8s-ckad (⎈|minikube:default)]$ k get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE basicservice NodePort 10.105.134.51 <none> 80:30933/TCP 106m kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 19h
- pick the ip address then ssh into the minikube as the cluster is running inside and curl the ip address.
[k8s-ckad (⎈|minikube:default)]$ minikube ssh docker@minikube:~$ curl http://10.105.134.51:80 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> html { color-scheme: light dark; } body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
Multi-container Pod
- edit the pod1.yaml (first delete the existing pod)and deploy it.
apiVersion: v1 kind: Pod metadata: name: pod1 labels: type: webserver spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 - name: collector image: fluentd
- here we are using fluentd and nginx container in one pod.
- now describe this pod
[k8s-ckad (⎈|minikube:default)]$ k describe pods pod1 Name: pod1 Namespace: default Priority: 0 Service Account: default Node: minikube/192.168.49.2 Start Time: Tue, 03 Oct 2023 18:08:00 +0900 Labels: type=webserver Annotations: <none> Status: Pending IP: IPs: <none> Containers: nginx: Container ID: Image: nginx:latest Image ID: Port: 80/TCP Host Port: 0/TCP State: Waiting Reason: ContainerCreating Ready: False Restart Count: 0 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-hml2n (ro) collector: Container ID: Image: fluentd Image ID: Port: <none> Host Port: <none> State: Waiting Reason: ContainerCreating Ready: False Restart Count: 0 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-hml2n (ro) Conditions: Type Status Initialized True Ready False ContainersReady False PodScheduled True Volumes: kube-api-access-hml2n: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: <nil> DownwardAPI: true QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 11s default-scheduler Successfully assigned default/pod1 to minikube Normal Pulling 10s kubelet Pulling image "nginx:latest" Normal Pulled 8s kubelet Successfully pulled image "nginx:latest" in 2.04728618s Normal Created 8s kubelet Created container nginx Normal Started 8s kubelet Started container nginx Normal Pulling 8s kubelet Pulling image "fluentd
- you can see the the events and of nginx and fluentd.
Links for further undertanding
https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport
Top comments (0)