CentOS 7 上安裝 Kubernetes 叢集指南
前置條件
- 兩臺 CentOS 7 伺服器
- Master 節點: 192.168.50.106
- Worker 節點: 192.168.50.107
- 每臺伺服器至少 2 CPU,2GB 記憶體,20GB 磁碟空間
- root 訪問許可權
1. 系統準備(兩臺伺服器都執行)
# 關閉防火牆
systemctl stop firewalld
systemctl disable firewalld
# 關閉selinux
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
# 關閉swap
swapoff -a
sed -i '/swap/d' /etc/fstab
# 設定主機名
hostnamectl set-hostname master # 在192.168.50.106上執行
hostnamectl set-hostname worker # 在192.168.50.107上執行
# 新增hosts
cat >> /etc/hosts << EOF
192.168.50.106 master
192.168.50.107 worker
EOF
# 將橋接的IPv4流量傳遞到iptables的鏈
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
# 載入br_netfilter模組
modprobe br_netfilter
# 時間同步
yum install -y chrony
cat > /etc/chrony.conf << EOF
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
EOF
systemctl enable chronyd && systemctl start chronyd
2. 安裝 Docker(兩臺伺服器都執行)
2.1 配置 yum 源
如果遇到無法連線官方映象源的問題,請按以下步驟操作:
# 備份當前的 CentOS-Base.repo 檔案
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 下載阿里雲的 CentOS 映象原始檔
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 如果 curl 不可用,可以使用 wget
# sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 清除快取並生成新的快取
sudo yum clean all
sudo yum makecache
如果仍然遇到 DNS 解析問題,可以嘗試新增公共 DNS:
echo "nameserver 8.8.8.8" | sudo tee -a /etc/resolv.conf
echo "nameserver 114.114.114.114" | sudo tee -a /etc/resolv.conf
2.2 安裝 Docker
# 安裝必要的依賴
yum install -y yum-utils device-mapper-persistent-data lvm2
# 新增Docker倉庫
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安裝Docker
yum makecache fast
yum install -y docker-ce docker-ce-cli containerd.io
# 配置Docker
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"data-root": "/data/docker",
"registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
# 啟動Docker並設定開機自啟
systemctl daemon-reload
systemctl start docker
systemctl enable docker
3. 安裝 kubeadm, kubelet 和 kubectl(兩臺伺服器都執行)
# 新增Kubernetes倉庫
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 安裝Kubernetes元件
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo yum install -y kubeadm-1.21.0-0 kubelet-1.21.0-0 kubectl-1.21.0-0 --disableexcludes=kubernetes
# 啟動kubelet並設定開機自啟
systemctl enable --now kubelet
4. 初始化 master 節點(只在 192.168.50.106 上執行)
# 拉取所需映象
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers
## 注意:
如果CRI 外掛被禁用了,會導致"CRI v1 image API is not implemented" 錯誤的原因
vim /etc/containerd/config.toml
### 刪除或註釋掉這一行:
# disabled_plugins = ["cri"]
### 新增以下內容:
[plugins."io.containerd.grpc.v1.cri"]
disable = false
### 重啟 containerd 服務:
systemctl restart containerd
### 驗證 containerd 服務狀態:
systemctl status containerd
## 再次嘗試拉取映象:
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers
# 初始化master節點
kubeadm init \
--apiserver-advertise-address=192.168.50.106 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.21.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
# 如果以上命令報錯:
kubeadm init \
--apiserver-advertise-address=192.168.50.106 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.21.14 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=ImagePull
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
5. 安裝網路外掛(只在 master 節點 192.168.50.106 上執行)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
6. 加入 worker 節點(在 192.168.50.107 上執行)
使用 kubeadm init 輸出的 join 命令:
kubeadm join 192.168.50.106:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
7. 驗證叢集狀態(在 master 節點 192.168.50.106 上執行)
kubectl get nodes
如果一切正常,您應該能看到兩個節點都處於 Ready 狀態。
故障排除
如果在安裝過程中遇到任何問題,請檢查以下幾點:
- 確保所有命令都以 root 使用者或使用 sudo 執行。
- 檢查網路連線,確保能夠訪問所需的映象源。
- 如果遇到 DNS 解析問題,嘗試新增公共 DNS 伺服器。
- 檢查伺服器的時間同步狀態。
- 確保已經正確關閉了 SELinux 和防火牆。
如果問題仍然存在,請收集相關的錯誤日誌並尋求進一步的幫助。
這份 Markdown 文件包含了完整的安裝步驟,以及針對可能遇到的映象源問題的解決方案。您可以根據需要進一步調整或擴充套件這個文件。