简介:本文全面解析Sealos私有化部署全流程,涵盖环境准备、安装配置、集群管理及故障排查,提供可落地的技术方案与最佳实践。
Sealos作为一款开源的Kubernetes发行版,其私有化部署方案能够满足企业对数据主权、安全合规和性能定制的严苛需求。相较于公有云服务,私有化部署具有三大核心优势:
典型适用场景包括:
| 组件 | 最小配置 | 推荐配置 |
|---|---|---|
| 控制节点 | 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阵列 |
关键注意事项:
# 基础工具链安装(以CentOS为例)yum install -y conntrack ipset ebtables socat curl wget# 容器运行时配置(可选containerd)cat > /etc/modules-load.d/containerd.conf <<EOFoverlaybr_netfilterEOFmodprobe overlaymodprobe br_netfilter
# 下载最新release包wget https://github.com/labring/sealos/releases/download/v4.1.3/sealos_4.1.3_linux_amd64.tar.gztar -zxvf sealos_*.tar.gzchmod +x sealosmv sealos /usr/bin# 创建高可用集群(3节点示例)sealos build --masters 192.168.1.10,192.168.1.11,192.168.1.12 \--nodes 192.168.1.20-192.168.1.25 \--pkg-url https://k8s-artifacts.oss-cn-hangzhou.aliyuncs.com/sealos/v4.1.3/kubeadm.tar \--version v1.25.0
关键参数说明:
--masters:控制节点IP列表(奇数个)--nodes:工作节点范围(支持CIDR表示法)--pkg-url:Kubernetes组件包地址(需与版本匹配)
# /etc/sealos/storage-class.yamlapiVersion: storage.k8s.io/v1kind: StorageClassmetadata:name: local-storageprovisioner: kubernetes.io/no-provisionervolumeBindingMode: WaitForFirstConsumer
# 安装ceph-commonyum install -y ceph-common# 创建Secretkubectl create secret generic ceph-secret \--type="kubernetes.io/rbd" \--from-literal=key='AQA3vZhe...' \--namespace=kube-system# 配置StorageClasscat <<EOF | kubectl apply -f -apiVersion: storage.k8s.io/v1kind: StorageClassmetadata:name: ceph-blockprovisioner: ceph.com/rbdparameters:monitors: 10.0.0.1:6789,10.0.0.2:6789adminId: adminadminSecretName: ceph-secretadminSecretNamespace: "kube-system"pool: kubeuserId: kubeuserSecretName: ceph-user-secretfsType: xfsimageFormat: "2"imageFeatures: "layering"EOF
# 添加新节点sealos join --masters 192.168.1.13 \--node 192.168.1.26 \--cluster-name my-cluster# 验证节点状态kubectl get nodes -o wide
自动扩容策略配置:
# /etc/sealos/cluster-autoscaler.yamlapiVersion: autoscaling.k8s.io/v1kind: ClusterAutoscalermetadata:name: cluster-autoscalerspec:scaleDownUnneededTime: 10mscaleDownUnreadyTime: 20mscaleDownUtilizationThreshold: 0.7nodeGroups:- name: worker-groupminSize: 3maxSize: 10labels:node-role.kubernetes.io/worker: ""
# 部署监控组件sealos apply -f https://raw.githubusercontent.com/labring/sealos/main/manifests/monitoring/prometheus-operator.yaml# 配置ServiceMonitorcat <<EOF | kubectl apply -f -apiVersion: monitoring.coreos.com/v1kind: ServiceMonitormetadata:name: kubelet-monitorlabels:release: prometheus-operatorspec:selector:matchLabels:k8s-app: kubeletendpoints:- port: https-metricsinterval: 30spath: /metricsscheme: httpstlsConfig:insecureSkipVerify: truenamespaceSelector:matchNames:- kube-systemEOF
问题1:节点状态NotReady
# 检查kubelet日志journalctl -u kubelet -n 100 --no-pager# 常见原因:# - CNI插件未正确安装# - 证书过期(运行sealos cert renew)# - 资源不足(free -h检查内存)
问题2:Pod调度失败
# 检查节点资源kubectl describe nodes | grep -A 10 Allocated# 解决方案:# - 调整资源请求(修改deployment的resources.requests)# - 增加节点标签(kubectl label nodes node1 disktype=ssd)
网络优化:
net.ipv4.ip_forward=1存储优化:
# 调整I/O调度器echo deadline > /sys/block/sdX/queue/scheduler# 配置vm.dirty_ratiosysctl -w vm.dirty_ratio=20
调度优化:
# 修改kube-scheduler配置apiVersion: kubescheduler.config.k8s.io/v1kind: KubeSchedulerConfigurationprofiles:- schedulerName: default-schedulerpluginConfig:- name: NodeResourcesFitargs:scoringStrategy:resources:- name: cpuweight: 1- name: memoryweight: 1- name: ephemeral-storageweight: 1
# 启用RBACkubectl create clusterrolebinding admin-binding \--clusterrole=cluster-admin \--user=admin@example.com# 配置审计日志cat <<EOF | kubectl apply -f -apiVersion: audit.k8s.io/v1kind: Policymetadata:name: audit-policyrules:- level: RequestResponseresources:- group: ""resources: ["secrets"]EOF
# 使用Calico网络策略kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml# 示例策略cat <<EOF | kubectl apply -f -apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: api-server-isolationspec:podSelector:matchLabels:app: api-serverpolicyTypes:- Ingressingress:- from:- podSelector:matchLabels:app: auth-proxyports:- protocol: TCPport: 8080EOF
# 下载新版本包wget https://github.com/labring/sealos/releases/download/v4.2.0/sealos_4.2.0_linux_amd64.tar.gz# 执行升级(保留数据)sealos upgrade --pkg-url sealos_4.2.0_linux_amd64.tar.gz \--version v1.26.0 \--etcd-backup-dir /var/lib/sealos/etcd-backup
# 查看升级历史kubectl get etcdupdates -A# 执行回滚sealos rollback --revision 2 \--etcd-restore-dir /var/lib/sealos/etcd-backup/revision-2
日志管理:
# 配置fluent-bit收集日志sealos apply -f https://raw.githubusercontent.com/labring/sealos/main/manifests/logging/fluent-bit.yaml# 配置ES存储cat <<EOF | kubectl apply -f -apiVersion: logging.kubedb.com/v1alpha1kind: Elasticsearchmetadata:name: es-clusterspec:version: "7.9.2"storageType: Durablestorage:storageClassName: "ceph-block"accessModes: ["ReadWriteOnce"]resources:requests:storage: 100Gireplicas: 3EOF
通过以上完整部署方案,企业可在3小时内完成从零到生产级Kubernetes集群的搭建。实际部署中建议先在测试环境验证所有操作,再逐步迁移生产负载。Sealos的模块化设计使得每个组件都可独立升级,这种架构为长期维护提供了极大便利。