logo

从零开始:k8s集群搭建与部署全流程指南(超详细)

作者:rousong2025.10.13 17:26浏览量:1545

简介:本文详细解析了k8s集群搭建与部署的全流程,涵盖环境准备、组件安装、集群配置、Pod部署及高可用性优化等关键步骤,适合不同层次开发者参考。

一、环境准备与规划

1.1 硬件与软件要求

k8s(Kubernetes)作为容器编排领域的标杆,对硬件和软件环境有明确要求。硬件方面,建议每台节点(Master/Worker)配置至少2核CPU、4GB内存和50GB磁盘空间,实际生产环境需根据负载动态调整。软件层面,需准备Linux系统(推荐CentOS 7/8或Ubuntu 20.04)、Docker容器引擎(v20.10+)、kubeadm工具(v1.26+)及网络插件(如Calico或Flannel)。

1.2 网络拓扑设计

k8s集群的网络设计直接影响性能与可用性。推荐采用三层架构:Master节点负责控制平面(API Server、Scheduler、Controller Manager),Worker节点承载工作负载(kubelet、容器运行时),Etcd集群存储元数据。网络规划需考虑以下要点:

  • 子网划分:为Pod分配独立CIDR(如10.244.0.0/16),避免与主机网络冲突。
  • 负载均衡:Master节点前部署HAProxy或Nginx,实现API Server的高可用。
  • 跨主机通信:使用Overlay网络(如VXLAN)或Underlay网络(如BGP),确保Pod间互通。

二、组件安装与配置

2.1 Docker与容器运行时安装

以Ubuntu为例,执行以下步骤安装Docker:

  1. # 添加官方GPG密钥
  2. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  3. # 添加APT源
  4. echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  5. # 安装Docker
  6. sudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io
  7. # 配置cgroup驱动(与k8s兼容)
  8. sudo sed -i 's/^ExecStart=.*/ExecStart=\/usr\/bin\/dockerd -H fd:\/\/ --containerd=\/run\/containerd\/containerd.sock --exec-opt native.cgroupdriver=systemd/' /lib/systemd/system/docker.service
  9. sudo systemctl daemon-reload && sudo systemctl restart docker

2.2 kubeadm初始化集群

2.2.1 Master节点初始化

  1. # 关闭交换分区
  2. sudo swapoff -a
  3. # 配置内核参数
  4. echo "net.bridge.bridge-nf-call-iptables=1" | sudo tee -a /etc/sysctl.conf
  5. sudo sysctl -p
  6. # 安装kubeadm、kubelet、kubectl
  7. sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl
  8. curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
  9. echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
  10. sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl
  11. # 初始化集群(指定Pod网络CIDR)
  12. sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.26.0
  13. # 配置kubectl
  14. mkdir -p $HOME/.kube
  15. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  16. sudo chown $(id -u):$(id -g) $HOME/.kube/config

2.2.2 Worker节点加入

在Master节点执行kubeadm token create --print-join-command获取加入命令,例如:

  1. kubeadm join 192.168.1.100:6443 --token abcdef.1234567890abcdef \
  2. --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

2.3 网络插件部署

以Calico为例,在Master节点执行:

  1. kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml

验证网络状态:

  1. kubectl get pods -n kube-system | grep calico

三、集群验证与基础操作

3.1 节点状态检查

  1. kubectl get nodes
  2. # 预期输出:
  3. # NAME STATUS ROLES AGE VERSION
  4. # master01 Ready control-plane 10m v1.26.0
  5. # worker01 Ready <none> 8m v1.26.0

3.2 部署第一个Pod

创建nginx-pod.yaml

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: nginx-pod
  5. spec:
  6. containers:
  7. - name: nginx
  8. image: nginx:latest
  9. ports:
  10. - containerPort: 80

应用配置并验证:

  1. kubectl apply -f nginx-pod.yaml
  2. kubectl get pods
  3. kubectl describe pod nginx-pod

四、高可用性与扩展配置

4.1 Master节点高可用

通过堆叠Etcd模式部署多Master:

  1. # 在第二台Master执行(需预先安装kubeadm)
  2. sudo kubeadm join 192.168.1.100:6443 --token abcdef.1234567890abcdef \
  3. --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxx \
  4. --control-plane --certificate-key xxxxxxxxxxxxxxxx

4.2 资源配额与限制

创建resource-quota.yaml限制命名空间资源:

  1. apiVersion: v1
  2. kind: ResourceQuota
  3. metadata:
  4. name: compute-quota
  5. spec:
  6. hard:
  7. requests.cpu: "1"
  8. requests.memory: 1Gi
  9. limits.cpu: "2"
  10. limits.memory: 2Gi

五、常见问题与解决方案

5.1 Pod卡在Pending状态

原因:资源不足、网络插件未就绪或调度失败。
排查步骤:

  1. 执行kubectl describe pod <pod-name>查看事件。
  2. 检查节点资源:kubectl top nodes
  3. 验证网络插件状态:kubectl get pods -n kube-system

5.2 证书过期处理

证书默认有效期为1年,可通过以下命令续期:

  1. # 在Master节点执行
  2. sudo kubeadm certs renew all
  3. # 重启kubelet
  4. sudo systemctl restart kubelet

六、进阶部署实践

6.1 使用Helm管理应用

安装Helm并部署WordPress:

  1. # 添加Bitnami仓库
  2. helm repo add bitnami https://charts.bitnami.com/bitnami
  3. # 部署WordPress
  4. helm install my-wordpress bitnami/wordpress --set mariadb.auth.rootPassword=strongpassword

6.2 监控体系搭建

通过Prometheus Operator实现监控:

  1. kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/master/bundle.yaml

七、总结与最佳实践

  1. 版本兼容性:确保kubeadm、kubelet、kubectl版本一致。
  2. 备份策略:定期备份Etcd数据(etcdctl snapshot save)。
  3. 升级路径:遵循小版本迭代(如1.25→1.26),避免跨大版本升级。
  4. 日志管理:集成EFK(Elasticsearch+Fluentd+Kibana)或Loki栈。

通过以上步骤,读者可完成从单机到高可用集群的完整部署,并掌握基础运维能力。实际生产环境中,还需结合CI/CD流水线、服务网格(Istio)等工具构建云原生生态。

相关文章推荐

发表评论

活动