部署kubernetes
設別基礎配置標準
- Minimal Installed Debian 12 /11
- 2 CPU / vCPU
- 2 GB RAM
- 20 GB free disk space
- Sudo User with Admin rights
- Stable Internet Connectivity
- Ensure that each node can communicate with the others via a reliable network connection.
1. 設定hostname和hosts檔案
sudo hostnamectl set-hostname "master" // Run on master node
sudo hostnamectl set-hostname "node1" // Run on 1st worker node
sudo hostnamectl set-hostname "ndoe2" // Run on 2nd worker node
/etc/hosts 配置
10.0.8.2 master
10.0.0.6 node1
10.0.8.15 node2
2. 關閉所有節點的swap
目的:1. 平滑執行 2. 讓記憶體洩漏的容器快速死亡
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
debian 非root下可能沒有設定/usr/sbin 的環境變數,導致無法執行一些命令,設定下即可。
3. 新增防火牆規則
4. 安裝Container
安裝前所有節點設定核心引數
$ cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
$ sudo modprobe overlay
$ sudo modprobe br_netfilter
$ cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
執行 sudo sysctl --system
使得引數修改生效
安裝Container
sudo apt update
sudo apt -y install containerd
在所有節點生成匯入預設配置
containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
使用SystemdCgroup配置,將 ‘SystemdCgroup = false’ 修改為 ‘SystemdCgroup = true‘
sudo vi /etc/containerd/config.toml
重啟服務使配置生效
sudo systemctl restart containerd
sudo systemctl enable containerd
5. 新增kubernetes源
安裝工具
sudo apt-get update
# apt-transport-https may be a dummy package; if so, you can skip that package
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
新增儲存庫
echo "deb [trusted=yes] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
6. 安裝kubelet kubeadn kubectl,並固定版本
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
7. 使用 Kubeadm 安裝 Kubernetes 叢集
我選擇生成配置檔案,透過配置檔案初始化
kubeadm config print init-defaults > init.yaml
advertiseAddress: #修改為master節點的ip
......
node:修改為master的hostname
如果初始化正常, 控制檯會提示執行以下命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 在節點執行後加入叢集
kubeadm join 10.0.8.2:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:186e7256966f0e2b3485a3b3ab15a0f1357195745e3d2fa6e9f386cfc24ecc5d
執行以下 kubectl 命令來獲取節點和叢集資訊,
kubectl get nodes
kubectl cluster-info
8. 使用 Calico 設定 Pod 網路
wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
kubectl apply -f calico.yaml
如果有防火牆,則開放calico埠
sudo ufw allow 179/tcp
sudo ufw allow 4789/udp
sudo ufw allow 51820/udp
sudo ufw allow 51821/udp
sudo ufw reload
過幾分鐘後,驗證calico狀態
kubectl get pods -n kube-system
9. 驗證叢集
啟nginx deployment測試
kubectl create deployment nginx-app --image=nginx --replicas 2
kubectl expose deployment nginx-app --name=nginx-web-svc --type NodePort --port 80 --target-port 80
執行kubectl describe svc nginx-web-svc
得到如下:
使用curl命令測試curl http://node1:31743