以下是如何快速部署Kubernetes集群的分步指南,涵盖单节点、多节点及生产级高可用集群的部署方法,结合主流的工具和优化技巧
一、单节点快速部署(开发/测试环境)
1. 使用 Minikube(本地快速体验)
适用场景:本地开发、学习K8s基础功能。
步骤:
# 安装Minikube(需提前安装Docker或虚拟机驱动) curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube # 启动集群(使用Docker驱动) minikube start --driver=docker # 验证集群 kubectl get nodes
特点:
-
一键启动单节点集群,集成Dashboard、Ingress等组件。
-
支持离线镜像加载:
minikube image load my-app:latest
。
2. 使用 k3s(轻量级K8s)
适用场景:边缘计算、资源受限环境。
步骤:
# 一键安装(主节点) curl -sfL https://get.k3s.io | sh - # 查看节点 kubectl get nodes # 加入工作节点(在另一台机器执行) curl -sfL https://get.k3s.io | K3S_URL=https://主节点IP:6443 K3S_TOKEN=节点token sh -
特点:
-
二进制文件仅40MB,默认使用SQLite替代etcd。
-
内置Traefik作为Ingress控制器。
二、多节点生产级部署(高可用)
1. 使用 kubeadm 部署高可用集群
适用场景:生产环境、需要控制平面高可用性。
架构:3个Master节点(堆叠式etcd)+ N个Worker节点。
步骤:
1.1 所有节点准备
# 关闭Swap和防火墙 sudo swapoff -a sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab sudo systemctl stop firewalld && sudo systemctl disable firewalld # 安装Docker和kubeadm cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0 EOF sudo yum install -y kubeadm-1.27.3 kubelet-1.27.3 kubectl-1.27.3 sudo systemctl enable --now kubelet
1.2 初始化第一个Master节点
sudo kubeadm init \ --control-plane-endpoint "LOAD_BALANCER_IP:6443" \ --upload-certs \ --pod-network-cidr=10.244.0.0/16 \ --image-repository registry.aliyuncs.com/google_containers # 配置kubectl mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config # 安装网络插件(Flannel) kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
1.3 加入其他Master节点
# 生成加入命令(在第一个Master执行) kubeadm token create --print-join-command # 在其他Master节点执行(追加--control-plane参数) sudo kubeadm join LOAD_BALANCER_IP:6443 --token ... --control-plane --certificate-key ...
1.4 加入Worker节点
# 在Worker节点执行普通加入命令 sudo kubeadm join LOAD_BALANCER_IP:6443 --token ...
2. 使用自动化工具(Rancher/Kubespray)
适用场景:批量部署、企业级管理。
方法对比:
工具 | 特点 |
---|---|
Rancher | 图形化界面,支持多集群管理,内置监控和流水线。 |
Kubespray | 基于Ansible,支持多云环境,灵活定制组件版本。 |
Kubespray示例:
# 克隆仓库 git clone https://github.com/kubernetes-sigs/kubespray.git cd kubespray # 安装依赖 pip install -r requirements.txt # 配置节点清单 cp -rfp inventory/sample inventory/mycluster cat > inventory/mycluster/hosts.yaml <<EOF all: hosts: node1: ansible_host: 192.168.1.101 ip: 192.168.1.101 access_ip: 192.168.1.101 node2: ansible_host: 192.168.1.102 ip: 192.168.1.102 access_ip: 192.168.1.102 children: kube_control_plane: hosts: node1 kube_node: hosts: node1 node2 etcd: hosts: node1 calico_rr: hosts: {} EOF # 执行部署 ansible-playbook -i inventory/mycluster/hosts.yaml cluster.yml -b -v
三、部署优化与注意事项
1. 国内环境加速
-
镜像仓库:使用阿里云镜像源(
registry.aliyuncs.com/google_containers
)。 -
Kubernetes组件:修改kubeadm配置文件中的
imageRepository
字段。
2. 常见问题排查
-
节点无法加入集群:
-
检查防火墙是否开放6443、2379-2380、10250-10255端口。
-
确保所有节点时间同步(
ntpd
或chrony
)。
-
-
Pod网络不通:
-
确认CNI插件(如Flannel/Calico)已正确安装。
-
执行
kubectl get pods -n kube-system
检查核心组件状态。
-
3. 生产环境建议
-
高可用架构:
-
使用外部负载均衡器(如HAProxy+Nginx)分发API Server流量。
-
部署独立的etcd集群(至少3节点)。
-
-
持久化存储:集成云厂商CSI插件(如AWS EBS、阿里云云盘)。
四、部署工具对比与选择
工具/方法 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
Minikube | 本地开发、快速体验 | 简单易用,集成工具链 | 仅支持单节点 |
k3s | 边缘计算、资源受限环境 | 轻量级,启动速度快 | 功能较原生K8s略有裁剪 |
kubeadm | 生产环境、自定义部署 | 官方推荐,灵活可控 | 手动配置复杂度较高 |
Rancher | 多集群管理、企业级运维 | 图形化界面,全生命周期管理 | 需要额外资源部署 |
通过上述方法,您可以在10分钟到1小时内完成从单节点到生产级集群的部署。关键建议:
-
开发测试优先使用Minikube或k3s,生产环境选择kubeadm或Kubespray。
-
遇到问题时,善用
kubectl describe
和日志排查(journalctl -u kubelet
)。