logo

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

作者:新兰2025.09.19 14:41浏览量:0

简介:本文详细解析Sealos私有化部署全流程,涵盖环境准备、安装配置、集群管理、安全加固及运维优化五大模块,提供可复用的技术方案与避坑指南,助力企业快速构建安全高效的Kubernetes环境。

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

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

在数字化转型浪潮中,企业对于容器化平台的需求已从”可用”转向”可控”。Sealos作为基于Kubernetes的轻量化云操作系统,其私有化部署方案通过物理机/虚拟机直接安装的方式,解决了传统方案中依赖公有云API、存在数据泄露风险、运维复杂度高等痛点。

典型适用场景

  1. 金融、医疗等强监管行业的数据本地化要求
  2. 大型企业构建混合云架构时的统一管理需求
  3. 边缘计算场景下离线环境的自主可控
  4. 开发测试环境与生产环境的完全隔离

相较于K3s、MicroK8s等轻量方案,Sealos的优势在于其”开箱即用”的完整Kubernetes发行版特性,集成了存储网络、监控等核心组件,同时保持了单二进制文件(40MB)的极致轻量。

二、部署前环境准备与规划

2.1 硬件资源评估

组件类型 最低配置 推荐配置 说明
控制节点 2核4G+50GB磁盘 4核8G+100GB磁盘 需支持etcd高可用
计算节点 2核4G+50GB磁盘 4核16G+200GB磁盘 根据业务负载动态扩展
存储节点 4核8G+500GB磁盘 8核16G+1TB NVMe磁盘 需支持RBD/Ceph等存储协议

网络要求

  • 节点间网络延迟<2ms(同机房部署)
  • 核心交换机带宽≥10Gbps
  • 开放端口:6443(API Server)、2379-2380(etcd)、10250(kubelet)

2.2 操作系统优化

推荐使用CentOS 7.9/Ubuntu 20.04 LTS,需完成以下预处理:

  1. # 关闭防火墙(或配置规则)
  2. systemctl stop firewalld
  3. systemctl disable firewalld
  4. # 关闭SELinux
  5. sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
  6. # 配置内核参数
  7. cat >> /etc/sysctl.conf <<EOF
  8. net.ipv4.ip_forward=1
  9. net.bridge.bridge-nf-call-iptables=1
  10. vm.swappiness=0
  11. EOF
  12. sysctl -p

三、Sealos核心部署流程

3.1 单机快速体验版

适用于开发测试环境,一键完成全功能部署:

  1. # 下载最新版本(以4.1.0为例)
  2. curl -fsSL https://get.sealos.io/v4.1.0/install.sh | sh
  3. # 启动集群(1个控制节点+1个计算节点)
  4. sealos run labring/kubernetes:v1.25.0 \
  5. --masters 192.168.1.10 \
  6. --nodes 192.168.1.11 \
  7. --passwd yourpassword

3.2 生产环境高可用部署

步骤1:etcd集群初始化

  1. # 在3个控制节点分别执行
  2. sealos gen cert --hosts=master1,master2,master3 \
  3. --cert-dir=/etc/kubernetes/pki/etcd
  4. # 启动etcd集群
  5. systemctl enable etcd
  6. cat > /etc/systemd/system/etcd.service <<EOF
  7. [Unit]
  8. Description=etcd key-value store
  9. Documentation=https://github.com/coreos/etcd
  10. [Service]
  11. Type=notify
  12. ExecStart=/usr/local/bin/etcd \\
  13. --name=master1 \\
  14. --initial-advertise-peer-urls=https://master1:2380 \\
  15. --listen-peer-urls=https://master1:2380 \\
  16. --listen-client-urls=https://master1:2379,http://127.0.0.1:2379 \\
  17. --advertise-client-urls=https://master1:2379 \\
  18. --initial-cluster=master1=https://master1:2380,master2=https://master2:2380,master3=https://master3:2380 \\
  19. --initial-cluster-token=etcd-cluster-1 \\
  20. --cert-file=/etc/kubernetes/pki/etcd/server.crt \\
  21. --key-file=/etc/kubernetes/pki/etcd/server.key \\
  22. --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
  23. Restart=on-failure
  24. RestartSec=5
  25. [Install]
  26. WantedBy=multi-user.target
  27. EOF
  28. systemctl start etcd

