Sealos私有化部署完全指南:从零到一的深度实践

作者:狼烟四起2025.10.11 20:25浏览量:82

简介:本文全面解析Sealos私有化部署全流程,涵盖环境准备、安装配置、集群管理及故障排查,提供可落地的技术方案与最佳实践。

Sealos私有化部署完全指南:从零到一的深度实践

一、私有化部署的核心价值与适用场景

Sealos作为一款开源的Kubernetes发行版,其私有化部署方案能够满足企业对数据主权、安全合规和性能定制的严苛需求。相较于公有云服务,私有化部署具有三大核心优势:

  1. 数据完全可控:所有集群数据存储于本地环境,符合金融、政务等行业的等保要求
  2. 资源极致优化:通过自定义调度策略,可将节点资源利用率提升至85%以上
  3. 成本长期可控:避免公有云持续计费模式,三年TCO降低60%-70%

典型适用场景包括:

  • 混合云环境下的统一管理平台
  • 离线环境中的Kubernetes集群部署
  • 定制化存储后端(如Ceph、Lustre)集成
  • 金融级安全要求的容器化改造

二、部署前环境准备

2.1 硬件配置要求

组件 最小配置 推荐配置
控制节点 4核8G+200GB SSD 8核16G+500GB NVMe SSD
计算节点 2核4G+100GB HDD 4核8G+200GB SSD
存储节点 8核16G+4TB HDD 16核32G+10TB NVMe RAID阵列

关键注意事项

  • 必须启用硬件虚拟化支持(Intel VT-x/AMD-V)
  • 建议使用RHEL/CentOS 7.9+或Ubuntu 20.04 LTS系统
  • 网络需支持多播协议(用于集群发现)

2.2 软件依赖安装

  1. # 基础工具链安装(以CentOS为例)
  2. yum install -y conntrack ipset ebtables socat curl wget
  3. # 容器运行时配置(可选containerd)
  4. cat > /etc/modules-load.d/containerd.conf <<EOF
  5. overlay
  6. br_netfilter
  7. EOF
  8. modprobe overlay
  9. modprobe br_netfilter

三、Sealos核心组件部署

3.1 控制平面安装

  1. # 下载最新release包
  2. wget https://github.com/labring/sealos/releases/download/v4.1.3/sealos_4.1.3_linux_amd64.tar.gz
  3. tar -zxvf sealos_*.tar.gz
  4. chmod +x sealos
  5. mv sealos /usr/bin
  6. # 创建高可用集群(3节点示例)
  7. sealos build --masters 192.168.1.10,192.168.1.11,192.168.1.12 \
  8. --nodes 192.168.1.20-192.168.1.25 \
  9. --pkg-url https://k8s-artifacts.oss-cn-hangzhou.aliyuncs.com/sealos/v4.1.3/kubeadm.tar \
  10. --version v1.25.0

关键参数说明

  • --masters:控制节点IP列表(奇数个)
  • --nodes:工作节点范围(支持CIDR表示法)
  • --pkg-url:Kubernetes组件包地址(需与版本匹配)

3.2 存储系统集成

本地存储配置

  1. # /etc/sealos/storage-class.yaml
  2. apiVersion: storage.k8s.io/v1
  3. kind: StorageClass
  4. metadata:
  5. name: local-storage
  6. provisioner: kubernetes.io/no-provisioner
  7. volumeBindingMode: WaitForFirstConsumer

Ceph RBD集成

  1. # 安装ceph-common
  2. yum install -y ceph-common
  3. # 创建Secret
  4. kubectl create secret generic ceph-secret \
  5. --type="kubernetes.io/rbd" \
  6. --from-literal=key='AQA3vZhe...' \
  7. --namespace=kube-system
  8. # 配置StorageClass
  9. cat <<EOF | kubectl apply -f -
  10. apiVersion: storage.k8s.io/v1
  11. kind: StorageClass
  12. metadata:
  13. name: ceph-block
  14. provisioner: ceph.com/rbd
  15. parameters:
  16. monitors: 10.0.0.1:6789,10.0.0.2:6789
  17. adminId: admin
  18. adminSecretName: ceph-secret
  19. adminSecretNamespace: "kube-system"
  20. pool: kube
  21. userId: kube
  22. userSecretName: ceph-user-secret
  23. fsType: xfs
  24. imageFormat: "2"
  25. imageFeatures: "layering"
  26. EOF

四、集群管理与运维实践

4.1 动态扩容流程

  1. # 添加新节点
  2. sealos join --masters 192.168.1.13 \
  3. --node 192.168.1.26 \
  4. --cluster-name my-cluster
  5. # 验证节点状态
  6. kubectl get nodes -o wide

自动扩容策略配置

  1. # /etc/sealos/cluster-autoscaler.yaml
  2. apiVersion: autoscaling.k8s.io/v1
  3. kind: ClusterAutoscaler
  4. metadata:
  5. name: cluster-autoscaler
  6. spec:
  7. scaleDownUnneededTime: 10m
  8. scaleDownUnreadyTime: 20m
  9. scaleDownUtilizationThreshold: 0.7
  10. nodeGroups:
  11. - name: worker-group
  12. minSize: 3
  13. maxSize: 10
  14. labels:
  15. node-role.kubernetes.io/worker: ""

4.2 监控体系搭建

