Sealos急速部署生产用k8s集群

最近一段时间部署 k8s 全部使用 sealos 了,整体使用感觉良好,基本没有什么坑。推荐给大家。

使用 Sealos,可以安装一个不包含任何组件的裸 Kubernetes 集群。

最大的好处是提供 99 年证书,用到我跑路是足够了。不用像之前 kubeadm 安装的每年需要记得续签。

其次增加删除节点也很方便。

最后,安装集群快啊,十来分钟一个生产可用集群就装好了。

经验教训写在前面:

  1. / 根目录需要大一些,镜像很大。300G
  2. 镜像很大,安装的时间准备的长一些
  3. 使用 nohup,避免中途断网

如果磁盘不是根目录,要创建软连接

mkdir -p /data/run/containerd
mkdir -p /data/var/lib/containers
mkdir -p /data/var/lib/kubelet
ln -s /data/run/containerd /run/containerd
ln -s /data/var/lib/containers /var/lib/containers
ln -s /data/var/lib/kubelet /var/lib/kubelet

下载 sealos 命令行工具

提前安装一下 jq 工具

yum install -y jq

查看当前的 sealos 命令行工具版本

curl --silent "https://api.github.com/repos/labring/sealos/releases" | jq -r '.[].tag_name'

选其中的稳定版

v5.0.0-beta5
v5.0.0-beta4
v4.4.0-beta3
v5.0.0-beta3
v5.0.0-beta2
v5.0.0-beta1
v4.3.7
v5.0.0-alpha2
v4.3.7-rc1
v4.3.6

我这里用最新的稳定版 4.3.7

下载

wget https://github.com/labring/sealos/releases/download/v4.3.7/sealos_4.3.7_linux_amd64.tar.gz

安装

tar zxvf sealos_4.3.7_linux_amd64.tar.gz sealos && chmod +x sealos && mv sealos /usr/bin

配置服务器环境

服务器做免密

在其中一台 master 上执行 sealos 命令,要配置这台 master 到其他所有服务器的免密登录

ssh-keygen
cd .ssh  
cat >> .ssh/authorized_keys << EOF master0 的 id_rsa.pub 的内容 EOF
firewall-cmd --permanent --add-rich-rule="rule family='ipv4'source address="10.138.12.194"service name='ssh'accept"
firewall-cmd --reload
echo "sshd: master 节点的 ip" >> /etc/hosts.allow

关闭 selinux

关闭 selinux 以允许容器访问宿主机的文件系统

# 查看,我的服务器交付时就已经关了,[root@my-paas-master0 ~]# getenforce
Permissive

关闭方法:

setenforce 0  # 临时关闭
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config  # 永久关闭,reboot 生效

关闭 swap

因为我们在 oom 时应该干脆的杀死应用,而不是用 swap 续命,引发级联故障。

# swap total 是 0。我的服务器交付时默认关闭了 swap
[root@my-paas-master0 ~]# free -g
              total        used        free      shared  buff/cache   available
Mem:              7           0           6           0           0           7
Swap:             0           0           0

关闭方法:

 swapoff -a
 sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

启用 IPv4 数据包转发

不用做,sealos 安装时会进行配置

可以看一下 sealos 的修改的配置:

* Applying /usr/lib/sysctl.d/00-system.conf ...
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
* Applying /usr/lib/sysctl.d/10-default-yama-scope.conf ...
kernel.yama.ptrace_scope = 0
* Applying /usr/lib/sysctl.d/50-default.conf ...
kernel.sysrq = 16
kernel.core_uses_pid = 1
kernel.kptr_restrict = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.promote_secondaries = 1
net.ipv4.conf.all.promote_secondaries = 1
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
* Applying /etc/sysctl.d/99-sysctl.conf ...
fs.file-max = 1048576 # sealos
net.bridge.bridge-nf-call-ip6tables = 1 # sealos
net.bridge.bridge-nf-call-iptables = 1 # sealos
net.core.somaxconn = 65535 # sealos
net.ipv4.conf.all.rp_filter = 0 # sealos
net.ipv4.ip_forward = 1 # sealos
net.ipv4.ip_local_port_range = 1024 65535 # sealos
net.ipv4.tcp_keepalive_intvl = 30 # sealos
net.ipv4.tcp_keepalive_time = 600 # sealos
net.ipv4.vs.conn_reuse_mode = 0 # sealos
net.ipv4.vs.conntrack = 1 # sealos
net.ipv6.conf.all.forwarding = 1 # sealos

配置了免密登录,不需要密码

现在有了阿里云的镜像源,速度嗖嗖快

nohup sealos run \
    --masters 10.249.x.x \
    --nodes 10.249.y.y,10.249.z.z \
    registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.27.7 \
    registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4  \
    registry.cn-shanghai.aliyuncs.com/labring/calico:v3.24.5 >sealos.log 2>&1 &

这来我装的是不使用 docker 的版本。如果你需要用 docker,可以装这个镜像 labring/kubernetes-docker:v1.27.0。

就是这么快,安装完成

 

image-20240507181817158
[root@k8s-master0 ~]# kubectl get node
NAME          STATUS   ROLES           AGE   VERSION
k8s-master0   Ready    control-plane   14m   v1.27.7
k8s-node0     Ready    <none>          14m   v1.27.7
k8s-node1     Ready    <none>          14m   v1.27.7

如果有报错,先清理再重新安装

sealos reset

起个 nginx 测试一下

kubectl run ng --image=harbor-test.xxx.net/base/nginx:1.25.2
kubectl expose pod ng --port=80 --target-port=80 --type=NodePort

 

https://mp.weixin.qq.com/s/V0YEg8b3x8EgPRid2OdAEw

正文完
 
admin
版权声明:本站原创文章,由 admin 2024-05-13发表,共计3542字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。