Tutorial install k8s cluster with HA ability
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
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