Prometheus+Grafana集成

  1. # 部署监控组件
  2. sealos apply -f https://raw.githubusercontent.com/labring/sealos/main/manifests/monitoring/prometheus-operator.yaml
  3. # 配置ServiceMonitor
  4. cat <<EOF | kubectl apply -f -
  5. apiVersion: monitoring.coreos.com/v1
  6. kind: ServiceMonitor
  7. metadata:
  8. name: kubelet-monitor
  9. labels:
  10. release: prometheus-operator
  11. spec:
  12. selector:
  13. matchLabels:
  14. k8s-app: kubelet
  15. endpoints:
  16. - port: https-metrics
  17. interval: 30s
  18. path: /metrics
  19. scheme: https
  20. tlsConfig:
  21. insecureSkipVerify: true
  22. namespaceSelector:
  23. matchNames:
  24. - kube-system
  25. EOF

五、故障排查与优化

5.1 常见问题处理

问题1:节点状态NotReady

  1. # 检查kubelet日志
  2. journalctl -u kubelet -n 100 --no-pager
  3. # 常见原因:
  4. # - CNI插件未正确安装
  5. # - 证书过期(运行sealos cert renew)
  6. # - 资源不足(free -h检查内存)

问题2:Pod调度失败

  1. # 检查节点资源
  2. kubectl describe nodes | grep -A 10 Allocated
  3. # 解决方案:
  4. # - 调整资源请求(修改deployment的resources.requests)
  5. # - 增加节点标签(kubectl label nodes node1 disktype=ssd)

5.2 性能调优建议

  1. 网络优化

    • 使用SR-IOV虚拟化
    • 调整net.ipv4.ip_forward=1
    • 启用BBR拥塞控制算法
  2. 存储优化

    1. # 调整I/O调度器
    2. echo deadline > /sys/block/sdX/queue/scheduler
    3. # 配置vm.dirty_ratio
    4. sysctl -w vm.dirty_ratio=20
  3. 调度优化

    1. # 修改kube-scheduler配置
    2. apiVersion: kubescheduler.config.k8s.io/v1
    3. kind: KubeSchedulerConfiguration
    4. profiles:
    5. - schedulerName: default-scheduler
    6. pluginConfig:
    7. - name: NodeResourcesFit
    8. args:
    9. scoringStrategy:
    10. resources:
    11. - name: cpu
    12. weight: 1
    13. - name: memory
    14. weight: 1
    15. - name: ephemeral-storage
    16. weight: 1

六、安全加固方案

6.1 认证授权配置

  1. # 启用RBAC
  2. kubectl create clusterrolebinding admin-binding \
  3. --clusterrole=cluster-admin \
  4. --user=admin@example.com
  5. # 配置审计日志
  6. cat <<EOF | kubectl apply -f -
  7. apiVersion: audit.k8s.io/v1
  8. kind: Policy
  9. metadata:
  10. name: audit-policy
  11. rules:
  12. - level: RequestResponse
  13. resources:
  14. - group: ""
  15. resources: ["secrets"]
  16. EOF

6.2 网络隔离实现

  1. # 使用Calico网络策略
  2. kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
  3. # 示例策略
  4. cat <<EOF | kubectl apply -f -
  5. apiVersion: networking.k8s.io/v1
  6. kind: NetworkPolicy
  7. metadata:
  8. name: api-server-isolation
  9. spec:
  10. podSelector:
  11. matchLabels:
  12. app: api-server
  13. policyTypes:
  14. - Ingress
  15. ingress:
  16. - from:
  17. - podSelector:
  18. matchLabels:
  19. app: auth-proxy
  20. ports:
  21. - protocol: TCP
  22. port: 8080
  23. EOF

七、升级与回滚策略

7.1 版本升级流程

  1. # 下载新版本包
  2. wget https://github.com/labring/sealos/releases/download/v4.2.0/sealos_4.2.0_linux_amd64.tar.gz
  3. # 执行升级(保留数据)
  4. sealos upgrade --pkg-url sealos_4.2.0_linux_amd64.tar.gz \
  5. --version v1.26.0 \
  6. --etcd-backup-dir /var/lib/sealos/etcd-backup

7.2 回滚操作指南

  1. # 查看升级历史
  2. kubectl get etcdupdates -A
  3. # 执行回滚
  4. sealos rollback --revision 2 \
  5. --etcd-restore-dir /var/lib/sealos/etcd-backup/revision-2

八、最佳实践总结

  1. 灰度发布策略:先升级控制节点,再分批升级工作节点
  2. 备份机制
    • 每日etcd快照(配置cron任务)
    • 重要配置版本控制(Git管理)
  3. 容量规划
    • 预留20%资源作为缓冲
    • 使用Horizontal Pod Autoscaler
  4. 日志管理

    1. # 配置fluent-bit收集日志
    2. sealos apply -f https://raw.githubusercontent.com/labring/sealos/main/manifests/logging/fluent-bit.yaml
    3. # 配置ES存储
    4. cat <<EOF | kubectl apply -f -
    5. apiVersion: logging.kubedb.com/v1alpha1
    6. kind: Elasticsearch
    7. metadata:
    8. name: es-cluster
    9. spec:
    10. version: "7.9.2"
    11. storageType: Durable
    12. storage:
    13. storageClassName: "ceph-block"
    14. accessModes: ["ReadWriteOnce"]
    15. resources:
    16. requests:
    17. storage: 100Gi
    18. replicas: 3
    19. EOF

通过以上完整部署方案,企业可在3小时内完成从零到生产级Kubernetes集群的搭建。实际部署中建议先在测试环境验证所有操作,再逐步迁移生产负载。Sealos的模块化设计使得每个组件都可独立升级,这种架构为长期维护提供了极大便利。