简介:本文提供Sealos私有化部署的完整流程,涵盖环境准备、安装配置、集群管理及运维优化,助力企业实现高效稳定的Kubernetes集群私有化部署。
Sealos作为一款轻量级Kubernetes发行版,其私有化部署方案通过将控制权完全交给用户,解决了公有云服务存在的数据隐私、网络依赖、成本不可控等痛点。尤其适用于金融、政务、医疗等对数据主权有严格要求的行业,以及需要定制化内核参数、网络插件的复杂场景。相较于自建Kubernetes集群,Sealos私有化方案将部署周期从数周缩短至半小时内,同时提供完整的集群生命周期管理能力。
swapoff -a)
# 修改/etc/sysctl.confnet.ipv4.ip_forward=1net.bridge.bridge-nf-call-iptables=1fs.may_detach_mounts=1# 执行生效sysctl -p
# 下载安装脚本(以v4.2.0为例)curl -sfL https://sealyun.oss-cn-beijing.aliyuncs.com/sealos/latest/sealos-amd64 -o sealoschmod +x sealos && mv sealos /usr/bin# 创建单节点集群sealos run labring/kubernetes:v1.28.0 \--masters 192.168.1.10 \--nodes 192.168.1.11,192.168.1.12 \--passwd yourpassword
# 生成TLS证书(需提前准备CA)cfssl gencert -ca=ca.pem -ca-key=ca-key.pem \-config=ca-config.json -hostname="etcd1,etcd2,etcd3" \-profile=kubernetes etcd-csr.json | cfssljson -bare etcd# 启动etcd集群(各节点执行)docker run -d --name etcd \--network host \-v /etc/etcd:/etc/etcd \k8s.gcr.io/etcd:3.5.4 \etcd --name etcd1 \--initial-advertise-peer-urls https://${IP}:2380 \--listen-peer-urls https://${IP}:2380 \--listen-client-urls https://${IP}:2379,https://127.0.0.1:2379 \--advertise-client-urls https://${IP}:2379 \--initial-cluster-token etcd-cluster-1 \--initial-cluster "etcd1=https://${IP1}:2380,etcd2=https://${IP2}:2380,etcd3=https://${IP3}:2380" \--initial-cluster-state new \--cert-file=/etc/etcd/etcd.pem \--key-file=/etc/etcd/etcd-key.pem \--trusted-ca-file=/etc/etcd/ca.pem \--peer-cert-file=/etc/etcd/etcd.pem \--peer-key-file=/etc/etcd/etcd-key.pem \--peer-trusted-ca-file=/etc/etcd/ca.pem
# api-server启动参数示例--advertise-address=${MASTER_IP}--etcd-servers=https://${ETCD1}:2379,https://${ETCD2}:2379,https://${ETCD3}:2379--service-cluster-ip-range=10.96.0.0/12--enable-admission-plugins=NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook
kubectl drain node-name —ignore-daemonsets —delete-emptydir-data
kubectl delete node node-name
- **标签管理**:```bashkubectl label nodes node1 disktype=ssdkubectl label nodes node2 zone=east
apiVersion: storage.k8s.io/v1kind: StorageClassmetadata:name: local-storageprovisioner: kubernetes.io/no-provisionervolumeBindingMode: WaitForFirstConsumer
# 修改kube-proxy配置kubectl edit configmap kube-proxy -n kube-system# 将mode: ""改为mode: "ipvs"# 重启kube-proxykubectl delete pod -n kube-system -l k8s-app=kube-proxy
apiVersion: v1
kind: ConfigMap
metadata:
name: fluentd-config
data:
fluent.conf: |
@type tail
path /var/log/containers/.log
pos_file /var/log/es-containers.log.pos
tag kubernetes.
format json
time_key time
time_format %Y-%m-%dT%H:%M:%S.%NZ
@type elasticsearch
host elasticsearch
port 9200
logstash_format true
### 2. 性能监控指标- **Prometheus配置要点**:```yaml# scrape_configs示例- job_name: 'kubernetes-nodes'static_configs:- targets: ['192.168.1.10:9100', '192.168.1.11:9100']metrics_path: /metricsrelabel_configs:- source_labels: [__address__]target_label: instance
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
namespace: default
subjects:
apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: default-deny-allspec:podSelector: {}policyTypes:- Ingress- Egress---apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: allow-frontendspec:podSelector:matchLabels:app: frontendpolicyTypes:- Ingressingress:- from:- podSelector:matchLabels:app: apiports:- protocol: TCPport: 80
节点NotReady状态:
# 检查kubelet日志journalctl -u kubelet -n 100 --no-pager# 常见原因:# 1. 证书过期:需重新生成并分发证书# 2. 网络连通性问题:检查防火墙规则# 3. 资源不足:查看/var/log/messages中的OOM记录
API Server无响应:
# 检查etcd健康状态ETCDCTL_API=3 etcdctl --endpoints=${ETCD_ENDPOINTS} \--cacert=/etc/kubernetes/pki/etcd/ca.crt \--cert=/etc/kubernetes/pki/etcd/server.crt \--key=/etc/kubernetes/pki/etcd/server.key \endpoint health# 检查API Server审计日志kubectl logs --namespace=kube-system kube-apiserver-${NODE_NAME} | grep -i error
# 1. 添加新版本节点sealos join --masters new-master-ip --nodes new-node-ip --version v1.29.0# 2. 迁移工作负载kubectl cordon old-nodekubectl drain old-node --ignore-daemonsets# 3. 验证新节点kubectl get nodes -l kubernetes.io/version=v1.29.0# 4. 移除旧节点kubectl delete node old-node
# 1. 恢复etcd数据(需提前备份)ETCDCTL_API=3 etcdctl snapshot restore snapshot.db \--name=etcd1 \--initial-cluster="etcd1=http://${IP1}:2380,etcd2=http://${IP2}:2380,etcd3=http://${IP3}:2380" \--initial-cluster-token=etcd-cluster-1 \--initial-advertise-peer-urls=http://${IP1}:2380 \--data-dir=/var/lib/etcd-backup# 2. 重启控制平面组件systemctl restart kube-apiserver kube-controller-manager kube-scheduler
Sealos私有化部署方案通过高度集成的安装方式和灵活的扩展能力,显著降低了Kubernetes的落地门槛。建议企业用户:
对于超大规模集群(>1000节点),建议采用分区域部署架构,配合Service Mesh实现跨区域服务治理。实际部署中,约78%的用户选择混合部署模式(既包含虚拟机也包含物理机),这种架构在资源利用率和故障隔离方面表现优异。