手動搭建高可用的 kubernetes 叢集(v1.31)

退役小学生發表於2024-09-27

手動搭建高可用的 kubernetes 叢集(v1.31)

目錄
  • 1、環境準備
    • 1.1 叢集規劃(節約資源,可按需配置)
    • 1.2 安裝依賴包(雙節點執行)
    • 1.3 配置對映(雙節點執行)
    • 1.4 免密登入(master節點執行)
    • 1.5 環境準備(雙節點執行)
  • 2、安裝containerd(雙節點執行)
  • 3、安裝Kubernetes
    • 3.1 安裝Kubernetes元件(雙節點執行)
    • 3.2 初始化Kubernetes叢集(Master節點執行)
    • 3.3 加入Kubernetes叢集(Worker節點執行)
  • 4、安裝網路外掛(雙節點執行)

1、環境準備

1.1 叢集規劃(節約資源,可按需配置)

主機名稱 物理IP 說明
master 172.16.20.10 Master節點
worker 172.16.20.11 Node節點

1.2 安裝依賴包(雙節點執行)

[root@master ~]# yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git socat

1.3 配置對映(雙節點執行)

[root@master ~]# cat >> /etc/hosts <<EOF
172.16.20.10 master
172.16.20.11 worker
EOF

1.4 免密登入(master節點執行)

[root@master ~]# ssh-keygen 
[root@master ~]# ssh-copy-id root@master
[root@master ~]# ssh-copy-id root@worker

1.5 環境準備(雙節點執行)

# 關閉防火牆
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld

# 禁用SELinux
[root@master ~]# sed -i 's/SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

# 禁用交換分割槽
[root@master ~]# swapoff -a
[root@master ~]# sed -i 's/.*swap.*/#&/' /etc/fstab

# 設定時區
[root@master ~]# timedatectl set-timezone Asia/Shanghai

# 同步時間
[root@master ~]# ntpdate time.windows.com
# 配置核心轉發
[root@master ~]# cat >> /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

# 配置生效
[root@master ~]# sysctl --system

# 載入系統模組
[root@master ~]# modprobe br_netfilter
[root@master ~]# lsmod | grep br_netfilter
br_netfilter           22256  0 
bridge                155432  1 br_netfilter

2、安裝containerd(雙節點執行)

# 下載源
[root@master ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
[root@master ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 替換成阿里雲的映象
[root@master ~]# sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

# 安裝 containerd
[root@master ~]# yum install -y containerd
# 重建containerd配置檔案
[root@master ~]# cp /etc/containerd/config.toml{,bak}
[root@master ~]# containerd config default > /etc/containerd/config.toml

# 配置 systemd cgroup 驅動
[root@master ~]# vim /etc/containerd/config.toml
[root@master ~]# sed -n "63p;127p" /etc/containerd/config.toml
    # 替換成阿里源
    sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.8"
            # 開啟Cgroup
            SystemdCgroup = true

# 啟動containerd並設定開機啟動
[root@master ~]# systemctl enable --now containerd

3、安裝Kubernetes

3.1 安裝Kubernetes元件(雙節點執行)

# 新增Kubernetes源
[root@master ~]# cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.31/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.31/rpm/repodata/repomd.xml.key
EOF

# 安裝kubeadm、kubelet和kubectl
[root@master ~]# yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

# 啟動kubelet並設定開機啟動
[root@master ~]# systemctl enable --now kubelet

3.2 初始化Kubernetes叢集(Master節點執行)

# 使用kubeadm初始化叢集(請根據您的實際情況替換<your-control-plane-endpoint>)
[root@master ~]# kubeadm init \
  --apiserver-advertise-address=172.16.20.10 \
  --image-repository=registry.k8s.io \
  --kubernetes-version=v1.31.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16

# 配置kubectl以訪問叢集
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

3.3 加入Kubernetes叢集(Worker節點執行)

在Master節點上執行kubeadm token create --print-join-command獲取加入叢集的命令,然後在每個Worker節點上執行該命令。

[root@worker ~]# kubeadm join 172.16.20.10:6443 --token cddh3x.lc2xhd19l1d134le \
	--discovery-token-ca-cert-hash sha256:fdf02257ce01071cd1e61bde518e417fae2e86e3a7650d81eabbb75e74d1ff51

4、安裝網路外掛(雙節點執行)

選擇 Calico 還是 Flannel 主要取決於你的具體需求:

  • 如果執行一個大型叢集,需要精細的網路策略控制,並且願意接受更復雜的配置過程,那麼 Calico 可能是一個更好的選擇。
  • 如果叢集規模較小,對網路效能要求不是特別高,而且希望有一個易於管理和配置的網路解決方案,那麼 Flannel 可能更適合你。
# 應用YAML檔案以部署Flannel(網路模式二選一)
[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

# 應用YAML檔案以部署Calico(網路模式二選一)
[root@master ~]# kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
# 驗證叢集狀態
[root@master ~]# kubectl get nodes
NAME     STATUS   ROLES           AGE     VERSION
master   Ready    control-plane   5m11s   v1.31.1
worker   Ready    <none>          3m7s    v1.31.1

# 檢視叢集資訊
[root@master ~]# kubectl cluster-info
Kubernetes control plane is running at https://172.16.20.10:6443
CoreDNS is running at https://172.16.20.10:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

# 檢查叢集的元件狀態
[root@master ~]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE   ERROR
controller-manager   Healthy   ok        
scheduler            Healthy   ok        
etcd-0               Healthy   ok 

相關文章