私有云K8s(自建/VMware/OpenStack)整体架构解析
2026/8/22 9:11:06 网站建设 项目流程

技术栈:Kubernetes v1.32.13 + Rocky Linux 8.6 + 公私云混合架构 + Containerd 1.7.x

操作环境 / 对接原理 / 详细步骤 / 完整命令 / 配置文件 / 验证流程 / 排错方案

私有云K8s(自建/VMware/OpenStack)整体架构解析

操作环境

  • K8s 集群环境:私有云自建集群(k8s-master 192.168.1.10, k8s-node1 192.168.1.11, k8s-node2 192.168.1.12)+ 公有云托管K8s(ACK/TKE/CCE),K8s 版本 v1.32.13
  • 公私云对接场景:公私云架构差异与选型,已部署私有云K8s集群和公有云托管K8s集群,跨云网络已打通(专线/VPN),统一管理平台已配置
  • 操作系统 Rocky Linux 8.6,容器运行时 Containerd 1.7.x,网络插件 Calico,存储已配置LocalPV/NFS/云盘
  • 已配置跨云统一监控(Prometheus+Grafana)、统一日志(ELK/EFK)、统一链路追踪(SkyWalking/OpenTelemetry)
  • 已配置跨云统一CI/CD流水线(Jenkins/GitLab CI/ArgoCD)、统一镜像仓库(Harbor)、统一权限体系(RBAC/SSO)

对接原理

私有云K8s(自建/VMware/OpenStack)整体架构解析是 K8s 公有云私有云资源对接中的核心操作场景。公私云资源对接旨在实现私有云自建K8s与公有云托管K8s的统一管理、统一运维、统一监控、统一安全、统一成本管控,解决多云架构下的架构差异、网络差异、存储差异、权限差异、运维差异等问题。公私云架构差异与选型作为公私云对接的具体领域,负责架构选型、网络适配、存储适配、安全权限、监控运维、迁移割接、高可用容灾、成本优化、自动化运维等核心能力。运维操作的核心目标是确保公私云集群的高可用、业务连续性、数据安全性、成本可控性:通过规范化的架构选型确保公私云适配,通过统一的网络存储适配确保跨云通信和数据共享,通过统一的安全权限体系确保跨云安全合规,通过统一的监控运维体系确保跨云可观测,通过合理的成本优化确保资源利用率,通过高可用容灾确保业务连续性,通过自动化运维提升效率。所有操作需遵循业务无感知原则,对公私云资源的变更采用灰度和滚动方式,避免影响业务。

详细步骤

1. 公私云现状盘点与集群状态检查

# 1. 检查私有云K8s集群状态
kubectl get nodes -o wide --context=private-cloud
kubectl get pods -A -o wide --context=private-cloud | head -30

# 2. 检查公有云K8s集群状态
kubectl get nodes -o wide --context=public-cloud
kubectl get pods -A -o wide --context=public-cloud | head -30

# 3. 检查跨云网络连通性
# 从私有云节点ping公有云节点
ping -c 3 <public-cloud-node-ip>
# 检查专线/VPN状态
ip route | grep -E 'public|vpn|专线'
# 检查跨云端口连通性
telnet <public-cloud-node-ip> 6443
nc -zv <public-cloud-node-ip> 10250

# 4. 检查跨云DNS解析
nslookup <public-cloud-service>.<namespace>.svc.cluster.local
# 检查CoreDNS配置
kubectl get cm coredns -n kube-system --context=private-cloud -o yaml | head -50

# 5. 检查跨云镜像仓库
# 检查Harbor
curl -s https://harbor.example.com/api/v2.0/health
# 检查镜像同步
# kubectl exec -n harbor harbor-core-0 -- curl -s http://localhost:8080/api/v2.0/replications

# 6. 检查跨云统一监控
# 检查Prometheus联邦
kubectl get cm -n monitoring prometheus-config --context=private-cloud -o yaml | grep -A10 'remote_write\|federation'
# 检查Grafana多数据源
kubectl get cm -n monitoring grafana-datasources --context=private-cloud -o yaml | head -50

