【k8s-1.20.x安装】前置工作

357 阅读6分钟

前言

本文中所需要到外网下载的资料都在网盘中有备份,地址如下

# 网盘地址
链接:https://pan.baidu.com/s/1qDk4H9g5yGyrOOurXBGt7Q 
提取码:lnt5 

节点规划

主机名称IP地址角色配置
k8s-master01 ~ 03192.168.0.201 ~ 203Master/Worker节点2C2G 40G
k8s-node01 ~ 02192.168.0.204 ~ 205Worker节点2C2G 40G
k8s-master-lb192.168.0.206VIPVIP不占用机器

信息备注
系统版本CentOS7
Docker版本19.03.x
K8s版本1.20.x
Pod网段172.168.0.0/16
Service网段10.96.0.0/12

主要是做三个事情:

  • 基于vagrant + virtualbox 创建6台虚拟机

  • 升级6台机器的内核版本

  • 6台机器统一配置基础环境

1. 基于vagrant + virtualbox 创建6台虚拟机

1.1 安装virtualbox、vagrant

官网获取安装包 or 网盘获取

# 网盘地址
链接:https://pan.baidu.com/s/1qDk4H9g5yGyrOOurXBGt7Q 
提取码:lnt5 
/0001-virtualbox+vagrant 目录下

先安装virtualbox,再安装vagrant

安装virtualbox需要在BIOS里开启CPU虚拟化;安装vagrant后需要重启系统。

安装过程一路下一步即可。

验证

打开cmd命令行界面,输入 vagrant,能出现vagrant相关信息即可。

1.2 导入官方centos7镜像

获取centos7镜像(官网 or 网盘)

/0001-virtualbox+vagrant 目录下有个 CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box 文件

导入镜像到vagrant本地库

假设你下载的CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box文件在D:/111 目录下,那么在D:/111目录打开命令行执行下述命令。

vagrant box add centos/7 ./CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box

验证导入是否成功

# 执行该命令,能看到刚刚导入的 centos/7镜像即可
vagrant box list

1.3 初始化一台机器

编写Vagrantfile文件

在你的工作目录下创建一个test文件夹,我这里工作目录是D:\virtualbox-work 我在这个目录下新建了一个目录 test

在test目录下创建Vagrantfile文件

Vagrantfile文件内容如下:

Vagrant.configure("2") do |config|
   (1..1).each do |i|
		config.vm.synced_folder ".", "/vagrant", disabled: true
        config.vm.define "test-#{i}" do |node|
            # 设置虚拟机的Box
            node.vm.box = "centos/7"

            # 设置虚拟机的主机名
            node.vm.hostname="test-#{i}"

            # 设置虚拟机的IP
            node.vm.network "private_network", ip: "192.168.56.#{100+i}", netmask: "255.255.255.0"
            # VirtaulBox相关配置
            node.vm.provider "virtualbox" do |v|
                # 设置虚拟机的名称
                v.name = "test-#{i}"
                # 设置虚拟机的内存大小
                v.memory = 16384
                # 设置虚拟机的CPU个数
                v.cpus = 2
            end
        end
   end
end

启动机器

在test目录打开cmd命令窗口,执行命令钱清确保 virtualbox是开启的。

vagrant up

一台虚拟机就起来了:

1.4 开启这台机器root用户远程登录

机器启动后,使用以下命令登录虚拟机

# test-1 是在Vagrantfile文件中声明的虚拟机的名称,这里只有一台机器,也可以不用指定机器名。
vagrant ssh test-1

配置允许root用户远程登录

# 修改 /etc/ssh/sshd_config 文件中的 PasswordAuthentication no改为PasswordAuthentication yes,并重启sshd服务

sudo vi /etc/ssh/sshd_config

sudo systemctl restart sshd

此时,就可以使用xshell使用root用户远程登录该机器了,机器IP在Vagrantfile中有配置,默认的密码是 vagrant

1.5 导出box镜像

继续在 cmd窗口进行导出镜像操作,也可以在此处进行内核升级,这样,后面克隆出来的机器就都是高版本的内核了。

# 关机
vagrant halt

# 打包镜像
# test-1 是待打包的机器的主机名
# k8s-base  是打包后的镜像名称
vagrant package --base test-1 --output k8s-base.box

打包后生成的镜像

1.6 导入上一步的box镜像

vagrant box add k8s-base ./k8s-base.box

查看导入的镜像

vagrant box list

能看到导入的镜像即可,如下:

1.7 编写初始化6台机器的Vagrantfile文件

工作目录为 D:\virtualbox-work ,在该目录下创建名为 k8s 的文件夹,并在 k8s 文件夹下创建 Vagrantfile文件

Vagrantfile文件

Vagrant.configure("2") do |config|
   (1..6).each do |i|
		config.vm.synced_folder ".", "/vagrant", disabled: true
		config.ssh.username = "vagrant"
		config.ssh.password = "vagrant"	
        config.vm.define "k8s-#{i}" do |node|
            # 设置虚拟机的Box
            node.vm.box = "k8s-base"

            # 设置虚拟机的主机名
            node.vm.hostname="k8s-#{i}"

            # 设置虚拟机的IP
            node.vm.network "private_network", ip: "192.168.0.#{200+i}", netmask: "255.255.255.0"
            # VirtaulBox相关配置
            node.vm.provider "virtualbox" do |v|
                # 设置虚拟机的名称
                v.name = "k8s-#{i}"
                # 设置虚拟机的内存大小
                v.memory = 16384
                # 设置虚拟机的CPU个数
                v.cpus = 2
            end
        end
   end
