一、前置知识点
1.1 生产环境可部署Kubernetes集群的两种方式
目前生产部署Kubernetes集群主要有两种方式:
1)kubeadm
Kubeadm是一个K8s部署工具,提供 kubeadm init 和 kubeadm join,用于快速部署Kubernetes集群(这里采用kubeadm搭建集群)。
2)二进制包
从github下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。
kubeadm工具功能:
-
kubeadm init:初始化一个Master节点
-
kubeadm join:将工作节点加入集群
-
kubeadm upgrade:升级K8s版本
-
kubeadm token:管理 kubeadm join 使用的令牌
-
kubeadm reset:清空 kubeadm init 或者 kubeadm join 对主机所做的任何更改
-
kubeadm version:打印 kubeadm 版本
-
kubeadm alpha:预览可用的新功能
1.2 准备环境
1)服务器要求:
-
建议最小硬件配置:2核CPU、4G内存、30G硬盘
-
服务器最好可以访问外网,会有从网上拉取镜像需求,如果服务器不能上网,需要提前下载对应镜像并导入节点。
2)软件环境:
软件 |
版本 |
操作系统 |
CentOS7.9_x64 (mini) |
Docker |
21-ce |
Kubernetes |
1.26 |
3)服务器规划:
角色 |
IP |
主机名 |
k8s-master1 |
192.168.1.81 |
docker,etcd,nginx,keepalived |
k8s-master2 |
192.168.1.82 |
docker,etcd,nginx,keepalived |
k8s-node1 |
192.168.1.83 |
docker,etcd |
负载均衡器对外IP |
192.168.1.88 (VIP) |
4)架构图:
二、环境准备
2.1 操作系统初始化配置(所有节点)
1)设置网卡命名(规范化)
cat /etc/default/grub
...
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet net.ifnames=0 biosdevname=0"
...
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot //重启生效
2)配置IP地址(以1.71为例)
[root@k8s-master1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
IPADDR=192.168.1.81
PREFIX=24
GATEWAY=192.168.1.254
DNS1=223.5.5.5
...
3)关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 查看防火墙策略
iptables -vnL
4)关闭 selinux
setenforce 0 # 临时配置
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久配置
5)关闭 swap
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
6)根据规划设置主机名
hostnamectl set-hostname <hostname>
7)添加 hosts 解析
cat >> /etc/hosts << EOF
192.168.1.81 k8s-master1 k8s-master1-1-81
192.168.1.82 k8s-master2 k8s-master2-1-82
192.168.1.83 k8s-node1 k8s-node1-1-83
EOF
8)将桥接的IPv4流量传递到 iptables 的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system # 生效
9)配置YUM源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
10)时间同步
yum install ntpdate -y
ntpdate time.windows.com
(echo "*/5 * * * * /usr/sbin/ntpdate -u time.windows.com") | crontab
crontab -l
*/5 * * * * /usr/sbin/ntpdate -u time.windows.com
11)配置内核模块
cat >> /etc/modules-load.d/ipvs.conf <<EOF
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
EOF
systemctl restart systemd-modules-load.service
lsmod | grep -e ip_vs -e