# 7. 检查跨云统一日志
# 检查日志采集
kubectl get pods -n logging --context=private-cloud
kubectl get pods -n logging --context=public-cloud
# 检查Elasticsearch
kubectl exec -n logging elasticsearch-0 -- curl -s http://localhost:9200/_cluster/health

# 8. 检查跨云权限体系
# 检查RBAC
kubectl get clusterrolebinding --context=private-cloud | head -20
kubectl get clusterrolebinding --context=public-cloud | head -20
# 检查SSO/统一认证
kubectl get cm -n kube-system oidc-config --context=private-cloud -o yaml 2>/dev/null | head -30

# 9. 导出配置备份
kubectl get all -A -o yaml --context=private-cloud > /tmp/private_cloud_state_$(date +%Y%m%d).yaml
kubectl get all -A -o yaml --context=public-cloud > /tmp/public_cloud_state_$(date +%Y%m%d).yaml
echo "公私云配置已备份到 /tmp/"

2. 制定操作方案与备份防护

# 1. 备份公私云配置(操作前必做)
kubectl get cm -A -o yaml --context=private-cloud > /tmp/private_cm_backup_$(date +%Y%m%d_%H%M%S).yaml
kubectl get secret -A -o yaml --context=private-cloud > /tmp/private_secret_backup_$(date +%Y%m%d_%H%M%S).yaml
kubectl get deployment,statefulset,daemonset -A -o yaml --context=private-cloud > /tmp/private_workload_backup_$(date +%Y%m%d_%H%M%S).yaml
kubectl get cm -A -o yaml --context=public-cloud > /tmp/public_cm_backup_$(date +%Y%m%d_%H%M%S).yaml
kubectl get secret -A -o yaml --context=public-cloud > /tmp/public_secret_backup_$(date +%Y%m%d_%H%M%S).yaml
kubectl get deployment,statefulset,daemonset -A -o yaml --context=public-cloud > /tmp/public_workload_backup_$(date +%Y%m%d_%H%M%S).yaml

# 2. 记录当前公私云状态
echo "=== 公私云状态记录 $(date) ===" > /tmp/cloud_status_$(date +%Y%m%d).txt
echo "--- 私有云节点 ---" >> /tmp/cloud_status_$(date +%Y%m%d).txt
kubectl get nodes -o wide --context=private-cloud >> /tmp/cloud_status_$(date +%Y%m%d).txt
echo "--- 公有云节点 ---" >> /tmp/cloud_status_$(date +%Y%m%d).txt
kubectl get nodes -o wide --context=public-cloud >> /tmp/cloud_status_$(date +%Y%m%d).txt
echo "--- 跨云网络 ---" >> /tmp/cloud_status_$(date +%Y%m%d).txt
ping -c 3 <public-cloud-node-ip> >> /tmp/cloud_status_$(date +%Y%m%d).txt 2>&1
cat /tmp/cloud_status_$(date +%Y%m%d).txt

# 3. 制定操作方案
cat > /tmp/cloud_operation_plan.md << 'EOF'
# 公私云操作方案
## 一、操作目标
## 二、影响范围评估
## 三、操作步骤与时间窗口
## 四、回滚方案
## 五、验证标准
## 六、风险点与应对措施
EOF
echo "操作方案模板已创建"

# 4. 确认业务窗口
echo "当前时间: $(date)"
echo "建议在业务低峰期执行公私云操作,避免影响业务"

# 5. 通知相关业务方
# echo "公私云运维操作通知" | mail -s "公私云通知" admin@example.com

3. 执行公私云配置适配操作

# 1. 检查公私云架构差异
# 私有云控制平面
kubectl get pods -n kube-system --context=private-cloud | grep -E 'apiserver|controller|scheduler|etcd'
# 公有云控制平面(托管,通常不可见)
kubectl get nodes --context=public-cloud
# 检查版本差异
kubectl version --context=private-cloud --short
kubectl version --context=public-cloud --short

