修改为静态ip

vim /etc/sysconfig/network-scripts/ifcfg-ens33

ens33​这个根据你的具体情况选择

原本的网卡配置文件为

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=eui64
NAME=ens33
UUID=3c75f66a-12f6-4a8d-8bde-d7ae15f36585
DEVICE=ens33
ONBOOT=yes

我们需要将BOOTPROTO​的值改为static​,即静态ip,然后添加下面内容即可。其中IPADDR​和GATEWAY​跟你具体环境配置。

IPADDR=192.168.254.10
NETMASK=255.255.255.0
GATEWAY=192.168.254.2
DNS1=8.8.8.8
DNS2=114.114.114.114

配置完成后保存,然后使用nmcli重新加载网络配置,使其生效。

# 重新加载网络配置
nmcli connection reload

# 断开并重新连接网卡
nmcli connection down ens33
nmcli connection up ens33

配置主机名

hostnamectl set-hostname master1-1

配置主机host文件

实现主机名之间互相访问,编辑/etc/hosts​文件,将下面的内容添加到hosts文件中

192.168.254.10 master1-1
192.168.254.11 master1-2
192.168.254.20 node1-1

master1-1​中分别ping master1-2​和node1-1​,能ping通则说明配置没有问题

image

配置主机之间无密码访问

master1-1​上使用ssh-keygen​生成公钥和私钥,一直回车即可,运行完成后会生成2个文件:/root/.ssh/id_ed25519​为私钥、/root/.ssh/id_ed25519.pub​为公钥。

[root@master1-1 ~]# ssh-keygen
Generating public/private ed25519 key pair.
Enter file in which to save the key (/root/.ssh/id_ed25519): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_ed25519
Your public key has been saved in /root/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:QFkkTaDHqknvzzAuEDdAZNRSgPDe/3bYVCLaVW8YEV4 root@master1-1
The key's randomart image is:
+--[ED25519 256]--+
|B*+.  +B+   ooE  |
|+o . +...  .o.   |
| .o . +    ..+   |
|..o. o .. o o o  |
| oo.o  oSo o .   |
|.. + .. . .      |
| .o + .  +       |
|  .o + .o o      |
|   .o.o...       |
+----[SHA256]-----+

将公钥拷贝到其他节点上

ssh-copy-id master1-2

然后输入yes和密码即拷贝完成。

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'master1-2'"
and check to make sure that only the key(s) you wanted were added.

我们可以使用ssh master1-2​命令连接master1-2​,并且不需要输入密码。

关闭swap分区

临时关闭:

swapoff -a

然后使用free -m​ 查看,如果swap一栏全是零,则关闭成功。

[root@master1-1 ~]# free -m
               total        used        free      shared  buff/cache   available
Mem:            3372         565        2497          12         552        2807
Swap:              0           0           0

永久关闭:

编辑/etc/fstab​文件,注释掉 swap一行即可

#/dev/mapper/openeuler-swap none                    swap    defaults        0 0

修改内核参数,开启ip转发

导入br_netfilter​模块

modprobe br_netfilter

创建一个/etc/sysctl.d/k8s.conf​文件,并写入如下内容

net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.ipv4.ip_forward=1

重新加载配置的内核参数

sysctl -p /etc/sysctl.d/k8s.conf

设置开机自启

echo br_netfilter > /etc/modules-load.d/k8s.conf

参数被覆盖问题

如果开机后ipv4.ip_forward仍然为0,则有可能是参数被覆盖了,可以使用下面命令查找

grep -rn net.ipv4.ip_forward /etc/sysctl.d /usr/lib/sysctl.d /etc/sysctl.conf

检查结果例如:

/etc/sysctl.d/k8s.conf:3:net.ipv4.ip_forward = 1
/etc/sysctl.conf:12:net.ipv4.ip_forward=0

  • 由于 99-sysctl.conf​ 文件名中的数字 99​ 大于 k8s.conf​(无数字前缀),系统会优先加载 k8s.conf​,然后被 99-sysctl.conf覆盖,最终 net.ipv4.ip_forward=0​。

因为sysctl.conf优先级比sysctl.d/k8s.conf低,所以他是最后加载的,它的配置会覆盖到前面的配置

文件夹

优先级

描述

sysctl.conf

传统配置文件

sysctl.d

高优先级配置文件

解决办法

注释掉sysctl.conf里有关net.ipv4.ip_forward=0​的配置

image

验证:

sysctl net.ipv4.ip_forward

输出结果:

net.ipv4.ip_forward = 1

关闭防火墙(可选)

如果不关闭防火墙,那么k8s初始化时需要开放k8s所需端口,否则可能导致集群初始化失败、节点无法加入、CoreDNS 不可解析、Pod 网络不通等问题。

控制平面节点(Master)需要开放的端口:

端口号

协议

用途说明

6443

TCP

kube-apiserver,所有组件与 API Server 通信

2379-2380

TCP

etcd 服务和客户端通信

10250

TCP

kubelet 远程管理

10259

TCP

kube-scheduler(v1.23+ 用于健康检查)

10257

TCP

kube-controller-manager(v1.23+ 用于健康检查)

所有节点(包括 Master 和 Worker)都需要开放的端口

端口号

协议

用途说明

10250

TCP

kubelet 远程管理

30000-32767

TCP

NodePort 类型服务

6783(或自定义)

UDP

Pod 网络插件使用的端口(如 Weave Net)

根据网络插件不同

-

不同插件还可能需要额外端口(见下方)

网络插件附加端口示例:

插件

需要开放的端口说明

Flannel

UDP 8285(VxLAN),UDP 8472(默认)

Calico

TCP 179(BGP),IPIP 协议 4(若启用 IP-in-IP)

Cilium

默认不需要额外端口,但支持 BPF 模式可选配置

systemctl stop firewalld && systemctl disable firewalld

验证

systemctl status firewalld

关闭SELinux

vim /etc/selinux/config

将SELINUX=enforcing 设置为disabled

SELINUX=disabled

然后关机重启,重启后可以使用getenforce​命令查看是否正确关闭

image

配置kubernetes​的yum源

创建文件 /etc/yum.repos.d/kubernetes.repo​,然后填写如下内容

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0

构建缓存

dnf clean all
dnf makecache

配置时间同步

dnf -y install ntpdate

安装完成后使用如下命令同步时间,cn.pool.ntp.org​为开源NTP服务器

ntpdate cn.pool.ntp.org

计划任务定时同步时间

crontab -e
0 * * * * /usr/sbin/ntpdate cn.pool.ntp.org

开启ipvs

IPVS​ 全称是 IP Virtual Server,是 Linux 内核层的一个负载均衡框架,是 LVS(Linux Virtual Server) 的核心部分。

ipvs​ 是 kube-proxy 的一种高性能网络模式

kube-proxy支持iptables和ipvs,这两个都是基于netfilter模块实现的,ipvs使用哈希表,效率高,iptables逐条查询,当规则较多时,效率较低

ipvs支持比iptables更复杂的负载均衡算法(最小负载、加权、最少连接等),同时支持服务器健康检查和连接重试功能。

模块名

作用说明

ip_vs

IPVS 核心模块

ip_vs_rr

轮询(Round Robin)调度算法

ip_vs_wrr

加权轮询(Weighted Round Robin)

ip_vs_lc

最少连接(Least Connection)

ip_vs_wlc

加权最少连接

ip_vs_sh

基于源地址哈希(Source Hashing)

ip_vs_dh

基于目标地址哈希(Destination Hashing)

ip_vs_lblc

本地缓存一致性调度(Locality-Based Least Connection)

ip_vs_lblcr

LBLCR(带复制的 LBL)

ip_vs_nq

最短队列(Never Queue)

ip_vs_sed

最短期望延迟(Shortest Expected Delay)

ip_vs_ftp

支持 FTP 协议转发

nf_conntrack

Netfilter 的连接跟踪模块

新建/etc/modules-load.d/ipvs.conf​文件,然后写入下面的内容,确保开机时自动加载这些模块

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_nq
ip_vs_sed
ip_vs_ftp
nf_conntrack

立即加载模块

for module in $(cat /etc/modules-load.d/ipvs.conf) ; do
	modprobe $module
done

验证

lsmod | grep ip_vs
lsmod | grep nf_conntrack

安装基础软件包

dnf install -y dnf-utils device-mapper-persistent-data lvm2 \
wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake \
libxml2-devel openssl-devel curl curl-devel unzip sudo \
ntp libaio-devel vim ncurses-devel autoconf automake \
zlib-devel python3-devel openssh-server \
socat ipvsadm conntrack ntpdate telnet

安装Containerd

dnf -y install containerd

备份并生成一份全新的默认配置

cp /etc/containerd/config.toml /etc/containerd/config.toml.bak
containerd config default > /etc/containerd/config.toml.new

用vim打开/etc/containerd/config.toml​文件,按/​搜索runtimes.runc.options​这个关键字,将下面的SystemdCgroup​改为true​即可