end

1.8 开启六台机器

在D:\virtualbox-work\k8s打开cmd命令窗口,执行命令,执行启动命令前,需要先打开virtualbox。

vagrant up

最终会启动6台机器,如下:

用xshell连接6台虚拟机

2. 升级6台机器的内核版本

2.1 所有节点配置hosts

192.168.0.201 k8s-master01
192.168.0.202 k8s-master02
192.168.0.203 k8s-master03
192.168.0.206 k8s-master-lb # 如果不是高可用集群,该IP为Master01的IP
192.168.0.204 k8s-node01
192.168.0.205 k8s-node02

2.2 yum源配置

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

2.3 必备工具安装

yum install wget install jq psmisc vim lrzsz net-tools telnet yum-utils device-mapper-persistent-data lvm2 git -y

2.4 所有节点关闭防火墙、selinux、dnsmasq、swap。服务器配置如下:

systemctl disable --now firewalld 
systemctl disable --now dnsmasq
systemctl disable --now NetworkManager

setenforce 0
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

2.5 关闭swap分区

swapoff -a && sysctl -w vm.swappiness=0
sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab

2.6 安装ntpdate

rpm -ivh http://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm
yum install ntpdate -y

2.7 所有节点同步时间。时间同步配置如下:

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo 'Asia/Shanghai' >/etc/timezone
ntpdate time2.aliyun.com

2.8 加入到crontab crontab -e

*/5 * * * * ntpdate time2.aliyun.com

2.9 所有节点配置limit:

ulimit -SHn 65535

2.10 vim /etc/security/limits.conf

# 末尾添加如下内容
* soft nofile 655360
* hard nofile 131072
* soft nproc 655350
* hard nproc 655350
* soft memlock unlimited
* hard memlock unlimited

2.11 Master01节点免密钥登录其他节点:

ssh-keygen -t rsa
for i in k8s-master01 k8s-master02 k8s-master03 k8s-node01 k8s-node02 k8s-master-lb;do ssh-copy-id -i .ssh/id_rsa.pub $i;done

2.12 下载安装所有的源码文件

cd /root/ ; git clone https://github.com/dotbalo/k8s-ha-install.git

# github下载有点慢,网盘里有 /0006-k8s/1.20.x目录下

2.13 所有节点升级系统并重启:

yum update -y  && reboot

3. 升级内核

3.1 下载rpm包(网盘里有)

只需要一台机器去下载即可,我这里在 k8s-1这台机器上操作。

# 安装 wget
yum install wget -y
cd /root
# wget的方式下载
wget https://mirror.rc.usf.edu/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-5.10.5-1.el7.elrepo.x86_64.rpm
wget https://mirror.rc.usf.edu/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-devel-5.10.5-1.el7.elrepo.x86_64.rpm

# 网盘地址
链接:https://pan.baidu.com/s/1qDk4H9g5yGyrOOurXBGt7Q 
提取码:lnt5 
/0006-centos7内核 目录下

3.2 两个rpm包都放在k8s-1机器的/root目录下,分发到其它五台机器上

for i in k8s-master01 k8s-master02 k8s-master03 k8s-node01 k8s-node02 k8s-master-lb;do scp kernel* $i:/root/;done

3.3 所有机器安装内核、设置kernel启动顺序

cd /root && yum localinstall kernel-ml-* -y 

grub2-set-default 0
grub2-mkconfig -o /boot/grub2/grub.cfg
grubby --default-kernel

reboot

3.4 检查内核版本

重启完成后,重新连接上机器,检查内核

[root@k8s-6 ~]# uname -r
5.10.5-1.el7.elrepo.x86_64

3.5 所有节点安装ipvsadm:

yum install ipvsadm ipset sysstat conntrack libseccomp -y

3.6 所有节点配置ipvs模块

vim /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_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

3.7 加载内核配置

systemctl enable --now systemd-modules-load.service

3.8 开启一些k8s集群中必须的内核参数,所有节点配置k8s内核

cat <<EOF > /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
fs.may_detach_mounts = 1
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
net.netfilter.nf_conntrack_max=2310720

net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl =15
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 327680
net.ipv4.tcp_orphan_retries = 3
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.ip_conntrack_max = 65536
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_timestamps = 0
net.core.somaxconn = 16384
EOF
sysctl --system

3.9 验证

[root@k8s-1 ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4
ip_vs_ftp              16384  0 
nf_nat                 45056  1 ip_vs_ftp
ip_vs_sed              16384  0 
ip_vs_nq               16384  0 
ip_vs_fo               16384  0 
ip_vs_sh               16384  0 
ip_vs_dh               16384  0 
ip_vs_lblcr            16384  0 
ip_vs_lblc             16384  0 
ip_vs_wrr              16384  0 
ip_vs_rr               16384  0 
ip_vs_wlc              16384  0 
ip_vs_lc               16384  0 
ip_vs                 155648  24 ip_vs_wlc,ip_vs_rr,ip_vs_dh,ip_vs_lblcr,ip_vs_sh,ip_vs_fo,ip_vs_nq,ip_vs_lblc,ip_vs_wrr,ip_vs_lc,ip_vs_sed,ip_vs_ftp
nf_conntrack          155648  2 nf_nat,ip_vs
nf_defrag_ipv6         24576  2 nf_conntrack,ip_vs
libcrc32c              16384  4 nf_conntrack,nf_nat,xfs,ip_vs