简介:本文详细解析了如何使用Kubernetes搭建私有云,涵盖环境准备、集群部署、核心组件配置及运维优化,为开发者提供可落地的技术方案。
私有云的核心诉求在于资源自主可控与成本优化,而Kubernetes(K8s)通过容器编排能力,将这一目标转化为可落地的技术方案。相较于传统虚拟化架构,K8s私有云具有三大优势:
典型应用场景包括企业内网服务、开发测试环境隔离、大数据处理集群等。例如某金融企业通过K8s私有云将测试环境资源复用率提升3倍,年节约硬件成本超200万元。
| 组件类型 | 推荐方案 | 功能说明 |
|---|---|---|
| 操作系统 | CentOS 7/8或Ubuntu 20.04 | 关闭SELinux/AppArmor |
| 容器运行时 | containerd 1.6+ | 替代Docker的轻量级方案 |
| 负载均衡 | MetalLB(裸金属环境) | 分配可路由IP给Service |
| 监控系统 | Prometheus+Grafana | 采集指标/告警/可视化 |
# 主节点执行kubeadm init --pod-network-cidr=10.244.0.0/16 \--apiserver-advertise-address=<MASTER_IP># 配置kubectlmkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
关键参数说明:
--pod-network-cidr:必须与后续CNI插件网络范围一致--apiserver-advertise-address:多网卡环境需指定管理网络IP
# 工作节点执行(获取token后)kubeadm join <MASTER_IP>:6443 --token <TOKEN> \--discovery-token-ca-cert-hash sha256:<HASH>
建议通过kubeadm token create --ttl 24h生成有时效的Token,增强安全性。
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml# 验证网络连通性kubectl run -it --rm debug --image=busybox --restart=Never -- nslookup kubernetes.default
stream {upstream k8s_api {server <MASTER1_IP>:6443;server <MASTER2_IP>:6443;server <MASTER3_IP>:6443;}server {listen 6443;proxy_pass k8s_api;}}
apiVersion: storage.k8s.io/v1kind: StorageClassmetadata:name: ceph-blockprovisioner: ceph.com/rbdparameters:monitors: <CEPH_MON_IP>:6789adminId: adminadminSecretName: ceph-secretpool: kubefsType: xfsuserId: kubeuserSecretName: ceph-user-secret
需提前创建Ceph Pool并配置访问密钥。
# /etc/kubernetes/manifests/kube-apiserver.yaml- --default-not-ready-toleration-seconds=30- --default-unreachable-toleration-seconds=30- --etcd-servers-overrides=/events#<ETCD2_IP>:2379
VolumeBinding预选策略,避免PVC绑定延迟。system:anonymous用户权限:
apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata:name: anonymous-denyroleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: system:anonymoussubjects: [] # 空列表表示拒绝所有匿名请求
apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: default-denyspec:podSelector: {}policyTypes:- Ingress
ETCDCTL_API=3 etcdctl --endpoints=<MASTER_IP>:2379 \--cacert=/etc/kubernetes/pki/etcd/ca.crt \--cert=/etc/kubernetes/pki/etcd/server.crt \--key=/etc/kubernetes/pki/etcd/server.key \snapshot save /backup/etcd-snapshot.db
节点NotReady状态:
kubectl get nodes的CONDITIONS字段kubelet日志:journalctl -u kubelet -n 100Pod一直Pending:
kubectl describe pod <POD_NAME>查看Eventskubectl describe nodes | grep -A 10 AllocatedAPI Server超时:
--http2-max-streams-per-connection参数(默认1000)nvidia.com/gpu资源类型,结合Device Plugin实现GPU共享。通过上述方案,企业可在3-5周内完成生产级K8s私有云搭建。建议初期从非核心业务试点,逐步扩展至全业务线。实际部署中需特别注意版本兼容性(如K8s 1.24+已移除Docker支持),建议采用半自动化的Ansible/Terraform工具链降低运维复杂度。