國內Kubernetes安裝步驟

ParallelForEach發表於2024-08-12

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 狀態。

故障排除

如果在安裝過程中遇到任何問題,請檢查以下幾點:

  1. 確保所有命令都以 root 使用者或使用 sudo 執行。
  2. 檢查網路連線,確保能夠訪問所需的映象源。
  3. 如果遇到 DNS 解析問題,嘗試新增公共 DNS 伺服器。
  4. 檢查伺服器的時間同步狀態。
  5. 確保已經正確關閉了 SELinux 和防火牆。

如果問題仍然存在,請收集相關的錯誤日誌並尋求進一步的幫助。


這份 Markdown 文件包含了完整的安裝步驟,以及針對可能遇到的映象源問題的解決方案。您可以根據需要進一步調整或擴充套件這個文件。

相關文章