从零到一:Kubernetes 集群部署全流程实战指南
2025.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,需完成以下预处理:
# 关闭防火墙(测试环境)或配置规则sudo systemctl stop firewalldsudo systemctl disable firewalld# 禁用Swap(K8s要求)sudo swapoff -asudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab# 加载br_netfilter模块sudo modprobe br_netfilterecho 'br_netfilter' | sudo tee /etc/modules-load.d/k8s.conf# 配置sysctl参数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
1.3 容器运行时选择
Kubernetes 1.24+版本移除了Docker支持,需选择以下替代方案:
- containerd(推荐):轻量级,CNCF维护
- CRI-O:专注K8s的容器运行时
- Docker Engine + cri-dockerd:兼容旧有环境
以containerd为例安装命令:
cat <<EOF | sudo tee /etc/modules-load.d/containerd.confoverlaybr_netfilterEOFsudo modprobe overlaysudo modprobe br_netfilter# 安装containerdsudo apt-get update && 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
二、Kubernetes组件安装
2.1 安装kubeadm/kubelet/kubectl
# 添加K8s官方仓库sudo apt-get update && sudo apt-get install -y apt-transport-https curlcurl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list# 安装指定版本(示例为1.28.x)sudo apt-get updateVERSION=1.28.0-00sudo apt-get install -y kubelet=$VERSION kubeadm=$VERSION kubectl=$VERSIONsudo apt-mark hold kubelet kubeadm kubectl
2.2 初始化控制平面
# 获取初始化token和hash(生产环境应自定义)TOKEN=$(head -c 16 /dev/urandom | sha256sum | awk '{print $1}')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}')# 执行初始化(需替换<pod-network-cidr>)sudo kubeadm init \--apiserver-advertise-address=<master-ip> \--control-plane-endpoint=<master-ip>:6443 \--pod-network-cidr=10.244.0.0/16 \--token $TOKEN \--token-ttl 0 \--cri-socket unix:///run/containerd/containerd.sock# 配置kubectlmkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
2.3 添加Worker节点
在Worker节点执行:
kubeadm join <control-plane-host>:<control-plane-port> \--token <token> \--discovery-token-ca-cert-hash sha256:<hash> \--cri-socket unix:///run/containerd/containerd.sock
三、网络插件部署
3.1 Calico网络方案
# 安装Calico Operatorkubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml# 自定义配置(可选)cat <<EOF | kubectl apply -f -apiVersion: operator.tigera.io/v1kind: Installationmetadata:name: defaultspec:calicoNetwork:ipPools:- cidr: 10.244.0.0/16encapsulation: VXLANnatOutgoing: EnabledEOF
3.2 验证网络连通性
# 创建测试Podkubectl run test-pod --image=busybox --command -- sleep infinitykubectl exec test-pod -- ping 8.8.8.8# 检查CNI插件状态kubectl get pods -n kube-system | grep calico
四、集群验证与维护
4.1 基础验证
# 检查节点状态kubectl get nodes# 查看系统组件kubectl get pods -n kube-system# 测试服务发现kubectl create deployment nginx --image=nginxkubectl expose deployment nginx --port=80 --type=NodePortkubectl get svc nginx
4.2 升级与备份
# 升级集群(示例从1.27升级到1.28)sudo apt-get updatesudo apt-get install -y kubelet=1.28.0-00 kubeadm=1.28.0-00 kubectl=1.28.0-00sudo kubeadm upgrade apply v1.28.0sudo systemctl daemon-reloadsudo systemctl restart kubelet# 备份etcd数据ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1: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
五、常见问题处理
5.1 节点NotReady状态
- 原因:kubelet未正确启动或网络插件故障
- 解决方案:
journalctl -u kubelet -n 100 --no-pagerkubectl describe node <node-name> | grep -i "taint"
5.2 Pod调度失败
- 原因:资源不足或节点选择器不匹配
- 排查命令:
kubectl describe pod <pod-name> | grep -A 10 "Events"kubectl get nodes --show-labels
5.3 证书过期处理
# 手动续期证书sudo kubeadm certs renew all# 重启关键组件sudo systemctl restart kubelet
六、生产环境建议
- 高可用架构:使用3个Master节点和负载均衡器(如HAProxy)
- 监控体系:部署Prometheus+Grafana监控集群状态
- 日志管理:集成EFK(Elasticsearch+Fluentd+Kibana)日志系统
- 安全加固:
- 启用RBAC权限控制
- 定期轮换证书
- 限制API Server访问IP
本教程完整覆盖了从环境准备到生产级部署的全流程,通过标准化操作可显著降低部署风险。建议开发者在实施前详细阅读Kubernetes官方文档,并根据实际业务需求调整配置参数。

发表评论
登录后可评论,请前往 登录 或 注册