利用K8S技术栈打造个人私有云(连载之:K8S集群搭建)
利用K8S技术栈打造个人私有云(连载之:K8S集群搭建)
一、为什么选择K8S打造个人私有云?
在云计算技术快速发展的今天,容器化技术已成为构建现代应用架构的核心。Kubernetes(K8S)作为容器编排领域的标准,其优势体现在以下几个方面:
资源弹性与自动化
K8S通过声明式API实现应用的自动扩缩容,例如使用Horizontal Pod Autoscaler(HPA)可根据CPU/内存指标动态调整副本数,避免资源浪费。高可用与容灾能力
通过多节点部署、Pod反亲和性配置及StorageClass动态卷管理,可构建跨主机、跨可用区的容错系统。例如,将数据库Pod分散部署在不同节点,避免单点故障。生态整合与扩展性
K8S生态包含Helm包管理、Operator框架及Service Mesh(如Istio),可快速集成监控、日志、CI/CD等工具链。例如,通过Prometheus Operator实现自动化监控配置。成本优化
相比虚拟机,容器密度更高,结合K8S的Resource Quotas和LimitRanges,可精细控制资源分配。例如,为测试环境分配较低的CPU/内存请求值。
二、K8S集群搭建前的环境准备
1. 硬件选型与资源规划
节点角色划分
- 控制平面节点:建议3节点(奇数)部署etcd、API Server、Controller Manager,避免脑裂。
- 工作节点:根据负载需求配置CPU、内存及存储,例如每节点4核16G内存,支持20-30个Pod。
- 存储节点:若需持久化存储,可配置独立节点部署Ceph或NFS Provisioner。
网络拓扑设计
- 使用VLAN或SDN(如Calico)隔离Pod网络与管理网络。
- 示例拓扑:
[管理网络] 192.168.1.0/24
[Pod网络] 10.244.0.0/16
[Service网络] 10.96.0.0/12
2. 操作系统与依赖安装
基础系统要求
- 推荐Ubuntu 22.04 LTS或CentOS 8,禁用Swap以避免调度问题。
- 配置内核参数优化:
# 修改/etc/sysctl.conf
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-iptables=1
依赖工具安装
- 安装Docker/containerd及K8S工具链:
# Ubuntu示例
sudo apt update && sudo apt install -y docker.io containerd kubeadm kubelet kubectl
sudo systemctl enable docker containerd kubelet
- 安装Docker/containerd及K8S工具链:
三、K8S集群搭建核心步骤
1. 初始化控制平面
使用kubeadm初始化
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 \
--control-plane-endpoint="master.example.com:6443" \
--apiserver-advertise-address=192.168.1.10
- 参数说明:
--pod-network-cidr
:指定Pod网络范围。--control-plane-endpoint
:高可用场景下配置VIP或负载均衡器地址。
配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
2. 部署CNI网络插件
- Calico部署示例
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
- 验证网络连通性:
kubectl get pods -n kube-system | grep calico
kubectl run -it --rm debug --image=busybox --restart=Never -- sh
# 在Pod内执行ping测试
3. 加入工作节点
- 获取加入令牌
kubeadm token create --print-join-command
- 在工作节点执行输出命令,例如:
kubeadm join 192.168.1.10:6443 --token abcdef.1234567890abcdef \
--discovery-token-ca-cert-hash sha256:xxxxxx
4. 高可用控制平面配置(可选)
- 使用kubeadm搭建HA集群
- 部署负载均衡器(如Nginx或HAProxy)。
- 在每个控制平面节点执行:
kubeadm init --control-plane-endpoint="lb.example.com:6443" \
--upload-certs
- 其他控制平面节点使用
--control-plane
和--certificate-key
参数加入。
四、集群验证与基础运维
1. 核心组件状态检查
kubectl get componentstatuses # 检查API Server、Controller Manager等状态
kubectl get nodes -o wide # 查看节点Ready状态及角色
2. 部署测试应用
kubectl create deployment nginx --image=nginx:alpine
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get svc nginx # 获取NodePort端口
3. 日常运维命令
- 日志查看:
kubectl logs -f <pod-name> -c <container-name>
- 资源扩容:
kubectl scale deployment nginx --replicas=3
- 节点维护:
kubectl drain <node-name> --ignore-daemonsets # 优雅驱逐Pod
kubectl uncordon <node-name> # 恢复调度
五、常见问题与解决方案
节点状态NotReady
- 检查kubelet日志:
journalctl -u kubelet -f
- 常见原因:网络不通、证书过期、资源不足。
- 检查kubelet日志:
Pod一直Pending
- 执行
kubectl describe pod <pod-name>
查看事件。 - 典型原因:资源不足、持久卷绑定失败、调度策略限制。
- 执行
API Server无响应
- 检查etcd集群健康度:
ETCDCTL_API=3 etcdctl endpoint health
- 验证负载均衡器配置是否正确。
- 检查etcd集群健康度:
六、总结与后续规划
本文详细介绍了K8S集群搭建的全流程,从环境准备到高可用配置,覆盖了生产级部署的关键要点。下一期将深入探讨如何基于K8S实现:
- 持久化存储方案:对比Local PV、NFS、Ceph RBD的适用场景。
- 监控告警体系:集成Prometheus+Grafana+Alertmanager。
- CI/CD流水线:使用ArgoCD实现GitOps持续交付。
通过K8S技术栈,开发者可低成本构建具备企业级特性的个人私有云,为后续服务化改造奠定基础。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权请联系我们,一经查实立即删除!