一、集群规划

k8s-master110.0.19.127
k8s-master210.0.19.128
k8s-master310.0.19.129
k8s-node110.0.19.130
k8s-node210.0.19.131

操作系统版本:7.3

二、初始化服务器

1 设置防火墙为 Iptables 并设置空规则
【所有节点都执行】

[root@k8s-master1 ~]# systemctl stop firewalld
[root@k8s-master1 ~]# systemctl disable firewalld
[root@k8s-master1 ~]# yum -y install iptables-services ipvsadm &&  systemctl  start iptables  &&  systemctl  enable iptables  &&  iptables -F  &&  service iptables save

2 关闭selinux
【所有节点都执行】

# setenforce 0
# vim /etc/selinux/config
	修改SELINUX=enforcing 为 SELINUX=disabled

3 配置主机名
【所有节点都执行】

hostnamectl set-hostname 主机名

4 配置名称解析
【所有节点都执行】

# vi /etc/hosts
添加如下五行
10.0.19.127    k8s-master1
10.0.19.128    k8s-master2
10.0.19.129    k8s-master3
10.0.19.130    k8s-node1
10.0.19.131    k8s-node2

5 配置时间同步
选择一个节点作为服务端,剩下的作为客户端
master1为时间服务器的服务端
其他的为时间服务器的客户端

1)配置k8s-master1

# yum install chrony -y
# vim /etc/chrony.config
修改三项
	server 127.127.1.0 iburst
	allow 10.0.19.0/24
	local stratum 10
# systemctl start chronyd
# systemctl enable chronyd
# ss -unl | grep 123
UNCONN     0      0            *:123                      *:*   

2)配置其他节点

# yum install chrony -y
# vim /etc/chrony.conf
	server 10.0.19.127 iburst
# systemctl start chronyd
# systemctl enable chronyd
# chronyc sources
	210 Number of sources = 1
	MS Name/IP address         Stratum Poll Reach LastRx Last sample               
	===============================================================================
	^* k8s-master1                  10   6    17     4    +11us[  +79us] +/-   95us

6 关闭交换分区
【所有节点都执行】

[root@k8s-master1 ~]# swapoff -a
[root@k8s-master1 ~]# vim /etc/fstab
删除一行:

检查是否关闭成功
[root@k8s-master1 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           2827         157        2288           9         380        2514
Swap:             0           0           0

7、调整内核参数,对于 K8S
【所有节点都执行】

cat > kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=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
EOF
cp kubernetes.conf  /etc/sysctl.d/kubernetes.conf
sysctl -p /etc/sysctl.d/kubernetes.conf

出现,不用担心,因为没开通网桥我们后面会开通
在这里插入图片描述

8、关闭系统不需要服务,并升级systemd

yum -y upgrade systemd  #通过 centos 更新 systemd因为我的比较旧
systemctl stop postfix && systemctl disable postfix

9、设置 rsyslogd 和 systemd journald
【所有节点都执行】

mkdir /var/log/journal # 持久化保存日志的目录
mkdir /etc/systemd/journald.conf.d
cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF
[Journal]
# 持久化保存到磁盘
Storage=persistent

# 压缩历史日志
Compress=yes

SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000

# 最大占用空间 10G
SystemMaxUse=10G

# 单日志文件最大 200M
SystemMaxFileSize=200M

# 日志保存时间 2 周
MaxRetentionSec=2week

# 不将日志转发到 syslog
ForwardToSyslog=no
EOF
systemctl restart systemd-journald

10、升级系统内核为 4.44
【所有节点都执行】
CentOS 7.x 系统自带的 3.10.x 内核存在一些 Bugs,导致运行的 Docker、Kubernetes 不稳定,例如: rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
我已经下载到百度网盘:
链接:https://pan.baidu.com/s/1kQ48A-St03MzY2BWakad0Q
提取码:pwcq

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
# 安装完成后检查 /boot/grub2/grub.cfg 中对应内核 menuentry 中是否包含 initrd16 配置,如果没有,再安装一次!
yum --enablerepo=elrepo-kernel install -y kernel-lt
# 查看内核版本
cat /boot/grub2/grub.cfg |grep 4.4
# 设置开机从新内核启动
grub2-set-default 'CentOS Linux (4.4.222-1.el7.elrepo.x86_64) 7 (Core)'
# 重启
init 6
# 查看内核
uname -r

11、kube-proxy开启ipvs的前置条件
【所有节点都执行】

modprobe br_netfilter

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

三、Kubernetes安装

前提条件
下载kubernetes 离线安装包.
下载sealos
第一步,下载sealos最新版和kubernetes离线安装包
本次下载sealos版本为v3.3.9-rc.10,kubernetes版本为1.22.0
我的百度网盘:
链接:https://pan.baidu.com/s/16T3Xo1jw8okOdK9bBMsXew
提取码:thu7

wget -c https://sealyun.oss-cn-beijing.aliyuncs.com/latest/sealos
wget -c https://sealyun.oss-cn-beijing.aliyuncs.com/05a3db657821277f5f3b92d834bbaf98-v1.22.0/kube1.22.0.tar.gz

第二步,安装sealos工具

chmod +x sealos && mv sealos /usr/bin

第三步,安装高可用kubernetes
多master HA:

sealos init \
	--master 10.0.19.127 \
    --master 10.0.19.128 \
    --master 10.0.19.129 \
    --node 10.0.19.130 \
    --node 10.0.19.131 \
    --version v1.22.0 \
    --pkg-url /root/kube1.22.0.tar.gz

使用免密钥或者密钥对: 如果密钥对有密码, 添加–pk-passwd password

sealos init \
	--passwd '123456' \
	--master 10.0.19.127 \
    --master 10.0.19.128 \
    --master 10.0.19.129 \
    --node 10.0.19.130 \
    --node 10.0.19.131 \
    --version v1.22.0 \
    --pkg-url /root/kube1.22.0.tar.gz

自定义ssh端口号,如3222:

sealos init --passwd '123456' --master 10.0.19.127:55 \
    --master 10.0.19.128:55 \
    --master 10.0.19.129:55 \
    --node 10.0.19.130:55 \
    --node 10.0.19.131:55 \
    --version v1.22.0 \
    --pkg-url /root/kube1.22.0.tar.gz

验证集群是否升级成功

[root@k8s-master1 ~]# kubectl get node
NAME          STATUS   ROLES                  AGE   VERSION
k8s-master1   Ready    control-plane,master   14m   v1.22.0
k8s-master2   Ready    control-plane,master   13m   v1.22.0
k8s-master3   Ready    control-plane,master   13m   v1.22.0
k8s-node1     Ready    <none>                 12m   v1.22.0
k8s-node2     Ready    <none>                 12m   v1.22.0

清理集群

sealos clean --all

增加master

sealos join --master 172.16.4.68 --master 172.16.4.69
sealos join --master 172.16.4.68-172.16.4.70 # 或者多个连续IP

增加node

sealos join --node 172.16.4.56 --node 172.16.4.57
sealos join --node 172.16.4.56-172.16.4.63 # 或者多个连续IP

删除指定master节点
注意clean不加任何参数会清理整个集群

sealos clean --master 172.16.4.68 --master 172.16.4.69
sealos clean --master 172.16.4.56-172.16.4.63 # 或者多个连续IP

删除指定node节点

sealos clean --node 1172.16.4.56 --node 172.16.4.57
sealos clean --node 172.16.4.56-172.16.4.63 # 或者多个连续IP
Logo

开源、云原生的融合云平台

更多推荐