構(gòu)建Kubernetes高可用集群

1. 統(tǒng)一環(huán)境配置(構(gòu)建Kubernetes基礎(chǔ)系統(tǒng)鏡像防止后面逐臺(tái)安裝)

此處為加固印象,本人重新構(gòu)建,技術(shù)嘛,多動(dòng)手

  • 節(jié)點(diǎn)配置信息規(guī)劃
節(jié)點(diǎn) IP 系統(tǒng)配置信息 配置 磁盤(pán)
kubernetes-master-01 192.168.141.150 Master Ubuntu Server 18.04 2核2G 20G
kubernetes-master-02 192.168.141.151 Master Ubuntu Server 18.04 2核2G 20G
kubernetes-master-03 192.168.141.152 Master Ubuntu Server 18.04 2核2G 20G
kubernetes-node-01 192.168.141.160 Node Ubuntu Server 18.04 2核4G 20G
kubernetes-node-02 192.168.141.161 Node Ubuntu Server 18.04 2核4G 20G
kubernetes-node-03 192.168.141.162 Node Ubuntu Server 18.04 2核4G 20G

①. 操作系統(tǒng)的配置項(xiàng)

  • 關(guān)閉交換空間
    swapoff -a
  • 避免開(kāi)機(jī)啟動(dòng)交換空間
    vi /etc/fstab
    注釋 swap 開(kāi)頭的行
  • 關(guān)閉防火墻
    ufw disable
  • 配置 DNS
    vi /etc/systemd/resolved.conf
    取消 DNS 行注釋,并增加 DNS 配置如:114.114.114.114,修改后重啟下計(jì)算機(jī)
    reboot

②. 安裝 Docker
見(jiàn)之前博客:構(gòu)建kubernetes基礎(chǔ)系統(tǒng)鏡像-安裝Docker

③. 配置 Docker 加速器
見(jiàn)之前博客:構(gòu)建kubernetes基礎(chǔ)系統(tǒng)鏡像-安裝Docker(國(guó)內(nèi)鏡像加速器可能會(huì)很卡,請(qǐng)?zhí)鎿Q成你自己阿里云鏡像加速器)

④. 安裝 kubeadm,kubelet,kubectl
構(gòu)建kubernetes基礎(chǔ)系統(tǒng)鏡像-基于kubeadm安裝kubernetes環(huán)境

⑤. 同步時(shí)間

  • 設(shè)置時(shí)區(qū)
    dpkg-reconfigure tzdata
    選擇 Asia(亞洲)
    選擇 Shanghai(上海)
  • 時(shí)間同步
    • 安裝 ntpdate
      apt-get install ntpdate
    • 設(shè)置系統(tǒng)時(shí)間與網(wǎng)絡(luò)時(shí)間同步(cn.pool.ntp.org 位于中國(guó)的公共 NTP 服務(wù)器)
      ntpdate cn.pool.ntp.org
    • 將系統(tǒng)時(shí)間寫(xiě)入硬件時(shí)間
      hwclock –systohc
  • 確認(rèn)時(shí)間
    date
    自行對(duì)照與系統(tǒng)時(shí)間是否一致

⑥. 配置 IPVS

  • 安裝系統(tǒng)工具
    apt-get install -y ipset ipvsadm
  • 配置并加載 IPVS 模塊
    mkdir -p /etc/sysconfig/modules/
    vim /etc/sysconfig/modules/ipvs.modules
  • 輸入如下內(nèi)容
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
  • 4.執(zhí)行腳本,注意:如果系統(tǒng)重啟則需要重新運(yùn)行該腳本
    chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
    設(shè)置腳本權(quán)限,執(zhí)行腳本,查看信息
    執(zhí)行腳本輸出如下:
    image.png

⑦. 配置內(nèi)核參數(shù)

  • 配置參數(shù)
    vim /etc/sysctl.d/k8s.conf
  • 輸入如下內(nèi)容
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
  • 應(yīng)用參數(shù)
    sysctl –system
  • 4.應(yīng)用參數(shù)輸出如下(找到 Applying /etc/sysctl.d/k8s.conf 開(kāi)頭的日志)


    image.png

