事先聲明
按照下面的步驟,相信一定能成功,我已經部署了三次了,如果不行,👊我啊,😄
參考文獻來源
統一的環境配置
kubernetes 版本 v1.16.0
主機名 | IP | 角色 | 系統 | CPU/內存 | 磁盤 |
---|---|---|---|---|---|
kubernetes-master-150 | 192.168.10.150 | master | centos7 | 2核2G | 20G |
kubernetes-master-151 | 192.168.10.151 | master | centos7 | 2核2G | 20G |
kubernetes-master-152 | 192.168.10.152 | master | centos7 | 2核2G | 20G |
kubernetes-node-160 | 192.168.10.160 | node | centos7 | 2核2G | 20G |
kubernetes-node-161 | 192.168.10.161 | node | centos7 | 2核2G | 20G |
kubernetes-node-162 | 192.168.10.162 | node | centos7 | 2核2G | 20G |
kubernetes VIP | 192.168.10.200 | ||||
calico | 10.244.0.0/16 |
1. master和node集羣都需要的前置條件
1.1 關閉防火牆
# 關閉防火牆
systemctl disable firewalld
systemctl stop firewalld
1.2 關閉selinux
#臨時禁用selinux
setenforce 0
#永久關閉 修改/etc/sysconfig/selinux文件設置
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
1.3 關閉交換區
# 禁用交換分區
swapoff -a
# 永久禁用,打開/etc/fstab註釋掉swap那一行。
sed -i 's/.*swap.*/#&/' /etc/fstab
1.4 修改內核參數
# 修改內核參數
cat <<EOF > /etc/sysctl.d/k8s.conf
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
EOF
sysctl --system
來應用上面的參數
1.5 同步時間
# 安裝 ntpdate
yum install -y ntpdate
# 設置系統時間與網絡時間同步(cn.pool.ntp.org 位於中國的公共 NTP 服務器)
ntpdate cn.pool.ntp.org
# 將系統時間寫入硬件時間
hwclock --systohc
# 確認一下時間
# 輸出如下(自行對照與系統時間是否一致)
2020年 01月 21日 星期二 14:51:31 CST
1.6安裝IP虛擬服務器(IPVS)
yum install -y ipset ipvsadm
# 配置並加載 IPVS 模塊
mkdir -p /etc/sysconfig/modules/
vim /etc/sysconfig/modules/ipvs.modules
# 輸入如下內容
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
# 執行腳本,注意:如果重啓則需要重新運行該腳本
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
1.7 修改虛擬主機名字
# 修改主機名字
hostnamectl set-hostname kubernetes-master-150
# 查看主機名字
hostname
# 查看系統的版本以及主機名字
hostnamectl
2 安裝HAProxy和keepalived來實現高可用
下面的步驟在
kubernetes-master-150
上執行
2.1 創建HAProxy啓動腳本
mkdir -p /usr/local/kubernetes/lb
vim /usr/local/kubernetes/lb/start-haproxy.sh
# 輸入內容如下
#!/bin/bash
# 修改爲你自己的 Master 地址
MasterIP1=192.168.141.150
MasterIP2=192.168.141.151
MasterIP3=192.168.141.152
# 這是 kube-apiserver 默認端口,不用修改
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
# 設置權限
cd /usr/local/kubernetes/lb
chmod +x start-haproxy.sh
2.2 創建 Keepalived 啓動腳本
下面的步驟在
kubernetes-master-150
上執行
mkdir -p /usr/local/kubernetes/lb
vim /usr/local/kubernetes/lb/start-keepalived.sh
# 輸入內容如下
#!/bin/bash
# 修改爲你自己的虛擬 IP 地址(只要在同一網段就可以了)
VIRTUAL_IP=192.168.10.200
# 虛擬網卡設備名
INTERFACE=ens33
# 虛擬網卡的子網掩碼
NETMASK_BIT=24
# HAProxy 暴露端口,內部指向 kube-apiserver 的 6443 端口
CHECK_PORT=6444
# 路由標識符
RID=10
# 虛擬路由標識符
VRID=160
# IPV4 多播地址,默認 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
# 設置權限
cd /usr/local/kubernetes/lb
chmod +x start-keepalived.sh
2.3 複製腳本到其他master
在master151和master152上執行
mkdir -p /usr/local/kubernetes/lb
在master150上執行
scp start-haproxy.sh start-keepalived.sh 192.168.10.151:/usr/local/kubernetes/lb
scp start-haproxy.sh start-keepalived.sh 192.168.10.152:/usr/local/kubernetes/lb
在所有master內運行
sh /usr/local/kubernetes/lb/start-haproxy.sh && sh /usr/local/kubernetes/lb/start-keepalived.sh
2.4 檢查是否運行成功
2.4.1 檢查容器
docker ps
# 輸出如下
7da2c82c9628 wise2c/keepalived-k8s "/usr/bin/keepalived…" 4 hours ago Up 2 hours Keepalived-K8S
6ce4aadb3f3d wise2c/haproxy-k8s "/docker-entrypoint.…" 4 hours ago Up 2 hours 0.0.0.0:6444->6444/tcp HAProxy-K8S
2.4.2 檢查網卡綁定的虛擬IP
ip a | grep ens33
# 輸出如下
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.10.150/24 brd 192.168.10.255 scope global noprefixroute ens33
inet 192.168.10.200/24 scope global secondary ens33