How to deploy multinode Kubernetes cluster on centos using kubeadmin and ansible automation
1) Pre-Requisites
===> A Linux management node is needed to operate on. It can be ubuntu, centos7 or rhel7
===> Management node should have kvm virtualization enabled and properly configured.
2) Software requirements
===> Ansible and python3 should be instaled on management node
===> Download minimal centos 7.x and rename it to centos.iso.Place centos.iso in /var/lib/libvirt/images/ directory on
management node. Optionally, below command can be used:
wget -O /var/lib/libvirt/images/centos.iso --continue http://mirror.vanehost.com/centos/7.7.1908/isos/x86_64/CentOS-7-x86_64-Minimal-1908.iso
3) Cluster node sizing:
===> Master node:
===> RAM : 2GB
===> vCPU: 2
===> DISK: 30GB
===> Two Worker nodes:
===> RAM : 1GB
===> vCPU: 1
===> DISK: 10GB
4) Procedure:
===> Clone this code on management node:
git clone git@github.com:udautkarsh/automation.git
===> Navigate to directory "automation/kubernetes/centos" and trigger playbook
cd automation/kubernetes/centos
ansible-playbook -i hosts create.yaml
5) Execution console logs:
root@bastion:/home/uday/kubernetes/kubernetes/centos# ansible-playbook -i hosts create.yaml
PLAY [localhost] **************************************************************************************************************************************************************************************************
TASK [deploy-vm : Check if nodes are deployed] ********************************************************************************************************************************************************************
changed: [localhost]
TASK [deploy-vm : debug] ******************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "All VMs are ==> [u'kube-master', u'kube-worker1', u'docker', u'helper', u'kube-rh-master', u'kube-rh-worker0', u'kube-rh-worker1', u'kube-worker0', u'node-bootstrap', u'node-master-0', u'node-master-1', u'node-master-2', u'node-worker-0', u'node-worker-1', u'node-worker-2', u'ocp-infra', u'ocp-lb-ext', u'ocp-lb-int', u'ocp-registry']"
}
TASK [deploy-vm : deploying kube master node] *********************************************************************************************************************************************************************
skipping: [localhost]
TASK [deploy-vm : waiting for master node to deploy] **************************************************************************************************************************************************************
skipping: [localhost]
TASK [deploy-vm : deploying kube worker-0 node] *******************************************************************************************************************************************************************
skipping: [localhost]
TASK [deploy-vm : waiting for worker-0 node to deploy] ************************************************************************************************************************************************************
skipping: [localhost]
TASK [deploy-vm : deploying kube worker-1 node] ******************************************************************************************************************************************************************
skipping: [localhost]
TASK [deploy-vm : waiting for worker-1 node to deploy] ************************************************************************************************************************************************************
skipping: [localhost]
TASK [deploy-vm : Fetch all running domains] **********************************************************************************************************************************************************************
changed: [localhost]
TASK [deploy-vm : debug] ******************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "All running VMs are ==> [u'kube-master', u'kube-worker1']"
}
TASK [deploy-vm : starting nodes if not started already] **********************************************************************************************************************************************************
skipping: [localhost] => (item=kube-master)
changed: [localhost] => (item=kube-worker0)
skipping: [localhost] => (item=kube-worker1)
TASK [deploy-vm : waiting for nodes to start] *********************************************************************************************************************************************************************
Pausing for 20 seconds
(ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort)
ok: [localhost]
PLAY [localhost] **************************************************************************************************************************************************************************************************
TASK [prepare : Generating ssh keys] ******************************************************************************************************************************************************************************
ok: [localhost]
TASK [prepare : deleting known-hosts file] ************************************************************************************************************************************************************************
ok: [localhost]
TASK [prepare : Copying public keys to nodes] *********************************************************************************************************************************************************************
changed: [localhost] => (item=192.168.122.201)
changed: [localhost] => (item=192.168.122.202)
changed: [localhost] => (item=192.168.122.200)
PLAY [masters] ****************************************************************************************************************************************************************************************************
TASK [master : copying kubernetes.repo files] *********************************************************************************************************************************************************************
ok: [192.168.122.200]
TASK [master : adjust modprobe br_netfilter] **********************************************************************************************************************************************************************
changed: [192.168.122.200]
TASK [master : Letting iptables see bridged traffic] **************************************************************************************************************************************************************
ok: [192.168.122.200]
TASK [master : Reloading sysctl] **********************************************************************************************************************************************************************************
changed: [192.168.122.200]
TASK [master : Open up firewall ports] ****************************************************************************************************************************************************************************
ok: [192.168.122.200] => (item=6443/tcp)
ok: [192.168.122.200] => (item=2379-2380/tcp)
ok: [192.168.122.200] => (item=10250-20252/tcp)
TASK [master : disable swap memory (1/2)] *************************************************************************************************************************************************************************
changed: [192.168.122.200]
TASK [master : Disable SWAP in fstab (2/2)] ***********************************************************************************************************************************************************************
ok: [192.168.122.200]
TASK [master : adjuts net bridge nf call iptables] ****************************************************************************************************************************************************************
changed: [192.168.122.200]
TASK [master : Install kubeadm and docker] ************************************************************************************************************************************************************************
ok: [192.168.122.200]
TASK [master : Starting services] *********************************************************************************************************************************************************************************
ok: [192.168.122.200] => (item=kubelet)
ok: [192.168.122.200] => (item=docker)
TASK [master : Put SELinux in permissive mode, logging actions that would be blocked.] ****************************************************************************************************************************
ok: [192.168.122.200]
TASK [master : Check if master cluster initialization has already been done] **************************************************************************************************************************************
ok: [192.168.122.200]
TASK [master : Initialize master with kubeadm init] ***************************************************************************************************************************************************************
skipping: [192.168.122.200]
TASK [master : Remove .kube directory if present] *****************************************************************************************************************************************************************
changed: [192.168.122.200]
TASK [master : making .kube dir] **********************************************************************************************************************************************************************************
changed: [192.168.122.200]
TASK [master : copying credentials file in .kube] *****************************************************************************************************************************************************************
changed: [192.168.122.200]
TASK [master : Adjusting owenership] ******************************************************************************************************************************************************************************
changed: [192.168.122.200]
TASK [master : restore file(s) default SELinux security contexts] *************************************************************************************************************************************************
changed: [192.168.122.200]
TASK [master : get status of cluster] *****************************************************************************************************************************************************************************
changed: [192.168.122.200]
TASK [master : debug] *********************************************************************************************************************************************************************************************
ok: [192.168.122.200] => {
"msg": [
"NAME STATUS ROLES AGE VERSION",
"kmaster.lab.com Ready master 72m v1.18.2",
"kworker0.lab.com Ready <none> 8m32s v1.18.2",
"kworker1.lab.com Ready <none> 57m v1.18.2"
]
}
TASK [master : waiting for pods to comeup] ************************************************************************************************************************************************************************
Pausing for 60 seconds
(ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort)
ok: [192.168.122.200]
TASK [master : Cluster pods status] *******************************************************************************************************************************************************************************
changed: [192.168.122.200]
TASK [master : debug] *********************************************************************************************************************************************************************************************
ok: [192.168.122.200] => {
"msg": [
"NAMESPACE NAME READY STATUS RESTARTS AGE",
"kube-system coredns-66bff467f8-lzxb4 1/1 Running 0 73m",
"kube-system coredns-66bff467f8-p4k5k 1/1 Running 0 73m",
"kube-system etcd-kmaster.lab.com 1/1 Running 0 73m",
"kube-system kube-apiserver-kmaster.lab.com 1/1 Running 0 73m",
"kube-system kube-controller-manager-kmaster.lab.com 1/1 Running 0 73m",
"kube-system kube-proxy-lxmmt 1/1 Running 2 9m33s",
"kube-system kube-proxy-m6sh2 1/1 Running 0 73m",
"kube-system kube-proxy-xwsdx 1/1 Running 0 58m",
"kube-system kube-scheduler-kmaster.lab.com 1/1 Running 0 73m",
"kube-system weave-net-4vnt6 2/2 Running 0 58m",
"kube-system weave-net-m9k49 2/2 Running 3 9m33s",
"kube-system weave-net-nc2kl 2/2 Running 0 72m"
]
}
TASK [master : Installing a Pod network add-on] *******************************************************************************************************************************************************************
changed: [192.168.122.200]
TASK [master : Cluster pods status] *******************************************************************************************************************************************************************************
changed: [192.168.122.200]
TASK [master : debug] *********************************************************************************************************************************************************************************************
ok: [192.168.122.200] => {
"msg": [
"NAMESPACE NAME READY STATUS RESTARTS AGE",
"kube-system coredns-66bff467f8-lzxb4 1/1 Running 0 73m",
"kube-system coredns-66bff467f8-p4k5k 1/1 Running 0 73m",
"kube-system etcd-kmaster.lab.com 1/1 Running 0 73m",
"kube-system kube-apiserver-kmaster.lab.com 1/1 Running 0 73m",
"kube-system kube-controller-manager-kmaster.lab.com 1/1 Running 0 73m",
"kube-system kube-proxy-lxmmt 1/1 Running 2 9m36s",
"kube-system kube-proxy-m6sh2 1/1 Running 0 73m",
"kube-system kube-proxy-xwsdx 1/1 Running 0 58m",
"kube-system kube-scheduler-kmaster.lab.com 1/1 Running 0 73m",
"kube-system weave-net-4vnt6 2/2 Running 0 58m",
"kube-system weave-net-m9k49 2/2 Running 3 9m36s",
"kube-system weave-net-nc2kl 2/2 Running 0 72m"
]
}
PLAY [masters] ****************************************************************************************************************************************************************************************************
TASK [command] ****************************************************************************************************************************************************************************************************
changed: [192.168.122.200]
TASK [Store node join command] ************************************************************************************************************************************************************************************
changed: [192.168.122.200]
PLAY [localhost] **************************************************************************************************************************************************************************************************
TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": [
"kubeadm join 192.168.122.200:6443 --token ir1wno.cgv0jv349j3znucq --discovery-token-ca-cert-hash sha256:ca7e1de862b669fa635a8d57593a4cddcee87f0c21521fa887d1db04c6118acc "
]
}
PLAY [workers] ****************************************************************************************************************************************************************************************************
TASK [worker : copying kubernetes.repo files] *********************************************************************************************************************************************************************
ok: [192.168.122.201]
ok: [192.168.122.202]
TASK [worker : adjust modprobe br_netfilter] **********************************************************************************************************************************************************************
changed: [192.168.122.201]
changed: [192.168.122.202]
TASK [worker : adjuts net bridge nf call iptables] ****************************************************************************************************************************************************************
changed: [192.168.122.201]
changed: [192.168.122.202]
TASK [worker : Letting iptables see bridged traffic] **************************************************************************************************************************************************************
ok: [192.168.122.201]
ok: [192.168.122.202]
TASK [worker : Reloading sysctl] **********************************************************************************************************************************************************************************
changed: [192.168.122.201]
changed: [192.168.122.202]
TASK [worker : Open up firewall ports] ****************************************************************************************************************************************************************************
ok: [192.168.122.201] => (item=30000-32767/tcp)
ok: [192.168.122.202] => (item=30000-32767/tcp)
ok: [192.168.122.201] => (item=10250/tcp)
ok: [192.168.122.202] => (item=10250/tcp)
TASK [worker : disable swap memory (1/2)] *************************************************************************************************************************************************************************
changed: [192.168.122.202]
changed: [192.168.122.201]
TASK [worker : Disable SWAP in fstab (2/2)] ***********************************************************************************************************************************************************************
ok: [192.168.122.201]
ok: [192.168.122.202]
TASK [worker : Put SELinux in permissive mode, logging actions that would be blocked.] ****************************************************************************************************************************
ok: [192.168.122.201]
ok: [192.168.122.202]
TASK [worker : Install kubeadm and docker] ************************************************************************************************************************************************************************
ok: [192.168.122.202]
ok: [192.168.122.201]
TASK [worker : Starting services] *********************************************************************************************************************************************************************************
ok: [192.168.122.201] => (item=kubelet)
ok: [192.168.122.202] => (item=kubelet)
ok: [192.168.122.202] => (item=docker)
ok: [192.168.122.201] => (item=docker)
TASK [worker : Check if this worker node is joined already] *******************************************************************************************************************************************************
ok: [192.168.122.201]
ok: [192.168.122.202]
TASK [worker : debug] *********************************************************************************************************************************************************************************************
ok: [192.168.122.201] => {
"msg": "kubeadm join 192.168.122.200:6443 --token ir1wno.cgv0jv349j3znucq --discovery-token-ca-cert-hash sha256:ca7e1de862b669fa635a8d57593a4cddcee87f0c21521fa887d1db04c6118acc "
}
ok: [192.168.122.202] => {
"msg": "kubeadm join 192.168.122.200:6443 --token ir1wno.cgv0jv349j3znucq --discovery-token-ca-cert-hash sha256:ca7e1de862b669fa635a8d57593a4cddcee87f0c21521fa887d1db04c6118acc "
}
TASK [worker : joining to the master] *****************************************************************************************************************************************************************************
skipping: [192.168.122.201]
skipping: [192.168.122.202]
PLAY [masters] ****************************************************************************************************************************************************************************************************
TASK [shell] ******************************************************************************************************************************************************************************************************
changed: [192.168.122.200]
TASK [Cluster status after worker nodes are added, note ==> worker nodes might take a while to come to Ready state] ***********************************************************************************************
ok: [192.168.122.200] => {
"msg": [
"NAME STATUS ROLES AGE VERSION",
"kmaster.lab.com Ready master 73m v1.18.2",
"kworker0.lab.com Ready <none> 9m41s v1.18.2",
"kworker1.lab.com Ready <none> 58m v1.18.2"
]
}
PLAY RECAP ********************************************************************************************************************************************************************************************************
192.168.122.200 : ok=29 changed=16 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
192.168.122.201 : ok=13 changed=4 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
192.168.122.202 : ok=13 changed=4 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
localhost : ok=10 changed=4 unreachable=0 failed=0 skipped=6 rescued=0 ignored=0
Comments
Post a Comment