Kubernetes 生产部署实录 - 基于 sealos 部署 laf.js

说明

lafyun.com 是基于开源云开发平台 laf.js 部署的公开运营版云开发平台。

lafyun.com 内测阶段是基于 docker-compose 部署的单机版,现在平台正式开放公测,需要基于 kubernetes 部署集群版。

环境准备

Kubernetes 的部署采用 sealos 一键部署。

系统选择了 centos 7.9,最初经反复测试过 Aliyun Linux 3.x,Kubernetes 表现极不稳定,系统经常会因为 OOM 宕机或断连等问题,特别是单次启动 pod 数量过百之后,后选择了 centos 7.9 表现极其稳定。

kubernetes 选择了 v1.23.2,此版本默认已不支持 docker ,故容器运行时使用了 containerd。

安装 sealos

1
2
3
4
5
# install sealos 
wget -c https://sealyun.oss-cn-beijing.aliyuncs.com/latest/sealos && chmod +x sealos && mv sealos /usr/bin

# download sealos kubenetes package
wget -c https://sealyun.oss-cn-beijing.aliyuncs.com/28bdc92bd542d599b6ef021b8c2d7886-v1.23.2/kube1.23.2.tar.gz

部署 kubernetes

把下面节点的IP换成服务器的内网IP即可,确保 master & node 的 ip 互相可连通后:

1
2
3
4
5
6
7
8
# init & run the cluster
sealos init --user root \
--master 172.17.xx.xx \
--node 172.17.xx.yy \
--node 172.17.xx.zz \
--pkg-url /root/kube1.23.2.tar.gz \
--version v1.23.2 \
--podcidr 10.160.0.0/12

查看节点运行状态,在 master 节点运行:

1
kubectl get node

可选择让 master 成为工作节点:

1
2
# mark the master worked as worker node
kubectl taint node YOUR_MASTER_NODE_NAME node-role.kubernetes.io/master-

部署 laf.js

直接参考 laf.js 仓库下 /deploy/kubernetes 目录中的配置启动即可。

常见问题

一、增加 kubernetes 默认单个节点最大运行 110 个 Pod 的限制,在每个节点做以下操作:

- 编辑 `/var/lib/kubelet/config.yml`,修改 `maxPods` 字段即可;
- 执行 `systemctl restart kubelet` 使之生效;

二、解除 api-server 默认的 qps 限制,否则当 Pod 数量超过200时,api-server 可能会卡死或超时响应,导致集群不可用:

- 编辑 `/var/lib/kubelet/config.yml`,修改 `kubeAPIQPS` 字段为 `50` 或 更大的数字;
- 修改 `kubeAPIBurst` 字段为 `100` 或 更大的数字;
- 执行 `systemctl restart kubelet` 使之生效;

三、阿里云 ECS DNS 服务地址与默认 Pod 网段冲突,导致 Pod 无法访问外网的问题:

因为 Sealos 默认 Pod 网段 为 100.164.x.x/20,与阿里云 默认 DNS 服务地址100.x.x.x 冲突,故无法访问外网域名,需要修改 Pod 网段。
所以,在上面执行 sealos init 时我们已经加上了 --podcidr 10.160.0.0/12 选项,配置 Pod 网段为 10.160.0.0/12,已解决此问题。

如果要修改 Pod 网段,请避免使用 172.16.0.0/12 网段,会与阿里云 ECS 内网网段冲突。