⑧. 修改 cloud.cfg
vim /etc/cloud/cloud.cfg
該配置默認(rèn)為 false,修改為 true 即可

preserve_hostname: true

以上配置完成后作為Kubernetes基礎(chǔ)系統(tǒng)鏡像,以此為基礎(chǔ)復(fù)制其他集群


2. 單獨(dú)節(jié)點(diǎn)配置

為 Master 和 Node 節(jié)點(diǎn)單獨(dú)配置對(duì)應(yīng)的 IP 和 主機(jī)名

①. 配置 IP

  • 編輯配置文件
    vim /etc/netplan/50-cloud-init.yaml
    image.png
  • 配置生效
    netplan apply

②. 配置主機(jī)名

  • 修改主機(jī)名
    hostnamectl set-hostname kubernetes-master-01
  • 配置 hosts(命令)
cat >> /etc/hosts << EOF
> 192.168.2.150 kubernetes-master-01
> EOF

3. Master節(jié)點(diǎn)安裝 HAProxy + Keepalived

①. 創(chuàng)建 HAProxy 啟動(dòng)腳本(kubernetes-master-01 執(zhí)行)
mkdir -p /usr/local/kubernetes/lb
vi /usr/local/kubernetes/lb/start-haproxy.sh

  • 輸入內(nèi)容如下
#!/bin/bash
# 修改為你自己的 Master 地址
MasterIP1=192.168.141.150
MasterIP2=192.168.141.151
MasterIP3=192.168.141.152
# 這是 kube-apiserver 默認(rèn)端口,不用修改
MasterPort=6443

# 容器將 HAProxy 的 6444 端口暴露出去
docker run -d --restart=always --name HAProxy-K8S -p 6444:6444 \
        -e MasterIP1=$MasterIP1 \
        -e MasterIP2=$MasterIP2 \
        -e MasterIP3=$MasterIP3 \
        -e MasterPort=$MasterPort \
        wise2c/haproxy-k8s
  • 設(shè)置權(quán)限
    chmod +x start-haproxy.sh

②. 創(chuàng)建 Keepalived 啟動(dòng)腳本(kubernetes-master-01 執(zhí)行)
mkdir -p /usr/local/kubernetes/lb
vi /usr/local/kubernetes/lb/start-keepalived.sh

  • 輸入內(nèi)容如下
#!/bin/bash
# 修改為你自己的虛擬 IP 地址
VIRTUAL_IP=192.168.141.200
# 虛擬網(wǎng)卡設(shè)備名
INTERFACE=ens33
# 虛擬網(wǎng)卡的子網(wǎng)掩碼
NETMASK_BIT=24
# HAProxy 暴露端口,內(nèi)部指向 kube-apiserver 的 6443 端口
CHECK_PORT=6444
# 路由標(biāo)識(shí)符
RID=10
# 虛擬路由標(biāo)識(shí)符
VRID=160
# IPV4 多播地址,默認(rèn) 224.0.0.18
MCAST_GROUP=224.0.0.18

docker run -itd --restart=always --name=Keepalived-K8S \
        --net=host --cap-add=NET_ADMIN \
        -e VIRTUAL_IP=$VIRTUAL_IP \
        -e INTERFACE=$INTERFACE \
        -e CHECK_PORT=$CHECK_PORT \
        -e RID=$RID \
        -e VRID=$VRID \
        -e NETMASK_BIT=$NETMASK_BIT \
        -e MCAST_GROUP=$MCAST_GROUP \
        wise2c/keepalived-k8s

VIRTUAL_IP:可為自定義網(wǎng)段的任意ip,未被占用即可,此處ip指代下文中的VIP

  • 設(shè)置權(quán)限
    chmod +x start-keepalived.sh

