logo

从零到一:Kubernetes 集群部署全流程实战指南

作者:暴富20212025.09.26 16:39浏览量:5

简介:本文详细解析Kubernetes集群部署的完整流程,涵盖环境准备、核心组件安装、集群验证及常见问题处理,提供可复用的脚本与配置示例,助力开发者快速构建生产级K8s环境。

一、部署前环境准备

1.1 硬件资源要求

生产环境建议配置:

  • Master节点:4核CPU、16GB内存、100GB磁盘(支持高可用需3节点)
  • Worker节点:8核CPU、32GB内存、200GB磁盘(根据业务负载调整)
  • 网络要求:千兆以太网,节点间延迟<1ms

测试环境可使用Minikube或Kind在单台机器模拟集群,资源需求降至2核4GB。

1.2 操作系统配置

推荐使用CentOS 7/8或Ubuntu 20.04 LTS,需完成以下预处理:

  1. # 关闭防火墙(测试环境)或配置规则
  2. sudo systemctl stop firewalld
  3. sudo systemctl disable firewalld
  4. # 禁用Swap(K8s要求)
  5. sudo swapoff -a
  6. sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
  7. # 加载br_netfilter模块
  8. sudo modprobe br_netfilter
  9. echo 'br_netfilter' | sudo tee /etc/modules-load.d/k8s.conf
  10. # 配置sysctl参数
  11. cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
  12. net.bridge.bridge-nf-call-ip6tables = 1
  13. net.bridge.bridge-nf-call-iptables = 1
  14. net.ipv4.ip_forward = 1
  15. EOF
  16. sudo sysctl --system

1.3 容器运行时选择

Kubernetes 1.24+版本移除了Docker支持,需选择以下替代方案:

  • containerd(推荐):轻量级,CNCF维护
  • CRI-O:专注K8s的容器运行时
  • Docker Engine + cri-dockerd:兼容旧有环境

以containerd为例安装命令:

  1. cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
  2. overlay
  3. br_netfilter
  4. EOF
  5. sudo modprobe overlay
  6. sudo modprobe br_netfilter
  7. # 安装containerd
  8. sudo apt-get update && sudo apt-get install -y containerd
  9. sudo mkdir -p /etc/containerd
  10. containerd config default | sudo tee /etc/containerd/config.toml
  11. # 修改配置启用systemd cgroup驱动
  12. sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
  13. sudo systemctl restart containerd

二、Kubernetes组件安装

2.1 安装kubeadm/kubelet/kubectl

  1. # 添加K8s官方仓库
  2. sudo apt-get update && sudo apt-get install -y apt-transport-https curl
  3. curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
  4. echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
  5. # 安装指定版本(示例为1.28.x)
  6. sudo apt-get update
  7. VERSION=1.28.0-00
  8. sudo apt-get install -y kubelet=$VERSION kubeadm=$VERSION kubectl=$VERSION
  9. sudo apt-mark hold kubelet kubeadm kubectl

2.2 初始化控制平面

  1. # 获取初始化token和hash(生产环境应自定义)
  2. TOKEN=$(head -c 16 /dev/urandom | sha256sum | awk '{print $1}')
  3. HASH=$(openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | awk '{print $2}')
  4. # 执行初始化(需替换<pod-network-cidr>)
  5. sudo kubeadm init \
  6. --apiserver-advertise-address=<master-ip> \
  7. --control-plane-endpoint=<master-ip>:6443 \
  8. --pod-network-cidr=10.244.0.0/16 \
  9. --token $TOKEN \
  10. --token-ttl 0 \
  11. --cri-socket unix:///run/containerd/containerd.sock
  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.3 添加Worker节点

在Worker节点执行:

  1. kubeadm join <control-plane-host>:<control-plane-port> \
  2. --token <token> \
  3. --discovery-token-ca-cert-hash sha256:<hash> \
  4. --cri-socket unix:///run/containerd/containerd.sock

三、网络插件部署

3.1 Calico网络方案

  1. # 安装Calico Operator
  2. kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml
  3. # 自定义配置(可选)
  4. cat <<EOF | kubectl apply -f -
  5. apiVersion: operator.tigera.io/v1
  6. kind: Installation
  7. metadata:
  8. name: default
  9. spec:
  10. calicoNetwork:
  11. ipPools:
  12. - cidr: 10.244.0.0/16
  13. encapsulation: VXLAN
  14. natOutgoing: Enabled
  15. EOF

3.2 验证网络连通性

  1. # 创建测试Pod
  2. kubectl run test-pod --image=busybox --command -- sleep infinity
  3. kubectl exec test-pod -- ping 8.8.8.8
  4. # 检查CNI插件状态
  5. kubectl get pods -n kube-system | grep calico

四、集群验证与维护

4.1 基础验证

  1. # 检查节点状态
  2. kubectl get nodes
  3. # 查看系统组件
  4. kubectl get pods -n kube-system
  5. # 测试服务发现
  6. kubectl create deployment nginx --image=nginx
  7. kubectl expose deployment nginx --port=80 --type=NodePort
  8. kubectl get svc nginx

4.2 升级与备份

  1. # 升级集群(示例从1.27升级到1.28)
  2. sudo apt-get update
  3. sudo apt-get install -y kubelet=1.28.0-00 kubeadm=1.28.0-00 kubectl=1.28.0-00
  4. sudo kubeadm upgrade apply v1.28.0
  5. sudo systemctl daemon-reload
  6. sudo systemctl restart kubelet
  7. # 备份etcd数据
  8. ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
  9. --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  10. --cert=/etc/kubernetes/pki/etcd/server.crt \
  11. --key=/etc/kubernetes/pki/etcd/server.key \
  12. snapshot save /backup/etcd-snapshot.db

五、常见问题处理

5.1 节点NotReady状态

  • 原因:kubelet未正确启动或网络插件故障
  • 解决方案
    1. journalctl -u kubelet -n 100 --no-pager
    2. kubectl describe node <node-name> | grep -i "taint"

5.2 Pod调度失败

  • 原因:资源不足或节点选择器不匹配
  • 排查命令
    1. kubectl describe pod <pod-name> | grep -A 10 "Events"
    2. kubectl get nodes --show-labels

5.3 证书过期处理

  1. # 手动续期证书
  2. sudo kubeadm certs renew all
  3. # 重启关键组件
  4. sudo systemctl restart kubelet

六、生产环境建议

  1. 高可用架构:使用3个Master节点和负载均衡器(如HAProxy)
  2. 监控体系:部署Prometheus+Grafana监控集群状态
  3. 日志管理:集成EFK(Elasticsearch+Fluentd+Kibana)日志系统
  4. 安全加固
    • 启用RBAC权限控制
    • 定期轮换证书
    • 限制API Server访问IP

本教程完整覆盖了从环境准备到生产级部署的全流程,通过标准化操作可显著降低部署风险。建议开发者在实施前详细阅读Kubernetes官方文档,并根据实际业务需求调整配置参数。

相关文章推荐

发表评论

活动