构建Kubernetes高可用集群
1. 统一环境配置(构建Kubernetes基础系统镜像防止后面逐台安装)
此处为加固印象,本人重新构建,技术嘛,多动手
- 节点配置信息规划
节点 | IP | 系统配置信息 | 配置 | 磁盘 |
---|---|---|---|---|
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 |
①. 操作系统的配置项
- 关闭交换空间
swapoff -a
- 避免开机启动交换空间
vi /etc/fstab
注释 swap 开头的行- 关闭防火墙
ufw disable
- 配置 DNS
vi /etc/systemd/resolved.conf
取消 DNS 行注释,并增加 DNS 配置如:114.114.114.114,修改后重启下计算机
reboot
②. 安装 Docker
见之前博客:构建kubernetes基础系统镜像-安装Docker
③. 配置 Docker 加速器
见之前博客:构建kubernetes基础系统镜像-安装Docker(国内镜像加速器可能会很卡,请替换成你自己阿里云镜像加速器)
④. 安装 kubeadm,kubelet,kubectl
构建kubernetes基础系统镜像-基于kubeadm安装kubernetes环境
⑤. 同步时间
- 设置时区
dpkg-reconfigure tzdata
选择 Asia(亚洲)
选择 Shanghai(上海)- 时间同步
- 安装 ntpdate
apt-get install ntpdate
- 设置系统时间与网络时间同步(cn.pool.ntp.org 位于中国的公共 NTP 服务器)
ntpdate cn.pool.ntp.org
- 将系统时间写入硬件时间
hwclock –systohc
- 确认时间
date
自行对照与系统时间是否一致
⑥. 配置 IPVS
- 安装系统工具
apt-get 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
- 4.执行脚本,注意:如果系统重启则需要重新运行该脚本
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
设置脚本权限,执行脚本,查看信息
执行脚本输出如下:
image.png
⑦. 配置内核参数
- 配置参数
vim /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
- 应用参数
sysctl –system
4.应用参数输出如下(找到 Applying /etc/sysctl.d/k8s.conf 开头的日志)
image.png
⑧. 修改 cloud.cfg
vim /etc/cloud/cloud.cfg
该配置默认为 false,修改为 true 即可preserve_hostname: true
以上配置完成后作为Kubernetes基础系统镜像,以此为基础复制其他集群
2. 单独节点配置
为 Master 和 Node 节点单独配置对应的 IP 和 主机名
①. 配置 IP
- 编辑配置文件
vim /etc/netplan/50-cloud-init.yaml
image.png- 配置生效
netplan apply
②. 配置主机名
- 修改主机名
hostnamectl set-hostname kubernetes-master-01
- 配置 hosts(命令)
cat >> /etc/hosts << EOF > 192.168.2.150 kubernetes-master-01 > EOF
3. Master节点安装 HAProxy + Keepalived
①. 创建 HAProxy 启动脚本(kubernetes-master-01 执行)
mkdir -p /usr/local/kubernetes/lb
vi /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
- 设置权限
chmod +x start-haproxy.sh
②. 创建 Keepalived 启动脚本(kubernetes-master-01 执行)
mkdir -p /usr/local/kubernetes/lb
vi /usr/local/kubernetes/lb/start-keepalived.sh
- 输入内容如下
#!/bin/bash # 修改为你自己的虚拟 IP 地址 VIRTUAL_IP=192.168.141.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
VIRTUAL_IP:可为自定义网段的任意ip,未被占用即可,此处ip指代下文中的VIP
- 设置权限
chmod +x start-keepalived.sh
③. 复制脚本到其它 Master 地址
- 分别在 kubernetes-master-02 和 kubernetes-master-03 执行创建工作目录命令
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,并输入对应服务器的密码- 分别在 3 个 Master 中启动容器(执行脚本)
sh /usr/local/kubernetes/lb/start-haproxy.sh && sh /usr/local/kubernetes/lb/start-keepalived.sh
- 查看容器运行情况和网卡绑定的虚拟 IP
image.png
image.png
特别注意:Keepalived 会对 HAProxy 监听的 6444 端口进行检测,如果检测失败即认定本机 HAProxy 进程异常,会将 VIP 漂移到其他节点,所以无论本机 Keepalived 容器异常或 HAProxy 容器异常都会导致 VIP 漂移到其他节点
4. 部署 Kubernetes 集群
初始化 Master
image.png
①. 创建工作目录
mkdir -p /usr/local/kubernetes/cluster
导出配置文件到工作目录
kubeadm config print init-defaults --kubeconfig ClusterConfiguration > kubeadm.yml
②. 修改配置文件,如图:
在1.19版本之前,kubeadm部署方式启用ipvs模式时,初始化配置文件需要添加以下内容:
image.png
之后如下:
image.png
见配置项: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
验证是否成功
kubectl get node
image.png
④. 安装网络插件
参考官方文档安装:https://docs.projectcalico.org/getting-started/kubernetes/quickstart
下载文件,方便更改
wget https://docs.projectcalico.org/v3.19/manifests/calico.yaml
更改默认的网段,前面有说明
vim calico.yaml
将 192.168.0.0/16 修改为 10.244.0.0/16
命令快速查找
显示行号::set number
查找字符:/要查找的字符,输入小写 n 下一个匹配项,输入大写 N 上一个匹配项
安装(Master 节点操作)
kubectl apply -f calico.yaml
image.png
确认安装是否成功
watch kubectl get pods --all-namespaces
需要等待所有状态为 Running,注意时间可能较久,3 - 5 分钟的样子
⑤. 加入master节点
- 查看kubeadm-init.log文件,获取join操作命令
cat /usr/local/kubernetes/cluster/kubeadm-init.log
kubernetes-master-02和kubernetes-master-03分别执行
image.png
⑥. 6.加入node节点
kubernetes-node-01,kubernetes-node-02,kubernetes-node-03分别执行
image.png
根据次版本核配置,本人已搭建集群与高可用集群环境,如遇到相关问题,未在文章中说明,可联系本人
谢谢大家关注,点个赞呗~
如需转载请标明出处,谢谢~~