Chuyển tới nội dung chính

Tutorial install k8s cluster with HA ability

image.png

1 . Thêm key cho repo phục vụ cài kubernests

Bước này truy cập vào đây để ấy bản mới nhất

Install Kubeadm

apt-get update

sudo apt-get install -y apt-transport-https ca-certificates curl gpg
sudo mkdir -p -m 755 /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

2. Cài gói K8s

   apt-get install kubelet kubeadm kubectl containerd

3: Cài đặt các tham số của hệ thống

swapoff -a; sed -i '/swap/d' /etc/fstab
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
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward

Xử lý Cgroup trong containerd

Create a default configuration file for containerd.

sudo sh -c "containerd config default > /etc/containerd/config.toml"
sudo sed -i 's/ SystemdCgroup = false/ SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd.service

4: Tạo cụm kubernests

  • Cài với 1 master node
kubeadm init --pod-network-cidr=192.168.0.0/17 --service-cidr=192.168.128.0/17
  • Cài với nhiều master node
kubeadm init --control-plane-endpoint="100.0.0.201:6443" --upload-certs --apiserver-advertise-address=10.9.8.16 --pod-network-cidr=192.168.0.0/17 --service-cidr=192.168.128.0/17

--control-plane-endpoint: địa chỉ của HAProxy, F5 (100.0.0.201)
--apiserver-advertise-address: địa chỉ của server chạy lệnh kubeapi
--pod-network-cidr: dải mạng cho các pod trong cụm
--service-cidr: dải mạng cho các service trong cụm

  • Sau khi chạy xong hệ thông sẽ tự động sinh ra 2 câu lệnh, 1 câu lệnh dùng để join master, 1 câu lệnh dùng để join worker Chạy lệnh deploy network trong cụm

5. Chạy trên worker node

Khi tạo xong ở bước 4 sẽ có 1 script được tạo ra cùng với script join master node. Copy script đó và nhập ở các worker node

kubeadm join 10.0.0.231:6443 --token xqmp66.esrpsz2t9bprq8vw \
--discovery-token-ca-cert-hash sha256:asdfasdfsADFASDFEQWGAREGWQEADSADS

6. Cài đặt CNI cho cluster

kubectl --kubeconfig=/etc/kubernetes/admin.conf create -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml
# Bản mới hơn
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.2/manifests/calico.yaml

ports:

  • name: http-web protocol: TCP port: 9090 targetPort: 9090 nodePort: 30909 selector: app.kubernetes.io/name: prometheus prometheus: kube-prometheus-stack-1704-prometheus clusterIP: 192.168.202.146 clusterIPs:
  • 192.168.202.146 type: NodePort.

7. Sau khi cài đặt xong cluster. Để pull image về thì có thể sẽ bị gặp lỗi này với private cluster

Đối với private registry (Habor, …) có thể xảy ra lỗi “x509 certificate signed by unknown authority”. Để fix sửa file /etc/containerd/config.toml của containerd như sau Nếu /etc/containerd/config.toml chưa tồn tại chạy lệnh để tạo file mặc định

mkdir /etc/containerd
containerd config default > /etc/containerd/config.toml

Thêm vào
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."10.0.0.58"]
endpoint = ["https:// 10.0.0.58"]
# Chỗ này là IP Của harbor
Thêm vào
[plugins."io.containerd.grpc.v1.cri".registry.configs]
[plugins."io.containerd.grpc.v1.cri".registry.configs." 10.0.0.58".tls]
insecure_skip_verify = true
[plugins."io.containerd.grpc.v1.cri".registry.configs."10.0.0.58".auth]
auth ="Yas32r1wfasdf123rasfd="

8. Nginx Ingress controllers controller

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.0/deploy/static/provider/cloud/deploy.yaml

9. Add thêm thông tin vào server trong k8s

Tại - api-micro-service => Add thêm ingressClassName: nginx

spec:
ingressClassName: nginx
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: api-micro-service
port:
number: 8081

Tại Service - namespace => Thêm thêm các externalIP là ip của các workernode

  clusterIP: 10.99.239.53
clusterIPs:
- 100.99.239.53
type: LoadBalancer
externalIPs:
- 100.2.1.14
- 100.2.1.15
- 100.2.1.16
- 100.2.1.17