Lab Environment

Spesifikasi instance yang akan dibuat pada cluster openstack yang telah kita bangun sebelumnya. Namun kita bisa menerapkan ini pada environment virtual machine, cloud, maupun baremetal dengan langsung menuju langkah inisialisasi cluster kubernetes.

Software

SoftwareVersionDescription
Ubuntu20.04Operating System
Kubernetesv1.20.0Container Orchestration
DockerlatestContainer Runtime Interface
Calicov3.20Container Network Interface

Hardware

Node NameProcessorRAMVolumesDescription
k8s-master-node2 Core2 GB15 GBControl Plane Node
k8s-worker-node012 Core2 GB15 GBWorker Node
k8s-worker-node022 Core2 GB15 GBWorker Node

Networking

Node NameIP AddressDescription
k8s-master-node192.168.0.101Int & External Network
k8s-worker-node01192.168.0.102Internal Network
k8s-worker-node02192.168.0.103Internal Network

Topologi

img

Inisialisasi VM OpenStack

Membuat Port

1
2
3
openstack port create --network int-net01 --fixed-ip subnet=int-subnet01,ip-address=192.168.0.101 k8s-master-node
openstack port create --network int-net01 --fixed-ip subnet=int-subnet01,ip-address=192.168.0.102 k8s-worker-node01
openstack port create --network int-net01 --fixed-ip subnet=int-subnet01,ip-address=192.168.0.103 k8s-worker-node02

Membuat Persistent Volume

1
2
3
openstack volume create --size 15 --image ubuntu-focal-20.04 --wait k8s-master-node
openstack volume create --size 15 --image ubuntu-focal-20.04 --wait k8s-worker-node01
openstack volume create --size 15 --image ubuntu-focal-20.04 --wait k8s-worker-node02

Membuat Security Group

1
2
3
openstack security group create secg-kubernetes --description 'Kubernetes environment'
openstack security group rule create --protocol icmp secg-kubernetes
for i in {22,80,443,6443}; do openstack security group rule create --protocol tcp --ingress --dst-port $i secg-kubernetes

Membuat Flavor

1
openstack flavor create --vcpus 2 --ram 2048 --disk 15 --public c2-standard-01

Membuat Instance

1
2
3
openstack server create --flavor c2-standard-01 --key-name controllerkey --security-group secg-kubernetes --volume k8s-master-node --port k8s-master-node --wait k8s-master-node
openstack server create --flavor c2-standard-01 --key-name controllerkey --security-group secg-kubernetes --volume k8s-worker-node01 --port k8s-worker-node01 --wait k8s-worker-node01
openstack server create --flavor c2-standard-01 --key-name controllerkey --security-group secg-kubernetes --volume k8s-worker-node02 --port k8s-worker-node02 --wait k8s-worker-node02

Inisialisasi cluster Kubernetes pada semua node

Membuat dan mendistribusikan ssh public key

1
2
3
4
ssh-keygen -t rsa -b 4096
ssh-copy-id ubuntu@192.168.0.101
ssh-copy-id ubuntu@192.168.0.102
ssh-copy-id ubuntu@192.168.0.103

Mapping hostname

Memetakan alamat ip dengan hostname node

1
2
3
4
5
cat <<EOF | sudo tee -a /etc/hosts
192.168.0.101 k8s-master-node
192.168.0.102 k8s-worker-node01
192.168.0.103 k8s-worker-node02
EOF

Disable swap

Agar kubelet bekerja dengan baik perlu mendisable swap pada node

1
2
sudo nano /etc/fstab
sudo swapoff -a

Forwarding ipv4 dan membolehkan iptables melihat traffic bridge

Menerapkan module overlay dan br_netfilter

1
2
3
4
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

Untuk memuat modul secara eksplisit

1
2
sudo modprobe overlay
sudo modprobe br_netfilter

Menambahkan parameter sysctl untuk iptables melihat traffic bridge

1
2
3
4
5
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

Menerapkan parameter sysctl tanpa reboot

1
sudo sysctl --system

Menambahkan repositori Docker dan Kubernetes

1
2
3
# Download GPG key dari repositori
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
1
2
3
# Tambahkan repository
echo "deb https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

Menginstall paket yang diperlukan dan mencegah auto upgrade

1
2
sudo apt update && sudo apt install -y kubeadm=1.20.0-00 kubelet=1.20.0-00 kubectl=1.20.0-00 docker-ce
sudo apt-mark hold kubelet kubeadm kubectl docker-ce

Konfigurasi Docker

Menerapkan cgroup driver systemd dan beberapa parameter

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
cat <<EOF | sudo tee /etc/docker/daemon.json
{
      "exec-opts": ["native.cgroupdriver=systemd"],
      "log-driver": "json-file",
      "log-opts": {
      "max-size": "100m"
      },
      "storage-driver": "overlay2"
}
EOF

Menerapkan konfigurasi docker

1
sudo systemctl restart docker.service

Mendeploy cluster master node

Jalankan pada master node

1
2
sudo kubeadm config images pull
sudo kubeadm init --control-plane-endpoint k8s-master-node:6443 --upload-certs --pod-network-cidr=10.244.0.0/16

Akan mendapatkan hasil seperti berikut : image

Copy credentials kubernetes cluster

1
2
3
mkdir -p ~/.kube
sudo cp -i /etc/kubernetes/admin.conf ~/.kube/config
sudo chown $USER:$USER ~/.kube/config

Menerapkan CNI Flannel

1
2
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
watch kubectl -n kube-system get pod -o wide

Join cluster worker node

Jalankan pada worker node

1
2
sudo kubeadm config images pull
sudo kubeadm join k8s-master-node:6443 --token fou63o.wy0331rpp3313lsa --discovery-token-ca-cert-hash sha256:0472c1c9354548501c42028ff72a6dfc4bffe3a225e3a31fe40cec814fa6eef2

Mengakses sumber daya kubernetes

Jalankan pada master node

1
2
3
4
5
6
7
8
# Melihat daftar node
kubectl get node -o wide

# Melihat pod kube-system
kubectl -n kube-system get pod

# Melihat semua service kubernetes
kubectl get svc -A -o wide

Sumber Referensi