We can create a replica set (replicateset) or “rs” for short, so we can scale an application to meet demand. Create a file on the Kubernetes host called “my-rep-set.yaml” and populate it with the following:
Tip: This is just an example but it will work. Note the “replicas: 5” which means we’ll get 5 instances. We’ll change this later.
apiVersion: apps/v1 kind: ReplicaSet metadata: name: nginx-proxy labels: app: nginx-proxy tier: frontend spec: replicas: 5 selector: matchLabels: tier: frontend template: metadata: labels: tier: frontend spec: containers: - name: nginx image: nginx
And then create the rs with this command:
sudo microk8s kubectl apply -f my-rep-set.yaml
You can see the state of your new rs using the following command:
sudo microk8s kubectl get replicaset NAME DESIRED CURRENT READY AGE nginx-proxy 5 5 5 2m29s
You can scale it up to 6 using the following command:
sudo microk8s kubectl scale -n default replicaset nginx-proxy --replicas=6
And confirm it:
sudo microk8s kubectl get replicaset NAME DESIRED CURRENT READY AGE nginx-proxy 6 6 6 5m11s
TIP: You can delete an rs using this command. Replace “nginx-proxy” with whatever rs you want to remove, and repalce “default” with the namespace you’re working in:
sudo microk8s kubectl delete -n default replicaset nginx-proxy
Now we can expose our new rs to the wider network:
sudo microk8s kubectl expose rs nginx-proxy --type=NodePort --port=80 --name=nginx-proxy
Get a summary of the pods, services and ports:
sudo microk8s kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.152.183.1
443/TCP 7h56m agix-nginx NodePort 10.152.183.91 80:30045/TCP 5h53m nginx-proxy NodePort 10.152.183.48 80:32538/TCP 80s
The one we care about is the “nginx-proxy” which is on port “32538”.
Allow it thought the local firewall:
ufw allow 32538
And now you can browse to it:
But as you’ve guessed, working with ports that are generated at random isn’t going to work in the real world. We’ll deal with that in Part 3.