集群节点初始化:
| 角色 | IP | 系统版本 |
| prod-k8s-master | 192.168.xx.xx | Rocky Linux release 9.4 |
| prod-k8s-node01 | 192.168.xx.xx | Rocky Linux release 9.4 |
| prod-k8s-node02 | 192.168.xx.xx | Rocky Linux release 9.4 |
集群节点配置(所有主机操作)
1:所有节点修改主机名(每个节点主机名不一样,注意识别清除)
hostnamectl set-hostname prod-k8s-master
hostnamectl set-hostname prod-k8s-node01
hostnamectl set-hostname prod-k8s-node02
2:配置本地解析
vim /etc/hosts
192.168.xx.xx prod-k8s-master1
192.168.xx.xx prod-k8s-node01
192.168.xx.xx prod-k8s-node02
3:关闭本地防火墙
systemctl disable --now firewalld
4:关闭SElinux
setenforce 0 && sed -ri "s/^SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
5:关闭swap分区
swapoff -a && sysctl -w vm.swappiness=0 && sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab
6:更改本地安装源
mkdir /etc/yum.repos.d/repo.bak
cp /etc/yum.repos.d/rocky* /etc/yum.repos.d/repo.bak/
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
-i.bak \
/etc/yum.repos.d/rocky-*.repo
yum makecache
7:安装epel源
dnf install -y epel-release
sed -e 's!^metalink=!#metalink=!g' \
-e 's!^#baseurl=!baseurl=!g' \
-e 's!https\?://download\.fedoraproject\.org/pub/epel!https://mirrors.tuna.tsinghua.edu.cn/epel!g' \
-e 's!https\?://download\.example/pub/epel!https://mirrors.tuna.tsinghua.edu.cn/epel!g' \
-i /etc/yum.repos.d/epel{,-testing}.repo
8:下载内核离线安装包(所有节点)
dnf install -y wget vim git
mkdir kernel-rpm && cd kernel-rpm/
wget https://mirrors.coreix.net/elrepo-archive-archive/kernel/el9/x86_64/RPMS/kernel-lt-6.1.161-1.el9.elrepo.x86_64.rpm \
wget https://mirrors.coreix.net/elrepo-archive-archive/kernel/el9/x86_64/RPMS/kernel-lt-devel-6.1.161-1.el9.elrepo.x86_64.rpm \
wget https://mirrors.coreix.net/elrepo-archive-archive/kernel/el9/x86_64/RPMS/kernel-lt-tools-6.1.161-1.el9.elrepo.x86_64.rpm \
wget https://mirrors.coreix.net/elrepo-archive-archive/kernel/el9/x86_64/RPMS/kernel-lt-core-6.1.161-1.el9.elrepo.x86_64.rpm \
wget https://mirrors.coreix.net/elrepo-archive-archive/kernel/el9/x86_64/RPMS/kernel-lt-tools-libs-6.1.161-1.el9.elrepo.x86_64.rpm \
wget https://mirrors.coreix.net/elrepo-archive-archive/kernel/el9/x86_64/RPMS/kernel-lt-modules-6.1.161-1.el9.elrepo.x86_64.rpm
yum -y localinstall kernel-lt-*
9: 设置 GRUB 启动菜单中第 0 项(第一个)内核为系统默认启动项
grub2-set-default 0
10: 重新生成 GRUB 启动配置文件,并将配置输出到/etc/grub2.cfg
grub2-mkconfig -o /etc/grub2.cfg
11: 给默认内核添加启动参数,核心作用是「启用 Linux 用户命名空间功能」
grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
12: 输出当前系统设置的默认启动内核的完整路径
grubby --default-kernel
集群节点实现时间同步(所有节点)
1. 所有节点同步时间及时区:
dnf install -y chrony
vim /etc/chrony.conf
添加内容如下:
pool ntp1.aliyun.com iburst
pool ntp2.aliyun.com iburst
pool cn.pool.ntp.org iburst
server ntp4.aliyun.com iburst
2. 启动时间同步工具:
systemctl enable --now chronyd
3. 立刻同步时间及同步状态 :
chronyc makestep
chronyc tracking
chronyc sources
集群节点同步时区:
1. 校准时间修改上海时区并且定时同步时间:
timedatectl set-timezone Asia/Shanghai \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
echo 'ASia/Shanghai' > /etc/tiomezone
2. 查看时区
timedatectl
3. 默认时间格式为 12 小时制,调整为 24 小时制:
date
localectl set-locale LC_TIME=C.UTF-8
localectl
验证 : date
修改过后断开重连终端
集群节点内核参数调优
1:加载k8s内核参数
cat >> /etc/sysctl.d/k8s.conf << EOF
#内核参数调整
vm.swappiness=0
#配置iptables参数,使得流经网桥的流量也经过iptables/netfilter防火墙
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#启用IP 转发功能
net.ipv4.ip_forward = 1
#允许文件系统分离挂载
fs.may_detach_mounts = 1
#减少交换分区的使用倾向。
vm.swappiness = 0
#允许内存超配
vm.overcommit_memory=1
#在内存不足时不触发系统崩溃
vm.panic_on_oom=0
#设置进程的最大内存映射区域数量
vm.max_map_count=655360
#增加 inotify 监视的最大用户手表数量
fs.inotify.max_user_watches=89100
#增加文件描述符的最大数量
fs.file-max=52706963
#和打开文件的最大数量
fs.nr_open=52706963
#设置网络连接跟踪的最大数量
net.netfilter.nf_conntrack_max=2310720
#TCP 连接在空闲状态下保持存活的时间(秒),超过这个时间后开始发送保活探测包。
net.ipv4.tcp_keepalive_time = 600
#发送保活探测包的次数,如果都没有响应则关闭连接。
net.ipv4.tcp_keepalive_probes = 3
#发送保活探测包的时间间隔(秒)
net.ipv4.tcp_keepalive_intvl = 15
#设置系统中处于 TIME_WAIT 状态的最大连接数量。
net.ipv4.tcp_max_tw_buckets = 36000
#允许将处于 TIME_WAIT 状态的套接字重新用于新的连接。
net.ipv4.tcp_tw_reuse = 1
#系统所能处理的孤儿套接字(没有父进程的套接字)的最大数量。
net.ipv4.tcp_max_orphans = 327680
#孤儿套接字的重试次数。
net.ipv4.tcp_orphan_retries = 3
#启用 SYN Cookies 功能,防范 SYN 洪水攻击。
net.ipv4.tcp_syncookies = 1
#SYN 队列(未完成连接队列)的最大长度。
net.ipv4.tcp_max_syn_backlog = 16384
#最大的 IP 连接跟踪数量。
net.ipv4.ip_conntrack_max = 65536
#禁用 TCP 时间戳选项。
net.ipv4.tcp_timestamps = 0
#套接字监听队列的最大长度。
net.core.somaxconn = 16384
EOF
2:删除注释行
sed -i '/^#/d' /etc/sysctl.d/k8s.conf
3:加载网桥过滤模块
modprobe overlay && modprobe br_netfilter
cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
4:加载配置
sysctl --system 或 sysctl -p /etc/sysctl.d/k8s.conf
5:测试
sysctl -a
lsmod | grep br_netfilter
集群节点启动ipvs功能
1:安装工具
dnf install ipvsadm ipset sysstat conntrack libseccomp -y
2:启用ipvs相关功能模块
cat <<EOF | sudo tee /etc/modules-load.d/ipvs.conf
overlay
ip_vs
ip_vs_lc
ip_vs_wlc
ip_vs_rr
ip_vs_wrr
ip_vs_lblc
ip_vs_lblcr
ip_vs_dh
ip_vs_sh
ip_vs_fo
ip_vs_nq
ip_vs_sed
ip_vs_ftp
ip_vs_sh
nf_conntrack
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
EOF
3:加载模块
modprobe overlay
modprobe ip_vs && modprobe ip_vs_rr && modprobe ip_vs_wrr && modprobe ip_vs_sh && modprobe nf_conntrack
systemctl enable --now systemd-modules-load.service rsyslog
4:测试
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
集群节点修改加载Limits参数
1:设置最大文件打开数
vim /etc/security/limits.conf
* soft nofile 655360
* hard nofile 131072
* soft nproc 655350
* hard nproc 655350
* soft memlock unlimited
* hard memlock unlimited
2:重启所有节点
reboot
3:查看内核参数是否加载
lsmod | grep --color=auto -e ip_vs -e nf_conntrack
集群节点安装containerd作为容器运行时
Kubernetes 版本和 Containerd 版本依赖关系:kubernetes/CHANGELOG/CHANGELOG-1.33.md at master · kubernetes/kubernetes · GitHub
1:安装docker源
yum install -y yum-utils jq psmisc net-tools telnet device-mapper-persistent-data lvm2 -y
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新:
dnf makecache
2:查看containerd指定版本
dnf list --showduplicates containerd.io --enablerepo=docker-ce-stable
3:安装docker和containerd
dnf install -y containerd.io-1.7.* docker-ce
4:验证
containerd --version
5:生成配置containerd配置文件
mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
6:修改containerd配置文件参数
sed -i 's#SystemdCgroup = false#SystemdCgroup = true#g' /etc/containerd/config.toml \
sed -i 's#k8s.gcr.io/pause#registry.cn-hangzhou.aliyuncs.com/google_containers/pause#g' /etc/containerd/config.toml \
sed -i 's#registry.gcr.io/pause#registry.cn-hangzhou.aliyuncs.com/google_containers/pause#g' /etc/containerd/config.toml \
sed -i 's#registry.k8s.io/pause#registry.cn-hangzhou.aliyuncs.com/google_containers/pause#g' /etc/containerd/config.toml
重新加载配置并启动containerd
systemctl daemon-reload && systemctl enable --now containerd
所有节点配置 crictl 客户端连接的运行时位置
cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
Kubernetes相关组件安装
| 组件 | 核心作用 | |
|---|---|---|
| kubeadm | 集群初始化工具:kubeadm init搭建 master 控制平面、kubeadm join节点入网 | 只负责搭集群、加节点,不管理容器 |
| kubelet | 节点核心代理,对接 containerd,创建 / 销毁 Pod、上报节点状态(所有节点必装) | 真正干活创建、删除容器的执行者。 |
| kubectl | 集群客户端命令行,kubectl get/describe管理集群资源,仅 master 需要 | 把操作请求发给集群主控 apiserver: |
集群所有节点安装Kubernetes安装源
1:集群所有节点安装Kubernetes安装源
所有节点配置 K8s 阿里云 yum 源
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.34/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.34/rpm/repodata/repomd.xml.key
EOF
dnf makecache
2:集群所有节点查看本地仓库安装源中kubernetes相关安装包版本
dnf list kubeadm.x86_64 --showduplicates | sort -r

集群Master节点安装Kubernetesv1.34+组件
dnf install -y kubelet-1.34* kubeadm-1.34* kubectl-1.34*
集群所有Node节点安装Kubernetesv1.34+组件
dnf install -y kubelet-1.34* kubeadm-1.34*
集群所有节点配置kubelet参数
cat <<-EOF >/etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
EOF
集群所有节点启动kubelet
systemctl daemon-reload && systemctl enable --now kubelet

5228

被折叠的 条评论
为什么被折叠?



