Introduction
In this post we will build Kubernetes with Mirantis, which is formerly Docker Enterprise). It is the foundation of Kubernetes provided by Mirantis.
Environment
In this case environment will be very simple we will build Manager/Worker with a simple configuration one by one. The configuration will also include mgmt. host which will act as a management terminal. More about system requirements can be found in the link below.
Components that have been used
- Vagrant + Virtualbox
- Ubuntu 18.04
- Docker
- K8s + Launchpad
Vagrantfile:
Let’s Start
Since the launchpad requires an environment that allows ssh connection to each server from the mgmt. , first create and deploy the ssh key, and then install all required packages and construction tools on the mgmt. terminal.
Preparation
Create and deploy the ssh key
#Generate SSH Key in mgmt host
vagrant@mgmt:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/vagrant/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/vagrant/.ssh/id_rsa.
Your public key has been saved in /home/vagrant/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:LmswUxY65mcMd6/C1lnxJDi3mBX+7ttCV2KiuLOa7uU vagrant@mgmt
The key's randomart image is:
+---[RSA 2048]----+
| |
| . . |
| . . o . |
| = + + * o o .|
| o B .SO O o o |
| = +.+ = + . |
| B..o= o . |
| =** o. |
| =*oEo .oo. |
+----[SHA256]-----+
vagrant@mgmt:~$ cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDYw45xAKioMyJdVCel8Mjsc8xcYbvgqzVf6X8zNQBZbWIwINa+dsTFThkHA+WmQ9eW8/Zsb5kGhqNy7VnrqEBw84JI/F1hMzM1UYw8sspwCZpmlaHjs5JwX6Xsirkj7R8StxczPMci6S7DVyfZ4xRt8xd7SzNofD1BFQbY9Th5fnNKbByNaa4tILPbiP/VZPfdx/MYAMWkTRKHadUVrgJ291660T/MvCMgZTbN6RWY+plIyFUsbaiBt5JSQdcaQo0GoUYVW8XD5yetY+g50eKl2EXE35B59Zn7bhzYLamS1SKCvdTm2KMMn5r3khWJs2LcQNYkcD3Bb9xIUBt0d4YX vagrant@mgmt
Now we can save this key in host kube1 and kube2
#Host kube1. Edit file and paste key from mgmt host
vagrant@kube1:~$ nano .ssh/authorized_keys#Host kube2. Edit file and paste key from mgmt host
vagrant@kube2:~$ nano .ssh/authorized_keys
Install necessary packages on mgmt. host.
vagrant@mgmt:~$ sudo apt-get update && sudo apt-get install -y apt-transport-https gnupg2
vagrant@mgmt:~$
Pre-installation preparation for kubectl
vagrant@mgmt:~$ sudo curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - ^C
vagrant@mgmt:~$ sudo echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
vagrant@mgmt:~$ sudo apt-get update
Hit:1 http://us.archive.ubuntu.com/ubuntu bionic InRelease
Hit:2 http://security.ubuntu.com/ubuntu bionic-security InRelease
Hit:3 http://us.archive.ubuntu.com/ubuntu bionic-updates InRelease
Hit:5 http://us.archive.ubuntu.com/ubuntu bionic-backports InRelease
Get:4 https://packages.cloud.google.com/apt kubernetes-xenial InRelease [9,383 B]
Get:6 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 Packages [47.0 kB]
Fetched 56.4 kB in 1s (37.9 kB/s)
Reading package lists... Done
vagrant@mgmt:~$ sudo apt-get install -y kubectl
vagrant@mgmt:~$ kubectl version
Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.1", GitCommit:"5e58841cce77d4bc13713ad2b91fa0d961e69192", GitTreeState:"clean", BuildDate:"2021-05-12T14:18:45Z", GoVersion:"go1.16.4", Compiler:"gc", Platform:"linux/amd64"}
The connection to the server localhost:8080 was refused - did you specify the right host or port?
vagrant@mgmt:~$
Download launchpad and install
vagrant@mgmt:~$ wget https://github.com/Mirantis/launchpad/releases/download/1.2.1/launchpad-linux-x64
vagrant@mgmt:~$ sudo mv launchpad-linux-x64 /usr/local/sbin/launchpad
vagrant@mgmt:~$ sudo chmod +x /usr/local/sbin/launchpad
vagrant@mgmt:~$ ls -laht /usr/local/sbin/launchpad
-rwxrwxr-x 1 vagrant vagrant 12M Apr 14 09:07 /usr/local/sbin/launchpad
vagrant@mgmt:~$
vagrant@mgmt:~$ launchpad version
version: 1.2.1
commit: b137ab8
vagrant@mgmt:~$
Build MKE
Now we are ready , use launchpad to build our MKE. Enter your user information before running launchpad as below:
vagrant@mgmt:~$ launchpad register
> Name ********
> Email ********
> Company ********
> I agree to Mirantis Launchpad Software Evaluation License Agreement https://github.com/Mirantis/launchpad/blob/master/LICENSE Yes
INFO Registration completed!
vagrant@mgmt:~$
Launchpad will be use the cluster configuration file (yaml) to build with, so we will need to create it.
Template we can create with vagrant@mgmt:~$ launchpad init > launchpad.yaml
however the template is quite poor and needs to be adapted.
Generated template:
vagrant@mgmt:~$ cat launchpad.yaml
apiVersion: launchpad.mirantis.com/mke/v1.3
kind: mke
metadata:
name: my-mke-cluster
spec:
hosts:
- ssh:
address: 10.0.0.1
user: root
port: 22
keyPath: ~/.ssh/id_rsa
role: manager
- role: worker
mke:
version: 3.3.7
mcr:
version: 20.10.0
cluster:
prune: false
vagrant@mgmt:~$
Full configuration yml are below:
Let’s now launch our MKE using the launchpad. This can be done in two ways launchpad apply
or launchpad apply --config mke.yml
if your file name is different from launchpad.yaml because that is the default filename that is taken into account.
Output from console during installation
Access to cluster
After the installation is finished, we can get to our cluster. We should download client information for connection.
- Via kubectl
vagrant@mgmt:/vagrant$ launchpad client-config --config mke.yml
INFO Note: The configuration has been migrated from a previous version
INFO to see the migrated configuration use: launchpad describe config
INFO ==> Running phase: Open Remote Connection
INFO [ssh] kube01.local:22: testing connection
INFO ==> Running phase: Detect host operating systems
INFO [ssh] kube01.local:22: is running Ubuntu 18.04.5 LTS
INFO ==> Running phase: Gather Facts
INFO [ssh] kube01.local:22: gathering host facts
INFO [ssh] kube01.local:22: is running mirantis container runtime version 20.10.0
INFO [ssh] kube01.local:22: using 192.168.123.124 as private IP
INFO [ssh] kube01.local:22: is running "Ubuntu 18.04.5 LTS"
INFO [ssh] kube01.local:22: internal address: 192.168.123.124
INFO [ssh] kube01.local:22: gathered all facts
INFO [ssh] kube01.local:22: MKE has version 3.3.7
INFO ==> Running phase: Validate Hosts
INFO validating hostname uniqueness
INFO ==> Running phase: Download Client Bundle
INFO Successfully wrote client bundle to /home/vagrant/.mirantis-launchpad/cluster/mke-test-cluster/bundle/admin
INFO ==> Running phase: Close Connection
INFO [ssh] kube01.local:22: disconnected
vagrant@mgmt:/vagrant$ cd /home/vagrant/.mirantis-launchpad/cluster/mke-test-cluster/bundle/admin && eval "$(<env.sh)" && cd ~
Cluster "ucp_kube01.local:6443_admin" set.
User "ucp_kube01.local:6443_admin" set.
Context "ucp_kube01.local:6443_admin" created.
vagrant@mgmt:~$
vagrant@mgmt:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
kube01 Ready master 9m38s v1.18.14-mirantis-1
kube02 Ready <none> 7m21s v1.18.14-mirantis-1
vagrant@mgmt:~$
- Via web browser
Add entry in %SYSTEMROOT%\System32\drivers\etc\hosts
192.168.123.124 kube01.local
Now we can open https://kube01.local/login/ and provide login and password which we defined in the mke.yml
file. After logging in, we can request trial license.
Login page:
Dashboard: