Orchestrating the Cloud with Kubernetes¶
gcloud container clusters create io
Create a cluster and get authenticated automatically for the duration of your Cloud Shell session. Use gcloud container clusters get-credentials io
to reauthenticate.
kubectl create deployment nginx --image=nginx:1.10.0
kubectl expose deployment nginx --port 80 --type LoadBalancer
So what just happened? Behind the scenes Kubernetes created an external Load Balancer with a public IP address attached to it. Any client who hits that public IP address will be routed to the pods behind the service. In this case that would be the nginx pod.
The utility of:
kubectl get services
In our case, we have:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.72.0.1 <none> 443/TCP 3m55s
nginx LoadBalancer 10.72.4.91 35.239.224.140 80:30959/TCP 37s
Pods¶
- One or more containers
- One IP per pod
- Containers within a pod share a namespace
- Pods have Volumes By default, pods are not accessible outside of the cluster.
Hopping in to a container:
kubectl exec monolith --stdin --tty -c monolith -- /bin/sh
Services¶
Pods are meant to be ephemeral: they'll be destroyed and recreated. So...what if you want to communicate with it? Enter: Services!
Using labels to manage Services:
kubectl label pods secure-monolith 'secure=enabled'
kubectl get pods secure-monolith --show-labels
Deployments¶
How do we manage and scale containers in production? Deployments!
Behind the scenes Deployments use Replica Sets to manage starting and stopping the Pods.