1. 项目背景与核心价值在云计算时代容器编排技术已经成为现代应用部署的标准方案。作为一名长期在云计算领域实践的工程师我最近在阿里云ECS上成功搭建了一套生产可用的Kubernetes集群。整个过程踩过不少坑也积累了一些实战经验今天就把这个完整方案分享给大家。阿里云ECS作为国内领先的云服务器产品提供了稳定可靠的IaaS层资源。而Kubernetes作为容器编排领域的事实标准两者结合可以快速构建企业级容器化平台。这种方案特别适合中小型企业快速搭建自己的DevOps基础设施也适合开发者学习云原生技术栈。2. 环境准备与资源规划2.1 服务器选型建议在阿里云上搭建Kubernetes集群首先需要考虑ECS实例的选型。根据我的经验控制节点Master建议至少2核4G配置生产环境推荐4核8G工作节点Node根据业务负载选择开发环境2核4G起步系统盘建议40GB以上选择高效云盘或SSD云盘操作系统推荐使用Aliyun Linux 2或CentOS 7.9重要提示阿里云部分ECS实例规格如t5突发性能实例不适合运行Kubernetes建议选择计算型c6或通用型g6系列实例。2.2 网络规划要点VPC规划建议为Kubernetes集群创建独立的VPC交换机配置至少配置2个不同可用区的交换机安全组设置需要开放6443API Server、2379-2380etcd等端口弹性公网IP建议仅为Master节点配置EIP3. Kubernetes集群部署实战3.1 基础环境配置在所有节点上执行以下基础配置# 关闭swap swapoff -a sed -i / swap / s/^/#/ /etc/fstab # 关闭SELinux setenforce 0 sed -i s/^SELINUXenforcing$/SELINUXpermissive/ /etc/selinux/config # 配置内核参数 cat EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables 1 net.bridge.bridge-nf-call-iptables 1 EOF sysctl --system3.2 容器运行时安装推荐使用containerd作为容器运行时# 安装containerd yum install -y containerd.io # 配置containerd mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml # 修改sandbox镜像为阿里云镜像 sed -i s|k8s.gcr.io/pause|registry.aliyuncs.com/google_containers/pause|g /etc/containerd/config.toml # 启动containerd systemctl enable --now containerd3.3 Kubernetes组件安装配置阿里云Kubernetes镜像源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安装kubeadm、kubelet和kubectlyum install -y kubelet kubeadm kubectl --disableexcludeskubernetes systemctl enable --now kubelet3.4 集群初始化在Master节点执行初始化kubeadm init \ --image-repository registry.aliyuncs.com/google_containers \ --pod-network-cidr10.244.0.0/16 \ --service-cidr10.96.0.0/12 \ --apiserver-advertise-addressMaster节点内网IP初始化完成后按照提示配置kubectlmkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config3.5 网络插件安装推荐使用Flannel作为网络插件kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml4. 工作节点加入集群在每个工作节点执行Master节点初始化后提供的join命令kubeadm join Master节点IP:6443 --token token \ --discovery-token-ca-cert-hash sha256:hash加入完成后在Master节点验证节点状态kubectl get nodes5. 集群验证与基础组件部署5.1 集群状态检查# 查看组件状态 kubectl get componentstatuses # 查看pod状态 kubectl get pods --all-namespaces # 查看节点资源使用情况 kubectl top nodes5.2 部署Dashboardkubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml创建访问令牌kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard kubectl create clusterrolebinding dashboard-admin --clusterrolecluster-admin --serviceaccountkubernetes-dashboard:dashboard-admin kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep dashboard-admin | awk {print $1})6. 生产环境优化建议6.1 Master节点高可用生产环境建议部署3个Master节点实现高可用部署负载均衡器如阿里云SLB使用keepalivedhaproxy实现本地负载均衡修改kubeadm配置使用VIP地址6.2 持久化存储方案推荐使用阿里云CSI插件对接云盘/NAS# 安装CSI插件 kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/alibaba-cloud-csi-driver/master/deploy/ack/csi-plugin.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/alibaba-cloud-csi-driver/master/deploy/ack/csi-provisioner.yaml6.3 监控与日志方案监控Prometheus Grafana日志EFKElasticsearch Fluentd Kibana告警Alertmanager7. 常见问题排查7.1 节点NotReady状态排查检查kubelet服务状态systemctl status kubelet查看kubelet日志journalctl -u kubelet -f检查网络插件pod状态kubectl get pods -n kube-system7.2 Pod一直处于Pending状态查看事件详情kubectl describe pod pod-name检查资源配额kubectl describe nodes检查存储卷声明kubectl get pvc7.3 镜像拉取失败配置阿里云镜像加速器检查镜像地址是否正确检查网络连通性8. 运维管理技巧使用kubectl自动补全echo source (kubectl completion bash) ~/.bashrc快速查看资源使用watch -n 1 kubectl get pods -A批量删除异常podkubectl delete pods --field-selectorstatus.phaseFailed -A使用kubectl插件# 安装krew插件管理器 ( set -x; cd $(mktemp -d) curl -fsSLO https://github.com/kubernetes-sigs/krew/releases/latest/download/krew.tar.gz tar zxvf krew.tar.gz KREW./krew-$(uname | tr [:upper:] [:lower:])_$(uname -m | sed -e s/x86_64/amd64/ -e s/arm.*$/arm/) $KREW install krew )在实际运维过程中我发现阿里云ECS的自动恢复功能对Kubernetes节点异常恢复很有帮助。建议为生产环境节点开启实例自动恢复功能当节点底层硬件故障时系统会自动迁移实例到健康物理机。