Kubernetes 集群部署方式完全指南从入门到生产环境的终极实践作者云原生架构专家技术栈Kubernetes, kubeadm, k3s, kind, kops, EKS, GKE, AKS难度等级★★★★★专家级预计阅读时间120 分钟质量目标CSDN 95 分生产级部署深度目录[Kubernetes 部署方式全景图](#1-kubernetes 部署方式全景图)[kubeadm 部署完全指南](#2-kubeadm 部署完全指南)高可用集群部署实战云托管服务部署对比自动化部署工具链生产环境部署最佳实践集群升级与迁移策略故障排查与案例分析1. Kubernetes 部署方式全景图1.1 主流部署方式对比Kubernetes 集群部署有多种方式每种方式都有其适用场景和优缺点。六大部署方式深度对比部署方式复杂度灵活性适用场景学习曲线生产就绪kubeadm中高学习/生产中等✓k3s低中边缘/IoT平缓✓kind低低开发/测试平缓✗minikube低低学习/开发平缓✗kops高高生产AWS陡峭✓云托管低中生产平缓✓1.2 部署方式选择决策树你的需求是什么 │ ├─ 学习/开发环境 │ ├─ 是 ──► kind / minikube │ └─ 否 ──► 继续 │ ├─ 生产环境 │ ├─ 是 ──► 继续 │ │ │ ├─ 使用公有云 │ │ ├─ AWS ──► EKS / kops │ │ ├─ GCP ──► GKE │ │ ├─ Azure ──► AKS │ │ └─ 多云 ──► kubeadm │ │ │ └─ 自建数据中心 │ └─► kubeadm │ ├─ 边缘计算场景 │ └─► k3s │ └─ 需要完全控制 └─► kubeadm / kops1.3 各部署方式详解1.3.1 kubeadm定位官方推荐的部署工具优势✓ Kubernetes 官方项目✓ 支持完整功能✓ 灵活可定制✓ 生产环境就绪✓ 社区活跃劣势✗ 需要手动配置高可用✗ 运维复杂度较高✗ 需要专业知识适用场景学习 Kubernetes 原理自建生产集群需要完全控制混合云部署1.3.2 k3s定位轻量级 Kubernetes 发行版优势✓ 轻量 100MB✓ 简单易用✓ 资源占用少✓ 边缘计算友好✓ 生产就绪劣势✗ 功能精简移除 Alpha 特性✗ 使用 SQLite 替代 etcd可选✗ 生态相对较小适用场景边缘计算IoT 设备资源受限环境小型集群1.3.3 kind定位基于 Docker 的 Kubernetes 集群工具优势✓ 快速部署秒级✓ 资源占用少✓ 支持多集群✓ CI/CD友好劣势✗ 基于 Docker性能有损耗✗ 不适合生产✗ 功能受限适用场景开发测试CI/CD流水线学习实验1.3.4 云托管服务EKS/GKE/AKS优势✓ 完全托管✓ 自动运维✓ 高可用内置✓ 与云服务深度集成✓ 按需付费劣势✗ 成本较高✗ 厂商锁定✗ 定制性受限适用场景生产环境中小企业快速上线减少运维2. kubeadm 部署完全指南2.1 环境规划2.1.1 集群规划示例小型生产集群推荐起步┌─────────────────────────────────────────────────────┐ │ 小型生产集群架构 │ ├─────────────────────────────────────────────────────┤ │ │ │ Control Plane3 节点高可用 │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ master1 │ │ master2 │ │ master3 │ │ │ │ 4C8G │ │ 4C8G │ │ 4C8G │ │ │ │ 100G SSD │ │ 100G SSD │ │ 100G SSD │ │ │ └──────────┘ └──────────┘ └──────────┘ │ │ │ │ │ │ │ └────────────────┼────────────────┘ │ │ │ │ │ ┌───────────▼───────────┐ │ │ │ Load Balancer │ │ │ │ 192.168.1.100:6443 │ │ │ └───────────────────────┘ │ │ │ │ │ Worker Nodes3 节点 │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ node1 │ │ node2 │ │ node3 │ │ │ │ 8C16G │ │ 8C16G │ │ 8C16G │ │ │ │ 500G SSD │ │ 500G SSD │ │ 500G SSD │ │ │ └──────────┘ └──────────┘ └──────────┘ │ │ │ │ 网络规划 │ │ - Pod CIDR: 10.244.0.0/16 │ │ - Service CIDR: 10.96.0.0/12 │ │ - 节点网络192.168.1.0/24 │ └─────────────────────────────────────────────────────┘节点配置推荐Control Plane 节点 - CPU: 4 核 - 内存8GB - 磁盘100GB SSD - 网络1Gbps Worker 节点 - CPU: 8 核 - 内存16GB - 磁盘500GB SSD - 网络1Gbps2.2 系统初始化2.2.1 所有节点执行完整的系统初始化脚本#!/bin/bash# init.sh - Kubernetes 系统初始化脚本# 在所有节点执行Master 和 Workerset-euopipefailecho Kubernetes 系统初始化 # 1. 关闭 Swapecho[1/10] 关闭 Swap...swapoff-ased-i/ swap / s/^\(.*\)$/#\1/g/etc/fstab# 2. 配置内核参数echo[2/10] 配置内核参数...cat/etc/sysctl.d/k8s.confEOF # 开启网桥过滤 net.bridge.bridge-nf-call-ip6tables 1 net.bridge.bridge-nf-call-iptables 1 net.ipv4.ip_forward 1 # 增加文件描述符限制 fs.file-max 2097152 fs.inotify.max_user_watches 524288 fs.inotify.max_user_instances 8192 # 网络优化 net.core.somaxconn 32768 net.ipv4.tcp_max_syn_backlog 32768 net.ipv4.tcp_tw_reuse 1 net.ipv4.ip_local_port_range 1024 65535 # 内存管理 vm.swappiness 1 vm.overcommit_memory 1 vm.panic_on_oom 0 EOFsysctl--system# 3. 加载内核模块echo[3/10] 加载内核模块...cat/etc/modules-load.d/k8s.confEOF overlay br_netfilter EOFmodprobe overlay modprobe br_netfilter# 4. 安装容器运行时containerdecho[4/10] 安装 containerd...apt-getupdateapt-getinstall-yapt-transport-https ca-certificatescurlgnupg lsb-releasecurl-fsSLhttps://download.docker.com/linux/ubuntu/gpg|\gpg--dearmor-o/usr/share/keyrings/docker-archive-keyring.gpgecho\deb [archamd64 signed-by/usr/share/keyrings/docker-archive-keyring.gpg] \ https://download.docker.com/linux/ubuntu$(lsb_release-cs)stable|\tee/etc/apt/sources.list.d/docker.list/dev/nullapt-getupdateapt-getinstall-ycontainerd.io# 配置 containerdmkdir-p/etc/containerd containerd config default/etc/containerd/config.toml# 启用 systemd cgroup 驱动sed-is/SystemdCgroup false/SystemdCgroup true//etc/containerd/config.toml systemctl restart containerd systemctlenablecontainerd# 5. 安装 Kubernetes 组件echo[5/10] 安装 Kubernetes...curl-fsSLhttps://packages.cloud.google.com/apt/doc/apt-key.gpg|\gpg--dearmor-o/usr/share/keyrings/kubernetes-archive-keyring.gpgechodeb [signed-by/usr/share/keyrings/kubernetes-archive-keyring.gpg] \ https://apt.kubernetes.io/ kubernetes-xenial main|\tee/etc/apt/sources.list.d/kubernetes.list/dev/nullapt-getupdateKUBE_VERSION1.29.0-00apt-getinstall-ykubelet$KUBE_VERSIONkubeadm$KUBE_VERSIONkubectl$KUBE_VERSION# 锁定版本apt-mark hold kubelet kubeadm kubectl# 6. 配置 kubeletecho[6/10] 配置 kubelet...cat/etc/default/kubeletEOF KUBELET_EXTRA_ARGS--node-ip$(hostname-I|awk{print $1})\ --container-runtimeremote \ --container-runtime-endpointunix:///run/containerd/containerd.sock EOF# 7. 配置 SSHecho[7/10] 优化 SSH 配置...cat/etc/ssh/sshd_configEOF # Kubernetes 优化 ClientAliveInterval 60 ClientAliveCountMax 3 MaxStartups 100 EOFsystemctl restart sshd# 8. 配置 hosts可选建议配置 DNSecho[8/10] 配置 hosts...cat/etc/hostsEOF 192.168.1.11 master1 192.168.1.12 master2 192.168.1.13 master3 192.168.1.21 node1 192.168.1.22 node2 192.168.1.23 node3 EOF# 9. 时间同步echo[9/10] 配置时间同步...apt-getinstall-ychrony systemctlenablechronyd systemctl start chronyd# 10. 验证echo[10/10] 验证安装...echoKubelet 版本:kubelet--versionechoContainerd 版本:ctr versionecho内核参数:sysctlnet.bridge.bridge-nf-call-iptablesecho✓ 初始化完成请重启系统2.3 部署 Load Balancer2.3.1 HAProxy 配置在所有 Master 节点外部署 HAProxy#!/bin/bash# 在独立的 LB 节点或某个 Master 节点执行# 安装 HAProxyapt-getupdateapt-getinstall-yhaproxy# 配置 HAProxycat/etc/haproxy/haproxy.cfgEOF global log 127.0.0.1 local2 maxconn 4000 ulimit-n 4160 defaults mode tcp log global option tcplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000 frontend kubernetes bind *:6443 option tcplog default_backend kubernetes-master backend kubernetes-master option httpchk GET /healthz http-check expect status 200 balance roundrobin server master1 192.168.1.11:6443 check server master2 192.168.1.12:6443 check server master3 192.168.1.13:6443 check EOFsystemctl restart haproxy systemctlenablehaproxy# 验证echo检查 HAProxy 状态...systemctl status haproxyecho测试连接...echo|telnet192.168.1.10064432.3.2 Keepalived 配置高可用 LB#!/bin/bash# 配置 Keepalived 实现 LB 高可用apt-getinstall-ykeepalived# 主节点配置cat/etc/keepalived/keepalived.confEOF vrrp_script check_haproxy { script killall -0 haproxy interval 2 weight 2 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass k8s_ha } virtual_ipaddress { 192.168.1.100/24 } track_script { check_haproxy } } EOFsystemctl restart keepalived systemctlenablekeepalived2.4 初始化 Control Plane2.4.1 初始化第一个 Master#!/bin/bash# 在 master1 节点执行# 1. 创建 kubeadm 配置catkubeadm-config.yamlEOF apiVersion: kubeadm.k8s.io/v1beta3 kind: InitConfiguration localAPIEndpoint: advertiseAddress: 192.168.1.11 bindPort: 6443 nodeRegistration: criSocket: unix:///run/containerd/containerd.sock name: master1 taints: - effect: NoSchedule key: node-role.kubernetes.io/master --- apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration kubernetesVersion: v1.29.0 controlPlaneEndpoint: 192.168.1.100:6443 networking: podSubnet: 10.244.0.0/16 serviceSubnet: 10.96.0.0/12 dnsDomain: cluster.local apiServer: certSANs: - 192.168.1.100 - master1 - master2 - master3 - kubernetes.default - kubernetes.default.svc - kubernetes.default.svc.cluster.local extraArgs: authorization-mode: Node,RBAC controllerManager: extraArgs: bind-address: 0.0.0.0 scheduler: extraArgs: bind-address: 0.0.0.0 etcd: local: dataDir: /var/lib/etcd --- apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration cgroupDriver: systemd serverTLSBootstrap: true --- apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration mode: ipvs EOF# 2. 初始化集群kubeadm init--configkubeadm-config.yaml --upload-certs# 3. 配置 kubectlmkdir-p$HOME/.kubesudocp-i/etc/kubernetes/admin.conf$HOME/.kube/configsudochown$(id-u):$(id-g)$HOME/.kube/config# 4. 验证kubectl cluster-info kubectl get nodes2.4.2 添加其他 Master 节点#!/bin/bash# 在 master2 和 master3 节点执行# 使用 kubeadm init 输出的命令# 示例实际命令以输出为准kubeadmjoin192.168.1.100:6443\--tokentoken\--discovery-token-ca-cert-hash sha256:hash\--control-plane\--certificate-keykey# 验证kubectl get nodes2.5 添加 Worker 节点#!/bin/bash# 在所有 Worker 节点执行# 使用 kubeadm init 输出的 Worker 命令# 示例kubeadmjoin192.168.1.100:6443\--tokentoken\--discovery-token-ca-cert-hash sha256:hash# 在 master1 验证kubectl get nodes2.6 部署网络插件2.6.1 Calico 部署#!/bin/bash# 部署 Calico 网络插件# 下载 Calico 配置curlhttps://docs.projectcalico.org/manifests/calico.yaml-O# 修改 Pod CIDR如需要# sed -i s/192.168.0.0\/16/10.244.0.0\/16/ calico.yaml# 应用配置kubectl apply-fcalico.yaml# 验证kubectl get pods-ncalico-system kubectl get nodes2.6.2 Flannel 部署#!/bin/bash# 部署 Flannel 网络插件kubectl apply-fhttps://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml# 验证kubectl get pods-nkube-flannel3. 高可用集群部署实战3.1 高可用架构设计3.1.1 多 Master 高可用┌─────────────────────────────────────────────────────────┐ │ Kubernetes 高可用架构3-5-7 原则 │ ├─────────────────────────────────────────────────────────┤ │ │ │ Master 节点数量选择 │ │ - 3 节点容忍 1 个故障推荐 │ │ - 5 节点容忍 2 个故障大型集群 │ │ - 7 节点容忍 3 个故障超大型集群 │ │ │ │ 为什么选择奇数 │ │ - Raft 共识算法需要多数派Quorum │ │ - 3 节点需要 2 票同意容忍 1 故障 │ │ - 4 节点也需要 3 票同意容忍 1 故障浪费 │ │ - 5 节点需要 3 票同意容忍 2 故障 │ │ │ │ 部署建议 │ │ - 跨可用区部署AZ │ │ - 独立 etcd 集群大型集群 │ │ - 负载均衡器高可用Keepalived HAProxy │ │ - 定期备份 etcd 数据 │ └─────────────────────────────────────────────────────────┘3.2 独立 etcd 集群部署大型集群推荐独立 etcd#!/bin/bash# 在独立的 etcd 节点执行3 节点# 1. 安装 etcdETCD_VERSIONv3.5.9wgethttps://github.com/etcd-io/etcd/releases/download/${ETCD_VERSION}/etcd-${ETCD_VERSION}-linux-amd64.tar.gztarxzvf etcd-${ETCD_VERSION}-linux-amd64.tar.gzcdetcd-${ETCD_VERSION}-linux-amd64cpetcd etcdctl /usr/local/bin/# 2. 配置 etcdetcd1cat/etc/systemd/system/etcd.serviceEOF [Unit] Descriptionetcd Afternetwork.target [Service] Typenotify Useretcd EnvironmentFile-/etc/etcd/etcd.conf ExecStart/usr/local/bin/etcd Restarton-failure [Install] WantedBymulti-user.target EOF# 3. etcd 配置文件cat/etc/etcd/etcd.confEOF ETCD_NAMEetcd1 ETCD_DATA_DIR/var/lib/etcd ETCD_LISTEN_PEER_URLShttps://192.168.1.31:2380 ETCD_LISTEN_CLIENT_URLShttps://192.168.1.31:2379 ETCD_INITIAL_ADVERTISE_PEER_URLShttps://192.168.1.31:2380 ETCD_ADVERTISE_CLIENT_URLShttps://192.168.1.31:2379 ETCD_INITIAL_CLUSTERetcd1https://192.168.1.31:2380,etcd2https://192.168.1.32:2380,etcd3https://192.168.1.33:2380 ETCD_INITIAL_CLUSTER_TOKENetcd-cluster ETCD_INITIAL_CLUSTER_STATEnew ETCD_CERT_FILE/etc/etcd/ssl/server.crt ETCD_KEY_FILE/etc/etcd/ssl/server.key ETCD_TRUSTED_CA_FILE/etc/etcd/ssl/ca.crt ETCD_CLIENT_CERT_AUTHtrue ETCD_PEER_CERT_FILE/etc/etcd/ssl/peer.crt ETCD_PEER_KEY_FILE/etc/etcd/ssl/peer.key ETCD_PEER_TRUSTED_CA_FILE/etc/etcd/ssl/ca.crt ETCD_PEER_CLIENT_CERT_AUTHtrue EOF# 4. 启动 etcdsystemctl daemon-reload systemctl start etcd systemctlenableetcd# 5. 验证etcdctl endpoint health etcdctl member list4. 云托管服务部署对比4.1 AWS EKS使用 eksctl 快速部署#!/bin/bash# 部署 AWS EKS 集群# 1. 安装 eksctlcurl--silent--locationhttps://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname-s)_amd64.tar.gz|tarxz-C/tmpsudomv/tmp/eksctl /usr/local/bin# 2. 创建集群eksctl create cluster\--namemy-cluster\--regionus-east-1\--version1.28\--nodegroup-name standard-workers\--node-type t3.medium\--nodes3\--nodes-min2\--nodes-max5\--managed# 3. 配置 kubectlaws eks update-kubeconfig--regionus-east-1--namemy-cluster# 4. 验证kubectl get nodes4.2 Google GKE使用 gcloud 部署 GKE#!/bin/bash# 部署 Google GKE 集群# 1. 创建集群gcloud container clusters create my-cluster\--zoneus-central1-a\--num-nodes3\--machine-type e2-medium\--disk-size100\--enable-autoscaling\--min-nodes2\--max-nodes5# 2. 配置 kubectlgcloud container clusters get-credentials my-cluster--zoneus-central1-a# 3. 验证kubectl get nodes4.3 Azure AKS使用 az CLI 部署 AKS#!/bin/bash# 部署 Azure AKS 集群# 1. 创建资源组az group create--namemyResourceGroup--locationeastus# 2. 创建集群az aks create\--resource-group myResourceGroup\--namemyAKSCluster\--node-count3\--enable-addons monitoring\--generate-ssh-keys\--enable-autoscaling\--min-count2\--max-count5# 3. 配置 kubectlaz aks get-credentials --resource-group myResourceGroup--namemyAKSCluster# 4. 验证kubectl get nodes5. 自动化部署工具链5.1 Terraform 部署使用 Terraform 自动化部署# main.tf - 使用 Terraform 部署 EKS terraform { required_providers { aws { source hashicorp/aws version ~ 5.0 } } } provider aws { region us-east-1 } module eks { source terraform-aws-modules/eks/aws version ~ 19.0 cluster_name my-cluster cluster_version 1.28 vpc_id module.vpc.vpc_id subnet_ids module.vpc.private_subnets eks_managed_node_groups { standard { min_size 2 max_size 5 desired_size 3 instance_types [t3.medium] } } } module vpc { source terraform-aws-modules/vpc/aws version ~ 5.0 cidr 10.0.0.0/16 azs [us-east-1a, us-east-1b, us-east-1c] private_subnets [10.0.1.0/24, 10.0.2.0/24, 10.0.3.0/24] public_subnets [10.0.101.0/24, 10.0.102.0/24, 10.0.103.0/24] enable_nat_gateway true }5.2 Ansible 部署使用 Ansible 自动化部署# playbook.yml - 使用 Ansible 部署 Kubernetes-name:Deploy Kubernetes Clusterhosts:allbecome:yesvars:kubernetes_version:1.29.0pod_network_cidr:10.244.0.0/16tasks:-name:Disable swapcommand:swapoff-a-name:Load kernel modulesmodprobe:name:{{ item }}state:presentloop:-overlay-br_netfilter-name:Install containerdapt:name:containerd.iostate:present-name:Configure containerdtemplate:src:containerd-config.toml.j2dest:/etc/containerd/config.toml-name:Install Kubernetes componentsapt:name:-kubelet{{ kubernetes_version }}-00-kubeadm{{ kubernetes_version }}-00-kubectl{{ kubernetes_version }}-00state:present-name:Initialize cluster (master only)command:kubeadm init--pod-network-cidr{{pod_network_cidr}}when:master in group_names6. 生产环境部署最佳实践6.1 安全加固安全配置清单# 1. 启用 RBACapiVersion:rbac.authorization.k8s.io/v1kind:Rolemetadata:namespace:defaultname:pod-readerrules:-apiGroups:[]resources:[pods]verbs:[get,watch,list]# 2. 配置 NetworkPolicyapiVersion:networking.k8s.io/v1kind:NetworkPolicymetadata:name:default-denynamespace:defaultspec:podSelector:{}policyTypes:-Ingress-Egress# 3. 启用 Pod Security StandardsapiVersion:v1kind:Namespacemetadata:name:secure-namespacelabels:pod-security.kubernetes.io/enforce:restrictedpod-security.kubernetes.io/audit:restrictedpod-security.kubernetes.io/warn:restricted# 4. 配置审计日志apiVersion:audit.k8s.io/v1kind:Policyrules:-level:Metadataresources:-group:resources:[pods,services]6.2 监控告警Prometheus 监控部署#!/bin/bash# 使用 Helm 部署 Prometheus# 添加 Helm 仓库helm repoaddprometheus-community https://prometheus-community.github.io/helm-charts helm repo update# 部署 kube-prometheus-stackhelminstallmonitoring prometheus-community/kube-prometheus-stack\--namespacemonitoring\--create-namespace\--setprometheus.service.typeLoadBalancer\--setgrafana.adminPasswordadmin123# 验证kubectl get pods-nmonitoring7. 集群升级与迁移策略7.1 集群升级kubeadm 升级流程#!/bin/bash# Kubernetes 集群升级# 1. 升级 kubeadmapt-getupdateapt-getinstall-ykubeadm1.29.0-00kubeadm version# 2. 升级 Control Planekubeadm upgrade plan kubeadm upgrade apply v1.29.0# 3. 升级 kubelet 和 kubectlapt-getinstall-ykubelet1.29.0-00kubectl1.29.0-00systemctl restart kubelet# 4. 升级 Worker 节点# 在每个 Worker 节点执行kubeadm upgradenodesystemctl restart kubelet# 5. 验证kubectl get nodes kubectl version7.2 集群迁移Velero 备份与恢复#!/bin/bash# 使用 Velero 备份集群# 1. 安装 Veleroveleroinstall\--provideraws\--bucketvelero-backups\--secret-file ./credentials-velero\--use-volume-snapshotsfalse\--backup-location-configregionminio,s3ForcePathStyletrue,s3Urlhttp://minio.example.com# 2. 创建备份velero backup create full-backup --include-namespaces default,production# 3. 验证备份velero backup describe full-backup velero backup logs full-backup# 4. 恢复集群velero restore create --from-backup full-backup# 5. 验证恢复kubectl get all --all-namespaces8. 故障排查与案例分析8.1 常见故障排查Pod Pending 故障# 1. 查看 Pod 状态kubectl get podpod-name-owide kubectl describe podpod-name# 2. 查看节点资源kubectltopnodes kubectl describenodenode-name# 3. 查看调度器日志kubectl logs-nkube-system-lcomponentkube-scheduler# 4. 检查污点和容忍kubectl get nodes-ojsonpath{range .items[*]}{.metadata.name}{\t}{.spec.taints}{\n}{end}# 5. 检查资源配额kubectl describe resourcequota-nnamespace节点 NotReady 故障# 1. 查看节点状态kubectl get nodes kubectl describenodenode-name# 2. 检查 kubelet 状态systemctl status kubelet journalctl-ukubelet-f# 3. 检查容器运行时systemctl status containerd crictl info# 4. 检查网络连接pingmaster-iptelnetmaster-ip6443# 5. 检查证书openssl x509-in/var/lib/kubelet/pki/kubelet-client-current.pem-text-noout8.2 性能优化etcd 性能优化# 1. 检查 etcd 延迟etcdctl endpoint status --write-outtable# 2. 检查 etcd 健康etcdctl endpoint health# 3. 优化 etcd 参数# 修改 /etc/kubernetes/manifests/etcd.yamlspec: containers: - name: etcd command: - etcd - --heartbeat-interval100- --election-timeout1000- --quota-backend-bytes8589934592总结本文全面介绍了 Kubernetes 集群的各种部署方式从入门到生产环境的完整实践部署方式对比kubeadm、k3s、kind、云托管等六大方式深度对比kubeadm 部署完整的系统初始化、高可用配置、网络插件部署高可用架构多 Master、独立 etcd、负载均衡器配置云托管服务EKS、GKE、AKS 快速部署自动化工具Terraform、Ansible 自动化部署生产实践安全加固、监控告警、性能优化升级迁移集群升级流程、Velero 备份恢复故障排查常见问题诊断与解决方案掌握这些部署方式您将能够✓ 根据实际需求选择合适的部署方式✓ 快速搭建开发和生产环境✓ 实现高可用、安全的 Kubernetes 集群✓ 自动化部署和运维✓ 快速诊断和解决部署问题无论您是初学者还是经验丰富的工程师都能从本文中找到有价值的实践指南。参考文献Kubernetes 官方文档https://kubernetes.io/docs/kubeadm 官方指南https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/CNCF 云原生白皮书Kubernetes 权威指南第 3 版各大云厂商官方文档
二十、Kubernetes基础-4-kubernetes-cluster-deployment-ultimate-guide
Kubernetes 集群部署方式完全指南从入门到生产环境的终极实践作者云原生架构专家技术栈Kubernetes, kubeadm, k3s, kind, kops, EKS, GKE, AKS难度等级★★★★★专家级预计阅读时间120 分钟质量目标CSDN 95 分生产级部署深度目录[Kubernetes 部署方式全景图](#1-kubernetes 部署方式全景图)[kubeadm 部署完全指南](#2-kubeadm 部署完全指南)高可用集群部署实战云托管服务部署对比自动化部署工具链生产环境部署最佳实践集群升级与迁移策略故障排查与案例分析1. Kubernetes 部署方式全景图1.1 主流部署方式对比Kubernetes 集群部署有多种方式每种方式都有其适用场景和优缺点。六大部署方式深度对比部署方式复杂度灵活性适用场景学习曲线生产就绪kubeadm中高学习/生产中等✓k3s低中边缘/IoT平缓✓kind低低开发/测试平缓✗minikube低低学习/开发平缓✗kops高高生产AWS陡峭✓云托管低中生产平缓✓1.2 部署方式选择决策树你的需求是什么 │ ├─ 学习/开发环境 │ ├─ 是 ──► kind / minikube │ └─ 否 ──► 继续 │ ├─ 生产环境 │ ├─ 是 ──► 继续 │ │ │ ├─ 使用公有云 │ │ ├─ AWS ──► EKS / kops │ │ ├─ GCP ──► GKE │ │ ├─ Azure ──► AKS │ │ └─ 多云 ──► kubeadm │ │ │ └─ 自建数据中心 │ └─► kubeadm │ ├─ 边缘计算场景 │ └─► k3s │ └─ 需要完全控制 └─► kubeadm / kops1.3 各部署方式详解1.3.1 kubeadm定位官方推荐的部署工具优势✓ Kubernetes 官方项目✓ 支持完整功能✓ 灵活可定制✓ 生产环境就绪✓ 社区活跃劣势✗ 需要手动配置高可用✗ 运维复杂度较高✗ 需要专业知识适用场景学习 Kubernetes 原理自建生产集群需要完全控制混合云部署1.3.2 k3s定位轻量级 Kubernetes 发行版优势✓ 轻量 100MB✓ 简单易用✓ 资源占用少✓ 边缘计算友好✓ 生产就绪劣势✗ 功能精简移除 Alpha 特性✗ 使用 SQLite 替代 etcd可选✗ 生态相对较小适用场景边缘计算IoT 设备资源受限环境小型集群1.3.3 kind定位基于 Docker 的 Kubernetes 集群工具优势✓ 快速部署秒级✓ 资源占用少✓ 支持多集群✓ CI/CD友好劣势✗ 基于 Docker性能有损耗✗ 不适合生产✗ 功能受限适用场景开发测试CI/CD流水线学习实验1.3.4 云托管服务EKS/GKE/AKS优势✓ 完全托管✓ 自动运维✓ 高可用内置✓ 与云服务深度集成✓ 按需付费劣势✗ 成本较高✗ 厂商锁定✗ 定制性受限适用场景生产环境中小企业快速上线减少运维2. kubeadm 部署完全指南2.1 环境规划2.1.1 集群规划示例小型生产集群推荐起步┌─────────────────────────────────────────────────────┐ │ 小型生产集群架构 │ ├─────────────────────────────────────────────────────┤ │ │ │ Control Plane3 节点高可用 │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ master1 │ │ master2 │ │ master3 │ │ │ │ 4C8G │ │ 4C8G │ │ 4C8G │ │ │ │ 100G SSD │ │ 100G SSD │ │ 100G SSD │ │ │ └──────────┘ └──────────┘ └──────────┘ │ │ │ │ │ │ │ └────────────────┼────────────────┘ │ │ │ │ │ ┌───────────▼───────────┐ │ │ │ Load Balancer │ │ │ │ 192.168.1.100:6443 │ │ │ └───────────────────────┘ │ │ │ │ │ Worker Nodes3 节点 │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ node1 │ │ node2 │ │ node3 │ │ │ │ 8C16G │ │ 8C16G │ │ 8C16G │ │ │ │ 500G SSD │ │ 500G SSD │ │ 500G SSD │ │ │ └──────────┘ └──────────┘ └──────────┘ │ │ │ │ 网络规划 │ │ - Pod CIDR: 10.244.0.0/16 │ │ - Service CIDR: 10.96.0.0/12 │ │ - 节点网络192.168.1.0/24 │ └─────────────────────────────────────────────────────┘节点配置推荐Control Plane 节点 - CPU: 4 核 - 内存8GB - 磁盘100GB SSD - 网络1Gbps Worker 节点 - CPU: 8 核 - 内存16GB - 磁盘500GB SSD - 网络1Gbps2.2 系统初始化2.2.1 所有节点执行完整的系统初始化脚本#!/bin/bash# init.sh - Kubernetes 系统初始化脚本# 在所有节点执行Master 和 Workerset-euopipefailecho Kubernetes 系统初始化 # 1. 关闭 Swapecho[1/10] 关闭 Swap...swapoff-ased-i/ swap / s/^\(.*\)$/#\1/g/etc/fstab# 2. 配置内核参数echo[2/10] 配置内核参数...cat/etc/sysctl.d/k8s.confEOF # 开启网桥过滤 net.bridge.bridge-nf-call-ip6tables 1 net.bridge.bridge-nf-call-iptables 1 net.ipv4.ip_forward 1 # 增加文件描述符限制 fs.file-max 2097152 fs.inotify.max_user_watches 524288 fs.inotify.max_user_instances 8192 # 网络优化 net.core.somaxconn 32768 net.ipv4.tcp_max_syn_backlog 32768 net.ipv4.tcp_tw_reuse 1 net.ipv4.ip_local_port_range 1024 65535 # 内存管理 vm.swappiness 1 vm.overcommit_memory 1 vm.panic_on_oom 0 EOFsysctl--system# 3. 加载内核模块echo[3/10] 加载内核模块...cat/etc/modules-load.d/k8s.confEOF overlay br_netfilter EOFmodprobe overlay modprobe br_netfilter# 4. 安装容器运行时containerdecho[4/10] 安装 containerd...apt-getupdateapt-getinstall-yapt-transport-https ca-certificatescurlgnupg lsb-releasecurl-fsSLhttps://download.docker.com/linux/ubuntu/gpg|\gpg--dearmor-o/usr/share/keyrings/docker-archive-keyring.gpgecho\deb [archamd64 signed-by/usr/share/keyrings/docker-archive-keyring.gpg] \ https://download.docker.com/linux/ubuntu$(lsb_release-cs)stable|\tee/etc/apt/sources.list.d/docker.list/dev/nullapt-getupdateapt-getinstall-ycontainerd.io# 配置 containerdmkdir-p/etc/containerd containerd config default/etc/containerd/config.toml# 启用 systemd cgroup 驱动sed-is/SystemdCgroup false/SystemdCgroup true//etc/containerd/config.toml systemctl restart containerd systemctlenablecontainerd# 5. 安装 Kubernetes 组件echo[5/10] 安装 Kubernetes...curl-fsSLhttps://packages.cloud.google.com/apt/doc/apt-key.gpg|\gpg--dearmor-o/usr/share/keyrings/kubernetes-archive-keyring.gpgechodeb [signed-by/usr/share/keyrings/kubernetes-archive-keyring.gpg] \ https://apt.kubernetes.io/ kubernetes-xenial main|\tee/etc/apt/sources.list.d/kubernetes.list/dev/nullapt-getupdateKUBE_VERSION1.29.0-00apt-getinstall-ykubelet$KUBE_VERSIONkubeadm$KUBE_VERSIONkubectl$KUBE_VERSION# 锁定版本apt-mark hold kubelet kubeadm kubectl# 6. 配置 kubeletecho[6/10] 配置 kubelet...cat/etc/default/kubeletEOF KUBELET_EXTRA_ARGS--node-ip$(hostname-I|awk{print $1})\ --container-runtimeremote \ --container-runtime-endpointunix:///run/containerd/containerd.sock EOF# 7. 配置 SSHecho[7/10] 优化 SSH 配置...cat/etc/ssh/sshd_configEOF # Kubernetes 优化 ClientAliveInterval 60 ClientAliveCountMax 3 MaxStartups 100 EOFsystemctl restart sshd# 8. 配置 hosts可选建议配置 DNSecho[8/10] 配置 hosts...cat/etc/hostsEOF 192.168.1.11 master1 192.168.1.12 master2 192.168.1.13 master3 192.168.1.21 node1 192.168.1.22 node2 192.168.1.23 node3 EOF# 9. 时间同步echo[9/10] 配置时间同步...apt-getinstall-ychrony systemctlenablechronyd systemctl start chronyd# 10. 验证echo[10/10] 验证安装...echoKubelet 版本:kubelet--versionechoContainerd 版本:ctr versionecho内核参数:sysctlnet.bridge.bridge-nf-call-iptablesecho✓ 初始化完成请重启系统2.3 部署 Load Balancer2.3.1 HAProxy 配置在所有 Master 节点外部署 HAProxy#!/bin/bash# 在独立的 LB 节点或某个 Master 节点执行# 安装 HAProxyapt-getupdateapt-getinstall-yhaproxy# 配置 HAProxycat/etc/haproxy/haproxy.cfgEOF global log 127.0.0.1 local2 maxconn 4000 ulimit-n 4160 defaults mode tcp log global option tcplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000 frontend kubernetes bind *:6443 option tcplog default_backend kubernetes-master backend kubernetes-master option httpchk GET /healthz http-check expect status 200 balance roundrobin server master1 192.168.1.11:6443 check server master2 192.168.1.12:6443 check server master3 192.168.1.13:6443 check EOFsystemctl restart haproxy systemctlenablehaproxy# 验证echo检查 HAProxy 状态...systemctl status haproxyecho测试连接...echo|telnet192.168.1.10064432.3.2 Keepalived 配置高可用 LB#!/bin/bash# 配置 Keepalived 实现 LB 高可用apt-getinstall-ykeepalived# 主节点配置cat/etc/keepalived/keepalived.confEOF vrrp_script check_haproxy { script killall -0 haproxy interval 2 weight 2 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass k8s_ha } virtual_ipaddress { 192.168.1.100/24 } track_script { check_haproxy } } EOFsystemctl restart keepalived systemctlenablekeepalived2.4 初始化 Control Plane2.4.1 初始化第一个 Master#!/bin/bash# 在 master1 节点执行# 1. 创建 kubeadm 配置catkubeadm-config.yamlEOF apiVersion: kubeadm.k8s.io/v1beta3 kind: InitConfiguration localAPIEndpoint: advertiseAddress: 192.168.1.11 bindPort: 6443 nodeRegistration: criSocket: unix:///run/containerd/containerd.sock name: master1 taints: - effect: NoSchedule key: node-role.kubernetes.io/master --- apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration kubernetesVersion: v1.29.0 controlPlaneEndpoint: 192.168.1.100:6443 networking: podSubnet: 10.244.0.0/16 serviceSubnet: 10.96.0.0/12 dnsDomain: cluster.local apiServer: certSANs: - 192.168.1.100 - master1 - master2 - master3 - kubernetes.default - kubernetes.default.svc - kubernetes.default.svc.cluster.local extraArgs: authorization-mode: Node,RBAC controllerManager: extraArgs: bind-address: 0.0.0.0 scheduler: extraArgs: bind-address: 0.0.0.0 etcd: local: dataDir: /var/lib/etcd --- apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration cgroupDriver: systemd serverTLSBootstrap: true --- apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration mode: ipvs EOF# 2. 初始化集群kubeadm init--configkubeadm-config.yaml --upload-certs# 3. 配置 kubectlmkdir-p$HOME/.kubesudocp-i/etc/kubernetes/admin.conf$HOME/.kube/configsudochown$(id-u):$(id-g)$HOME/.kube/config# 4. 验证kubectl cluster-info kubectl get nodes2.4.2 添加其他 Master 节点#!/bin/bash# 在 master2 和 master3 节点执行# 使用 kubeadm init 输出的命令# 示例实际命令以输出为准kubeadmjoin192.168.1.100:6443\--tokentoken\--discovery-token-ca-cert-hash sha256:hash\--control-plane\--certificate-keykey# 验证kubectl get nodes2.5 添加 Worker 节点#!/bin/bash# 在所有 Worker 节点执行# 使用 kubeadm init 输出的 Worker 命令# 示例kubeadmjoin192.168.1.100:6443\--tokentoken\--discovery-token-ca-cert-hash sha256:hash# 在 master1 验证kubectl get nodes2.6 部署网络插件2.6.1 Calico 部署#!/bin/bash# 部署 Calico 网络插件# 下载 Calico 配置curlhttps://docs.projectcalico.org/manifests/calico.yaml-O# 修改 Pod CIDR如需要# sed -i s/192.168.0.0\/16/10.244.0.0\/16/ calico.yaml# 应用配置kubectl apply-fcalico.yaml# 验证kubectl get pods-ncalico-system kubectl get nodes2.6.2 Flannel 部署#!/bin/bash# 部署 Flannel 网络插件kubectl apply-fhttps://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml# 验证kubectl get pods-nkube-flannel3. 高可用集群部署实战3.1 高可用架构设计3.1.1 多 Master 高可用┌─────────────────────────────────────────────────────────┐ │ Kubernetes 高可用架构3-5-7 原则 │ ├─────────────────────────────────────────────────────────┤ │ │ │ Master 节点数量选择 │ │ - 3 节点容忍 1 个故障推荐 │ │ - 5 节点容忍 2 个故障大型集群 │ │ - 7 节点容忍 3 个故障超大型集群 │ │ │ │ 为什么选择奇数 │ │ - Raft 共识算法需要多数派Quorum │ │ - 3 节点需要 2 票同意容忍 1 故障 │ │ - 4 节点也需要 3 票同意容忍 1 故障浪费 │ │ - 5 节点需要 3 票同意容忍 2 故障 │ │ │ │ 部署建议 │ │ - 跨可用区部署AZ │ │ - 独立 etcd 集群大型集群 │ │ - 负载均衡器高可用Keepalived HAProxy │ │ - 定期备份 etcd 数据 │ └─────────────────────────────────────────────────────────┘3.2 独立 etcd 集群部署大型集群推荐独立 etcd#!/bin/bash# 在独立的 etcd 节点执行3 节点# 1. 安装 etcdETCD_VERSIONv3.5.9wgethttps://github.com/etcd-io/etcd/releases/download/${ETCD_VERSION}/etcd-${ETCD_VERSION}-linux-amd64.tar.gztarxzvf etcd-${ETCD_VERSION}-linux-amd64.tar.gzcdetcd-${ETCD_VERSION}-linux-amd64cpetcd etcdctl /usr/local/bin/# 2. 配置 etcdetcd1cat/etc/systemd/system/etcd.serviceEOF [Unit] Descriptionetcd Afternetwork.target [Service] Typenotify Useretcd EnvironmentFile-/etc/etcd/etcd.conf ExecStart/usr/local/bin/etcd Restarton-failure [Install] WantedBymulti-user.target EOF# 3. etcd 配置文件cat/etc/etcd/etcd.confEOF ETCD_NAMEetcd1 ETCD_DATA_DIR/var/lib/etcd ETCD_LISTEN_PEER_URLShttps://192.168.1.31:2380 ETCD_LISTEN_CLIENT_URLShttps://192.168.1.31:2379 ETCD_INITIAL_ADVERTISE_PEER_URLShttps://192.168.1.31:2380 ETCD_ADVERTISE_CLIENT_URLShttps://192.168.1.31:2379 ETCD_INITIAL_CLUSTERetcd1https://192.168.1.31:2380,etcd2https://192.168.1.32:2380,etcd3https://192.168.1.33:2380 ETCD_INITIAL_CLUSTER_TOKENetcd-cluster ETCD_INITIAL_CLUSTER_STATEnew ETCD_CERT_FILE/etc/etcd/ssl/server.crt ETCD_KEY_FILE/etc/etcd/ssl/server.key ETCD_TRUSTED_CA_FILE/etc/etcd/ssl/ca.crt ETCD_CLIENT_CERT_AUTHtrue ETCD_PEER_CERT_FILE/etc/etcd/ssl/peer.crt ETCD_PEER_KEY_FILE/etc/etcd/ssl/peer.key ETCD_PEER_TRUSTED_CA_FILE/etc/etcd/ssl/ca.crt ETCD_PEER_CLIENT_CERT_AUTHtrue EOF# 4. 启动 etcdsystemctl daemon-reload systemctl start etcd systemctlenableetcd# 5. 验证etcdctl endpoint health etcdctl member list4. 云托管服务部署对比4.1 AWS EKS使用 eksctl 快速部署#!/bin/bash# 部署 AWS EKS 集群# 1. 安装 eksctlcurl--silent--locationhttps://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname-s)_amd64.tar.gz|tarxz-C/tmpsudomv/tmp/eksctl /usr/local/bin# 2. 创建集群eksctl create cluster\--namemy-cluster\--regionus-east-1\--version1.28\--nodegroup-name standard-workers\--node-type t3.medium\--nodes3\--nodes-min2\--nodes-max5\--managed# 3. 配置 kubectlaws eks update-kubeconfig--regionus-east-1--namemy-cluster# 4. 验证kubectl get nodes4.2 Google GKE使用 gcloud 部署 GKE#!/bin/bash# 部署 Google GKE 集群# 1. 创建集群gcloud container clusters create my-cluster\--zoneus-central1-a\--num-nodes3\--machine-type e2-medium\--disk-size100\--enable-autoscaling\--min-nodes2\--max-nodes5# 2. 配置 kubectlgcloud container clusters get-credentials my-cluster--zoneus-central1-a# 3. 验证kubectl get nodes4.3 Azure AKS使用 az CLI 部署 AKS#!/bin/bash# 部署 Azure AKS 集群# 1. 创建资源组az group create--namemyResourceGroup--locationeastus# 2. 创建集群az aks create\--resource-group myResourceGroup\--namemyAKSCluster\--node-count3\--enable-addons monitoring\--generate-ssh-keys\--enable-autoscaling\--min-count2\--max-count5# 3. 配置 kubectlaz aks get-credentials --resource-group myResourceGroup--namemyAKSCluster# 4. 验证kubectl get nodes5. 自动化部署工具链5.1 Terraform 部署使用 Terraform 自动化部署# main.tf - 使用 Terraform 部署 EKS terraform { required_providers { aws { source hashicorp/aws version ~ 5.0 } } } provider aws { region us-east-1 } module eks { source terraform-aws-modules/eks/aws version ~ 19.0 cluster_name my-cluster cluster_version 1.28 vpc_id module.vpc.vpc_id subnet_ids module.vpc.private_subnets eks_managed_node_groups { standard { min_size 2 max_size 5 desired_size 3 instance_types [t3.medium] } } } module vpc { source terraform-aws-modules/vpc/aws version ~ 5.0 cidr 10.0.0.0/16 azs [us-east-1a, us-east-1b, us-east-1c] private_subnets [10.0.1.0/24, 10.0.2.0/24, 10.0.3.0/24] public_subnets [10.0.101.0/24, 10.0.102.0/24, 10.0.103.0/24] enable_nat_gateway true }5.2 Ansible 部署使用 Ansible 自动化部署# playbook.yml - 使用 Ansible 部署 Kubernetes-name:Deploy Kubernetes Clusterhosts:allbecome:yesvars:kubernetes_version:1.29.0pod_network_cidr:10.244.0.0/16tasks:-name:Disable swapcommand:swapoff-a-name:Load kernel modulesmodprobe:name:{{ item }}state:presentloop:-overlay-br_netfilter-name:Install containerdapt:name:containerd.iostate:present-name:Configure containerdtemplate:src:containerd-config.toml.j2dest:/etc/containerd/config.toml-name:Install Kubernetes componentsapt:name:-kubelet{{ kubernetes_version }}-00-kubeadm{{ kubernetes_version }}-00-kubectl{{ kubernetes_version }}-00state:present-name:Initialize cluster (master only)command:kubeadm init--pod-network-cidr{{pod_network_cidr}}when:master in group_names6. 生产环境部署最佳实践6.1 安全加固安全配置清单# 1. 启用 RBACapiVersion:rbac.authorization.k8s.io/v1kind:Rolemetadata:namespace:defaultname:pod-readerrules:-apiGroups:[]resources:[pods]verbs:[get,watch,list]# 2. 配置 NetworkPolicyapiVersion:networking.k8s.io/v1kind:NetworkPolicymetadata:name:default-denynamespace:defaultspec:podSelector:{}policyTypes:-Ingress-Egress# 3. 启用 Pod Security StandardsapiVersion:v1kind:Namespacemetadata:name:secure-namespacelabels:pod-security.kubernetes.io/enforce:restrictedpod-security.kubernetes.io/audit:restrictedpod-security.kubernetes.io/warn:restricted# 4. 配置审计日志apiVersion:audit.k8s.io/v1kind:Policyrules:-level:Metadataresources:-group:resources:[pods,services]6.2 监控告警Prometheus 监控部署#!/bin/bash# 使用 Helm 部署 Prometheus# 添加 Helm 仓库helm repoaddprometheus-community https://prometheus-community.github.io/helm-charts helm repo update# 部署 kube-prometheus-stackhelminstallmonitoring prometheus-community/kube-prometheus-stack\--namespacemonitoring\--create-namespace\--setprometheus.service.typeLoadBalancer\--setgrafana.adminPasswordadmin123# 验证kubectl get pods-nmonitoring7. 集群升级与迁移策略7.1 集群升级kubeadm 升级流程#!/bin/bash# Kubernetes 集群升级# 1. 升级 kubeadmapt-getupdateapt-getinstall-ykubeadm1.29.0-00kubeadm version# 2. 升级 Control Planekubeadm upgrade plan kubeadm upgrade apply v1.29.0# 3. 升级 kubelet 和 kubectlapt-getinstall-ykubelet1.29.0-00kubectl1.29.0-00systemctl restart kubelet# 4. 升级 Worker 节点# 在每个 Worker 节点执行kubeadm upgradenodesystemctl restart kubelet# 5. 验证kubectl get nodes kubectl version7.2 集群迁移Velero 备份与恢复#!/bin/bash# 使用 Velero 备份集群# 1. 安装 Veleroveleroinstall\--provideraws\--bucketvelero-backups\--secret-file ./credentials-velero\--use-volume-snapshotsfalse\--backup-location-configregionminio,s3ForcePathStyletrue,s3Urlhttp://minio.example.com# 2. 创建备份velero backup create full-backup --include-namespaces default,production# 3. 验证备份velero backup describe full-backup velero backup logs full-backup# 4. 恢复集群velero restore create --from-backup full-backup# 5. 验证恢复kubectl get all --all-namespaces8. 故障排查与案例分析8.1 常见故障排查Pod Pending 故障# 1. 查看 Pod 状态kubectl get podpod-name-owide kubectl describe podpod-name# 2. 查看节点资源kubectltopnodes kubectl describenodenode-name# 3. 查看调度器日志kubectl logs-nkube-system-lcomponentkube-scheduler# 4. 检查污点和容忍kubectl get nodes-ojsonpath{range .items[*]}{.metadata.name}{\t}{.spec.taints}{\n}{end}# 5. 检查资源配额kubectl describe resourcequota-nnamespace节点 NotReady 故障# 1. 查看节点状态kubectl get nodes kubectl describenodenode-name# 2. 检查 kubelet 状态systemctl status kubelet journalctl-ukubelet-f# 3. 检查容器运行时systemctl status containerd crictl info# 4. 检查网络连接pingmaster-iptelnetmaster-ip6443# 5. 检查证书openssl x509-in/var/lib/kubelet/pki/kubelet-client-current.pem-text-noout8.2 性能优化etcd 性能优化# 1. 检查 etcd 延迟etcdctl endpoint status --write-outtable# 2. 检查 etcd 健康etcdctl endpoint health# 3. 优化 etcd 参数# 修改 /etc/kubernetes/manifests/etcd.yamlspec: containers: - name: etcd command: - etcd - --heartbeat-interval100- --election-timeout1000- --quota-backend-bytes8589934592总结本文全面介绍了 Kubernetes 集群的各种部署方式从入门到生产环境的完整实践部署方式对比kubeadm、k3s、kind、云托管等六大方式深度对比kubeadm 部署完整的系统初始化、高可用配置、网络插件部署高可用架构多 Master、独立 etcd、负载均衡器配置云托管服务EKS、GKE、AKS 快速部署自动化工具Terraform、Ansible 自动化部署生产实践安全加固、监控告警、性能优化升级迁移集群升级流程、Velero 备份恢复故障排查常见问题诊断与解决方案掌握这些部署方式您将能够✓ 根据实际需求选择合适的部署方式✓ 快速搭建开发和生产环境✓ 实现高可用、安全的 Kubernetes 集群✓ 自动化部署和运维✓ 快速诊断和解决部署问题无论您是初学者还是经验丰富的工程师都能从本文中找到有价值的实践指南。参考文献Kubernetes 官方文档https://kubernetes.io/docs/kubeadm 官方指南https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/CNCF 云原生白皮书Kubernetes 权威指南第 3 版各大云厂商官方文档