Need help with hello-kubernetes?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

paulbouwer
169 Stars 203 Forks MIT License 19 Commits 3 Opened issues

Description

Provides a demo image to deploy to a Kubernetes cluster. It displays a message, the name of the pod and details of the node it's deployed to.

Services available

!
?

Need anything else?

Contributors list

# 279,112
Kuberne...
hashico...
Shell
csi
13 commits

Hello Kubernetes!

Docker Image Version (latest by date) Docker Image Size (latest by date) Docker Pulls

This container image can be deployed on a Kubernetes cluster. When accessed via a web browser on port

8080
, it will display:
  • a default Hello world! message
  • the pod name
  • node os information

Hello world! from the hello-kubernetes image

The default "Hello world!" message displayed can be overridden using the

MESSAGE
environment variable. The default port of 8080 can be overriden using the
PORT
environment variable.

Deploy

Standard Configuration

Deploy to your Kubernetes cluster using the hello-kubernetes.yaml, which contains definitions for the service and deployment objects:

# hello-kubernetes.yaml
apiVersion: v1
kind: Service
metadata:
  name: hello-kubernetes
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: hello-kubernetes
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-kubernetes
spec:
  replicas: 3
  selector:
    matchLabels:
      app: hello-kubernetes
  template:
    metadata:
      labels:
        app: hello-kubernetes
    spec:
      containers:
      - name: hello-kubernetes
        image: paulbouwer/hello-kubernetes:1.9
        ports:
        - containerPort: 8080
$ kubectl apply -f yaml/hello-kubernetes.yaml

This will display a Hello world! message when you hit the service endpoint in a browser. You can get the service endpoint ip address by executing the following command and grabbing the returned external ip address value:

$ kubectl get service hello-kubernetes

Customise Message

You can customise the message displayed by the

hello-kubernetes
container. Deploy using the hello-kubernetes.custom-message.yaml, which contains definitions for the service and deployment objects.

In the definition for the deployment, add an

env
variable with the name of
MESSAGE
. The value you provide will be displayed as the custom message.
# hello-kubernetes.custom-message.yaml
apiVersion: v1
kind: Service
metadata:
  name: hello-kubernetes-custom
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: hello-kubernetes-custom
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-kubernetes-custom
spec:
  replicas: 3
  selector:
    matchLabels:
      app: hello-kubernetes-custom
  template:
    metadata:
      labels:
        app: hello-kubernetes-custom
    spec:
      containers:
      - name: hello-kubernetes
        image: paulbouwer/hello-kubernetes:1.9
        ports:
        - containerPort: 8080
        env:
        - name: MESSAGE
          value: I just deployed this on Kubernetes!
$ kubectl apply -f yaml/hello-kubernetes.custom-message.yaml

Specify Custom Port

By default, the

hello-kubernetes
app listens on port
8080
. If you have a requirement for the app to listen on another port, you can specify the port via an env variable with the name of PORT. Remember to also update the
containers.ports.containerPort
value to match.

Here is an example:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-kubernetes-custom
spec:
  replicas: 3
  selector:
    matchLabels:
      app: hello-kubernetes-custom
  template:
    metadata:
      labels:
        app: hello-kubernetes-custom
    spec:
      containers:
      - name: hello-kubernetes
        image: paulbouwer/hello-kubernetes:1.9
        ports:
        - containerPort: 80
        env:
        - name: PORT
          value: "80"

Cutomize URL context path

If you have an ingress that routes to a custom context path then you can customize the URL context path. The css files and the images will be loaded properly in that case.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-kubernetes-custom
spec:
  replicas: 3
  selector:
    matchLabels:
      app: hello-kubernetes-custom
  template:
    metadata:
      labels:
        app: hello-kubernetes-custom
    spec:
      containers:
      - name: hello-kubernetes
        image: paulbouwer/hello-kubernetes:1.9
        ports:
        - containerPort: 8080
        env:
        - name: MESSAGE
          value: I just deployed this on Kubernetes!
        - name: CONTEXT_PATH
          value: "/api/v1/hello-kubernetes/"

Build Container Image

If you'd like to build the image yourself, then you can do so as follows. The

build-arg
parameters provides metadata as defined in OCI image spec annotations.

Bash

bash
$ docker build --no-cache --build-arg IMAGE_VERSION="1.9" --build-arg IMAGE_CREATE_DATE="`date -u +"%Y-%m-%dT%H:%M:%SZ"`" --build-arg IMAGE_SOURCE_REVISION="`git rev-parse HEAD`" -f Dockerfile -t "hello-kubernetes:1.9" app

Powershell

powershell
PS> docker build --no-cache --build-arg IMAGE_VERSION="1.9" --build-arg IMAGE_CREATE_DATE="$(Get-Date((Get-Date).ToUniversalTime()) -UFormat '%Y-%m-%dT%H:%M:%SZ')" --build-arg IMAGE_SOURCE_REVISION="$(git rev-parse HEAD)" -f Dockerfile -t "hello-kubernetes:1.9" app

Develop Application

If you have VS Code and the Visual Studio Code Remote - Containers extension installed, the

.devcontainer
folder will be used to build a container based node.js 13 development environment.

Port

8080
has been configured to be forwarded to your host. If you run
npm start
in the
app
folder in the VS Code Remote Containers terminal, you will be able to access the website on
http://localhost:8080
. You can change the port in the
.devcontainer\devcontainer.json
file under the
appPort
key.

See here for more details on working with this setup.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.