从零开始:利用K8S技术栈打造个人私有云(连载之:K8S集群搭建)

作者:热心市民鹿先生2025.10.15 22:46浏览量:0

简介:本文详述如何利用K8S技术栈搭建个人私有云集群,涵盖环境准备、核心组件安装、节点配置、网络存储集成及验证测试,为开发者提供可落地的私有云建设方案。

一、为什么选择K8S打造个人私有云?

在数字化转型浪潮中,个人开发者对计算资源的需求呈现爆发式增长。传统物理服务器存在资源利用率低、扩展性差等痛点,而公有云服务虽灵活但存在成本不可控、数据隐私风险等问题。Kubernetes(K8S)作为容器编排领域的标准,其核心价值体现在:

  1. 资源弹性:通过动态调度实现CPU/内存的高效利用,典型场景下资源利用率可从物理机的15%提升至60%+
  2. 服务高可用:内置健康检查、自动故障转移机制,确保关键应用99.9%+可用性
  3. 生态完善:对接CI/CD、监控告警、服务网格等周边工具链,形成完整DevOps闭环
  4. 成本优化:以某开发者案例测算,3节点K8S集群可支撑20+微服务,年成本较公有云降低58%

二、集群搭建前环境准备

1. 硬件选型建议

组件 最低配置 推荐配置 适用场景
控制平面 2核4G+50GB磁盘 4核8G+100GB NVMe SSD 50节点以下集群
工作节点 4核8G+100GB磁盘 8核16G+500GB NVMe SSD 计算密集型任务
网络设备 千兆以太网 万兆光纤+支持VXLAN 跨主机容器通信

建议采用异构架构:控制平面使用高可靠性服务器,工作节点可采用淘汰的企业级服务器或高配置PC,通过标签(NodeSelector)实现资源隔离。

2. 操作系统优化

推荐使用Ubuntu 22.04 LTS或CentOS Stream 9,需完成以下关键配置:

  1. # 禁用交换分区(K8S对swap敏感)
  2. sudo swapoff -a
  3. sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
  4. # 配置内核参数
  5. cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
  6. net.bridge.bridge-nf-call-ip6tables = 1
  7. net.bridge.bridge-nf-call-iptables = 1
  8. net.ipv4.ip_forward = 1
  9. EOF
  10. sudo sysctl --system
  11. # 安装容器运行时(以containerd为例)
  12. sudo apt-get install -y containerd
  13. sudo mkdir -p /etc/containerd
  14. containerd config default | sudo tee /etc/containerd/config.toml
  15. # 修改配置启用systemd cgroup驱动
  16. sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
  17. sudo systemctl restart containerd

三、核心组件安装部署

1. 控制平面组件安装

采用kubeadm工具链实现自动化部署:

  1. # 安装依赖包
  2. sudo apt-get install -y apt-transport-https ca-certificates curl
  3. # 添加K8S仓库
  4. curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
  5. echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
  6. # 安装kubeadm/kubelet/kubectl
  7. sudo apt-get update
  8. sudo apt-get install -y kubelet kubeadm kubectl
  9. sudo systemctl enable kubelet
  10. # 初始化控制平面(需替换<api-server-advertise-address>)
  11. sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=<控制节点IP>
  12. # 配置kubectl
  13. mkdir -p $HOME/.kube
  14. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  15. sudo chown $(id -u):$(id -g) $HOME/.kube/config

2. 工作节点加入集群

在控制节点执行获取加入命令:

  1. kubeadm token create --print-join-command

在工作节点执行返回的命令,典型格式如下:

  1. kubeadm join <控制节点IP>:6443 --token <token> \
  2. --discovery-token-ca-cert-hash sha256:<hash值>

四、关键插件配置

1. 网络插件部署(Calico示例)

  1. kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
  2. # 验证网络状态
  3. kubectl get pods -n kube-system | grep calico

2. 存储方案实现

本地存储配置

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

NFS存储集成

  1. # 在存储服务器安装NFS
  2. sudo apt install nfs-kernel-server
  3. # 编辑/etc/exports添加共享目录
  4. /srv/nfs *(rw,sync,no_subtree_check)
  5. sudo exportfs -a
  6. # 在K8S集群部署NFS Provisioner
  7. kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/deploy/install-driver.yaml

五、集群验证与调优

1. 基础功能验证

  1. # 检查节点状态
  2. kubectl get nodes
  3. # 部署测试应用
  4. kubectl create deployment nginx --image=nginx:latest
  5. kubectl expose deployment nginx --port=80 --type=NodePort
  6. # 验证服务访问
  7. curl <任意节点IP>:<NodePort>

2. 性能调优建议

调度策略优化

  1. # 通过NodeAffinity实现机架感知
  2. affinity:
  3. nodeAffinity:
  4. requiredDuringSchedulingIgnoredDuringExecution:
  5. nodeSelectorTerms:
  6. - matchExpressions:
  7. - key: topology.kubernetes.io/zone
  8. operator: In
  9. values:
  10. - rack1

资源限制配置

  1. resources:
  2. limits:
  3. cpu: "1"
  4. memory: "1Gi"
  5. requests:
  6. cpu: "500m"
  7. memory: "512Mi"

六、高可用架构设计

1. 控制平面HA方案

采用堆叠式etcd架构,建议至少3个控制节点:

  1. # 初始化时指定多个控制节点
  2. kubeadm init --control-plane-endpoint "LOAD_BALANCER_DNS:6443" \
  3. --apiserver-cert-extra-sans=LOAD_BALANCER_DNS
  4. # 后续节点加入控制平面
  5. kubeadm join ... --control-plane --certificate-key <cert-key>

2. 存储高可用实现

推荐使用Ceph作为持久化存储后端:

  1. # 通过Rook部署Ceph集群
  2. kubectl apply -f https://raw.githubusercontent.com/rook/rook/v1.12.0/deploy/examples/crds.yaml
  3. kubectl apply -f https://raw.githubusercontent.com/rook/rook/v1.12.0/deploy/examples/common.yaml
  4. kubectl apply -f https://raw.githubusercontent.com/rook/rook/v1.12.0/deploy/examples/operator.yaml
  5. kubectl apply -f https://raw.githubusercontent.com/rook/rook/v1.12.0/deploy/examples/cluster.yaml

七、运维管理最佳实践

1. 监控体系搭建

  1. # 部署Prometheus Operator
  2. kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.67.1/bundle.yaml
  3. # 配置告警规则示例
  4. - alert: HighCPUUsage
  5. expr: (100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)) > 80
  6. for: 10m
  7. labels:
  8. severity: warning
  9. annotations:
  10. summary: "High CPU usage on {{ $labels.instance }}"

2. 备份恢复策略

使用Velero实现集群备份:

  1. # 安装Velero
  2. velero install --provider aws --plugins velero/velero-plugin-for-aws:v1.8.0 \
  3. --bucket <备份存储桶> --secret-file ./credentials-velero \
  4. --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://<minio-server>:9000
  5. # 执行备份
  6. velero backup create full-backup --include-cluster-resources

通过上述步骤,开发者可在72小时内完成生产级K8S私有云集群的搭建。实际部署中需特别注意:1)网络拓扑规划,避免单点故障;2)资源配额管理,防止资源耗尽;3)定期进行混沌工程测试,验证系统容错能力。下一期将深入讲解如何基于该集群部署持续集成系统,实现开发到生产的自动化交付。