## Chuẩn bị
```
192.168.60.180 master
192.168.60.181 worker-1
192.168.60.182 worker-2
echo "192.168.60.185 master" >> /etc/hosts
echo "192.168.60.186 worker-1" >> /etc/hosts
echo "192.168.60.187 worker-2" >> /etc/hosts
```
```
hostnamectl set-hostname master
hostnamectl set-hostname worker-1
hostnamectl set-hostname worker-2
```
## Install Dependency and containerd
```
sudo apt install curl apt-transport-https -y
sudo apt install curl gnupg2 software-properties-common apt-transport-https ca-certificates -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install jq -y
sudo apt install containerd.io -y
mkdir -p /etc/containerd
containerd config default>/etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd
```
```
modprobe overlay
modprobe br_netfilter
tee /etc/modules-load.d/containerd.conf <
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
```
Cài đặt kubelet kubeadm kubectl
```
apt update -y
apt install kubelet kubeadm kubectl -y
apt-mark hold kubelet kubeadm kubectl
```
### Bước 2: Khởi tạo Cluster
Lưu ý:
- Thực hiện trên Master
Khởi tạo Cluster
```
sudo kubeadm init --apiserver-advertise-address=192.168.60.180 --pod-network-cidr=172.16.0.0/16
```
Lưu ý
- apiserver-advertise-address : IP của node master.
- pod-network-cidr : Dải địa chỉ sử dụng, phụ thuộc vào công nghệ sử dụng, trong bài sử dụng
công nghệ network calico nên giá trị bằng 172.16.0.0/16
Khởi tạo biến môi trường
```
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
```
### Bước 3: Join Worker vào cluster
Lưu ý:
- Thực hiện trên Worker 01 và Worker 02
```
kubeadm join 192.168.60.180:6443 --token rc36nx.xesq78op1qzd2ptq \
--discovery-token-ca-cert-hash sha256:19d1692e630963f9b35215633e578f165ee909b52868c4ed12b86c728e0bd310
```
Kiểm tra - Thực hiện trên Master
```
kubectl get nodes
```
Lưu ý: Các node thời điểm trạng thái sẽ không Ready vì chưa deploy Network Plugin
### Bước 4: Khởi tạo Network Plugin (CNI) - Calico
Lưu ý
- Thực hiện trên Master
```
curl https://docs.projectcalico.org/manifests/calico.yaml -O
kubectl apply -f calico.yaml
```
Kiểm tra
```
kubectl get pods -n kube-system
```
Lưu ý:
- Sẽ mất 5-10 phút để Pod Network Calico khởi tạo
Kiểm tra trạng thái các node
```
kubectl get nodes
```
Lưu ý:
- Tại thời điểm trạng thái các node sẽ là Ready do đã có cấu hình Network
In token join command
```
kubeadm token create --print-join-command
```
## Phần 2: Kiểm tra Cluster
### Tạo Deployment
```
kubectl create deployment nginx --image=nginx
kubectl get pods -l app=nginx
```
### Expose Service
```
kubectl expose deploy nginx --type=NodePort --port 80
```
### Kiểm tra trạng thái Pod
Kiểm tra kết nối pod
```
PORT_NUMBER=$(kubectl get svc -l app=nginx -o jsonpath="{.items[0].spec.ports[0].nodePort}")
curl http://worker-1:$PORT_NUMBER
curl http://worker-2:$PORT_NUMBER
```
### Kiểm tra log pods
```
POD_NAME=$(kubectl get pods -l app=nginx -o jsonpath="{.items[0].metadata.name}")
kubectl logs $POD_NAME
```
### Truy cập pod thực hiện CLI
```
kubectl exec -ti $POD_NAME -- nginx -v
```
### Clean Test
```
kubectl delete deployment nginx
kubectl delete svc nginx
kubectl get all --all-namespaces
```
### Kiểm tra version
```
root@master:~# kubelet --version
Kubernetes v1.23.0
```
Tại đây cluster đã sẵn sàng, snapshot `kubeadm-calico-v126-ok`
https://thenewstack.io/how-to-deploy-kubernetes-with-kubeadm-and-containerd/
Cảm ơn bạn đã trả lời.