步骤2:控制平面部署

  1. # 生成kube-apiserver配置
  2. sealos gen kube-apiserver \
  3. --etcd-servers=https://master1:2379,https://master2:2379,https://master3:2379 \
  4. --service-cluster-ip-range=10.96.0.0/12 \
  5. --advertise-address=192.168.1.10
  6. # 启动静态Pod(在每个master节点)
  7. cat > /etc/kubernetes/manifests/kube-apiserver.yaml <<EOF
  8. apiVersion: v1
  9. kind: Pod
  10. metadata:
  11. name: kube-apiserver
  12. namespace: kube-system
  13. spec:
  14. hostNetwork: true
  15. containers:
  16. - name: kube-apiserver
  17. image: labring/kubernetes:v1.25.0
  18. command:
  19. - kube-apiserver
  20. - --etcd-servers=https://master1:2379,https://master2:2379,https://master3:2379
  21. - --advertise-address=192.168.1.10
  22. # 其他必要参数...
  23. EOF

3.3 节点动态扩缩容

添加计算节点

  1. # 在新节点执行join命令
  2. sealos join --master 192.168.1.10:6443 \
  3. --node-name worker1 \
  4. --token abcdef.1234567890abcdef \
  5. --discovery-token-ca-cert-hash sha256:xxxxxx

移除节点

  1. # 标记节点为不可调度
  2. kubectl drain worker1 --ignore-daemonsets --delete-emptydir-data
  3. # 从集群移除
  4. kubectl delete node worker1
  5. # 在节点上执行清理
  6. sealos reset

四、安全加固最佳实践

4.1 认证授权体系

RBAC配置示例

  1. # 创建自定义Role
  2. apiVersion: rbac.authorization.k8s.io/v1
  3. kind: Role
  4. metadata:
  5. namespace: dev
  6. name: pod-reader
  7. rules:
  8. - apiGroups: [""]
  9. resources: ["pods"]
  10. verbs: ["get", "list", "watch"]
  11. # 绑定Role到用户
  12. apiVersion: rbac.authorization.k8s.io/v1
  13. kind: RoleBinding
  14. metadata:
  15. name: read-pods
  16. namespace: dev
  17. subjects:
  18. - kind: User
  19. name: alice
  20. apiGroup: rbac.authorization.k8s.io
  21. roleRef:
  22. kind: Role
  23. name: pod-reader
  24. apiGroup: rbac.authorization.k8s.io

4.2 网络隔离方案

  1. Calico策略示例

    1. apiVersion: networking.k8s.io/v1
    2. kind: NetworkPolicy
    3. metadata:
    4. name: api-allow
    5. spec:
    6. podSelector:
    7. matchLabels:
    8. app: payment-api
    9. policyTypes:
    10. - Ingress
    11. ingress:
    12. - from:
    13. - namespaceSelector:
    14. matchLabels:
    15. env: prod
    16. ports:
    17. - protocol: TCP
    18. port: 8080
  2. 节点级防火墙规则

    1. # 仅允许特定IP访问API Server
    2. iptables -A INPUT -p tcp -s 10.0.0.0/8 --dport 6443 -j ACCEPT
    3. iptables -A INPUT -p tcp --dport 6443 -j DROP

五、运维监控体系构建

5.1 日志收集方案

