服务器操作系统: CentOS7.x_x64,在所有服务器上进行操作。
2.1 修改主机名
#设置主机名为k8s-master1
hostname k8s-master1
hostnamectl set-hostname k8s-master1
vi /etc/hostname #编辑配置文件
k8s-master1 #修改localhost.localdomain为k8s-master1
:wq! #保存退出
vi /etc/hosts #编辑配置文件
127.0.0.1 localhost k8s-master1 #修改localhost.localdomain为k8s-master1
#其他服务器执行相同的操作,把主机名称分别修改为服务器角色对应的名称
2.2 安装系统依赖包
yum install -y ipset ipvsadm
yum install -y openssl-devel openssl
yum install -y make gcc* gcc-c++
yum install -y bzip2 tar conntrack conntrack-tools sysstat curl iptables libseccomp lrzsz ntpdate git unzip vim ntp net-tools epel-release nfs-utils ntp wget yum-utils device-mapper-persistent-data lvm2
2.3 升级系统内核
CentOS 7.x默认内核版本是Linux 3.10,部署k8s等项目建议升级到高版本的内核。
CentOS 7.x内核RPM包下载地址:
https://elrepo.org/linux/kernel/el7/x86_64/RPMS/
选择lt版本(长期支持)
kernel-lt-5.4.163-1.el7.elrepo.x86_64.rpm
kernel-lt-devel-5.4.163-1.el7.elrepo.x86_64.rpm
注意:内核版本是不定期更新的,旧版本的下载地址会失效,选择当前最新版本下载即可,安装方法都一样。
cd /usr/local/src
wget https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-5.4.163-1.el7.elrepo.x86_64.rpm
wget https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.163-1.el7.elrepo.x86_64.rpm
#安装
yum install -y kernel-lt-5.4.163-1.el7.elrepo.x86_64.rpm
yum install -y kernel-lt-devel-5.4.163-1.el7.elrepo.x86_64.rpm
#注意:kernel-lt是内核包,kernel-lt-devel是与内核相匹配的内核开发环境,都需要升级,必须保证内核开发环境和内核版本一致。
#查看系统上的所有可用内核
[root@k8s-master1 src]# awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (5.4.163-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)
2 : CentOS Linux (0-rescue-2aaf6a587102425da09a55cad51a2c2f) 7 (Core)
#设置默认内核为我们刚才升级的内核版本
cp /etc/default/grub /etc/default/grub-bak #备份
grub2-set-default 0 #设置默认内核版本
vi /etc/default/grub
GRUB_DEFAULT=saved修改为:
GRUB_DEFAULT=0
:wq! #保存退出
#重新创建内核配置
grub2-mkconfig -o /boot/grub2/grub.cfg
#查看默认内核
grubby --default-kernel
grub2-editenv list
yum makecache #更新软件包
reboot #重启,现在系统默认内核已经是我们刚才升级后的最新版本
#重启后查看内核版本
[root@k8s-master1 ~]# uname -r
5.4.163-1.el7.elrepo.x86_64
#查看内核包信息
[root@k8s-master1 ~]# uname -a ; rpm -qa kernel\* | sort
Linux master01.k8s 5.4.163-1.el7.elrepo.x86_64 #1 SMP Tue Nov 30 12:12:53 EST 2021 x86_64 x86_64 x86_64 GNU/Linux
kernel-3.10.0-1160.el7.x86_64
kernel-headers-3.10.0-1160.49.1.el7.x86_64
kernel-lt-5.4.163-1.el7.elrepo.x86_64
kernel-lt-devel-5.4.163-1.el7.elrepo.x86_64
kernel-tools-3.10.0-1160.el7.x86_64
kernel-tools-libs-3.10.0-1160.el7.x86_64
[root@master01 ~]#
2.4 防火墙设置
CentOS 7.x默认使用的是firewall作为防火墙,这里改为iptables防火墙,并清空规则。
2.4.1关闭firewall:
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
systemctl mask firewalld
systemctl stop firewalld
yum remove firewalld -y #卸载
2.4.2安装iptables防火墙
yum install iptables-services -y #安装
systemctl enable iptables.service #设置防火墙开机启动
iptables -F #清空规则
service iptables save #保存配置规则
systemctl restart iptables.service #启动防火墙使配置生效
[root@k8s-master1 ~]# cat /etc/sysconfig/iptables #查看防火墙配置文件
# Generated by iptables-save v1.4.21 on Mon Dec 6 02:41:09 2021
*filter
:INPUT ACCEPT [5:296]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [6:564]
COMMIT
# Completed on Mon Dec 6 02:41:09 2021
2.5 关闭selinux
#执行以下命令
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
reboot #重启系统
/usr/sbin/sestatus -v #查看selinux状态,disabled表示关闭
[root@k8s-master1 ~]# /usr/sbin/sestatus -v
SELinux status: disabled
2.6 关闭交换分区
#执行以下命令
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
[root@k8s-master1 ~]# free -m
total used free shared buff/cache available
Mem: 3908 891 479 17 2537 2902
Swap: 0 0 0
2.7 关闭系统不需要的服务
systemctl stop postfix
systemctl disable postfix
systemctl stop dnsmasq
systemctl disable dnsmasq
2.8 同步系统时间
2.8.1设置服务器时区
rm -rf /etc/localtime #先删除默认的时区设置
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #替换上海/北京作为默认
vi /etc/sysconfig/clock #添加时区
Zone=Asia/Shanghai
:wq! #保存退出
2.8.2同步时间
ntpdate ntp.aliyun.com #执行时间同步
hwclock --systohc -u #系统时钟和硬件时钟同步
#添加计划任务,每天零点同步一次时间
echo -e "0 0 * * * /usr/sbin/ntpdate ntp.aliyun.com & >/dev/null" >> /var/spool/cron/root
date #显示系统时间
[root@k8s-master1 ~]# date
Tue Dec 21 16:49:04 CST 2021
2.9 修改服务器hosts解析
2.9.1 k8s-master节点和node节点通讯需要用到hosts解析,需要在所有的master和node设置hosts解析
cat >> /etc/hosts << EOF
192.168.21.61 k8s-master1
192.168.21.62 k8s-master2
192.168.21.63 k8s-master3
192.168.21.81 k8s-node1
192.168.21.82 k8s-node2
192.168.21.83 k8s-node2
EOF
2.9.1 k8s-etcd集群内所有节点之间设置hosts解析
cat >> /etc/hosts << EOF
192.168.21.31 k8s-etcd1
192.168.21.32 k8s-etcd2
192.168.21.33 k8s-etcd3
EOF
2.10 调整系统内核参数
2.10.1
#执行以下命令
modprobe br_netfilter
modprobe ip_vs
modprobe ip_conntrack
cat >> /etc/rc.d/rc.local << EOF
modprobe br_netfilter
modprobe ip_vs
modprobe ip_conntrack
EOF
chmod +x /etc/rc.d/rc.local
2.10.2
vi /etc/security/limits.conf #在最后一行添加以下代码
* hard nofile 65535
* soft nofile 65535
* hard nproc 65535
* soft nproc 65535
:wq! #保存退出
#查看hard和soft限制数
ulimit -Hn
ulimit -Sn
2.10.3
vi /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-iptables = 1 #将桥接的IPv4流量传递到iptables
net.bridge.bridge-nf-call-ip6tables = 1 #将桥接的IPv4流量传递到iptables
net.bridge.bridge-nf-call-arptables=1
net.ipv4.ip_forward = 1
vm.swappiness = 0
vm.overcommit_memory = 1
vm.panic_on_oom = 0
fs.inotify.max_user_instances = 8192
fs.inotify.max_user_watches = 1048576
fs.file-max = 52706963
fs.nr_open = 52706963
net.ipv6.conf.all.disable_ipv6 = 1
net.netfilter.nf_conntrack_max = 2310720
:wq! #保存退出
sysctl --system
sysctl -p /etc/sysctl.d/kubernetes.conf
2.10.4开启IPVS支持
vi /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
ipvs_modules="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 nf_conntrack"
for kernel_module in ${ipvs_modules}; do
/sbin/modinfo -F filename ${kernel_module} > /dev/null 2>&1
if [ $? -eq 0 ]; then
/sbin/modprobe ${kernel_module}
fi
done
:wq! #保存退出
#执行以下命令使配置生效
chmod 755 /etc/sysconfig/modules/ipvs.modules
sh /etc/sysconfig/modules/ipvs.modules
lsmod | grep ip_vs
reboot #重启系统
2.11 配置免密码登录
#配置从master节点免密码登录到node节点,方便后面从master节点拷贝文件到node节点时不用每次都输入密码。
免密码登录原理:
1、机器A生成密钥对并将公钥发给机器B,机器B将机器A发来的公钥保存
2、机器A要登录机器B时,机器B生成随机字符串并用机器A的公钥加密后,发给机器A
3、机器A用私钥将其解密后发回给机器B,验证成功后登录
在k8s-master1上操作
ssh-keygen #输入命令,按三次回车,会生成私钥和公钥
root@k8s-master1 ~# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:IoTwD/kKM5vLdgr4EYQPhQ/EaXIRCpEubkTAd9fZ2xk root@master01.k8s
The key's randomart image is:
+---[RSA 2048]----+
|X==o . o |
|*%.+ . . o . E |
|O+B o . o o |
|.*.= . o |
|B o + . S |
|.O o . . |
|* o |
|o+ o |
|oo+ |
+----[SHA256]-----+
cd /root/.ssh #进入目录,会看到生成的私钥和公钥
root@k8s-master1 ~# ll
total 12
-rw------- 1 root root 1675 Dec 9 12:20 id_rsa
-rw-r--r-- 1 root root 399 Dec 9 12:20 id_rsa.pub
#拷贝公钥
ssh-copy-id root@192.168.21.81 #输入192.168.21.81的root密码
ssh-copy-id root@192.168.21.82 #输入192.168.21.82的root密码
ssh-copy-id root@192.168.21.83 #输入192.168.21.83的root密码
在node节点的/root/.ssh目录会保存从master节点传来的公钥authorized_keys
后面在master节点直接输入ssh root@192.168.21.81登录服务器,不用再输密码。
至此,k8s集群搭建之服务器系统初始化设置完成。