③. 復(fù)制腳本到其它 Master 地址

  • 分別在 kubernetes-master-02 和 kubernetes-master-03 執(zhí)行創(chuàng)建工作目錄命令
    mkdir -p /usr/local/kubernetes/lb
  • 將 kubernetes-master-01 中的腳本拷貝至其它 Master
    scp start-haproxy.sh start-keepalived.sh 192.168.2.151:/usr/local/kubernetes/lb
    scp start-haproxy.sh start-keepalived.sh 192.168.2.152:/usr/local/kubernetes/lb
    image.png

    如上輸入yes,并輸入對(duì)應(yīng)服務(wù)器的密碼
  • 分別在 3 個(gè) Master 中啟動(dòng)容器(執(zhí)行腳本)
    sh /usr/local/kubernetes/lb/start-haproxy.sh && sh /usr/local/kubernetes/lb/start-keepalived.sh
  • 查看容器運(yùn)行情況和網(wǎng)卡綁定的虛擬 IP
    image.png

    image.png

    特別注意:Keepalived 會(huì)對(duì) HAProxy 監(jiān)聽(tīng)的 6444 端口進(jìn)行檢測(cè),如果檢測(cè)失敗即認(rèn)定本機(jī) HAProxy 進(jìn)程異常,會(huì)將 VIP 漂移到其他節(jié)點(diǎn),所以無(wú)論本機(jī) Keepalived 容器異常或 HAProxy 容器異常都會(huì)導(dǎo)致 VIP 漂移到其他節(jié)點(diǎn)

4. 部署 Kubernetes 集群

初始化 Master
①. 創(chuàng)建工作目錄
mkdir -p /usr/local/kubernetes/cluster
導(dǎo)出配置文件到工作目錄
kubeadm config print init-defaults --kubeconfig ClusterConfiguration > kubeadm.yml
②. 修改配置文件,如圖:

image.png

在1.19版本之前,kubeadm部署方式啟用ipvs模式時(shí),初始化配置文件需要添加以下內(nèi)容:
image.png

之后如下:
image.png

見(jiàn)配置項(xiàng):https://kubernetes.io/docs/reference/config-api/kube-proxy-config.v1alpha1/
③. kubeadm 初始化
kubeadm init --config=kubeadm.yml --upload-certs | tee kubeadm-init.log
image.png

配置 kubectl
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
驗(yàn)證是否成功
kubectl get node
image.png

④. 安裝網(wǎng)絡(luò)插件
參考官方文檔安裝:https://docs.projectcalico.org/getting-started/kubernetes/quickstart
下載文件,方便更改
wget https://docs.projectcalico.org/v3.19/manifests/calico.yaml
更改默認(rèn)的網(wǎng)段,前面有說(shuō)明
vim calico.yaml
將 192.168.0.0/16 修改為 10.244.0.0/16
命令快速查找
顯示行號(hào)::set number
查找字符:/要查找的字符,輸入小寫(xiě) n 下一個(gè)匹配項(xiàng),輸入大寫(xiě) N 上一個(gè)匹配項(xiàng)
安裝(Master 節(jié)點(diǎn)操作)
kubectl apply -f calico.yaml
image.png

確認(rèn)安裝是否成功
watch kubectl get pods --all-namespaces
需要等待所有狀態(tài)為 Running,注意時(shí)間可能較久,3 - 5 分鐘的樣子
⑤. 加入master節(jié)點(diǎn)

  • 查看kubeadm-init.log文件,獲取join操作命令
    cat /usr/local/kubernetes/cluster/kubeadm-init.log
  • kubernetes-master-02和kubernetes-master-03分別執(zhí)行


    image.png

    ⑥. 6.加入node節(jié)點(diǎn)
    kubernetes-node-01,kubernetes-node-02,kubernetes-node-03分別執(zhí)行


    image.png

根據(jù)次版本核配置,本人已搭建集群與高可用集群環(huán)境,如遇到相關(guān)問(wèn)題,未在文章中說(shuō)明,可聯(lián)系本人
謝謝大家關(guān)注,點(diǎn)個(gè)贊唄~
如需轉(zhuǎn)載請(qǐng)標(biāo)明出處,謝謝~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容