事先声明
按照下面的步骤,相信一定能成功,我已经部署了三次了,如果不行,👊我啊,😄
参考文献来源
统一的环境配置
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