# 2. 检查公私云网络适配
# 私有云网络
kubectl get cm -n kube-system calico-config --context=private-cloud -o yaml 2>/dev/null | head -30
# 公有云网络
kubectl get cm -n kube-system --context=public-cloud | grep -i 'calico\|flannel\|vpc'
# 检查Service类型
kubectl get svc -A --context=private-cloud | grep LoadBalancer
kubectl get svc -A --context=public-cloud | grep LoadBalancer

# 3. 检查公私云存储适配
# 私有云StorageClass
kubectl get storageclass --context=private-cloud
# 公有云StorageClass
kubectl get storageclass --context=public-cloud
# 检查PV/PVC
kubectl get pv --context=private-cloud | head -10
kubectl get pvc -A --context=public-cloud | head -10

# 4. 检查公私云权限适配
# 私有云RBAC
kubectl get clusterrole --context=private-cloud | head -20
# 公有云RBAC
kubectl get clusterrole --context=public-cloud | head -20
# 检查ServiceAccount
kubectl get serviceaccount -A --context=private-cloud | head -10
kubectl get serviceaccount -A --context=public-cloud | head -10

# 5. 检查公私云监控适配
# 私有云监控
kubectl get pods -n monitoring --context=private-cloud
# 公有云监控
kubectl get pods -n monitoring --context=public-cloud
# 检查Prometheus联邦
kubectl get cm -n monitoring prometheus-config --context=private-cloud -o yaml | grep -A10 'remote_write\|federation'

# 6. 执行具体公私云配置操作(根据标题调整)
echo "执行公私云具体配置操作..."
echo "请根据操作方案执行具体步骤"

# 7. 应用公私云配置变更
# kubectl apply -f /tmp/cloud_config.yaml --context=private-cloud
# kubectl apply -f /tmp/cloud_config.yaml --context=public-cloud
# kubectl rollout restart deployment/<name> -n <namespace> --context=private-cloud
# kubectl rollout restart deployment/<name> -n <namespace> --context=public-cloud

# 8. 等待配置生效
kubectl rollout status deployment/<name> -n <namespace> --context=private-cloud --timeout=120s
kubectl rollout status deployment/<name> -n <namespace> --context=public-cloud --timeout=120s
echo "公私云配置变更完成"

4. 验证跨云连通性与业务无感知

# 1. 验证私有云集群状态
kubectl get nodes -o wide --context=private-cloud
# 预期:所有节点 Ready

# 2. 验证公有云集群状态
kubectl get nodes -o wide --context=public-cloud
# 预期:所有节点 Ready

# 3. 验证跨云网络连通性
ping -c 3 <public-cloud-node-ip>
# 预期:网络连通
# 检查跨云服务访问
kubectl run -it --rm debug --image=busybox --restart=Never --context=private-cloud -- nslookup <public-cloud-service>.<namespace>.svc.cluster.local
# 预期:DNS解析正常

# 4. 验证跨云镜像仓库
curl -s https://harbor.example.com/api/v2.0/health
# 预期:Harbor健康
# 检查镜像同步
# kubectl exec -n harbor harbor-core-0 -- curl -s http://localhost:8080/api/v2.0/replications | jq '.[].status'

# 5. 验证跨云统一监控
# 检查Prometheus指标
# kubectl port-forward -n monitoring svc/prometheus 9090:9090 --context=private-cloud &
# sleep 5
# curl -s 'http://localhost:9090/api/v1/query?query=up' | jq '.data.result | length'
# 预期:有公私云指标

# 6. 验证跨云统一日志
# 检查Elasticsearch
kubectl exec -n logging elasticsearch-0 -- curl -s http://localhost:9200/_cluster/health | jq '.status'
# 预期:green
# 检查日志索引
kubectl exec -n logging elasticsearch-0 -- curl -s 'http://localhost:9200/_cat/indices?v' | head -20

