Kubernetes là một nền tảng nguồn mở, có thể mở rộng để quản lý các ứng dụng được đóng gói và các service, giúp thuận lợi trong việc cấu hình và tự động hoá việc triển khai ứng dụng. Kubernetes là một hệ sinh thái lớn và phát triển nhanh chóng. Các dịch vụ, sự hỗ trợ và công cụ có sẵn rộng rãi. Có nhiều các để dựng một cluster K8S trên on-premise, trong bài này mình dùng thông qua kubeadm
Tổng quan
Cụm cluster sẽ gồm 2 master, 6 worker node, 1 HA Proxy theo IP như sau
OS: Rocky Linux 8
PersistenVolume: /u01
Pod Network: Calico 3.20
K8S version: v1.27.0
Chuẩn bị
Bài này không phải detail về Docker nên vì vậy cần chuẩn bị cài trước ở các server, bạn có thể tham khảo đoạn mẫu sau
# Install Docker CE ## Set up the repository ### Install required packages. yum install -y yum-utils device-mapper-persistent-data lvm2### Add Docker repository. yum-config-manager --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo## Install Docker CE. yum update -y && yum install -y \ containerd.io-1.2.10 \ docker-ce-19.03.4 \ docker-ce-cli-19.03.4## Create /etc/docker directory. mkdir /etc/docker# Setup daemon. cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ] } EOF mkdir -p /etc/systemd/system/docker.service.d# Restart Docker systemctl daemon-reload systemctl restart docker systemctl enable docker.service
Cài đặt
Step 1: Setup file hosts ở tất cả các node
vi /etc/hosts
10.121.30.40 pe-smsfw-worker1
10.121.30.41 pe-smsfw-worker2
10.121.30.42 pe-smsfw-worker3
10.121.30.43 pe-smsfw-worker4
10.121.30.44 pe-smsfw-worker5
10.121.30.45 pe-smsfw-worker6
10.121.30.46 pe-smsfw-master1
10.121.30.47 pe-smsfw-master2
10.121.30.48 pe-smsfw-loadbalance
Step 2: Tắt swap (ở tất cả các node), ta có thể dùng swapoff -a để tắt tạm thời, nhưng dưới đây là cách tắt vĩnh viễn cho dù reboot server cũng không bật lên lại
vi /etc/fstab
comment out # với dòng swap và save
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Step 3: Tắt selinux
setenforce 0
vi /etc/selinux/config
Chỉnh SELINUX=disabled
Step 4: Setup HAProxy (ở server 10.121.30.48)
yum install haproxy -y
systemctl start haproxy
systemctl enable haproxy
vi /etc/haproxy/haproxy.cfg
systemctl restart haproxy
Step 5: Setup K8S repository (ở tất cả các node trừ node HAProxy)
vi /etc/yum.repos.d/kubernetes.repo
Copy nội dung sau:
[miry_kubernetes]
name=miry_kubernetes
baseurl=https://packagecloud.io/miry/kubernetes/el/7/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/miry/kubernetes/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
[miry_kubernetes-source]
name=miry_kubernetes-source
baseurl=https://packagecloud.io/miry/kubernetes/el/7/SRPMS
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/miry/kubernetes/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
Cài đặt kubelet, klubeadm, kubectl
yum install -y kubelet kubeadm kubectl
### Cài đặt packet lastest
hoặcyum install -y kubelet-1.24.0-0 kubeadm-1.24.0-0 kubectl-1.24.0-0
### Cài đặt packet theo version
systemctl enable kubelet
### Bật ứng dụng khi restart hostsystemctl start kubelet
### Start ứng dụng
Lúc này kubelet sẽ chưa running thành công mà báo thiếu config, vì vậy cần kubeadm init
Step 6: Init cluster (trên 1 node master ở đây mình dùng trên 10.121.30.46)
kubeadm init --control-plane-endpoint "10.121.30.48:6443" --upload-certs --apiserver-advertise-address 10.121.30.46 --pod-network-cidr=10.244.0.0/16
Kết quả câu lệnh sau 1 dùng cho các master node còn lại để join vào làm master, lệnh còn lại giành cho các worker
kubeadm join 10.121.30.48:6443 --token bp7zex.h23tt1h6tazmh7cz
--discovery-token-ca-cert-hash sha256:5831300e3a4694f54ac08508fddaa32692070d33619c995a2710098fce184a83
--control-plane --certificate-key cbf68a9d851a43b1123ff9e126633c50d045f2d5a9115dd9dfda34caeaf0825d
kubeadm join 10.121.30.48:6443 --token bp7zex.h23tt1h6tazmh7cz
--discovery-token-ca-cert-hash sha256:5831300e3a4694f54ac08508fddaa32692070d33619c995a2710098fce184a83
systemctl restart kubelet
Step 7: Sau khi cài đặt packet thành công ta tiến hành khai báo các biến môi trường để sử dụng
K8S
Cách 1: Sử dụng tài khoản root (Với cách này ta thường xuyên phải làm lặp đi lặp lại.export KUBECONFIG=/etc/kubernetes/admin.conf
Cách 2: Cách này sẽ khai báo cố định, lần sau không cần khai báo nữa
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -g):$(id -g) $HOME/.kube/config
Đối với các worker node thì chỗ admin.conf thành kubelet.conf
Step 8: Config Pod Network
kubectl create -f https://docs.projectcalico.org/v3.20/manifests/calico.yaml
Step 9: Kiểm tra lại các node
kubectl get node -owide -A
Note
Ở Step 6 Thêm 1 node master mới sau 1 khoảng thời gian token hết hạn
SSH vào node master hiện tạikubeadm init phase upload-certs --upload-certs
copy output CERT
kubeadm token create --print-join-command
copy output TOKEN
kubeadm join 10.121.30.48:6443 –token TOKEN –discovery-token-ca-cert-hash sha256:5831300e3a4694f54ac08508fddaa32692070d33619c995a2710098fce184a83 –control-plane –certificate-key CERT
Chúc các bạn thành công!!!