sealos五分钟实战:从零构建企业级k8s高可用集群
1. 为什么选择sealos部署Kubernetes集群
第一次接触Kubernetes部署时,我被各种复杂的组件和配置搞得晕头转向。直到发现了sealos这个神器,才发现原来部署生产级Kubernetes集群可以如此简单。sealos最大的优势在于它把Kubernetes部署过程中所有繁琐的步骤都封装成了简单的命令行操作,让新手也能快速搭建起高可用的集群环境。
与传统部署方式相比,sealos有几个明显的优势:首先是全离线部署能力,这在企业内网环境中特别实用;其次是高可用架构开箱即用,不需要额外配置负载均衡;最重要的是极简操作,一条命令就能完成从系统初始化到集群部署的全过程。我在多个生产环境中实测下来,从零开始到集群就绪最快只需要5分钟。
2. 部署前的准备工作
2.1 服务器环境要求
在开始部署前,我们需要准备至少三台服务器作为Master节点。根据我的经验,企业级环境建议配置如下:
- 操作系统:CentOS 7.6+/Ubuntu 18.04+(实测CentOS 7.9最稳定)
- 硬件配置:Master节点至少2核4G,Node节点建议4核8G起
- 网络环境:所有节点需要在同一局域网内,互相能通过SSH访问
- 存储空间:系统盘至少50GB,/var分区建议单独挂载
特别提醒:所有节点需要保持时间同步,否则会导致证书验证失败。我一般使用chrony进行时间同步:
yum install -y chrony systemctl enable chronyd systemctl start chronyd chronyc sources2.2 系统初始化配置
部署前需要对所有节点进行统一的系统配置。这些配置关系到集群的稳定性和性能:
- 关闭防火墙和SELinux:
systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config- 关闭swap分区:
swapoff -a sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab- 内核参数调优: 创建/etc/sysctl.d/k8s.conf文件,加入以下内容:
net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-ip6tables=1 net.ipv4.ip_forward=1 fs.file-max=1000000 fs.inotify.max_user_instances=8192 fs.inotify.max_user_watches=1048576执行sysctl -p /etc/sysctl.d/k8s.conf使配置生效
3. 使用sealos部署高可用集群
3.1 安装sealos工具
在所有Master节点上安装sealos命令行工具:
wget https://github.com/labring/sealos/releases/download/v4.1.4/sealos_4.1.4_linux_amd64.tar.gz tar -zxvf sealos_4.1.4_linux_amd64.tar.gz sealos chmod +x sealos mv sealos /usr/bin/3.2 准备离线安装包
sealos支持从本地或远程URL加载Kubernetes离线安装包。对于企业环境,建议提前下载好离线包:
wget -c https://sealyun.oss-cn-beijing.aliyuncs.com/latest/kube1.25.0.tar.gz注意:不同版本的Kubernetes需要对应的离线包,下载前请确认版本兼容性
3.3 执行集群部署
准备好所有节点后,在任意Master节点执行部署命令:
sealos run labring/kubernetes:v1.25.0 labring/calico:v3.24.1 \ --masters 192.168.1.101,192.168.1.102,192.168.1.103 \ --nodes 192.168.1.104,192.168.1.105 \ -p yourpassword这条命令会完成以下操作:
- 自动在所有节点安装Docker和Kubernetes组件
- 初始化高可用控制平面
- 部署Calico网络插件
- 将Worker节点加入集群
4. 企业级配置与优化
4.1 高可用架构验证
部署完成后,我们需要验证集群的高可用性:
kubectl get nodes kubectl -n kube-system get pods测试Master节点故障转移:
- 随机停止一个Master节点的kube-apiserver服务
- 观察其他节点是否自动接管服务
- 检查集群操作是否正常
4.2 网络性能调优
企业级环境通常对网络性能有更高要求。如果使用Calico网络插件,可以通过以下配置优化性能:
- 启用IPIP跨子网通信:
apiVersion: projectcalico.org/v3 kind: IPPool metadata: name: default-ipv4-ippool spec: ipipMode: CrossSubnet natOutgoing: true cidr: 192.168.0.0/16- 调整BGP配置提升网络吞吐量:
calicoctl patch node k8s-node1 -p '{"spec":{"bgp":{"asNumber": "64512"}}}'4.3 存储方案集成
生产环境通常需要对接企业存储系统。以NFS为例,配置方法如下:
- 在所有节点安装NFS客户端:
yum install -y nfs-utils- 创建StorageClass:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nfs-storage provisioner: example.com/nfs parameters: server: nfs-server.example.com path: /data/nfs5. 常见问题排查
在实际部署过程中,可能会遇到各种问题。以下是我总结的几个常见问题及解决方法:
5.1 节点无法加入集群
现象:执行sealos join命令后,节点状态显示NotReady
排查步骤:
- 检查节点间网络连通性
- 确认时间同步服务正常工作
- 查看kubelet日志:
journalctl -u kubelet -f
解决方案:
systemctl restart kubelet kubeadm reset -f sealos join --node x.x.x.x5.2 Pod网络不通
现象:跨节点Pod无法互相访问
排查步骤:
- 检查Calico Pod是否正常运行
- 验证IPIP隧道是否建立:
ip tunnel show - 检查路由表是否正确
解决方案:
calicoctl node status systemctl restart calico-node5.3 证书过期问题
现象:集群运行一段时间后出现证书错误
预防措施:
- 部署前确保系统时间准确
- 定期检查证书有效期:
kubeadm certs check-expiration解决方案:
kubeadm certs renew all systemctl restart kubelet6. 集群运维管理
6.1 节点扩容与缩容
随着业务发展,可能需要动态调整集群规模。使用sealos可以轻松实现:
添加新节点:
sealos join --nodes 192.168.1.106,192.168.1.107移除节点:
sealos clean --nodes 192.168.1.106 kubectl drain 192.168.1.106 --delete-emptydir-data --force --ignore-daemonsets kubectl delete node 192.168.1.1066.2 集群升级
sealos支持无缝升级Kubernetes版本:
- 下载新版本离线包
- 执行升级命令:
sealos upgrade --pkg-url kube1.26.0.tar.gz --version v1.26.06.3 监控与日志
企业级环境需要完善的监控体系。推荐部署Prometheus-Operator:
sealos run labring/prometheus-operator:v0.55.1配置告警规则:
apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: name: node-alert spec: groups: - name: node rules: - alert: HighCPUUsage expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80 for: 5m labels: severity: warning annotations: summary: "High CPU usage on {{ $labels.instance }}"7. 安全加固建议
生产环境必须重视集群安全。以下是我在实际项目中总结的安全实践:
- RBAC权限控制:
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: default name: pod-reader rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "watch", "list"]- 网络策略:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny spec: podSelector: {} policyTypes: - Ingress - Egress- 审计日志:
apiVersion: audit.k8s.io/v1 kind: Policy rules: - level: Metadata resources: - group: "" resources: ["secrets"]- 镜像安全扫描:
sealos run labring/trivy:v0.35.08. 性能优化技巧
经过多个项目的实践,我总结出以下性能优化经验:
- kubelet参数调优:
--max-pods=100 --kube-api-qps=50 --kube-api-burst=100- etcd性能优化:
--quota-backend-bytes=8589934592 --auto-compaction-retention=24h- 调度器配置:
apiVersion: kubescheduler.config.k8s.io/v1beta2 kind: KubeSchedulerConfiguration profiles: - schedulerName: default-scheduler pluginConfig: - name: NodeResourcesFit args: scoringStrategy: type: LeastAllocated- 容器运行时优化:
{ "storage-driver": "overlay2", "log-opts": { "max-size": "100m", "max-file": "3" } }9. 备份与恢复
生产环境必须建立完善的备份机制。推荐使用velero进行集群备份:
- 安装velero:
sealos run labring/velero:v1.9.2- 创建备份:
velero backup create cluster-backup --include-namespaces=default- 设置定时备份:
velero schedule create daily-backup --schedule="@every 24h"- 恢复集群:
velero restore create --from-backup cluster-backup10. 最佳实践总结
经过多个生产环境的验证,我总结了以下最佳实践:
- 使用独立的etcd集群提升稳定性
- 为不同业务划分独立的namespace
- 设置合理的Resource Quota防止资源耗尽
- 定期进行故障演练确保高可用
- 建立完善的监控告警系统
最后提醒一点:虽然sealos极大简化了部署流程,但生产环境上线前一定要进行充分的测试和验证。建议先在测试环境完整演练所有运维操作,确保团队熟悉整个集群的生命周期管理。
