简介:本文详述如何利用K8S技术栈搭建个人私有云集群,涵盖环境准备、核心组件安装、节点配置、网络存储集成及验证测试,为开发者提供可落地的私有云建设方案。
在数字化转型浪潮中,个人开发者对计算资源的需求呈现爆发式增长。传统物理服务器存在资源利用率低、扩展性差等痛点,而公有云服务虽灵活但存在成本不可控、数据隐私风险等问题。Kubernetes(K8S)作为容器编排领域的标准,其核心价值体现在:
| 组件 | 最低配置 | 推荐配置 | 适用场景 |
|---|---|---|---|
| 控制平面 | 2核4G+50GB磁盘 | 4核8G+100GB NVMe SSD | 50节点以下集群 |
| 工作节点 | 4核8G+100GB磁盘 | 8核16G+500GB NVMe SSD | 计算密集型任务 |
| 网络设备 | 千兆以太网 | 万兆光纤+支持VXLAN | 跨主机容器通信 |
建议采用异构架构:控制平面使用高可靠性服务器,工作节点可采用淘汰的企业级服务器或高配置PC,通过标签(NodeSelector)实现资源隔离。
推荐使用Ubuntu 22.04 LTS或CentOS Stream 9,需完成以下关键配置:
# 禁用交换分区(K8S对swap敏感)sudo swapoff -asudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab# 配置内核参数cat <<EOF | sudo tee /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1net.ipv4.ip_forward = 1EOFsudo sysctl --system# 安装容器运行时(以containerd为例)sudo apt-get install -y containerdsudo mkdir -p /etc/containerdcontainerd config default | sudo tee /etc/containerd/config.toml# 修改配置启用systemd cgroup驱动sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.tomlsudo systemctl restart containerd
采用kubeadm工具链实现自动化部署:
# 安装依赖包sudo apt-get install -y apt-transport-https ca-certificates curl# 添加K8S仓库curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpgecho "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# 安装kubeadm/kubelet/kubectlsudo apt-get updatesudo apt-get install -y kubelet kubeadm kubectlsudo systemctl enable kubelet# 初始化控制平面(需替换<api-server-advertise-address>)sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=<控制节点IP># 配置kubectlmkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
在控制节点执行获取加入命令:
kubeadm token create --print-join-command
在工作节点执行返回的命令,典型格式如下:
kubeadm join <控制节点IP>:6443 --token <token> \--discovery-token-ca-cert-hash sha256:<hash值>
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml# 验证网络状态kubectl get pods -n kube-system | grep calico
# 创建StorageClassapiVersion: storage.k8s.io/v1kind: StorageClassmetadata:name: local-storageprovisioner: kubernetes.io/no-provisionervolumeBindingMode: WaitForFirstConsumer
# 在存储服务器安装NFSsudo apt install nfs-kernel-server# 编辑/etc/exports添加共享目录/srv/nfs *(rw,sync,no_subtree_check)sudo exportfs -a# 在K8S集群部署NFS Provisionerkubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/deploy/install-driver.yaml
# 检查节点状态kubectl get nodes# 部署测试应用kubectl create deployment nginx --image=nginx:latestkubectl expose deployment nginx --port=80 --type=NodePort# 验证服务访问curl <任意节点IP>:<NodePort>
# 通过NodeAffinity实现机架感知affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: topology.kubernetes.io/zoneoperator: Invalues:- rack1
resources:limits:cpu: "1"memory: "1Gi"requests:cpu: "500m"memory: "512Mi"
采用堆叠式etcd架构,建议至少3个控制节点:
# 初始化时指定多个控制节点kubeadm init --control-plane-endpoint "LOAD_BALANCER_DNS:6443" \--apiserver-cert-extra-sans=LOAD_BALANCER_DNS# 后续节点加入控制平面kubeadm join ... --control-plane --certificate-key <cert-key>
推荐使用Ceph作为持久化存储后端:
# 通过Rook部署Ceph集群kubectl apply -f https://raw.githubusercontent.com/rook/rook/v1.12.0/deploy/examples/crds.yamlkubectl apply -f https://raw.githubusercontent.com/rook/rook/v1.12.0/deploy/examples/common.yamlkubectl apply -f https://raw.githubusercontent.com/rook/rook/v1.12.0/deploy/examples/operator.yamlkubectl apply -f https://raw.githubusercontent.com/rook/rook/v1.12.0/deploy/examples/cluster.yaml
# 部署Prometheus Operatorkubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.67.1/bundle.yaml# 配置告警规则示例- alert: HighCPUUsageexpr: (100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)) > 80for: 10mlabels:severity: warningannotations:summary: "High CPU usage on {{ $labels.instance }}"
使用Velero实现集群备份:
# 安装Velerovelero install --provider aws --plugins velero/velero-plugin-for-aws:v1.8.0 \--bucket <备份存储桶> --secret-file ./credentials-velero \--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://<minio-server>:9000# 执行备份velero backup create full-backup --include-cluster-resources
通过上述步骤,开发者可在72小时内完成生产级K8S私有云集群的搭建。实际部署中需特别注意:1)网络拓扑规划,避免单点故障;2)资源配额管理,防止资源耗尽;3)定期进行混沌工程测试,验证系统容错能力。下一期将深入讲解如何基于该集群部署持续集成系统,实现开发到生产的自动化交付。