作者:李耀宗
介紹
對于生產環境,我們需要考慮 Kubernetes 集群的高可用性,本文教您部署如何在多臺 AWS EC2 實體快速部署一套高可用的生產環境,要滿足 Kubernetes 集群服務需要做到高可用,需要保證 kube-apiserver 的 HA ,可使用下列兩種方式:
- AWS ELB(推薦)
- keepalived + haproxy 對 kube-apiserver 進行負載均衡,實作高可用 Kubernetes 集群,
本教程重點介紹配置 AWS ELB 服務高可用安裝,
前提條件
- 考慮到資料的持久性,對于生產環境,我們不建議您使用存盤 OpenEBS,建議 NFS、GlusterFS、Ceph 等存盤(需要提前準備),文章為了進行開發和測驗,集成了 OpenEBS 將 LocalPV 設定為默認的存盤服務;
- SSH 可以訪問所有節點;
- 所有節點的時間同步;
- Red Hat 在其 Linux 發行版本中包括了 SELinux,建議關閉 SELinux 或者將 SELinux 的模式切換為 Permissive [寬容]作業模式,
準備主機
本示例創建 3 臺 Ubuntu 18.04 server 64bit 的 EC2 云服務器,每臺配置為 2 核 4 GB,
| 主機 IP | 主機名稱 | 角色 |
|---|---|---|
| 192.168.1.10 | master1 | master, node, etcd |
| 192.168.1.11 | master2 | master, node, etcd |
| 192.168.1.12 | master3 | master, node, etcd |
注意:本教程僅作部署演示,在生產環境建議角色分離,單獨部署 etcd 和 node 節點,提高穩定性,
創建 VPC
進入 AWS 控制臺,在全部服務中選擇 VPC,創建一個 VPC,配置如下圖所示:

創建子網
為該 VPC 創建子網,配置如下圖所示:

創建互聯網網關
選擇互聯網網關,創建網關并系結對應的 VPC:

配置路由表
配置 VPC 自動創建的路由表,增加一條 0.0.0.0/0 的路由:

創建安全組
配置 VPC 自動創建的默認安全組,設定如下入方向規則:

創建主機
在計算中選擇 EC2,按如下配置創建三臺 EC2 主機:
- 選擇鏡像

- 選擇規格

- 配置對應的 VPC 和子網

- 配置對應安全組

- EC2 主機創建成功后,將一臺主機系結一個彈性 IP 地址,用于遠程終端連接:

創建負載均衡器
選擇負載均衡-目標群組,創建負載均衡目標群組,并注冊 EC2 主機的 6443 埠:

- 創建
Network Load Balancer型別的負載均衡器,并配置對應的 VPC 和子網:

- 配置監聽器監聽
6443埠并連接對應的目標群組:

查詢負載均衡器的 IP 地址
選擇網路介面,可以看到自動生成的 ELB 網路介面的公有 IP 地址和私有 IP 地址:

配置 AWS 服務器 SSH 密碼登錄
依次登錄到每臺服務器,重置 ubuntu 用戶的密碼:
sudo passwd ubuntu
修改 SSH 配置:
# 查找 PasswordAuthentication,將 PasswordAuthentication no 修改為: PasswordAuthentication yes
sudo vi /etc/ssh/sshd_config
重啟 SSH 服務:
sudo systemctl restart sshd
獲取 KubeKey 部署程式
從 Github Realese Page 下載 KubeKey 或直接使用以下命令:
curl -sfL https://get-kk.kubesphere.io | VERSION=v1.2.0 sh -
使用 KubeyKey 部署
在當前位置創建部署組態檔 config-HA.yaml:
./kk create config -f config-HA.yaml
集群配置調整
根據當前集群資訊修改組態檔內容,有關更多資訊,請參見多節點安裝和 Kubernetes 集群配置:
apiVersion: kubekey.kubesphere.io/v1alpha1
kind: Cluster
metadata:
name: sample
spec:
hosts:
- {name: master1, address: 192.168.0.10, internalAddress: 192.168.0.10, user: ubuntu, password: password}
- {name: master2, address: 192.168.0.11, internalAddress: 192.168.0.11, user: ubuntu, password: password}
- {name: master3, address: 192.168.0.12, internalAddress: 192.168.0.12, user: ubuntu, password: password}
roleGroups:
etcd:
- master1
- master2
- master3
master:
- master1
- master2
- master3
worker:
- master1
- master2
- master3
controlPlaneEndpoint:
domain: lb.kubesphere.local
address: "192.168.0.151"
port: 6443
kubernetes:
version: v1.19.8
imageRepo: kubesphere
clusterName: cluster.local
network:
plugin: calico
kubePodsCIDR: 10.233.64.0/18
kubeServiceCIDR: 10.233.0.0/18
registry:
registryMirrors: []
insecureRegistries: []
addons: []
執行命令創建集群
./kk create cluster -f config-HA.yaml
KubeKey 可能會提示缺少 conntrack,可執行命令安裝:
sudo apt-get install conntrack,
檢查結果
可執行命令檢查部署結果,主要可通過以下命令進行檢查:
kubectl get node和kubectl get po兩個命令回傳的結果中STATUS的值為Ready則表示集群部署成功且組件運行正常,kubectl get ep命令回傳的結果中ENDPOINTS包含所有控制平面即master節點的 IP 地址,
ubuntu@master1:~$ kubectl get node -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
master1 Ready master,worker 3m45s v1.19.8 192.168.0.10 <none> Ubuntu 18.04.5 LTS 5.4.0-1045-aws docker://20.10.7
master2 Ready master,worker 95s v1.19.8 192.168.0.11 <none> Ubuntu 18.04.5 LTS 5.4.0-1045-aws docker://20.10.7
master3 Ready master,worker 2m v1.19.8 192.168.0.12 <none> Ubuntu 18.04.5 LTS 5.4.0-1045-aws docker://20.10.7
ubuntu@master1:~$ kubectl get po -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-8f59968d4-gchrc 1/1 Running 0 104s
kube-system calico-node-c65wl 1/1 Running 0 105s
kube-system calico-node-kt4qd 1/1 Running 0 105s
kube-system calico-node-njxsh 1/1 Running 0 105s
kube-system coredns-86cfc99d74-ldx9b 1/1 Running 0 3m59s
kube-system coredns-86cfc99d74-pg5lj 1/1 Running 0 3m59s
kube-system kube-apiserver-master1 1/1 Running 0 4m19s
kube-system kube-apiserver-master2 1/1 Running 0 115s
kube-system kube-apiserver-master3 1/1 Running 0 2m33s
kube-system kube-controller-manager-master1 1/1 Running 0 4m19s
kube-system kube-controller-manager-master2 1/1 Running 0 115s
kube-system kube-controller-manager-master3 1/1 Running 0 2m34s
kube-system kube-proxy-klths 1/1 Running 0 2m12s
kube-system kube-proxy-nm79t 1/1 Running 0 3m59s
kube-system kube-proxy-nsvmh 1/1 Running 0 2m37s
kube-system kube-scheduler-master1 1/1 Running 0 4m19s
kube-system kube-scheduler-master2 1/1 Running 0 115s
kube-system kube-scheduler-master3 1/1 Running 0 2m34s
kube-system nodelocaldns-nblsl 1/1 Running 0 2m12s
kube-system nodelocaldns-q78k4 1/1 Running 0 3m54s
kube-system nodelocaldns-q9244 1/1 Running 0 2m37s
ubuntu@master1:~$ kubectl get ep
NAME ENDPOINTS AGE
kubernetes 192.168.0.10:6443,192.168.0.11:6443,192.168.0.12:6443 5m10s
本文由博客一文多發平臺 OpenWrite 發布!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/388948.html
標籤:其他
上一篇:FP增長演算法
