使用sealos工具部署k8s
为什么使用sealos工具:简单、快、完全兼容 k8s、给100年认证
sealos使用最新版本:
官网:https://www.sealyun.com/
码:https://github.com/labring/sealos
官方介绍什么是sealos
Sealos 是以 kubernetes 为内核的云操作系统发行版, 单机操作系统如同 linux 发行版本可以在上面安装和使用各种单机应用,如 PPT,Word,Excel 等。 云操作系统只需要把这些单机应用替换成各种云应用,如数据库,对象存储,消息队列等,就很容易理解了,这些应用都是分布式高可用的。 Sealos 就是能支撑运行各种分布式应用的云操作系统。有了 Sealos 就拥有了一朵云。
部署环境:
我们这里使用的是Rocky9.1.
部署前一些检查和设置:
一、设置主机名字,不可以重复。
IP | 主机名字 |
---|---|
192.168.8.100 | Rocky-9.1-k8s-master1 |
192.168.8.101 | Rocky-9.1-k8s-master2 |
192.168.8.102 | Rocky-9.1-k8s-master3 |
192.168.8.103 | Rocky-9.1-k8s-node1 |
192.168.8.104 | Rocky-9.1-k8s-node2 |
使用 hostnamectl set-hostname命令
配置主机名与IP地址解析
/etc/hosts
cat > /etc/hosts <<-'EOF'
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.8.100 k8s-master1
192.168.8.101 k8s-master2
192.168.8.102 k8s-master3
192.168.8.103 k8s-node1
192.168.8.104 k8s-node2
EOF
二、停止防火墙并关闭
systemctl stop firewalld 停止正在运行的firewalld服务
systemctl disable firewalld 禁用firewalld服务
安装一些需要的软件:
安装和配置防火墙软件iptables和IPVS
yum -y install iptables-services ipvsadm ; systemctl start iptables ; systemctl enable iptables ; iptables -F ; service iptables save
解释:
yum -y install iptables-services ipvsadm:这个命令使用yum软件包管理器下载和安装iptables-services和ipvsadm软件包,用于管理防火墙规则和负载平衡。
systemctl start iptables:这个命令启动负责管理防火墙规则的iptables服务。
systemctl enable iptables:这个命令配置iptables服务在启动时自动启动。
iptables -F:这个命令从iptables配置中清除(删除)所有现有的防火墙规则。
service iptables save:这个命令将当前的iptables配置保存到磁盘上,以便在系统重新启动后保留。
三、禁用SELinux
使用sestatus或getenforce检查SElinux状态
临时关闭selinux:setenforce 0
永久关闭selinux:
修改 /etc/selinux/config 并将 SELINUX=disabled
可以使用下列命令来修改,修改完记得重启
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
解释:
- sed:这是一个流编辑器,用于执行文本替换和其他文本处理操作。
- -i:这个选项表示对原始文件进行“in-place”编辑,也就是直接修改文件内容。
- ‘s/^SELINUX=enforcing$/SELINUX=disabled/’:这个是正则表达式,用于匹配/etc/selinux/config文件中的SELINUX=enforcing字符串,并将其替换为SELINUX=disabled字符串。
- /etc/selinux/config:这是要修改的SELinux配置文件的路径和文件名。
四、时间同步:
crontab -e
阿里云提供了7个NTP时间服务器也就是Internet时间同步服务器地址
ntp1.aliyun.com
ntp2.aliyun.com
ntp3.aliyun.com
ntp4.aliyun.com
ntp5.aliyun.com
ntp6.aliyun.com
ntp7.aliyun.com
编辑同步阿里云的时间服务器
0 */1 * * * ntpdate ntp1.aliyun.com
解释:
这个 crontab 表示的是在每小时的第 0 分钟执行一次 ntpdate ntp1.aliyun.com 命令,即每个小时同步一次阿里云的时间服务器 ntp1.aliyun.com。
其中,0 表示分钟字段,/1 表示每分钟都执行; 表示其他字段,即每小时、每天、每月和每周都执行;ntpdate ntp1.aliyun.com 是要执行的命令。
查看
[root@Rocky-9 ~]# crontab -l
0 */1 * * * ntpdate ntp1.aliyun.com
方法二:
也可以采用同步其中一台服务器,这里我们采用同步Rocky-9.1-k8s-master1这台。
在所有节点上安装时间服务
yum install chrony -y
修改配置文件:vim /etc/chrony.conf
修改如下
server 127.127.1.0 iburst #将本机作为 NTP 服务器,使用本机的本地时钟作为时间源进行同步。
allow 192.168.8.0/24 #这个配置项表示只允许来自 192.168.8.0/24 网段的主机连接到本机的 NTP 服务。
local stratum 10 #这个配置项表示将本机作为 NTP 服务的层级(stratum),并将其设置为 10
开启chrony服务
systemctl start chronyd
systemctl enable chronyd
其他需要同步节点只修改vim /etc/chrony.conf
Rocky-9.1-k8s-master2、Rocky-9.1-k8s-master3、Rocky-9.1-k8s-node1、Rocky-9.1-k8s-node2
server 192.168.8.100 iburst
[root@Rocky-9 ~]#chronyc -a makestep #强制同步
五、关闭全部节点的swap交换分区
sed -ri 's/.*swap.*/#&/' /etc/fstab
解释:
这个命令的作用是在 /etc/fstab 文件中注释掉所有包含 swap 字符串的行。
具体来说,sed 是一个文本处理工具,-r 选项表示启用扩展正则表达式,-i 选项表示直接修改文件内容。‘s/.swap./#&/’ 是一个 sed 命令,用于将包含 swap 字符串的行注释掉,其中:
s 表示替换操作;
.swap. 表示匹配包含 swap 字符串的整行,其中 .* 表示匹配任意数量的任意字符;
#& 表示在匹配到的行首添加 # 符号,从而注释掉这一行。
因此,该命令会将 /etc/fstab 文件中所有包含 swap 字符串的行注释掉,从而禁用交换分区。
swapoff -a #禁用所有交换分区
free -m #查看系统内存使用情况
六、所有节点进行调整内核参数
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
更新 systemd
yum -y upgrade systemd
七、设置日志 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
重启动journald服务
systemctl restart systemd-journald
八、升级内核:
rpm -Uvh https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
yum --enablerepo=elrepo-kernel install -y kernel-ml
grub2-mkconfig -o /boot/grub2/grub.cfg
九、所有节点载入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
EOF
这里有个抗rocky9.1的iptables-services用的是iptables-nft-services
没有/etc/sysconfig/modules/ipvs.modules
因此创建
mkdir -p /etc/sysconfig/modules/
touch /etc/sysconfig/modules/ipvs.modules
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
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack
十、开始安装
下载sealos
wget https://github.com/labring/sealos/releases/download/v4.1.7/sealos_4.1.7_linux_amd64.tar.gz
官方文档
# 下载并安装sealos, sealos是个golang的二进制工具,直接下载拷贝到bin目录即可, release页面也可下载
wget https://github.com/labring/sealos/releases/download/v4.1.7/sealos_4.1.7_linux_amd64.tar.gz && \
tar -zxvf sealos_4.1.7_linux_amd64.tar.gz sealos && chmod +x sealos && mv sealos /usr/bin
# 创建一个集群
sealos run labring/kubernetes:v1.25.0 labring/helm:v3.8.2 labring/calico:v3.24.1 --masters 192.168.64.2,192.168.64.22,192.168.64.20 --nodes 192.168.64.21,192.168.64.19 --passwd your-own-ssh-passwd
下载kubernetes-server-linux
sealos_4.1.7目前支持1.24.0的kubernetes因此我们下载1.24.0版本
wget https://dl.k8s.io/v1.24.0/kubernetes-server-linux-amd64.tar.gz
解压缩sealos
tar zxvf sealos_4.1.7_linux_amd64.tar.gz
调整权限并放到 /usr/bin 目录下
chmod +x sealos && mv sealos /usr/bin
开始部署:
sealos init --passwd 'xxxxxx' \
--master 192.168.8.100 --master 192.168.8.101 --master 192.168.8.102 \
--node 192.168.8.103 --node 192.168.8.104 --user root \
--version v1.24.0 --pkg-url=/root/kubernetes-server-linux-amd64.tar.gz
就这么1条命令就开始部署了。
完成后kubectl get nodes查看情况
rocky-9.1-k8s-master1 Ready control-plane,master 40m v1.24.0
rocky-9.1-k8s-master2 Ready control-plane,master 39m v1.24.0
rocky-9.1-k8s-master3 Ready control-plane,master 39m v1.24.0
rocky-9.1-k8s-node1 Ready <none> 39m v1.24.0
rocky-9.1-k8s-node2 Ready <none> 39m v1.24.0
节点操作:
增加master或增加node
sealos join --master 192.168.8.105 --master 192.168.8.106
sealos join --node 192.168.8.105 --node 192.168.8.106
删除master或删除node
sealos clean --master192.168.8.105 --master 192.168.8.106
sealos clean --node 192.168.8.105 --node 192.168.8.106
清理集群
sealos clean --all -f
十一、安装web界面kuboard v3
kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3.yaml
执行指令
kubectl get pods -n kuboard
等待 kuboard 名称空间中所有的 Pod 就绪
完成后访问 Kuboard
在浏览器中打开链接 http://your-node-ip-address:30080
输入初始用户名和密码,并登录
用户名: admin
密码: Kuboard123
执行 Kuboard v3 的卸载
kubectl delete -f https://addons.kuboard.cn/kuboard/kuboard-v3.yaml
清理遗留数据
在 master 节点以及带有 k8s.kuboard.cn/role=etcd 标签的节点上执行
rm -rf /usr/share/kuboard