kubernetes集群部署
常见的 k8s 部署方式包括:二进制包、kubeadm 工具、云服务提供商、或通过一些开源的工具搭建,例如:sealos、kuboard、Runcher、kubeSphere。
本文使用kubeadm的部署方式,部署k8s1.28版本
我本地安装资源规划如下:
IP地址 | 主机名称 | 角色 | 操作系统 | 主机配置参考 |
---|---|---|---|---|
192.168.3.86 vip192.168.3.199 | master1 | master (nginx+keepalived主) | rockylinux8.10(最小化安装) | 4核心CPU/4G内存/80G磁盘 |
192.168.3.87 | master2 | master (nginx+keepalived备) | rockylinux8.10(最小化安装) | 4核心CPU/4G内存/80G磁盘 |
192.168.3.88 | master3 | master | rockylinux8.10(最小化安装) | 4核心CPU/4G内存/80G磁盘 |
192.168.3.89 | worker1 | worker | rockylinux8.10(最小化安装) | 4核心CPU/4G内存/80G磁盘 |
这里为了节省机器资源worker节点只有一个,nginx和keepalived也安装在k8s的master1 ,master2节点上,最好单独两台机器部署nginx主备服务。
初始化集群环境
**注意:**初始化集群环境,以下步骤在所有主机都需相应操作
修改相应主机的主机名称和host文件解析
hostnamectl set-hostname master1 && bash
hostnamectl set-hostname master2 && bash
hostnamectl set-hostname master3 && bash
hostnamectl set-hostname worker1 && bash
cat <<EOF >> /etc/hosts
192.168.3.86 master1
192.168.3.87 master2
192.168.3.88 master3
192.168.3.89 worker1
EOF
配置相应主机的静态IP地址
vim /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=eui64
NAME=ens160
UUID=963e7e9e-d175-4067-9879-ae004288ec4d
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.3.86
PREFIX=24
DNS1=114.114.114.114
GATEWAY=192.168.3.2
安装常用软件包
yum install -y epel-release tree vim wget bash-completion lrzsz nfs-utils net-tools sysstat iotop unzip nc nmap telnet bc psmisc yum-utils ipvsadm git socat conntrack sshpass libseccomp device-mapper-persistent-data lvm2 gcc gcc-c++ make cmake libxml2-devel openssl-devel curl libaio-devel ncurses-devel autoconf automake zlib-devel epel-release telnet
关闭selinux和防火墙
setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
systemctl stop firewalld.service && systemctl disable firewalld.service
关闭swap缓存
swapoff -a && sed -ri 's/.*swap.*/#&/' /etc/fstab
配置免密登录
生成秘钥
ssh-keygen
拷贝秘钥到相应主机()
ssh-copy-id 192.168.3.86
安装时间同步chrony软件
yum install chrony -y
systemctl enable chronyd.service --now
systemctl restart chronyd.service
vim /etc/chrony.conf
#修改以下位置
#pool 2.rocky.pool.ntp.org iburst
pool ntp1.aliyun.com
修改内核参数
#加载内核模块
modprobe br_netfilter
modprobe ip_conntrack
modprobe iptable_filter
modprobe iptable_nat
modprobe overlay
#查看是否加载
lsmod | grep -e ip_vs -e nf_conntrack
nf_conntrack 176128 1 nf_nat
nf_defrag_ipv6 20480 1 nf_conntrack
nf_defrag_ipv4 16384 1 nf_conntrack
libcrc32c 16384 3 nf_conntrack,nf_nat,xfs
lsmod | grep ip
iptable_nat 16384 0
nf_nat 49152 1 iptable_nat
iptable_filter 16384 0
ip_tables 28672 2 iptable_filter,iptable_nat
nf_defrag_ipv6 20480 1 nf_conntrack
nf_defrag_ipv4 16384 1 nf_conntrack
#修改内核参数
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
#加载生效
sysctl --system
#持久化加载内核模块
cat > /etc/modules-load.d/modules.conf << EOF
br_netfilter
ip_conntrack
iptable_filter
iptable_nat
overlay
EOF
systemctl restart systemd-modules-load.service
#解释:
#对网桥上的IPv6数据包通过iptables处理 net.bridge.bridge-nf-call-ip6tables = 1
#对网桥上的IPv4数据包通过iptables处理 net.bridge.bridge-nf-call-iptables = 1
#开启IPv4路由转发,来实现集群中的容器与外部网络的通信 net.ipv4.ip_forward = 1
安装docker
yum install -y yum-utils
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#查看yum源中的docker版本
yum list docker-ce.x86_64 --showduplicates | sort -r
#安装指定版本
yum -y install docker-ce-26.1.1-1.el8.x86_64 --allowerasing
安装好docker后containerd.io作为docker依赖也会被安装,在安装k8s前就无需再安装containerd.io了
[root@master1 ~]# rpm -qa | grep containerd
containerd.io-1.6.32-3.1.el8.x86_64
启用Docker Cgroup控制组,用于限制进程的资源使用量,如CPU、内存。再配置镜像加速器,harbor地址,方便后期拉取镜像。
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"log-opts": {
"max-size": "5m",
"max-file":"3"
},
"exec-opts": ["native.cgroupdriver=systemd"],
"insecure-registries": ["192.168.137.35","harbor.cn"],
"registry-mirrors": [
"https://jockerhub.com",
"https://mirror.baidubce.com",
"https://dockerproxy.com",
"https://docker.laoex.link",
"https://docker.nju.edu.cn"
]
}
EOF
启动Docker服务并设置开机自启动
systemctl enable docker --now
安装k8s
配置软件仓库和安装所需包
因上文安装好了docker所以在安装k8s前就无需再安装containerd.io了
**注意:**所有主机均需要操作
添加阿里云kubernetes仓库
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck&