基於 kubeadm 搭建高可用的kubernetes 1.18.2 (k8s)集群二 搭建高可用集群


詳細信息請參考本人的git倉庫 地址為 https://gitee.com/salmon_163/kubernetes-ha-kubeadm.git

1. 部署keepalived - apiserver高可用(任選兩個master節點)

1.1 安裝keepalived

# 在兩個主節點上安裝keepalived(一主一備)
$ yum install -y keepalived

1.2 創建keepalived配置文件

# 創建目錄
$ ssh <user>@<master-ip> "mkdir -p /etc/keepalived"
$ ssh <user>@<backup-ip> "mkdir -p /etc/keepalived"

# 分發配置文件
$ scp target/configs/keepalived-master.conf <user>@<master-ip>:/etc/keepalived/keepalived.conf
$ scp target/configs/keepalived-backup.conf <user>@<backup-ip>:/etc/keepalived/keepalived.conf

# 分發監測腳本
$ scp target/scripts/check-apiserver.sh <user>@<master-ip>:/etc/keepalived/
$ scp target/scripts/check-apiserver.sh <user>@<backup-ip>:/etc/keepalived/

1.3 啟動keepalived

# 分別在master和backup上啟動服務
$ systemctl enable keepalived && service keepalived start

# 檢查狀態
$ systemctl status keepalived

# 查看日志
$ journalctl -f -u keepalived

# 查看虛擬ip
$ ip a

2. 部署第一個主節點

# 准備配置文件
$ scp target/configs/kubeadm-config.yaml <user>@<node-ip>:~
# ssh到第一個主節點,執行kubeadm初始化系統(注意保存最后打印的加入集群的命令)
# $ kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs
$ kubeadm init --config=kubeadm-config.yaml --upload-certs
# copy kubectl配置(上一步會有提示)
$ mkdir -p ~/.kube
$ cp -i /etc/kubernetes/admin.conf ~/.kube/config

# 測試一下kubectl
$ kubectl get pods --all-namespaces

# **備份init打印的join命令**

3. 部署網絡插件 - calico

我們使用calico官方的安裝方式來部署,請參閱下面的地址

Calico配置文件說明

# 創建目錄(在配置了kubectl的節點上執行)
$ mkdir -p /etc/kubernetes/addons

# 上傳calico配置到配置好kubectl的節點(一個節點即可)
$ scp target/addons/calico* <user>@<node-ip>:/etc/kubernetes/addons/

# addons 有兩個配置文件 具體的內容請參閱 上面的那個 Calico配置文件說明 鏈接地址
# less-50-calico.yaml 節點數量小於50使用的配置文件
# more-50-calico.yaml 節點數量大於50台使用的配置文件

# 官方提供的地址
# 當節點數量大於 50台的時候使用
# curl https://docs.projectcalico.org/manifests/calico-typha.yaml -o calico.yaml
# 當節點數量小於50台使用
# curl https://docs.projectcalico.org/manifests/calico.yaml -O

# 部署calico
# 修改文件名稱,根據具體的情況自行修改
$ mv /etc/kubernetes/addons/less-50-calico.yaml calico.yaml
$ kubectl apply -f /etc/kubernetes/addons/calico.yaml

# 查看狀態
$ kubectl get pods -n kube-system

4. 加入其它master節點

# 使用之前保存的join命令加入集群
$ kubeadm join ...
# 例如:
$ kubeadm join 172.16.249.133:6443 --token 8mr8km.w3ucsw6gbq50ffpw \
    --discovery-token-ca-cert-hash sha256:b7eb3ab4c45577386a6801e166aa7d844a246b5afcaf7890126e1a95bfad3d30 \
    --control-plane --certificate-key d5c80e1843f6b0f5eddb0c88d215390dbe2c0ef6d4f6b63463b3c2ef6dfd726e

# 耐心等待一會,並觀察日志
$ journalctl -f

# 查看集群狀態
# 1.查看節點
$ kubectl get nodes
# 2.查看pods
$ kubectl get pods --all-namespaces

# 遇到問題
# certificate-key 默認2小時的有效期,如果過期按照提示重新生成
error execution phase control-plane-prepare/download-certs: error downloading certs: error downloading the secret: Secret "kubeadm-certs" was not found in the "kube-system" Namespace. This Secret might have expired. Please, run `kubeadm init phase upload-certs --upload-certs` on a control plane to generate a new one
# 使用命令重新生成 certificate-key 
# 用新證書替換--certificate-key后面的內容
# 如上面的命令中的:d5c80e1843f6b0f5eddb0c88d215390dbe2c0ef6d4f6b63463b3c2ef6dfd726e
$ kubeadm init phase upload-certs --upload-certs
[upload-certs] Using certificate key:
a542b8308394773278da70ab0d11914f6e048fcd73524ecfef56b3633a39d3f1

5. 加入worker節點

# 使用之前保存的join命令加入集群
$ kubeadm join ...
# 例如
$ kubeadm join 172.16.249.133:6443 --token 8mr8km.w3ucsw6gbq50ffpw \
    --discovery-token-ca-cert-hash sha256:b7eb3ab4c45577386a6801e166aa7d844a246b5afcaf7890126e1a95bfad3d30

# 耐心等待一會,並觀察日志
$ journalctl -f

# 查看節點
$ kubectl get nodes
# 重新添加節點
# 默認情況下,kubeadm init產生的token的有效期是24個小時,在一天之后才kubeadm join的,用下面的命令來重新產生token
$ kubeadm token create --certificate-key xxxx --print-join-command
例如
kubeadm token create --certificate-key a542b8308394773278da70ab0d11914f6e048fcd73524ecfef56b3633a39d3f1 --print-join-command
# 直接使用 kubeadm token create --print-join-command 也可以


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM