
初始化k8s集群环境
修改为静态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通则说明配置没有问题
配置主机之间无密码访问
在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里有关net.ipv4.ip_forward=0
的配置
验证:
sysctl net.ipv4.ip_forward
输出结果:
net.ipv4.ip_forward = 1
关闭防火墙(可选)
如果不关闭防火墙,那么k8s初始化时需要开放k8s所需端口,否则可能导致集群初始化失败、节点无法加入、CoreDNS 不可解析、Pod 网络不通等问题。
控制平面节点(Master)需要开放的端口:
所有节点(包括 Master 和 Worker)都需要开放的端口
网络插件附加端口示例:
systemctl stop firewalld && systemctl disable firewalld
验证
systemctl status firewalld
关闭SELinux
vim /etc/selinux/config
将SELINUX=enforcing 设置为disabled
SELINUX=disabled
然后关机重启,重启后可以使用getenforce
命令查看是否正确关闭
配置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更复杂的负载均衡算法(最小负载、加权、最少连接等),同时支持服务器健康检查和连接重试功能。
新建/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
即可