1. Kubernetes安装前的环境准备在开始Kubernetes安装之前我们需要确保基础环境已经准备就绪。作为一个在生产环境部署过数十个Kubernetes集群的老兵我强烈建议不要跳过这个环节否则后续会出现各种玄学问题。1.1 系统要求检查首先确认你的主机满足以下最低要求操作系统Ubuntu 16.04/CentOS 7/Debian 9个人推荐Ubuntu 20.04 LTSCPU至少2核生产环境建议4核以上内存至少2GB生产环境建议8GB以上磁盘至少20GB可用空间网络每个节点能互相通信且能访问外网重要提示所有节点需要确保时间同步建议安装NTP服务。我在实际部署中遇到过因为时间不同步导致的证书验证失败问题排查了整整一天1.2 基础服务配置在所有节点上执行以下操作# 关闭swapKubernetes 1.8要求 sudo swapoff -a # 永久禁用编辑/etc/fstab注释swap行 sudo sed -i / swap / s/^\(.*\)$/#\1/g /etc/fstab # 关闭SELinux兼容性问题高发区 sudo setenforce 0 sudo sed -i s/^SELINUXenforcing$/SELINUXpermissive/ /etc/selinux/config # 配置防火墙规则如果使用firewalld sudo firewall-cmd --permanent --add-port6443/tcp sudo firewall-cmd --permanent --add-port2379-2380/tcp sudo firewall-cmd --permanent --add-port10250/tcp sudo firewall-cmd --permanent --add-port10251/tcp sudo firewall-cmd --permanent --add-port10252/tcp sudo firewall-cmd --reload1.3 容器运行时安装Kubernetes支持多种容器运行时但Docker仍然是最成熟的选择。安装Docker CE版本# Ubuntu示例 sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository deb [archamd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable sudo apt-get update sudo apt-get install -y docker-ce5:19.03.15~3-0~ubuntu-focal # 配置Docker使用systemd作为cgroup driver必须 sudo mkdir /etc/docker cat EOF | sudo tee /etc/docker/daemon.json { exec-opts: [native.cgroupdriversystemd], log-driver: json-file, log-opts: { max-size: 100m }, storage-driver: overlay2 } EOF sudo systemctl enable docker sudo systemctl daemon-reload sudo systemctl restart docker2. Kubernetes组件安装与配置2.1 安装kubeadm、kubelet和kubectl在所有节点上执行# 添加Kubernetes源 sudo apt-get update sudo apt-get install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - cat EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF sudo apt-get update # 安装指定版本这里选择1.22.5稳定版 sudo apt-get install -y kubelet1.22.5-00 kubeadm1.22.5-00 kubectl1.22.5-00 sudo apt-mark hold kubelet kubeadm kubectl # 防止自动升级2.2 初始化控制平面节点选择一个节点作为master现在叫control-plane节点执行初始化sudo kubeadm init \ --pod-network-cidr10.244.0.0/16 \ --apiserver-advertise-address节点内网IP \ --kubernetes-versionv1.22.5 \ --image-repositoryregistry.aliyuncs.com/google_containers实战经验国内用户一定要指定--image-repository使用阿里云镜像否则会因为网络问题导致镜像拉取失败。我在第一次部署时没注意这点等了两个小时才发现卡在镜像下载。成功后会输出类似以下信息Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config按照提示配置kubectlmkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config2.3 安装网络插件Kubernetes需要网络插件才能实现Pod间通信。这里选择Flannelkubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml检查安装状态kubectl get pods -n kube-system # 等待所有Pod状态变为Running3. 工作节点加入集群3.1 获取加入命令在master节点上查看加入命令kubeadm token create --print-join-command会输出类似kubeadm join 192.168.1.100:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef3.2 在工作节点上执行加入命令在每个工作节点上执行上面获取的命令需要sudo权限sudo kubeadm join 192.168.1.100:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef成功后会显示This node has joined the cluster: * Certificate signing request was sent to apiserver and a response was received. * The Kubelet was informed of the new secure connection details.3.3 验证集群状态回到master节点执行kubectl get nodes应该能看到所有节点状态为Ready。如果看到NotReady通常是网络插件还没完全启动等待几分钟再检查。4. 常见问题排查与优化4.1 安装过程中的典型错误问题1kubeadm init卡住检查docker是否正常运行sudo systemctl status docker查看具体日志journalctl -xeu kubelet常见原因镜像拉取失败可以手动拉取sudo kubeadm config images pull --image-repositoryregistry.aliyuncs.com/google_containers问题2节点无法加入集群检查6443端口是否开放telnet master-ip 6443检查token是否过期默认24小时kubeadm token list重新生成tokenkubeadm token create --print-join-command4.2 生产环境优化建议高可用部署生产环境应该部署多个control-plane节点使用负载均衡器访问API Server。证书管理kubeadm默认证书有效期1年建议使用kubeadm alpha certs renew定期更新或配置外部证书。资源预留为系统进程和Kubernetes组件预留资源编辑/var/lib/kubelet/config.yamlsystemReserved: cpu: 500m memory: 500Mi kubeReserved: cpu: 500m memory: 500Mi日志收集配置/etc/docker/daemon.json中的日志轮转避免磁盘被日志占满。4.3 常用诊断命令# 查看集群状态 kubectl get cs # 查看事件排查Pod创建失败等问题 kubectl get events --sort-by.metadata.creationTimestamp # 查看组件日志 journalctl -u kubelet -f kubectl logs -n kube-system pod-name # 诊断网络问题 kubectl run -it --rm --imagenicolaka/netshoot test -- /bin/bash # 在容器内执行ping/nslookup等命令5. 后续配置建议集群安装完成后建议进行以下配置安装Dashboard可选kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml kubectl proxy # 然后访问 http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/配置存储根据需求安装NFS/CSI驱动或云厂商的存储插件。配置Ingress Controller如Nginx Ingresskubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.4/deploy/static/provider/cloud/deploy.yaml配置监控安装Prometheus Operator或使用云厂商的监控服务。经过以上步骤你应该已经成功部署了一个生产可用的Kubernetes集群。记住Kubernetes的安装只是开始真正的挑战在于日常运维和优化。建议从简单的应用开始部署逐步熟悉各种资源和控制器的工作原理。