尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Sealos 实战指南:从零部署高可用 Kubernetes 集群与云原生应用

Sealos 实战指南:从零部署高可用 Kubernetes 集群与云原生应用 1. 先搞清楚 Sealos 到底解决了什么核心问题如果你在找容器化部署方案尤其是想快速搭建一个私有云或 Kubernetes 集群那 Sealos 这个名字你大概率会碰到。它不是一个新概念但这两年讨论度很高核心就一句话用极简的方式把生产级的 Kubernetes 集群和相关云原生应用“装”进你的服务器里。很多人第一次接触会觉得这不就是又一个 K8s 发行版或者安装工具吗其实关键差异在于它的“一体化”和“应用商店”思路。传统方式部署 K8s你得先搞节点、装容器运行时、配网络插件、部署存储每一步都可能踩坑。Sealos 想做的是把操作系统、Kubernetes 内核、以及你需要的数据库、中间件、AI 训练平台等应用打包成一个“集群镜像”。你只需要像启动一个虚拟机镜像一样把这个集群镜像“跑”起来一个包含完整应用生态的 K8s 集群就立即可用了。所以它最适合两类人想快速搭建个人或团队开发/测试环境的开发者不想在环境搭建上耗费几天时间希望有个开箱即用的 K8s并能一键部署 MySQL、Redis、MinIO 甚至像 Kubeflow、OpenPAI 这样的复杂平台。中小团队或项目寻求轻量级私有云方案的技术负责人对公有云成本敏感或者有数据合规要求需要一套私有化部署的云原生底座但又不希望维护成本太高。Sealos 最值得你关注的点不是它宣称的性能多强这取决于你的硬件而是它大幅降低了从“有一台或多台服务器”到“拥有一个可用的云原生应用平台”的启动成本和复杂度。下面我们就从实际落地的角度拆解它到底怎么用以及有哪些你必须提前知道的边界和坑点。2. 运行 Sealos 前必须确认的环境与资源条件在动手下载任何安装包之前先花两分钟确认你的环境是否满足基本要求。很多启动失败的问题根源都在这里。2.1 硬件与操作系统要求Sealos 的设计目标是在各种常见 Linux 发行版上运行对硬件没有特别离谱的要求但为了体验顺畅你需要有明确的预期。服务器节点数量至少 1 个节点All-in-One 单机模式适合体验和开发。生产环境或需要高可用建议至少 3 个节点。操作系统主流 Linux 发行版均可如 CentOS 7.9、Ubuntu 20.04/22.04、Debian 11 等。实测中Ubuntu 22.04 是社区反馈问题最少的。内核版本建议 5.4 或更高。低版本内核可能在容器网络或存储驱动上遇到兼容性问题。资源CPU单节点建议 2 核以上。如果只是跑个 K8s 空壳1 核也能启动但几乎无法再部署其他应用。内存单节点建议 4GB 以上。内存是硬门槛K8s 核心组件如 apiserver、scheduler、controller-manager加上容器运行时和系统进程2GB 会非常吃力容易因 OOM内存溢出导致集群不稳定。磁盘系统盘建议 50GB 以上。集群镜像和应用本身会占用空间日志和容器镜像缓存也会持续增长。注意很多人用低配云服务器1核1G尝试结果卡在启动阶段或 Pod 一直处于 Pending 状态。这不是 Sealos 的 bug而是资源根本不够 K8s 自身调度。学习环境建议从 2核4G 起步。2.2 关键的前置配置这些配置不做好安装过程十有八九会报错。我一般会按照以下清单过一遍主机名与 hosts 文件确保每个节点有一个唯一且固定的主机名不要用localhost。在多节点部署时需要配置/etc/hosts文件让节点之间能通过主机名互相解析。这是 K8s 节点发现的基础。时间同步所有节点的时间必须同步。使用chronyd或ntpd服务确保时间差在几秒之内。证书验证、日志时间戳都会因此出问题。关闭防火墙与 SELinux在学习和测试环境最省事的做法是直接关闭防火墙如firewalld或ufw和 SELinux设置为permissive模式。生产环境需要精细化的安全策略但那完全是另一个话题了。关闭 SwapKubernetes 默认要求关闭 Swap 交换分区。执行swapoff -a并注释掉/etc/fstab中 swap 相关的行然后重启生效。内核模块与系统参数需要加载一些内核模块如br_netfilter,ip_vs等并调整sysctl参数如net.ipv4.ip_forward1。Sealos 安装脚本通常会帮你做但最好提前确认或手动配置避免脚本因权限问题执行失败。你可以用下面这个快速检查命令组合在目标服务器上跑一下# 检查主机名 hostname # 检查时间 date chronyc sources || ntpq -p # 检查防火墙状态 systemctl status firewalld 2/dev/null || systemctl status ufw 2/dev/null # 检查 SELinux getenforce # 检查 Swap free -h | grep Swap2.3 网络与访问准备网络互通多节点部署时确保节点之间所有端口尤其是 6443, 2379, 2380, 10250, 10259, 10257 等 K8s 常用端口可以互通。云服务器注意安全组/防火墙规则。镜像拉取Sealos 需要从 Docker Hub 或其它镜像仓库拉取基础镜像。确保服务器能正常访问这些仓库。如果网络受限需要提前配置镜像加速器或私有仓库。管理终端你需要在一台可以 SSH 连接到所有目标节点的机器上执行安装命令这台机器被称为“安装节点”或“运维节点”。把这些前置条件理清相当于铺好了跑道后面起飞才会顺利。很多“一键安装失败”的案例回头排查十有八九是这里某一步没做到位。3. 从零开始单机 All-in-One 集群部署实操我们从一个最经典的场景开始用一台机器快速部署一个包含 Kubernetes 和 Dashboard 的完整集群。这是验证 Sealos 是否能在你环境里跑起来的最佳路径。3.1 获取并运行 Sealos 安装器Sealos 提供了一个静态编译的二进制文件下载就能用不需要复杂的编译环境。第一步下载 Sealos 命令行工具。 访问 Sealos 的 GitHub Release 页面找到最新稳定版本。假设你的机器是 AMD64 架构的 Linux可以这样操作# 下载 sealos 二进制文件版本号请替换为最新版例如 v4.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 # 将 sealos 移动到系统 PATH 目录方便全局调用 sudo mv sealos /usr/local/bin/ # 验证安装 sealos version如果看到版本号输出说明工具就绪。第二步准备集群镜像。 Sealos 的核心是“集群镜像”。你需要指定一个镜像来创建集群。对于只想快速体验 K8s 的用户官方提供了labring/kubernetes:v1.25.0这样的镜像版本号可选。但更常见的是使用一个“应用镜像”它里面已经包含了 K8s 和一个应用比如带 Dashboard 的# 这是一个示例镜像包含了 k8s v1.25.0 和 kubernetes-dashboard sealos pull labring/kubernetes-dashboard:v1.25.0pull命令会下载这个集群镜像到本地。镜像体积可能有几个 GB取决于包含的内容请确保磁盘空间和网络通畅。3.2 执行集群安装命令安装命令的格式非常直观sealos run 镜像名 --masters 主节点IP --nodes 工作节点IP。对于单机 All-in-One这台机器既是 Master 也是 Node。假设你的服务器内网 IP 是192.168.1.100并且已经完成了前面所有的前置配置那么命令如下sealos run labring/kubernetes-dashboard:v1.25.0 \ --masters 192.168.1.100 \ --nodes 192.168.1.100 \ --passwd 你的服务器root密码关键参数解释--masters指定 Master控制平面节点 IP。单机就填自己。--nodes指定 Worker工作节点 IP。单机也填自己这样这台机器也会调度 Pod。--passwd提供服务器 root 用户的密码。Sealos 需要通过 SSH 连接到目标机器执行安装脚本。确保安装节点你执行命令的电脑能通过 SSH 密钥或密码直接登录目标服务器。更安全的方式是提前配置 SSH 密钥对然后使用--pk参数指定私钥文件。执行这条命令后Sealos 会开始自动化流程检查环境、安装容器运行时默认是 containerd、部署 Kubernetes 各个组件、配置网络插件默认是 calico、最后部署 Dashboard。整个过程会在终端输出大量日志你需要耐心等待几分钟到十几分钟取决于机器性能和网络。3.3 验证安装结果与访问 Dashboard安装完成后不要急着欢呼先做几个关键验证。1. 检查集群状态 在安装节点或 Master 节点上Sealos 会自动帮你配置好kubectl的访问凭证kubeconfig。直接运行kubectl get nodes你应该能看到你的节点状态为Ready。kubectl get pods -n kube-system查看kube-system命名空间下的所有 Pod确保核心组件如 apiserver, scheduler, controller-manager, calico, coredns 等都处于Running状态。2. 访问 Kubernetes Dashboard 因为我们用的镜像包含了 Dashboard它通常已经部署好了。获取访问方式# 查看 Dashboard 的 Service通常会有一个类型为 NodePort 的 service kubectl get svc -n kubernetes-dashboard找到kubernetes-dashboard服务记下它的PORT(S)例如443:30001/TCP。这意味着你可以在浏览器通过https://你的服务器IP:30001来访问 Dashboard。3. 获取登录令牌 Dashboard 默认需要 Token 登录。创建一个具有必要权限的 ServiceAccount 并获取其 Token# 创建一个admin用户并绑定集群管理员角色 (仅用于测试环境) 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 # 获取该用户的 token kubectl -n kubernetes-dashboard create token admin-user复制输出的长字符串 Token在 Dashboard 登录页选择“令牌”方式粘贴即可登录。走到这一步一个可用的单机 K8s 集群加 Web 管理界面就搭建完成了。这个过程如果顺利说明 Sealos 的基本安装流程在你的环境下是通的。但真实使用远不止于此接下来我们要看更实际的场景安装真正的应用以及处理多节点集群。4. 核心进阶安装应用与多节点集群部署单机集群跑通是第一步Sealos 的威力在于其“应用商店”模式和灵活的多节点集群管理。4.1 使用 Sealos 安装云原生应用Sealos 通过“集群镜像”来分发应用。你可以把labring/下的各种镜像看作一个个打包好的应用套餐。安装应用的命令和安装集群一模一样用的是sealos run。例如你想在刚才的集群里安装一个 MySQL 数据库sealos run labring/mysql:8.0是的就这么简单。Sealos 会识别到当前已经有一个集群然后把这个 MySQL 的应用定义部署到现有集群中。它会自动创建必要的 Namespace、Deployment、Service、ConfigMap 等资源。这里有个非常重要的点sealos run一个应用镜像时默认会安装到当前kubectl上下文所指向的集群。所以请务必确保你的kubeconfig指向的是正确的集群。你可以用kubectl config get-contexts查看。如何找到更多应用访问 Sealos 官方文档的应用市场部分。在 GitHub 上搜索labring组织里面有大量官方维护的应用镜像如labring/redis、labring/minio、labring/ingress-nginx、labring/prometheus等。使用sealos search命令如果版本支持来搜索镜像。应用安装后的管理 应用安装后其生命周期由 Kubernetes 管理而非 Sealos。你需要用kubectl来查看状态、扩缩容、查看日志等。Sealos 主要负责的是“交付”这个动作。删除应用则需要使用sealos reset命令指定对应的镜像。4.2 部署多节点高可用集群生产环境通常需要多节点甚至 Master 节点高可用。Sealos 对此的支持也很直接。准备工作 假设你有三台服务器IP 分别为Master1:192.168.1.101Master2:192.168.1.102Master3:192.168.1.103Node1:192.168.1.201确保这四台机器都满足第2部分的所有前置条件并且安装节点能通过 SSH 免密登录所有这四台机器。执行安装命令 命令结构和单机类似只是 IP 列表变长了。sealos run labring/kubernetes:v1.25.0 \ --masters 192.168.1.101,192.168.1.102,192.168.1.103 \ --nodes 192.168.1.201 \ --passwd 你的服务器密码 # 或者使用 --pk /path/to/private/key关键变化和注意事项高可用架构当你指定多个 Master IP 时Sealos 会自动为你部署高可用控制平面。通常会在这些 Master 节点上部署负载均衡器如 keepalived haproxy或者直接使用内置的高可用方案将 Kubernetes Apiserver 的访问端点一个虚拟 IP 或域名暴露出来。安装流程安装过程会先初始化第一个 Master然后将其它 Master 和 Node 依次加入集群。日志会清晰显示每个节点的加入状态。网络规划多节点下Pod 网络Calico 的 CIDR和服务网络Service CIDR需要提前规划好确保不与你的物理网络冲突。Sealos 通常有默认值但最好在安装前通过--cidr和--service-cidr参数指定。存储考虑多节点集群中如果应用需要持久化存储如数据库你需要考虑分布式存储方案如 Ceph, Longhorn而不是本地存储。Sealos 也有对应的存储应用镜像如labring/openebs可以在集群初始化后安装。安装成功后使用kubectl get nodes应该能看到所有 4 个节点均为Ready。此时你的集群就具备了基础的高可用能力。5. 生产落地必须关注的稳定性与运维要点把集群跑起来只是开始要让它在生产或长期测试环境中稳定运行有几个地方必须提前规划好。5.1 资源监控与告警一个没有监控的集群就像在黑夜中开车。Sealos 本身不提供监控但你可以轻松部署监控栈。安装 Prometheus Grafanasealos run labring/prometheus-operator:v0.55.0 # 或者分别安装 prometheus 和 grafana sealos run labring/prometheus:v2.40.5 sealos run labring/grafana:9.3.2安装后配置 Grafana 数据源为 Prometheus并导入常用的 Kubernetes 集群监控仪表盘如 3119 号仪表盘。关注核心指标节点资源CPU/内存/磁盘使用率。特别是内存K8s 节点内存压力大会导致 Pod 被驱逐。Pod 状态非 Running 状态的 Pod 数量。组件状态kube-system命名空间下核心组件的就绪和存活状态。5.2 日志集中收集集群内应用散落的日志很难排查问题。需要建立集中日志系统。方案部署labring/elasticsearch、labring/kibana和labring/fluent-bit或labring/filebeat。Fluent-bit 作为 DaemonSet 运行在每个节点上收集容器和系统日志发送到 Elasticsearch。注意Elasticsearch 对内存和磁盘消耗较大规划资源时要预留充足。生产环境建议将日志存储与业务存储分离。5.3 镜像与版本管理镜像仓库生产环境不应过度依赖 Docker Hub。建议搭建私有镜像仓库如 HarborSealos 也有labring/harbor镜像并将所有业务镜像推送到私有仓库。在安装 Sealos 集群或应用时可以通过--registry参数指定私有仓库地址。集群版本升级Kubernetes 版本迭代快。Sealos 支持集群升级但升级前务必在测试环境充分验证。查看官方文档的升级指南通常也使用sealos run一个新版本的 Kubernetes 镜像来完成升级但过程涉及 etcd 数据备份、控制平面组件更替等需要谨慎操作。5.4 网络与存储的稳定性网络插件Calico 是默认选择性能不错。但如果遇到网络不通问题首先检查 Calico Pod 是否正常节点路由表是否正确。多节点跨子网部署时需要配置 Calico 的 IPIP 模式或 BGP。存储emptyDir和hostPath仅用于临时数据或单节点测试。任何有状态应用都必须使用 PersistentVolume (PV)。在生产环境需要提前部署并测试好分布式存储系统如 Ceph RBD Longhorn并创建对应的 StorageClass。确保 Pod 在节点间迁移时数据能跟着走。5.5 备份与灾难恢复这是最容易被忽略也最重要的一环。集群配置备份定期备份/etc/kubernetes目录包含所有证书和静态 Pod 配置以及 Sealos 使用的集群配置文件。应用数据备份这取决于你的存储方案。如果使用 Longhorn它自带快照和备份功能。如果是其他存储需要制定针对性的备份策略如数据库的 dump 文件备份到对象存储。etcd 备份Kubernetes 的所有状态数据都在 etcd 中。必须定期备份 etcd。你可以通过sealos etcd相关命令或者直接使用etcdctl工具来执行快照备份并将备份文件转移到安全的位置。恢复演练定期在隔离环境中演练从备份恢复集群的过程。没有经过演练的备份方案是不可靠的。6. 常见问题排查与避坑指南即使按照指南操作也难免会遇到问题。下面是我在多次部署和协助他人时总结的最高频的几个问题及其排查思路。6.1 安装过程卡住或报错现象执行sealos run后日志停住不动或出现红色错误信息。排查顺序检查前置条件这是最常见的原因。回头严格对照第2部分尤其是时间同步、Swap关闭、防火墙/SELinux、内核参数。使用sealos exec命令可以在所有节点上执行检查脚本。检查 SSH 连接确保从“安装节点”到所有目标节点的 SSH 免密登录是通的。可以手动ssh root节点IP测试。检查网络连通性确保所有节点之间能互相 ping 通并且所需端口开放。特别是 Master 节点之间的 6443, 2379, 2380 等端口。查看详细日志sealos run命令可以加-d或--debug参数输出更详细的日志。关注报错发生的时间点附近的上下文。检查资源是否充足通过top或htop命令登录到卡住的节点查看 CPU、内存、磁盘 I/O 是否已耗尽。Kubernetes 组件启动需要一定资源。查看特定组件日志如果安装进程卡在某个 K8s 组件如 kube-apiserver启动可以到对应节点上查看容器日志# 在节点上查看 containerd 容器日志找到对应组件的容器ID crictl ps | grep kube-apiserver crictl logs 容器ID6.2 节点状态 NotReady现象kubectl get nodes显示节点状态为NotReady。排查思路检查节点系统服务登录到NotReady节点运行systemctl status kubelet。如果kubelet服务没运行或不断重启查看其日志journalctl -u kubelet -f。检查容器运行时运行systemctl status containerd或 docker。确保容器运行时正常。检查网络插件kubectl get pods -n kube-system | grep calico或其他网络插件。如果网络插件的 Pod 没有运行节点网络就无法正常建立。查看该 Pod 的日志和事件kubectl describe pod pod-name -n kube-system。检查磁盘空间df -h确保/或/var分区有足够空间。磁盘满了会导致kubelet无法工作。6.3 Pod 一直处于 Pending 状态现象部署的应用 Pod 无法启动状态为Pending。排查思路查看 Pod 事件kubectl describe pod pod-name -n namespace。事件信息会直接告诉你原因常见的有Insufficient cpu/memory集群资源不足。0/1 nodes are available: 1 node(s) had taint...节点有污点Pod 没有容忍。pod has unbound immediate PersistentVolumeClaimsPVC 没有找到合适的 PV。检查资源配额kubectl describe nodes查看节点的可分配资源。可能是你请求的资源超过了节点剩余资源。检查持久化存储如果 Pod 使用了 PVC检查 PVC 是否处于Bound状态 (kubectl get pvc)。如果没有可能是 StorageClass 配置问题或没有可用的 PV。6.4 如何重置和清理集群当你需要推倒重来时可以使用sealos reset命令。这是一个危险操作会清除集群数据。# 重置指定节点如果不指定 --force 会交互式确认 sealos reset --masters 192.168.1.101 --nodes 192.168.1.201 # 强制重置所有参与集群的节点根据安装时的记录 sealos reset --force重置命令会尝试清理 Kubernetes 组件、容器运行时、相关网络配置和数据。但为了彻底我通常还会手动做以下清理# 在每台被重置的节点上执行 kubeadm reset -f systemctl stop kubelet containerd rm -rf /etc/kubernetes /var/lib/etcd /var/lib/kubelet /etc/cni/net.d ipvsadm --clear最后别忘了把之前修改的sysctl参数和/etc/hosts文件还原。Sealos 通过“集群镜像”的概念确实大幅简化了 Kubernetes 及其生态应用的部署。对于想快速搭建云原生环境、验证应用架构的团队和个人来说它是一个高效的“敲门砖”。但务必记住工具简化的是部署流程而不是运维的复杂性。集群稳定运行后监控、日志、备份、安全、网络策略等生产级课题依然需要你投入精力去学习和实践。我的建议是先用 Sealos 在测试环境把整个流程跑通理解每个环节背后的原理再逐步将其应用到更严肃的场景中。
返回列表