Fluentd DaemonSet配置

  1. apiVersion: apps/v1
  2. kind: DaemonSet
  3. metadata:
  4. name: fluentd
  5. spec:
  6. template:
  7. spec:
  8. containers:
  9. - name: fluentd
  10. image: fluent/fluentd-kubernetes-daemonset:v1-debian-elasticsearch
  11. env:
  12. - name: FLUENT_ELASTICSEARCH_HOST
  13. value: "elasticsearch.logging.svc"
  14. - name: FLUENT_ELASTICSEARCH_PORT
  15. value: "9200"
  16. volumeMounts:
  17. - name: varlog
  18. mountPath: /var/log
  19. - name: varlibdockercontainers
  20. mountPath: /var/lib/docker/containers
  21. readOnly: true
  22. volumes:
  23. - name: varlog
  24. hostPath:
  25. path: /var/log
  26. - name: varlibdockercontainers
  27. hostPath:
  28. path: /var/lib/docker/containers

5.2 性能监控指标

Prometheus配置要点

  1. scrape_configs:
  2. - job_name: 'kubernetes-nodes'
  3. static_configs:
  4. - targets:
  5. - 'master1:10250'
  6. - 'worker1:10250'
  7. metrics_path: /metrics
  8. scheme: https
  9. tls_config:
  10. ca_file: /etc/prometheus/ca.crt
  11. cert_file: /etc/prometheus/client.crt
  12. key_file: /etc/prometheus/client.key

六、故障排查与优化

6.1 常见问题诊断

API Server不可用

  1. # 检查etcd健康状态
  2. ETCDCTL_API=3 etcdctl --endpoints=https://master1:2379 \
  3. --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  4. --cert=/etc/kubernetes/pki/etcd/server.crt \
  5. --key=/etc/kubernetes/pki/etcd/server.key \
  6. endpoint health
  7. # 检查kubelet日志
  8. journalctl -u kubelet -n 100 --no-pager

Pod调度失败

  1. # 查看节点资源状态
  2. kubectl describe nodes | grep -A 10 Allocated
  3. # 检查Taints和污点
  4. kubectl describe nodes | grep Taints

6.2 性能调优参数

核心配置优化

  1. # kube-apiserver优化
  2. --default-not-ready-toleration-seconds=30
  3. --default-unreachable-toleration-seconds=30
  4. --max-mutating-requests-inflight=1000
  5. --max-requests-inflight=2000
  6. # kubelet优化
  7. --kube-reserved=cpu=500m,memory=1Gi
  8. --system-reserved=cpu=500m,memory=1Gi
  9. --eviction-hard=memory.available<500Mi,nodefs.available<10%

七、升级与版本管理

7.1 热升级流程

  1. # 下载新版本镜像
  2. sealos pull labring/kubernetes:v1.26.0
  3. # 执行滚动升级
  4. sealos upgrade --image labring/kubernetes:v1.26.0 \
  5. --masters master1,master2,master3 \
  6. --nodes worker1,worker2
  7. # 验证升级状态
  8. kubectl get nodes -o wide

7.2 回滚方案

  1. # 查看升级历史
  2. sealos rollback --help
  3. # 执行回滚(需提前备份etcd数据)
  4. etcdctl snapshot restore backup.db \
  5. --data-dir=/var/lib/etcd \
  6. --name=master1 \
  7. --initial-cluster=master1=https://master1:2380,master2=https://master2:2380 \
  8. --initial-cluster-token=etcd-cluster-1

八、总结与展望

Sealos私有化部署通过其独特的”单二进制+云原生”架构,在保持Kubernetes原生特性的同时,大幅降低了企业自建容器的技术门槛。实际部署中需特别注意:

  1. 提前进行完整的网络连通性测试
  2. 建立分阶段的部署验证流程
  3. 配置完善的监控告警体系
  4. 制定详细的灾难恢复方案

未来随着Sealos 5.0版本的发布,其将集成更多AI运维能力,如自动根因分析、预测性扩容等,进一步降低私有化环境的运维复杂度。对于计划部署的企业,建议从测试环境开始,逐步验证业务系统的兼容性,最终实现全量迁移。

相关文章推荐

发表评论