知識庫
如何通過kubeadm在aws上創建集群?為了創建k8s集群,首先需要在公有云上申請2個EC2instance,這里演示的是在aws上申請instance,操作系統選擇的ubuntu,創建過程中用默認配置即可,創建instance過程中的.pem文件需要保存好,后續登陸instance需要用到。
創建完成后,查看instance的公網IP地址,并通過公網IP地址和pem文件就可登陸到instance上了。登陸到instance的命令:ssh -i /Users/taoli/Downloads/qiaotl.pem ubuntu@xx.xx.xx.xx(這里輸入instance的公網IP地址)。
目標:創建三個節點的集群,一個master節點,兩個node節點。
kubeadm在aws上創建集群優惠鏈接:http://www.ukunilife.com/zt/2023-05-06/
具體步驟如下所示:
步驟一:在aws上申請3個instance,操作系統選擇ubuntu
1.登陸aws上,申請3個EC2 instance,node節點join的時候是通過內部IP地址join的,所以在aws上創建EC2 instance請需綁定上Elastic IP,這樣即便instance重啟后,IP地址也不會變化。
2.執行 swapoff -a 命令關閉分區;執行sudo ufw disable 關閉防火墻
3.為了保障node節點能成功加入master節點,還需要對master和node節點開放如下端口,具體信息可查看官網詳細信息。
步驟二:允許iptables檢查橋接流量
1.執行命令 sudo modprobe br_netfilter
執行該命令后會自動化創建目錄/proc/sys/net/bridge,并在該目錄下自動創建一些文件,后續會用到。
2.為了讓你的 Linux 節點上的 iptables 能夠正確地查看橋接流量,執行如下命令,將 net.bridge.bridge-nf-call-iptables 設置為
cat <
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
步驟三:安裝 kubeadm、kubelet 和 kubectl
1.更新 apt 包索引并安裝使用 Kubernetes apt 倉庫所需要的包
sudo apt-get update && sudo apt-get install -y apt-transport-https curl containerd
sudo apt-get update && sudo apt-get install -y apt-transport-https
sudo apt-get install curl
sudo apt-get install containerd
2.下載 Google Cloud 公開簽名秘鑰
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
3.添加 Kubernetes apt 倉庫:
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
4.安裝kubeadm、kubelet 和 kubectl并鎖定版本
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
以上三個步驟在master節點和node節點都需要執行。
安裝完成后,選取一個節點作為master節點,另外兩個節點作為node節點,master節點執行集群初始化命令
kubeadm init --apiserver-advertise-address=10.x.x.x --service-cidr=10.x.x.x/16 --pod-network-cidr=192.168.0.0/16
這里沒有使用默認的kubeadm init,--apiserver-advertise-address可以填寫master節點的內部ip地址,實際項目中是負載均衡的ip,--service-cidr與--apiserver-advertise-address不要在同一個網段,例如前面是10.0,那么后面這個就是10.1, 對于--pod-network-cidr
flannel 默認是10.244.0.0/16
calico 默認是192.168.0.0/16
需要注意的是:在kubeadm init過程中,如果選用下面的方式安裝calico插件,那么kubeadm init的時候一定要設置 --pod-network-cidr=192.168.0.0/16這個參數,否則安裝插件后,查看node狀態也是NotReady狀態。
執行上述命令過程中如下遇到如下錯誤,那么執行這兩條命了,將指設置為1
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 > /proc/sys/net/ipv4/ip_forward
kubeadm init命令執行完成后,會顯示如下信息,按提示信息copy配置文件,kubeadm join命令需copy下來,這是后面node節點加入的命令。
接下來在master節點安裝網絡插件,這里選擇calico網絡插件,具體網絡插件安裝詳細信息可查看這里
kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
kubectl create -f https://docs.projectcalico.org/manifests/custom-resources.yaml
插件安裝完成后,就可以在node節點上執行copy出來的kubeadm join命令,注意所有node節點也需要執行步驟一、步驟二、步驟三。
node節點join成功后,可在master節點執行kubectl get node命令,查看master和node節點信息,如果都是ready狀態,如下圖所示,那么說明整個集群安裝成功。
如果以后想重啟集群,那么在master和node節點上執行kubeadm reset命令,然后在master節點上至下kubeadm init命令,node節點上重新只想kubead join命令即可。
如果遇到這個錯誤可從如下幾個方面進行排查:connection-to-the-server-host-6443-was-refused
1.執行命令查看6443是否被正常監聽
netstat -pnlt | grep 6443
2.查看kubelet服務是否處于運行狀態
systemctl status kubelet
3.查看containerd服務是否處于運行狀態
systemctl status containerd
通過kubeadm在aws上創建集群的步驟就講到這,您可以根據自己的需求和預算,在互聯數據低價選擇適合的EC2實例類型和配置,并根據實際使用情況進行計費。AWS的計費方式主要有按需計費、預留實例和按使用量計費等選項。亞馬遜VPS(Amazon EC2)主要用于創建和管理虛擬服務器,它提供彈性的計算能力,允許您在云端運行各種應用程序和服務。