阿里云ECS上30分钟快速部署Kubernetes集群实战

发布时间:2026/7/24 12:59:11
阿里云ECS上30分钟快速部署Kubernetes集群实战 1. 项目概述在云计算时代Kubernetes已经成为容器编排的事实标准。作为一名长期在云原生领域工作的工程师我经常被问到如何在公有云上快速搭建Kubernetes集群。今天我就以阿里云ECS为例分享一套经过生产验证的Kubernetes部署方案。这个方案特别适合中小型团队它能在30分钟内完成从零到可用的Kubernetes集群搭建而且成本可控。我将在本文中详细解析每个关键步骤包括网络规划、安全组配置、组件选型等核心环节并分享我在实际部署中积累的多个避坑经验。2. 环境准备与规划2.1 ECS实例选型建议在阿里云上部署KubernetesECS实例的选择直接影响集群性能和成本。根据我的经验控制节点至少选择2核4G配置推荐ecs.g6.large或ecs.c6.large实例工作节点根据工作负载选择常规应用建议4核8G起步ecs.g6.xlarge系统盘务必选择高效云盘或SSD云盘容量不小于100GB操作系统推荐Aliyun Linux 2或CentOS 7.9重要提示避免使用突发性能实例(t5系列)Kubernetes的稳定运行需要持续的计算能力。2.2 网络规划要点合理的网络规划是集群稳定性的基础VPC规划创建独立的VPCCIDR建议使用10.0.0.0/16按可用区划分子网例如10.0.1.0/24可用区A10.0.2.0/24可用区B安全组配置控制节点需要开放6443API Server、2379-2380etcd等端口工作节点需要开放10250kubelet、30000-32767NodePort等端口弹性公网IP建议仅为控制节点绑定EIP工作节点通过NAT网关访问外网3. Kubernetes集群部署3.1 基础环境配置在所有节点上执行以下准备工作# 关闭Swap swapoff -a sed -i / swap / s/^/#/ /etc/fstab # 设置内核参数 cat EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables 1 net.bridge.bridge-nf-call-iptables 1 net.ipv4.ip_forward 1 EOF sysctl --system # 安装Docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install -y docker-ce-19.03.15 docker-ce-cli-19.03.15 containerd.io systemctl enable docker systemctl start docker3.2 使用kubeadm部署集群安装kubeadm工具cat EOF /etc/yum.repos.d/kubernetes.repo [kubernetes] nameKubernetes baseurlhttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled1 gpgcheck1 repo_gpgcheck1 gpgkeyhttps://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF yum install -y kubelet-1.20.11 kubeadm-1.20.11 kubectl-1.20.11 systemctl enable kubelet初始化控制平面kubeadm init \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.20.11 \ --pod-network-cidr10.244.0.0/16 \ --service-cidr10.96.0.0/12 \ --apiserver-advertise-address控制节点内网IP配置kubectlmkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config3.3 网络插件安装推荐使用Flannel作为CNI插件kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml4. 工作节点加入集群在控制节点上获取加入命令kubeadm token create --print-join-command在工作节点上执行输出的命令格式类似kubeadm join 10.0.1.100:6443 --token abcdef.1234567890 \ --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx验证节点状态kubectl get nodes5. 集群验证与优化5.1 基础功能验证# 创建测试Pod kubectl run nginx --imagenginx --port80 # 暴露服务 kubectl expose pod nginx --typeNodePort # 获取服务访问端口 kubectl get svc nginx5.2 关键优化配置kubelet资源预留# /etc/kubernetes/kubelet.conf apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration evictionHard: memory.available: 500Mi nodefs.available: 10% systemReserved: cpu: 500m memory: 500Mi调度策略优化apiVersion: kubescheduler.config.k8s.io/v1beta2 kind: KubeSchedulerConfiguration profiles: - schedulerName: default-scheduler plugins: preScore: enabled: - name: NodeResourcesBalancedAllocation - name: InterPodAffinity6. 常见问题与解决方案6.1 节点NotReady状态排查检查kubelet服务状态systemctl status kubelet journalctl -u kubelet -n 50 --no-pager验证网络插件kubectl get pods -n kube-system | grep flannel检查CNI配置ls -l /etc/cni/net.d/ cat /etc/cni/net.d/10-flannel.conflist6.2 Pod创建失败问题常见原因及解决方案错误现象可能原因解决方案ImagePullBackOff镜像拉取失败配置阿里云镜像加速器CrashLoopBackOff应用启动失败检查应用日志kubectl logs podPending状态资源不足检查节点资源kubectl describe node6.3 网络连通性问题跨节点Pod通信测试kubectl run test -it --rm --imagealpine -- sh ping 其他节点Pod IPService DNS解析测试kubectl run dns-test -it --rm --imagebusybox:1.28 -- nslookup kubernetes.default7. 生产环境建议7.1 高可用架构对于生产环境建议采用多控制平面部署部署3个控制节点组成高可用集群使用SLB暴露API Server配置etcd集群7.2 监控与日志必备组件监控Prometheus Grafana日志EFKElasticsearchFluentdKibana告警Alertmanager7.3 备份策略关键数据备份方案etcd备份ETCDCTL_API3 etcdctl --endpointshttps://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 snapshot.db资源定义备份kubectl get all --all-namespaces -o yaml cluster-backup.yaml8. 成本优化技巧8.1 弹性伸缩策略使用Cluster AutoscalerapiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: example spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: example minReplicas: 2 maxReplicas: 10 targetCPUUtilizationPercentage: 50配置节点自动伸缩组8.2 资源利用率提升设置合理的requests/limitsresources: requests: cpu: 500m memory: 512Mi limits: cpu: 1000m memory: 1Gi使用节点亲和性调度affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/arch operator: In values: - amd64经过多次生产环境部署验证这套方案稳定性和成本之间取得了良好平衡。特别是在网络配置和资源调度方面通过合理的参数调优可以显著提升集群性能。