In this article we’ll see how simple it is to install Kubernetes onto some Ubuntu hosts using Pharos.
Pharos is a Certified Kubernetes with all batteries included. It is powered by the latest upstream version of Kubernetes kernel and include tools for cluster lifecycle management.
You will need at least one master (ideally 3) and at least one worker. For our simple demonstration we create three masters and worker using instances and images shown below: -
Master image: Ubuntu-Bionic
Typically on a bastion instance in the cluster, where you have access to the compute instances, install pharos like this: -
$ curl -s https://get.k8spharos.dev | bash
$ chpharos install latest --use
$ source /usr/local/share/chpharos/chpharos.sh
You provide the instance details and their roles in a a YAML file called cluster.yml
(or cluster.yaml
). You must be able to ssh to the instances you’ve created - and you define ssh criteria in the cluster definition. In it, identify your machines, the ssh key and the machine types.
A typical 3 master 1 worker cluster with the name “im-demo” and the label “purpose:application” on the worker instance looks like this: -
Name: im-demo
hosts:
- address: 192.168.253.40
user: alan
ssh_key_path: ~/.ssh/abc
role: master
- address: 192.168.253.41
user: alan
ssh_key_path: ~/.ssh/abc
role: master
- address: 192.168.253.42
user: alan
ssh_key_path: ~/.ssh/abc
role: master
- address: 192.168.253.43
user: alan
ssh_key_path: ~/.ssh/abc
role: worker
labels:
purpose: application
Now use pharos to create the cluster.
A simple 3-node master and single worker node shouldn’t take more than 8-10 minutes: -
$ pharos up -y -c cluster.yaml
[...]
==> Cluster has been crafted! (took 7 minutes 8 seconds)
To configure kubectl for connecting to the cluster, use:
pharos kubeconfig -c cluster.yaml -n im-demo > kubeconfig
export KUBECONFIG=./kubeconfig
And, as instructed, you can craft a kubeconfig file with the command illustrated at the end of the installation and use that with kubectl: -
$ pharos kubeconfig -c cluster.yaml -n im-demo > kubeconfig
$ export KUBECONFIG=./kubeconfig
$ kubectl get no
NAME STATUS ROLES AGE VERSION
k8s-master-1 Ready master 6m53s v1.17.4
k8s-master-2 Ready master 5m59s v1.17.4
k8s-master-3 Ready master 5m28s v1.17.4
k8s-worker-1 Ready worker 4m46s v1.17.4