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#
Software | Version | Description |
---|
Ubuntu | 20.04 | Operating System |
Kubernetes | v1.20.0 | Container Orchestration |
Docker | latest | Container Runtime Interface |
Calico | v3.20 | Container Network Interface |
Hardware#
Node Name | Processor | RAM | Volumes | Description |
---|
k8s-master-node | 2 Core | 2 GB | 15 GB | Control Plane Node |
k8s-worker-node01 | 2 Core | 2 GB | 15 GB | Worker Node |
k8s-worker-node02 | 2 Core | 2 GB | 15 GB | Worker Node |
Networking#
Node Name | IP Address | Description | |
---|
k8s-master-node | 192.168.0.101 | Int & External Network | |
k8s-worker-node01 | 192.168.0.102 | Internal Network | |
k8s-worker-node02 | 192.168.0.103 | Internal Network | |
Topologi#
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
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 :
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#