1 檢查 centos / hostname(在 master 節點和 worker 節點都要執行)
# 在 master 節點和 worker 節點都要執行
cat /etc/redhat-release
# 此處 hostname 的輸出將會是該機器在 Kubernetes 集群中的節點名字
# 不能使用 localhost 作為節點的名字
hostname
# 請使用 lscpu 命令,核對 CPU 信息
# Architecture: x86_64 本安裝文檔不支持 arm 架構
# CPU(s): 2 CPU 內核數量不能低於 2
lscpu
2 修改 hostname (在 master 節點和 worker 節點都要執行)
如果您需要修改 hostname,可執行如下指令:
# 修改 hostname
hostnamectl set-hostname your-new-host-name
# 查看修改結果
hostnamectl status
# 設置 hostname 解析
echo "127.0.0.1 $(hostname)" >> /etc/hosts
3 安裝containerd/kubelet/kubeadm/kubectl(在 master 節點和 worker 節點都要執行)
# 最后一個參數 1.22.3 用於指定 kubenetes 版本,支持所有 1.22.x 版本的安裝
# 騰訊雲 docker hub 鏡像
# export REGISTRY_MIRROR="https://mirror.ccs.tencentyun.com"
# DaoCloud 鏡像
# export REGISTRY_MIRROR="http://f1361db2.m.daocloud.io"
# 華為雲鏡像
# export REGISTRY_MIRROR="https://05f073ad3c0010ea0f4bc00b7105ec20.mirror.swr.myhuaweicloud.com"
# 阿里雲 docker hub 鏡像
export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com
curl -sSL https://kuboard.cn/install-script/v1.22.x/install_kubelet.sh | sh -s 1.22.5
4 初始化 master 節點(只在master節點執行)
關於初始化時用到的環境變量
APISERVER_NAME 不能是 master 的 hostname
APISERVER_NAME
POD_SUBNET 所使用的網段不能與 master節點/worker節點 所在的網段重疊。該字段的取值為一個
# 替換 192.168.x.x 為 master 節點實際 IP(請使用內網 IP)
export MASTER_IP=192.168.x.x
# 替換 apiserver.demo 為 您想要的 dnsName
export APISERVER_NAME=apiserver.demo
# Kubernetes 容器組所在的網段,該網段安裝完成后,由 kubernetes 創建,事先並不存在於您的物理網絡中
export POD_SUBNET=10.100.0.0/16
echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
curl -sSL https://kuboard.cn/install-script/v1.22.x/init_master.sh | sh -s 1.22.5
如果出現如下錯誤:
[config/images] Pulled registry.aliyuncs.com/k8sxio/pause:3.2
[config/images] Pulled registry.aliyuncs.com/k8sxio/etcd:3.4.13-0
failed to pull image "swr.cn-east-2.myhuaweicloud.com/coredns:1.8.0": output: time="2021-04-30T13:26:14+08:00" level=fatal
msg="pulling image failed: rpc error: code = NotFound desc = failed to pull and unpack image \"swr.cn-east-2.myhuaweicloud.com/coredns:1.8.0\":
failed to resolve reference \"swr.cn-east-2.myhuaweicloud.com/coredns:1.8.0\":
swr.cn-east-2.myhuaweicloud.com/coredns:1.8.0: not found", error: exit status 1
To see the stack trace of this error execute with --v=5 or higher
請執行如下命令:
在原命令的最后增加參數
/coredns
curl -sSL https://kuboard.cn/install-script/v1.22.x/init_master.sh | sh -s 1.22.5 /coredns
4.1 檢查 master 初始化結果(只在 master 節點執行)
coredns 將處於啟動失敗的狀態,請繼續下一步,完成 安裝網絡插件 這個步驟后,coredns 將正常啟動
# 執行如下命令,等待 3-10 分鍾,直到所有的容器組處於 Running 狀態
watch kubectl get pod -n kube-system -o wide
# 查看 master 節點初始化結果
kubectl get nodes -o wide
4.2 安裝網絡插件(只在 master 節點執行)
export POD_SUBNET=10.100.0.0/16
wget https://kuboard.cn/install-script/flannel/flannel-v0.14.0.yaml
sed -i "s#10.244.0.0/16#${POD_SUBNET}#" flannel-v0.14.0.yaml
kubectl apply -f ./flannel-v0.14.0.yaml
5 初始化 worker節點
5.1 在 master 節點上執行(只在 master 節點執行)
kubeadm token create --print-join-command
可獲取kubeadm join 命令及參數,如下所示,有效時間2小時
# kubeadm token create 命令的輸出
kubeadm join apiserver.demo:6443 --token 7pk9ym.cedespgigk1mnqej --discovery-token-ca-cert-hash sha256:e7cbdf2463b98f324bda2348af602513a1477ca63677367e26313563f080fc37
5.2 針對所有的 worker 節點執行 (只在 worker 節點執行)
# 替換 x.x.x.x 為 master 節點的內網 IP
export MASTER_IP=x.x.x.x
# 替換 apiserver.demo 為初始化 master 節點時所使用的 APISERVER_NAME
export APISERVER_NAME=apiserver.demo
echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
# 替換為 master 節點上 kubeadm token create 命令的輸出
kubeadm join apiserver.demo:6443 --token 7pk9ym.cedespgigk1mnqej --discovery-token-ca-cert-hash sha256:e7cbdf2463b98f324bda2348af602513a1477ca63677367e26313563f080fc37
5.3 檢查初始化結果(只在 master 節點執行)
# 只在 master 節點執行
kubectl get nodes -o wide