Table of Contents
You can find all of the config files on the GitHub page.
Let’s test out the environment by installing NGINX.
Create the NGINX deployment
We are going to create an NGINX deployment where we will have an NGINX replica on each of our Kubernetes worker nodes. A replica will be Kubernetes pod:
kubectl run nginx –image=nginx –port=80 –replicas=3
If successful, you will see: deployment “nginx” created
Let’s get a listing of each of the pods:
kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE nginx-2032906785-44ndh 1/1 Running 2 16d 172.16.43.3 kube-worker2 nginx-2032906785-mvpft 1/1 Running 2 16d 172.16.19.2 kube-worker1 nginx-2032906785-tyfmu 1/1 Running 2 16d 172.16.23.2 kube-worker0
Here we can see that there is a pod on each of the worker nodes. Notice the IP address. Each of the pods (not docker container) will get an IP address from a network that was given out by etcd. Each worker node will be given a unique network range by etcd.
Create the NGNIX service
Now we need to create a Kubernetes Service to expose our NGINX deployment so we can reach it. I’m going to make the service of type NodePort, which will make the service accessible on any pod using the same port.
kubectl expose deployment nginx –port=80 –type=NodePort
View the service’s details
kubectl describe services nginx
Name: nginx Namespace: default Labels: run=nginx Selector: run=nginx Type: NodePort IP: 172.16.242.11 Port: 80/TCP NodePort: 31153/TCP Endpoints: 172.16.19.2:80,172.16.23.2:80,172.16.43.3:80 Session Affinity: None
Notice the NodePort and Endpoints. The Endpoints are our Kubernetes pods. If we launch a web browser and go to one of our worker nodes and use port 31153, we should see NGINX:
Lastly, let’s check out one of the pod’s details:
kubectl describe pod nginx-2032906785-44ndh
Name: nginx-2032906785-44ndh Namespace: default Node: kube-worker2/192.168.3.184 Start Time: Thu, 22 Sep 2016 20:20:45 -0600 Labels: pod-template-hash=2032906785 run=nginx Status: Running IP: 172.16.43.3 Controllers: ReplicaSet/nginx-2032906785 Containers: nginx: Container ID: docker://19ffedded8de834da2e072f012c5081655b7149172d2c00d31944c7fe2499766 Image: nginx Image ID: docker://sha256:ba6bed934df2e644fdd34e9d324c80f3c615544ee9a93e4ce3cfddfcf84bdbc2 Port: 80/TCP State: Running Started: Sat, 08 Oct 2016 14:59:03 -0600 Last State: Terminated Reason: Completed Exit Code: 0 Started: Sun, 02 Oct 2016 14:38:18 -0600 Finished: Mon, 03 Oct 2016 08:27:44 -0600 Ready: True Restart Count: 2 Environment Variables: <none> Conditions: Type Status Initialized True Ready True PodScheduled True Volumes: default-token-jeqk5: Type: Secret (a volume populated by a Secret) SecretName: default-token-jeqk5 QoS Tier: BestEffort No events.
I’m not going to go into all of the details here, but you can read the Kubernetes Documentation.