# 7. 验证跨云权限
# 检查RBAC
kubectl auth can-i get pods --as=<user> --context=private-cloud
kubectl auth can-i get pods --as=<user> --context=public-cloud
# 预期:权限符合预期

# 8. 验证业务服务
# 检查私有云业务
kubectl get pods -n <app-namespace> --context=private-cloud
# 检查公有云业务
kubectl get pods -n <app-namespace> --context=public-cloud
# 预期:业务正常运行

# 9. 清理调试资源
# kubectl delete pod debug --ignore-not-found --context=private-cloud
# pkill -f "port-forward" 2>/dev/null
echo "验证完成"

5. 公私云统一监控权限与成本配置

# 1. 配置公私云统一监控
# 检查Prometheus联邦配置
kubectl get cm -n monitoring prometheus-config --context=private-cloud -o yaml | grep -A10 'remote_write\|federation'
# 配置Grafana多数据源
kubectl get cm -n monitoring grafana-datasources --context=private-cloud -o yaml | head -50

# 2. 配置公私云统一日志
# 检查日志采集配置
kubectl get cm -n logging -o name --context=private-cloud | head -10
# 检查Elasticsearch索引
kubectl exec -n logging elasticsearch-0 -- curl -s 'http://localhost:9200/_cat/indices?v' | head -20

# 3. 配置公私云统一权限
# 检查RBAC配置
kubectl get clusterrolebinding --context=private-cloud | head -20
kubectl get clusterrolebinding --context=public-cloud | head -20
# 检查SSO配置
kubectl get cm -n kube-system oidc-config --context=private-cloud -o yaml 2>/dev/null | head -30

# 4. 配置公私云统一CI/CD
# 检查Jenkins/ArgoCD配置
kubectl get pods -n cicd --context=private-cloud
kubectl get application -n argocd --context=private-cloud 2>/dev/null

# 5. 配置公私云高可用容灾
# 检查备份策略
kubectl get cronjob -A --context=private-cloud | grep -i backup
kubectl get cronjob -A --context=public-cloud | grep -i backup
# 检查容灾配置
kubectl get volumesnapshot -A --context=private-cloud 2>/dev/null
kubectl get volumesnapshot -A --context=public-cloud 2>/dev/null

# 6. 配置公私云成本优化
# 检查资源标签
kubectl get nodes --show-labels --context=private-cloud | head -10
kubectl get nodes --show-labels --context=public-cloud | head -10
# 检查资源配额
kubectl get resourcequota -A --context=private-cloud
kubectl get resourcequota -A --context=public-cloud

# 7. 配置公私云安全合规
# 检查网络策略
kubectl get networkpolicy -A --context=private-cloud
kubectl get networkpolicy -A --context=public-cloud
# 检查安全上下文
kubectl get pods -A --context=private-cloud -o jsonpath='{.items[*].spec.securityContext}' | head -20

# 8. 配置公私云自动化运维
# 检查自动化脚本
kubectl get cronjob -A --context=private-cloud
kubectl get cronjob -A --context=public-cloud
# 检查GitOps配置
kubectl get kustomization -A --context=private-cloud 2>/dev/null
kubectl get kustomization -A --context=public-cloud 2>/dev/null

6. 验证操作结果与生成报告

# 1. 最终验证私有云状态
kubectl get nodes -o wide --context=private-cloud
# 预期:所有节点 Ready

# 2. 最终验证公有云状态
kubectl get nodes -o wide --context=public-cloud
# 预期:所有节点 Ready

# 3. 验证跨云网络
ping -c 3 <public-cloud-node-ip>
# 预期:网络连通

# 4. 验证跨云监控
# curl -s 'http://localhost:9090/api/v1/query?query=up' | jq '.data.result | length'
# 预期:有公私云指标

# 5. 验证跨云日志
# kubectl exec -n logging elasticsearch-0 -- curl -s http://localhost:9200/_cluster/health | jq '.status'
# 预期:green

