Skip to content
No description, website, or topics provided.
HTML Dockerfile
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
blue
green
README.md

README.md

Kubernetes Test Drive

This code is the demos for the Kubernetes Test Drive presentation.

The code

In the presentation we dig into each file. Wander through all the code in the blue folder to see behind the curtain.

The demos

cd blue

docker build -t kubedemo:v1 src

docker run -p 5000:80 kubedemo:v1
docker container stop ...
# open browser to localhost:5000
docker container list
docker container stop ... # <-- include container name
docker container rm ... # <-- include container name

We ran the docker container. This didn't use Kubernetes at all.

kubectl cluster-info
kubectl apply -f kube/pod.yaml
kubectl get pods
kubectl describe pods kubedemo

We have a pod running, but we can't browse to it.

kubectl port-forward kubedemo 5000:80

We can now browse to localhost:5000 to see the container. This is the "cheater" way.

Stop the terminal, and let's kill this pod.

kubectl delete -f kube/pod.yaml
kubectl get all

The pod is gone. Let's schedule a deployment and a service that points to it.

kubectl apply -f kube/deployment.yaml
kubectl apply -f kube/service.yaml
kubectl get all

We now have a deployment and a service pointing to the deployment.

# since it's type:NodePort
kubectl get all
# svc/kubedemo-service  NodePort  0.0.0  <none>  80:**31580**/TCP  1s
# grab 30,000 port
http://localhost:31580

The product is now running. We can browse to it and see the website.

Now let's imagine we have a requirements change. Normally this would be done in the same folder, but let's switch to the green folder and "change" content there.

cd ..
cd green

We modified index.html. Let's build the next version of the docker image.

docker build -t kubedemo:v2 src
# We've changed kube/deployment.yaml to reference v2 in all 3 places.
kubectl apply -f kube/deployment.yaml
kubectl get all # <-- run this quickly a bunch of times and you might catch the scale up
# refresh the page

The website didn't go down, and we now have the new version running. Score! Zero down-time deployment.

Other useful commands:

# get deployment details
kubectl get all
kubectl describe po/kubedemo-deployment-... # <-- pick a pod from the list above
# get logs for each
kubectl get all
kubectl logs po/kubedemo-deployment-...

Time to clean up:

cd ..

kubectl delete -f blue/kube/service.yaml
kubectl delete -f green/kube/deployment.yaml

kubectl get all

The only service left is the Kubernetes API.

You can’t perform that action at this time.