K8S部署攻略
此教程以一主二從為例,需要三臺伺服器。
主機最低需求: 4 核 CPU,4 GB 記憶體,硬碟:30 GBx2 (需保留一個未分割槽的磁碟)
從機最低需求: 4 核 CPU,8 GB 記憶體,硬碟:30 GBx2 (需保留一個未分割槽的磁碟)
軟體版本:
Ubuntu:22.04
Kubesphere:3.4.1
Docker:20.10.24
K8s:1.23.17
Rook:1.13.6
前置要求:
叢集中的所有機器的網路彼此均能相互連線(公網和內網都可以)。
節點之中不可以有重複的主機名、MAC 地址或 product_uuid。
1. 配置Cgroup驅動(加速倉庫不需要可移除)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"registry-mirrors": [
"https://hub-mirror.c.163.com/",
"https://dockerproxy.com/"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
2. 配置docker儲存庫,安裝docker-ce
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get -y update
sudo apt-get -y install docker-ce=5:20.10.24~3-0~ubuntu-jammy
sudo systemctl enable docker && sudo systemctl start docker
3. 關閉交換分割槽
sudo swapoff -a
sudo apt -y install vim
sudo vi /etc/fstab
註釋掉swap行並儲存
4. 允許 iptables 檢查橋接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
5. 安裝 kubeadm、kubelet 和 kubectl
sudo apt-get update && sudo apt-get install -y apt-transport-https
sudo curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
sudo tee /etc/apt/sources.list.d/kubernetes.list <<-'EOF'
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet=1.23.17-00 kubeadm=1.23.17-00 kubectl=1.23.17-00
sudo systemctl enable kubelet && sudo systemctl start kubelet
6. 初始化控制平面節點(僅主節點執行)
sudo kubeadm init \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
--kubernetes-version v1.23.17 \
--pod-network-cidr=10.244.0.0/16
出現如下資訊表示初始化成功,將token(圖中最後兩行)複製儲存,後面會用到,token有效期為24小時
執行命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
7. 安裝 Pod 網路附加元件(僅主節點執行,方式二選一)
方式一: 下載檔案:https://files.cnblogs.com/files/blogs/785788/kube-flannel.zip?t=1710498095&download=true 解壓上傳kube-flannel.yml檔案至主節點使用者根目錄下,執行:
|
方式二:
|
執行命令檢視安裝是否完成
watch kubectl get pod -n kube-system -o wide
輸出中檢查 CoreDNS Pod 的STATUS直到變成 Running 表示完成(需要十幾分鍾)
8. 配置hosts
sudo vi /etc/hosts
配置示例:
192.168.1.100 k8s1
192.168.1.101 k8s2
192.168.1.102 k8s3
9. 從節點加入主節點
在從節點執行 步驟六 儲存的token,注意非root使用者前面加上sudo
sudo kubeadm join 192.168.1.100:6443 --token **** \
--discovery-token-ca-cert-hash sha256:****
成功輸出:
失敗可以嘗試以下兩種方法:
重置 kubeadm(在從節點執行):
|
關閉防火牆(主從都執行):
|
完畢後,執行 watch kubectl get nodes 檢視,等待所有節點狀態變成Ready(需要幾分鐘)
10. 刪除汙點(僅主節點執行)
kubectl taint nodes <主節點名,比如k8s1> node-role.kubernetes.io/master:NoSchedule-
11. 安裝Rook-CephFS(僅主節點執行,方式二選一)
方式一: 下載檔案:https://files.cnblogs.com/files/blogs/785788/rook-1.13.6.zip?t=1710498602&download=true 解壓後把rook整個資料夾,上傳到主節點使用者根目錄。 |
方式二:
|
執行命令:
kubectl create -f rook/deploy/examples/crds.yaml \
-f rook/deploy/examples/common.yaml \
-f rook/deploy/examples/operator.yaml
kubectl create -f rook/deploy/examples/cluster.yaml
待安裝完成(需要十分鐘左右),使用 watch kubectl get pods -n rook-ceph 來確認安裝進度,
安裝完至少需要有以下pod
rook-ceph-mgr-a-****
rook-ceph-mgr-b-****
rook-ceph-mon-a-****
rook-ceph-mon-b-****
rook-ceph-mon-c-****
rook-ceph-osd-0-****
rook-ceph-osd-1-****
rook-ceph-osd-2-****
且除 rook-ceph-osd-prepare-*** 以外,其他都要為Running
12. 建立預設StorageClass,恢復汙點(僅主節點執行)
kubectl create -f rook/deploy/examples/filesystem.yaml
kubectl create -f rook/deploy/examples/csi/cephfs/storageclass.yaml
kubectl patch storageclass rook-cephfs -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
kubectl taint nodes <主節點名,比如k8s1> node-role.kubernetes.io=master:NoSchedule
使用:kubectl get sc確認是否成功 需看到 "(default)" 。
13. 安裝KubeSphere(僅主節點執行)
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.4.1/kubesphere-installer.yaml
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.4.1/cluster-configuration.yaml
檢視安裝進度(過兩分鐘,Pot建好才能使用):
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f
成功輸出:
完結撒花!
附件:k8s部署攻略.doc