# 6. 验证跨云权限
# kubectl auth can-i get pods --as=<user> --context=private-cloud
# 预期:权限符合预期

# 7. 验证业务服务
kubectl get pods -n <app-namespace> --context=private-cloud
kubectl get pods -n <app-namespace> --context=public-cloud
# 预期:业务正常

# 8. 生成操作报告
echo "=== 公私云操作报告 ===" > /tmp/cloud_operation_report.txt
echo "操作时间: $(date)" >> /tmp/cloud_operation_report.txt
echo "私有云节点数: $(kubectl get nodes --no-headers --context=private-cloud 2>/dev/null | wc -l)" >> /tmp/cloud_operation_report.txt
echo "公有云节点数: $(kubectl get nodes --no-headers --context=public-cloud 2>/dev/null | wc -l)" >> /tmp/cloud_operation_report.txt
echo "私有云异常Pod: $(kubectl get pods -A --no-headers --context=private-cloud 2>/dev/null | grep -v Running | grep -v NAME | wc -l)" >> /tmp/cloud_operation_report.txt
echo "公有云异常Pod: $(kubectl get pods -A --no-headers --context=public-cloud 2>/dev/null | grep -v Running | grep -v NAME | wc -l)" >> /tmp/cloud_operation_report.txt
cat /tmp/cloud_operation_report.txt

# 9. 清理临时文件
# rm -f /tmp/cloud_*.yaml /tmp/cloud_*.txt 2>/dev/null
# pkill -f "port-forward" 2>/dev/null
echo "操作完成"

验证流程

# 1. 私有云状态验证
kubectl get nodes -o wide --context=private-cloud
# 预期:所有节点 Ready

# 2. 公有云状态验证
kubectl get nodes -o wide --context=public-cloud
# 预期:所有节点 Ready

# 3. 跨云网络验证
ping -c 3 <public-cloud-node-ip>
# 预期:网络连通

# 4. 跨云监控验证
# curl -s 'http://localhost:9090/api/v1/query?query=up' | jq '.data.result | length'
# 预期:有公私云指标

# 5. 跨云日志验证
# kubectl exec -n logging elasticsearch-0 -- curl -s http://localhost:9200/_cluster/health | jq '.status'
# 预期:green

# 6. 跨云权限验证
# kubectl auth can-i get pods --as=<user> --context=private-cloud
# 预期:权限符合预期

# 7. 业务服务验证
kubectl get pods -n <app-namespace> --context=private-cloud
kubectl get pods -n <app-namespace> --context=public-cloud
# 预期:业务正常

# 8. 操作报告验证
cat /tmp/cloud_operation_report.txt
# 预期:报告完整

排错方案

  • 公私云架构差异导致适配困难:检查控制面/数据面差异、版本差异、能力边界、API兼容、网络模型、存储模型、运维模式
  • 自建K8s与公有云托管K8s选型困惑:检查业务场景、团队能力、成本预算、合规要求、扩展性、高可用、运维成本、迁移成本
  • 单云/混合云/多云架构适配困难:检查业务分布、数据主权、延迟要求、成本优化、容灾需求、厂商锁定、运维复杂度、统一管理
  • 公私云版本迭代节奏差异导致兼容问题:检查K8s版本、API版本、组件版本、废弃API、CRD兼容、升级路径、回滚方案、验证
  • 私有云高可用自建架构风险:检查控制平面高可用、etcd集群、负载均衡、存储高可用、网络高可用、故障切换、数据一致性、容灾
  • 公有云托管K8s高可用能力边界:检查平台兜底能力、SLA、故障范围、自愈能力、升级窗口、配额限制、网络限制、存储限制
  • 公私云扩缩容架构差异:检查节点扩容、Pod扩容、HPA、VPA、集群自动伸缩、节点池、弹性伸缩、冷却时间、资源预留
  • 公私云故障自愈能力差异:检查节点自愈、Pod自愈、存储自愈、网络自愈、平台兜底、自定义自愈、故障检测、恢复时间

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询