尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Sealos实战:三分钟部署高可用K8s集群与云原生应用

Sealos实战:三分钟部署高可用K8s集群与云原生应用 如果你是一名开发者最近一定在各种技术社区和社群里频繁看到sealos这个名字。它可能被描述为“云操作系统”、“Kubernetes 发行版”或是“一键部署神器”。但面对这些标签你可能会困惑它到底是什么和传统的 K8s 发行版如 k3s、kubeadm有什么区别它宣称的“三分钟”部署是真的开箱即用还是又一个需要复杂配置的“玩具”这篇文章不会重复那些官方的、宽泛的介绍。我们将从一个开发者和运维工程师的实际痛点出发拆解 sealos 的核心价值它本质上是一个以应用为中心的、极致简化的 Kubernetes 交付与管理平台。它的目标不是替代 Kubernetes而是让 K8s 的安装、应用部署、集群管理变得像使用手机 App 一样简单。读完本文你将能清晰地判断 sealos 是否适合你的场景并掌握从零开始在几分钟内使用 sealos 部署一个生产可用的 Kubernetes 集群及主流云原生应用如 Nginx、MySQL、Redis的完整流程。我们不仅会“跑通”更会深入探讨其背后的设计理念、最佳实践以及那些官方文档里可能不会明说的“坑”。1. 这篇文章真正要解决的问题为什么是 sealos在云原生时代Kubernetes 已成为事实标准但其复杂性也令人望而生畏。传统的 K8s 部署和管理通常面临几个核心痛点部署复杂无论是使用 kubeadm 手动编排还是借助 Kubespray、Rancher 等工具都需要对网络、存储、系统配置有深入理解一个参数错误就可能导致整个集群部署失败。应用交付繁琐即使集群搭建成功部署一个应用如 WordPress依然需要编写复杂的 YAML 文件处理 Service、Ingress、PVC 等各种资源对象学习成本极高。集群生命周期管理困难集群的升级、备份、恢复、扩缩容等操作每一步都充满风险缺乏一个统一、可靠的工具链。离线环境部署是噩梦在内网或隔离环境中部署 K8s需要手动搬运所有镜像和依赖包过程极其繁琐且容易出错。sealos 的诞生正是为了彻底解决这些问题。它不是一个简单的安装脚本的集合而是一套完整的“交钥匙”方案。它的核心创新在于“应用镜像”的概念——将 Kubernetes 本身及其依赖如容器运行时、网络插件、存储插件打包成一个不可变的“镜像”像 Docker 镜像一样进行分发和运行。同时它将 Helm Chart、YAML 清单甚至二进制文件也打包成“应用镜像”实现一键交付。简单来说sealos 让 K8s 集群和云原生应用都变成了可版本化、可分发、可一键安装的“软件包”。这对于需要快速搭建开发测试环境、进行产品演示、构建内部 PaaS 平台或管理大规模边缘集群的团队来说价值巨大。2. 基础概念与核心原理要理解 sealos必须先理清三个核心概念集群镜像、应用镜像和launchpad。2.1 集群镜像 (Cluster Image)这是 sealos 的基石。一个集群镜像是一个包含了完整 Kubernetes 集群所需所有组件的 OCI 镜像。它不仅包括kube-apiserver、kube-controller-manager等核心组件还预置了容器运行时如 containerd、网络插件如 Calico、Cilium、存储插件如 OpenEBS以及必要的系统配置和工具。传统方式 vs Sealos 方式传统你需要准备多台主机分别安装 Docker/containerd配置主机名、防火墙、内核参数然后通过 kubeadm init 初始化控制平面再 join 工作节点最后手动安装网络、存储插件。Sealos你只需要在所有主机上安装 sealos 命令行工具然后执行一条命令sealos run labring/kubernetes:v1.27.0。sealos 会自动拉取这个集群镜像并将其“应用”到你的主机上自动完成所有初始化工作。2.2 应用镜像 (Application Image)在 sealos 看来不仅集群可以打包成镜像任何可以在 K8s 上运行的应用也可以。一个应用镜像可以是一个 Helm Chart一组 K8s YAML 文件或者一个包含部署脚本的目录。sealos 提供了sealos run命令来统一安装它们。例如安装一个高可用的 MySQL 集群不再需要研究 Helm 参数和 Values 文件只需sealos run labring/mysql:8.0这条命令会从 sealos 的公有仓库拉取 MySQL 的应用镜像并在当前集群中创建所有必要的资源StatefulSet, Service, ConfigMap 等。2.3 launchpadlaunchpad 是 sealos 的集群管理平面一个部署在 Kubernetes 内部的控制器。它负责监听集群中关于应用镜像的定制资源CRD并驱动实际的部署和生命周期管理。当你使用sealos run时命令会与 launchpad 交互由后者来执行具体的部署动作。这实现了声明式的应用管理。核心原理总结sealos 通过将复杂的软件栈和配置“镜像化”利用容器技术本身的可移植性和一致性实现了基础设施和应用的标准化、自动化交付。其底层依然基于标准的 Kubernetes API因此与现有的 K8s 生态工具如 kubectl, Helm完全兼容。3. 环境准备与前置条件在开始“三分钟部署”之前我们需要准备好实验环境。本文将以在3 台 CentOS 7.9 虚拟机上部署一个高可用 Kubernetes 集群为例。硬件与系统要求节点数量至少 2 台1 个控制平面 1 个工作节点生产环境建议至少 3 个控制平面以实现高可用。本文使用 3 台。操作系统CentOS 7.9 / Rocky Linux 8 / Ubuntu 20.04 等主流 Linux 发行版。内核版本建议 4.19。硬件配置每台机器至少 2 CPU 2 GB RAM 20 GB 磁盘空间。控制平面节点建议配置更高。网络所有节点间网络互通主机名唯一且能访问公网以下载镜像。如需离线部署需提前准备离线包。前置操作在所有节点上执行配置主机名与 hosts可选但推荐# 在 node1 (控制平面) 上 hostnamectl set-hostname master1 # 在 node2 (控制平面) 上 hostnamectl set-hostname master2 # 在 node3 (工作节点) 上 hostnamectl set-hostname node1 # 编辑 /etc/hosts 确保能互相解析 # 假设 IP 分别为 192.168.1.101, 192.168.1.102, 192.168.1.103 echo “192.168.1.101 master1” /etc/hosts echo “192.168.1.102 master2” /etc/hosts echo “192.168.1.103 node1” /etc/hosts关闭防火墙与 SELinux根据安全要求调整systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i ‘s/^SELINUXenforcing$/SELINUXpermissive/’ /etc/selinux/config关闭 swapswapoff -a sed -i ‘/ swap / s/^\(.*\)$/#\1/g’ /etc/fstab配置内核参数与模块加载cat EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter cat EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables 1 net.bridge.bridge-nf-call-ip6tables 1 net.ipv4.ip_forward 1 EOF sudo sysctl --system完成以上步骤后我们的基础环境就准备好了。接下来安装 sealos 本身。4. 安装 sealos 命令行工具sealos 的核心是一个轻量级的命令行工具只需要在**其中一台机器通常是第一个控制平面节点**上安装即可。它通过 SSH 连接到其他节点完成集群部署。安装命令在 master1 上执行# 下载并安装 sealos 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 sudo mv sealos /usr/local/bin # 验证安装 sealos version如果输出类似sealos version 4.3.7说明安装成功。关键点sealos 本身不依赖 Docker 或 Containerd它是一个静态编译的 Go 二进制文件。它会在部署过程中自动为目标节点安装容器运行时。5. 核心流程拆解三分钟部署 Kubernetes 集群现在进入最激动人心的环节。我们使用 sealos 官方维护的集群镜像labring/kubernetes:v1.27.0来部署一个包含 Calico 网络插件的 K8s 集群。部署命令仍在 master1 上执行sealos run labring/kubernetes:v1.27.0 \ labring/calico:v3.25.0 \ --masters 192.168.1.101,192.168.1.102 \ --nodes 192.168.1.103 \ -p [你的SSH密码]让我们拆解这条命令的每一个部分sealos run这是 sealos 的核心命令用于运行安装一个镜像。labring/kubernetes:v1.27.0第一个参数是 Kubernetes 集群镜像。它定义了 K8s 的版本v1.27.0和基础组件。labring/calico:v3.25.0第二个参数是网络插件镜像。sealos 允许在一个命令中连续安装多个镜像它们会按顺序执行。这里我们指定使用 Calico 作为 CNI。--masters 192.168.1.101,192.168.1.102指定控制平面节点的 IP 地址列表。sealos 会自动将这些节点初始化为一个高可用集群。--nodes 192.168.1.103指定工作节点的 IP 地址。-p [你的SSH密码]提供节点 root 用户的 SSH 密码以便 sealos 能够远程执行命令。生产环境强烈建议使用 SSH 密钥此处为演示方便使用密码执行过程发生了什么当你按下回车后sealos 会依次执行以下操作检查节点连通性。自动在所有节点上安装容器运行时默认是 containerd。将kubernetes集群镜像“展开”到所有 master 节点初始化第一个控制平面然后将其余 master 节点加入作为高可用副本。将calico网络镜像“展开”在所有节点上安装 Calico 的 DaemonSet 和相关资源。最后将 worker 节点加入集群。整个过程无需人工干预日志会清晰显示每个步骤。大约 2-3 分钟后命令执行完毕。你可以通过以下命令验证集群状态# 在 master1 上sealos 会自动将 admin.conf 配置文件放到 ~/.kube/config export KUBECONFIG/etc/kubernetes/admin.conf # 或者使用 sealos 提供的快捷方式 sealos kubectl get node你应该看到类似下面的输出所有节点状态均为ReadyNAME STATUS ROLES AGE VERSION master1 Ready control-plane 2m v1.27.0 master2 Ready control-plane 2m v1.27.0 node1 Ready none 1m v1.27.0恭喜一个高可用的 Kubernetes 集群已经部署完成。这就是“三分钟”的由来——将以往需要数小时甚至更久的繁琐工作压缩到一条命令和几分钟的等待时间。6. 完整示例一键部署云原生应用集群有了我们来体验一下 sealos 更强大的能力一键部署应用。我们以部署一个Nginx和一个MySQL为例。6.1 部署 Nginx (作为示例应用)sealos run labring/nginx:1.23.3这条命令会从仓库拉取 Nginx 的应用镜像并在默认的default命名空间中部署一个 Nginx Deployment 和 Service。检查部署状态sealos kubectl get pod,svc -l appnginx你应该能看到 Nginx 的 Pod 在运行并且有一个 ClusterIP 类型的 Service。6.2 部署 MySQL (体验复杂应用交付)MySQL 的部署需要配置密码和存储。sealos 的应用镜像通常支持通过--env参数传递配置。sealos run labring/mysql:8.0 \ --env ROOT_PASSWORDMyStrongPass123!这条命令会部署一个 MySQL 8.0 的 StatefulSet并使用你设置的 root 密码。sealos 的 MySQL 镜像已经内置了合理的存储类StorageClass配置会自动创建 PVC 来持久化数据。验证 MySQL# 获取 MySQL pod 名称 sealos kubectl get pod -l appmysql # 假设 pod 名为 mysql-0 进入 pod 执行命令 sealos kubectl exec -it mysql-0 -- mysql -uroot -p‘MyStrongPass123!’ -e “SHOW DATABASES;”6.3 部署 Dashboard (可视化集群管理)虽然 sealos 提供了sealos cloud作为更强大的管理界面但我们也可以快速部署原生的 Kubernetes Dashboard。sealos run labring/kubernetes-dashboard:v2.7.0部署完成后需要创建访问令牌。这里提供一个简单的示例生产环境请配置更安全的 RBAC# 创建服务账号和集群角色绑定 sealos kubectl apply -f - EOF apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kubernetes-dashboard --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kubernetes-dashboard EOF # 获取访问令牌 sealos kubectl -n kubernetes-dashboard create token admin-user --duration8760h复制输出的长令牌然后通过 sealos 提供的端口转发访问sealos kubectl port-forward svc/kubernetes-dashboard -n kubernetes-dashboard 8443:443现在你可以在浏览器中访问https://localhost:8443选择“令牌”登录方式粘贴刚才复制的令牌即可进入 Dashboard。通过以上三个例子你可以感受到 sealosrun命令的威力它将 Helm 的模板化、Kustomize 的定制化、以及 Operator 的生命周期管理思想封装成了一个极其简单的抽象——应用镜像。7. 运行结果与效果验证部署完成后如何进行全面的验证确保集群和应用的可用性1. 集群健康检查# 检查所有节点状态 sealos kubectl get nodes -o wide # 检查核心系统 Pod 状态kube-system 命名空间 sealos kubectl get pods -n kube-system # 检查网络插件 Pod (Calico) sealos kubectl get pods -n kube-system -l k8s-appcalico-node2. 应用功能验证对于 Nginx我们可以创建一个临时的 Pod 来访问其 Servicesealos kubectl run curl-test --imageradial/busyboxplus:curl -i --tty --rm # 进入 Pod 后执行 curl http://nginx.default.svc.cluster.local应该能看到 Nginx 的欢迎页面 HTML 代码。3. 高可用验证针对控制平面手动关闭master2节点在虚拟机中关机或断开网络然后观察集群sealos kubectl get node # master2 状态会变为 NotReady sealos kubectl get pods -n kube-system | grep api-server # API Server Pod 应仍在运行此时通过master1的kubectl命令应该依然可以正常执行证明高可用生效。恢复master2后其状态应自动恢复为Ready。8. 常见问题与排查思路即使 sealos 极大地简化了流程在实际环境中仍可能遇到问题。以下是常见问题及排查方法问题现象可能原因排查方式解决方案sealos run命令卡在Waiting for SSH to be available1. 节点 IP 错误或网络不通。2. SSH 端口22被防火墙阻止。3. SSH 密码错误或 root 登录被禁止。1. 使用ping和ssh rootip手动测试连通性。2. 检查目标节点sshd服务状态及/etc/ssh/sshd_config中PermitRootLogin设置。1. 修正 IP 或网络配置。2. 开放防火墙端口或关闭防火墙。3. 使用正确的密码或配置 SSH 密钥认证后使用-p /path/to/private_key。集群部署后节点状态为NotReady1. 网络插件如 Calico未成功部署。2. 容器运行时containerd异常。3. 节点资源CPU/内存不足。1.kubectl get pods -n kube-system查看 Calico 相关 Pod 是否 Running。2. 在问题节点上执行systemctl status containerd和crictl ps。3.kubectl describe node node-name查看事件。1. 检查 Calico 镜像是否拉取成功可尝试sealos run --force labring/calico:v3.25.0重装。2. 重启 containerd:systemctl restart containerd。3. 扩容节点资源。sealos run安装应用镜像失败1. 镜像名称或标签错误。2. 集群状态异常。3. 镜像仓库访问超时。1. 使用sealos images查看本地已有镜像或到 sealos hub 确认镜像名。2.kubectl get nodes确认集群健康。3. 查看 sealos 命令的详细错误日志。1. 使用正确的镜像名。2. 先修复集群问题。3. 对于离线环境需使用sealos pull提前拉取镜像到本地再用sealos run安装。使用sealos kubectl提示The connection to the server was refused1. Kubernetes API Server 未启动或崩溃。2./etc/kubernetes/admin.conf配置文件丢失或损坏。3. 执行命令的节点不是控制平面节点。1. 在 master 节点检查kube-apiserverpod 状态crictl ps | grep api-server。2. 检查文件是否存在ls /etc/kubernetes/admin.conf。3. 确认当前节点角色。1. 重启 API Server 相关 Pod 或节点。2. 从其他正常 master 节点复制 admin.conf 文件。3. 到正确的 master 节点上执行命令或使用 sealos 的--cluster参数指定集群。应用部署成功但无法访问1. Service 类型为 ClusterIP默认外部无法直接访问。2. Ingress 控制器未安装或配置错误。3. 应用本身监听端口错误。1.kubectl get svc查看 Service 类型和端口。2.kubectl get ingress查看 Ingress 资源。3. 进入应用 Pod 内部curl localhost:port测试。1. 将 Service 改为 NodePort 或 LoadBalancer或部署 Ingress。2. 安装 Ingress 控制器如sealos run labring/ingress-nginx:4.5.2。3. 检查应用配置。9. 最佳实践与工程建议将 sealos 用于生产环境或团队协作时遵循以下最佳实践可以避免很多麻烦使用 SSH 密钥而非密码在sealos run命令中使用-p /path/to/private_key指定密钥文件比使用密码更安全、更可靠。sealos run labring/kubernetes:v1.27.0 \ --masters 192.168.1.101 \ --nodes 192.168.1.102 \ -p ~/.ssh/id_rsa离线环境部署这是 sealos 的强项。首先在一台能联网的机器上拉取所有需要的镜像然后打包带到内网。# 在联网机器上 sealos pull labring/kubernetes:v1.27.0 sealos pull labring/calico:v3.25.0 sealos pull labring/mysql:8.0 # 保存镜像为 tar 文件 sealos save -o kubernetes.tar labring/kubernetes:v1.27.0 # 将 tar 文件拷贝到内网机器加载镜像 sealos load -i kubernetes.tar # 然后正常 run sealos 会使用本地镜像 sealos run labring/kubernetes:v1.27.0 ...版本管理与升级sealos 支持集群升级。务必先备份重要数据和应用。升级前查看官方文档了解目标版本镜像的兼容性。# 查看当前集群版本 sealos kubectl version --short # 使用新版本镜像进行升级假设从 v1.27.0 到 v1.27.1 sealos run labring/kubernetes:v1.27.1 --cluster my-cluster注意升级是滚动进行的但涉及 etcd 和核心组件存在风险务必在测试环境充分验证。自定义集群配置sealos 集群镜像支持通过配置文件进行定制。你可以创建一个Clusterfile定义集群规格、镜像列表、主机配置等。# Clusterfile.yaml apiVersion: apps.sealos.io/v1beta1 kind: Cluster metadata: name: my-prod-cluster spec: image: - labring/kubernetes:v1.27.0 - labring/calico:v3.25.0 hosts: - ips: - 192.168.1.101:22 - 192.168.1.102:22 roles: - master - ips: - 192.168.1.103:22 roles: - node ssh: pk: /root/.ssh/id_rsa然后使用sealos apply -f Clusterfile.yaml来部署这更适合于 GitOps 和自动化流程。应用管理使用sealos list查看已安装的应用使用sealos run安装新应用。对于需要复杂配置的应用建议先查看该应用镜像的文档或源码了解其支持的--env参数。对于生产环境考虑将应用配置也写入Clusterfile进行统一管理。监控与日志sealos 本身不提供监控。生产环境务必部署监控系统如sealos run labring/prometheus-operator:v0.55.0和sealos run labring/loki:v2.6.1来收集指标和日志。10. 总结与后续学习方向通过本文的实践你应该已经深刻体会到 sealos 带来的革命性简化。它通过“镜像化”的思想将 Kubernetes 及其生态应用的复杂度封装起来让用户聚焦于“使用”而非“搭建”。这对于中小团队快速构建云原生能力、教育机构进行教学演示、以及需要批量管理大量集群的场景具有极高的效率提升。sealos 的核心优势总结极简部署一条命令搞定高可用 K8s 集群。应用商店体验海量云原生应用一键交付。强大的离线能力完美适配内网、边缘等受限环境。不可变基础设施集群镜像保证了环境的一致性。它可能不适合的场景需要对 Kubernetes 每一个组件进行深度定制和调优的专家级用户。已经拥有成熟且复杂的基于 Ansible/Terraform 集群部署流水线的超大规模企业但 sealos 仍可作为快速创建标准化基础镜像的工具。你的下一步探索 sealos hub访问 hub.sealos.io 这里有数百个官方和维护良好的第三方应用镜像从数据库、消息队列到 CI/CD、AI 平台几乎涵盖了所有主流云原生应用。尝试 sealos cloudsealos 提供了免费的云端控制台cloud.sealos.io可以在浏览器中可视化地管理多个集群、部署应用体验更接近公有云的 Kubernetes 服务。构建自定义镜像当官方镜像不满足需求时学习使用sealos build命令基于 Dockerfile 或 Kubefile 构建属于自己的集群镜像或应用镜像这是实现团队内部标准化的关键。深入集群运维虽然 sealos 简化了部署但 Kubernetes 本身的运维知识如故障排查、资源调度、网络策略、安全策略仍然至关重要。建议结合 sealos 提供的稳定基础深入学习 K8s 原生 API 和生态工具。技术工具的终极价值是解放生产力。sealos 正是这样一把利器它降低了云原生的入门门槛让开发者能更快地触及 Kubernetes 的核心价值——编排与管理应用本身。建议你将本文作为手册收藏在下次需要搭建环境时亲手体验这“三分钟”的魔力。
返回列表