In this example, we will see a simple Init Container in action. As in the other examples, we assume that you have a running Kubernetes cluster to your avail. Checkout INSTALL documentation for some options to access a Kubernetes cluster.
In this example, we are creating a Pod with an init container and a main container:
-
The Init Container will start first and check out a GitHub repository containing a static example website.
-
The application container started after the Init Container has finished will then serve these pages over port 80
Let’s create this bare Pod into the current namespace with the following:
kubectl create -f https://k8spatterns.com/InitContainer/pod.ymlCheck the startup of the Pod by watching the Pod by executing the following command right after the creation of your Pod:
kubectl get pods -wYou will see some output like
NAME READY STATUS RESTARTS AGE www 0/1 Init:0/1 0 8s www 0/1 PodInitializing 0 10s www 1/1 Running 0 12s
Finally, let’s check how we can access the data from the Init Container retrieved.
For this, we create a nodePort Service with
kubectl apply -f https://k8spatterns.com/InitContainer/service.ymlThis service will open a port on every node so that we can access the static HTTP server from there.
If you are using minikube, you can quickly fire up your browser to point to the exposed port with
minikube service wwwFor any other cluster, you can find out the service port.
port=$(kubectl get svc www -o jsonpath='{.spec.ports[0].nodePort}')And then access it from every node of your cluster. You would need to find out the address of such a node first, like with kubectl get node -o wide
For more ways to expose that service, see the "Service Discovery" pattern.