初始化系统
网络配置
vim /etc/sysconfig/network-scripts/ifcfg-ens192
# 指定连接类型为以太网
TYPE=Ethernet
# 指定网卡名称
NAME=ens192
# 指定设备名称
DEVICE=ens192
# 指定开机自动启用这个连接
ONBOOT=yes
# 指定不使用代理方法
PROXY_METHOD=none
# 指定不仅仅在浏览器中使用代理
BROWSER_ONLY=no
# 指定自动分配地址的方式为无(即手动配置IP地址)
BOOTPROTO=none
# 指定默认路由开启
DEFROUTE=yes
# 指定IPv4连接失败时不宣告严重错误
IPV4_FAILURE_FATAL=no
# 指定IPv4地址
IPADDR=10.20.13.10
# 指定IPv4地址的子网掩码为24
PREFIX=24
# 指定IPv4的网关地址
GATEWAY=10.20.13.1
## 以下ipv6配置,若没有注释掉即可
# 指定启用IPv6
IPV6INIT=yes
# 指定不自动配置IPv6地址
IPV6_AUTOCONF=no
# 指定默认IPv6路由开启
IPV6_DEFROUTE=yes
# 指定IPv6连接失败时不宣告严重错误
IPV6_FAILURE_FATAL=no
# 指定IPv6地址生成模式为稳定隐私模式
IPV6_ADDR_GEN_MODE=stable-privacy
# 指定IPv6地址
IPV6ADDR=2031:0:130c::10/64
# 指定IPv6的默认网关地址
IPV6_DEFAULTGW=2031:0:130c::1
# 指定首选DNS服务器
DNS1=114.114.114.114
# 指定备用DNS服务器
DNS2=2400:3200::1
# 重启网卡
systemctl restart network
设置主机名
hostnamectl set-hostname k8s-master01
hostnamectl set-hostname k8s-master02
...
hostnamectl set-hostname k8s-node01
hostnamectl set-hostname k8s-node02
...
host解析(非必要)
cat > /etc/hosts << EOF
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.20.13.10 k8s-master01
10.20.13.11 k8s-master02
10.20.13.12 k8s-master03
10.20.13.13 k8s-node01
10.20.13.14 k8s-node02
10.20.13.15 k8s-node03
EOF
配置yum源
sed -e 's|^mirrorlist=|#mirrorlist=|g' -e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos|g' -i.bak /etc/yum.repos.d/CentOS-*.repo
时间同步
# 设置时区(所有节点)
timedatectl set-timezone Asia/Shanghai
# 服务端(其中一台节点,一般是master01)
yum install chrony -y
cat > /etc/chrony.conf << EOF
# 从公网同步
pool ntp.aliyun.com iburst
# 指定使用ntp.aliyun.com作为时间服务器池,iburst选项表示在初始同步时会发送多个请求以加快同步速度
driftfile /var/lib/chrony/drift
# 当系统时间与服务器时间偏差大于1秒时,会以1秒的步长进行调整。如果偏差超过3秒,则立即进行时间调整
makestep 1.0 3
# 启用硬件时钟同步功能,可以提高时钟的准确性
rtcsync
# 允许10.20.13.0/24网段范围内的主机与chrony进行时间同步
allow 10.20.13.0/24
# 将本地时钟设为stratum 10,stratum值表示时钟的准确度,值越小表示准确度越高
local stratum 10
# 指定使用的密钥文件路径,用于对时间同步进行身份验证
keyfile /etc/chrony.keys
# 指定时区为UTC
leapsectz right/UTC
# 指定日志文件存放目录
logdir /var/log/chrony
EOF
systemctl restart chronyd ; systemctl enable chronyd
# 客户端
yum install chrony -y
cat > /etc/chrony.conf << EOF
# 从服务端同步
pool 10.20.13.10 iburst
# 指定使用ntp.aliyun.com作为时间服务器池,iburst选项表示在初始同步时会发送多个请求以加快同步速度
driftfile /var/lib/chrony/drift
# 当系统时间与服务器时间偏差大于1秒时,会以1秒的步长进行调整。如果偏差超过3秒,则立即进行时间调整
makestep 1.0 3
# 启用硬件时钟同步功能,可以提高时钟的准确性
rtcsync
# 指定使用的密钥文件路径,用于对时间同步进行身份验证
keyfile /etc/chrony.keys
# 指定时区为UTC
leapsectz right/UTC
# 指定日志文件存放目录
logdir /var/log/chrony
EOF
systemctl restart chronyd ; systemctl enable chronyd
#使用客户端进行验证
chronyc sources -v
关闭防火墙
# 关闭防火墙
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X && iptables -P FORWARD ACCEPT
systemctl disable firewalld --now
禁用SELinux
# 禁用selinux
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/g' /etc/selinux/config
关闭NetworkManager
# 关闭 NetworkManager
systemctl disable NetworkManager --now
关闭swap
# 临时关闭swap
swapoff -a
# 永久关闭swap
sed -i 's/.*swap.*/#&/g' /etc/fstab
配置yum源
参考地址:centos | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
sed -e 's|^mirrorlist=|#mirrorlist=|g' -e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos|g' -i.bak /etc/yum.repos.d/CentOS-*.repo
安装系统工具
yum update -y && yum -y install wget psmisc jq vim net-tools nfs-utils telnet yum-utils device-mapper-persistent-data lvm2 git tar curl
添加elrepo源
yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm -y
sed -i "s@mirrorlist@#mirrorlist@g" /etc/yum.repos.d/elrepo.repo
sed -i "s@elrepo.org/linux@mirrors.tuna.tsinghua.edu.cn/elrepo@g" /etc/yum.repos.d/elrepo.repo
升级内核
原文地址:yum更新Linux内核(CentOS 7) - Elijah Blog (sreok.cn)
# 查看可用内核
yum -y --disablerepo="*" --enablerepo="elrepo-kernel" list available
# 我这里选择的是稳定版kernel-ml 如需更新长期维护版本kernel-lt
yum -y --enablerepo=elrepo-kernel install kernel-ml
# 查看已安装那些内核
rpm -qa | grep kernel
# 查看默认内核
grubby --default-kernel
# 若不是最新的使用命令设置
grubby --set-default $(ls /boot/vmlinuz-* | grep elrepo)
# 重启生效
reboot
加载IPVS模块
yum install ipvsadm ipset sysstat conntrack libseccomp -y
cat > /etc/modules-load.d/k8s.conf <<EOF
# IPVS 是 Linux 内核中的一个模块,用于实现负载均衡和高可用性。它通过在前端代理服务器上分发传入请求到后端实际服务器上,提供了高性能和可扩展的网络服务
ip_vs
# IPVS 轮询调度算法
ip_vs_rr
# IPVS 加权轮询调度算法
ip_vs_wrr
# IPVS 哈希调度算法
ip_vs_sh
# overlay是containerd默认使用的存储驱动,它提供了一种轻量级的、可堆叠的、逐层增量的文件系统,它通过在现有文件系统上叠加文件系统层来创建容器的文件系统视图。每个容器可以有自己的一组文件系统层,这些层可以共享基础镜像中的文件,并在容器内部进行修改。使用overlay可以有效地使用磁盘空间,并使容器更加轻量级
overlay
# nf_conntrack用于跟踪和管理网络连接,包括 TCP、UDP 和 ICMP 等协议。它是实现防火墙状态跟踪的基础
nf_conntrack
# ip_tables提供了对 Linux 系统 IP 数据包过滤和网络地址转换(NAT)功能的支持
ip_tables
# 扩展了 iptables 的功能,支持更高效的 IP 地址集合操作
ip_set
# 扩展了 iptables 的功能,支持更高效的数据包匹配和操作
xt_set
# 用户空间工具,用于配置和管理 xt_set 内核模块
ipt_set
# 用于实现反向路径过滤,用于防止 IP 欺骗和 DDoS 攻击
ipt_rpfilter
# 用于拒绝 IP 数据包,并向发送方发送响应,指示数据包被拒绝
ipt_REJECT
# 用于实现 IP 封装在 IP(IP-over-IP)的隧道功能。它可以在不同网络之间创建虚拟隧道来传输 IP 数据包
ipip
EOF
systemctl restart systemd-modules-load.service
配置ulimit
ulimit -SHn 65535
cat > /etc/security/limits.conf <<EOF
# soft表示软限制,nofile表示一个进程可打开的最大文件数,默认值为1024。这里的软限制设置为655360,即一个进程可打开的最大文件数为655360
* soft nofile 655360
# hard表示硬限制,即系统设置的最大值。nofile表示一个进程可打开的最大文件数,默认值为4096。这里的硬限制设置为131072,即系统设置的最大文件数为131072
* hard nofile 131072
# nproc表示一个用户可创建的最大进程数,默认值为30720。即一个用户可创建的最大进程数为655350
* soft nproc 655350
# nproc表示一个用户可创建的最大进程数,默认值为4096。即系统设置的最大进程数为655350
* hard nproc 655350
# memlock表示一个进程可锁定在RAM中的最大内存,默认值为64 KB。这里的软限制设置为unlimited,即一个进程可锁定的最大内存为无限制
* seft memlock unlimited
# memlock表示一个进程可锁定在RAM中的最大内存,默认值为64 KB。即系统设置的最大内存锁定为无限制
* hard memlock unlimitedd
EOF
修改内核参数
cat > /etc/sysctl.d/k8s.conf << EOF
# 启用了IPv4的IP转发功能,允许服务器作为网络路由器转发数据包
net.ipv4.ip_forward = 1
# 当使用网络桥接技术时,将数据包传递到iptables进行处理
net.bridge.bridge-nf-call-iptables = 1
# 当该参数设置为1时,IPv6数据包将被传递到ip6tables进行处理;当该参数设置为0时,IPv6数据包将绕过ip6tables直接传递。默认情况下,这个参数的值是1
net.bridge.bridge-nf-call-ip6tables = 1
# 允许在挂载文件系统时,允许被其他进程使用
fs.may_detach_mounts = 1
# 允许原始的内存过量分配策略,当系统的内存已经被完全使用时,系统仍然会分配额外的内存
vm.overcommit_memory=1
# 当系统内存不足(OOM)时,禁用系统崩溃和重启
vm.panic_on_oom=0
# 设置系统允许一个用户的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
# 设置未收到响应的TCP心跳探测次数
net.ipv4.tcp_keepalive_probes = 3
# 设置TCP心跳探测的时间间隔(秒)
net.ipv4.tcp_keepalive_intvl =15
# 设置系统可以使用的TIME_WAIT套接字的最大数量
net.ipv4.tcp_max_tw_buckets = 36000
# 启用TIME_WAIT套接字的重新利用,允许新的套接字使用旧的TIME_WAIT套接字
net.ipv4.tcp_tw_reuse = 1
# 设置系统可以同时存在的TCP套接字垃圾回收包裹数的最大数量
net.ipv4.tcp_max_orphans = 327680
# 设置系统对于孤立的TCP套接字的重试次数
net.ipv4.tcp_orphan_retries = 3
# 启用TCP SYN cookies保护,用于防止SYN洪泛攻击
net.ipv4.tcp_syncookies = 1
# 设置新的TCP连接的半连接数(半连接队列)的最大长度
net.ipv4.tcp_max_syn_backlog = 16384
# 设置系统可以创建的网络连接跟踪表项的最大数量
net.ipv4.ip_conntrack_max = 65536
# 关闭TCP时间戳功能,用于提供更好的安全性
net.ipv4.tcp_timestamps = 0
# 设置系统核心层的连接队列的最大值
net.core.somaxconn = 16384
# 启用IPv6协议
net.ipv6.conf.all.disable_ipv6 = 0
# 启用IPv6协议
net.ipv6.conf.default.disable_ipv6 = 0
# 启用IPv6协议
net.ipv6.conf.lo.disable_ipv6 = 0
# 允许IPv6数据包转发
net.ipv6.conf.all.forwarding = 1
EOF
sysctl --system
安装k8s工具
版本查看:kubernetes-new-core-stable安装包下载_开源镜像站-阿里云 (aliyun.com)
# 指定安装的k8s工具版本
export k8sVersion=v1.30
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/$k8sVersion/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/$k8sVersion/rpm/repodata/repomd.xml.key
EOF
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet --now