Kubernetes 集群安装
安装 Kubernetes 有两条常用路线:本机快速体验用 minikube,一条命令得到单节点集群;生产级多节点集群用 kubeadm。两者主线一致:装三件套 → 初始化控制面 → 加入节点 → 安装网络插件。
方式一:minikube 快速体验
minikube 把整套 Kubernetes 装进虚拟机或容器,一条命令即可得到可用集群,适合学习与本地调试:
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
minikube start --driver=docker # 本机需装有 docker 等驱动
kubectl get nodes # minikube 已自动配好 kubeconfig
# NAME STATUS ROLES AGE
# minikube Ready control-plane 2m
方式二:kubeadm 搭建多节点集群
建议三台 2 核 2G 以上、网络互通的机器:
| 主机 | 角色 | 说明 |
|---|---|---|
| node-1 | 控制面 | 执行 kubeadm init |
| node-2、node-3 | 工作节点 | 执行 kubeadm join |
1. 三台机器统一准备
关闭 swap,加载内核模块并设置网络参数(kubeadm 初始化时会校验这些前置条件):
sudo swapoff -a && sudo sed -i '/swap/s/^/#/' /etc/fstab # 临时并永久关闭
sudo modprobe overlay && sudo modprobe br_netfilter
printf 'overlay\nbr_netfilter\n' | sudo tee /etc/modules-load.d/k8s.conf
printf 'net.bridge.bridge-nf-call-iptables = 1\nnet.ipv4.ip_forward = 1\n' \
| sudo tee /etc/sysctl.d/k8s.conf
sudo sysctl --system
2. 安装 kubeadm、kubelet、kubectl
三台都装并锁定版本,防止被包管理器升级(以 v1.30 线为例,使用官方源 pkgs.k8s.io):
sudo curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key \
| sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' \
| sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
(上为 Debian/Ubuntu 写法;CentOS/RHEL 换对应 rpm 源即可。)
3. 控制面节点初始化
只在 node-1 执行。--pod-network-cidr 需与所选 CNI 一致,flannel 常用 10.244.0.0/16:
sudo kubeadm init \
--kubernetes-version=stable \
--pod-network-cidr=10.244.0.0/16
# 成功后会打印 join 命令与令牌,务必保存备用
init 后先配置 kubeconfig,否则 kubectl 无法访问集群。把生成的 admin.conf 复制给当前用户:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes
# NAME STATUS ROLES AGE
# node-1 NotReady control-plane 1m # 未装 CNI 前 NotReady 正常
4. 安装网络插件 CNI
不装 CNI,节点一直 NotReady、Pod 无法互通。以 flannel 为例应用官方清单:
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
kubectl get nodes # 稍候节点应变更为 Ready
# NAME STATUS ROLES AGE
# node-1 Ready control-plane 3m
5. 工作节点加入
在 node-2、node-3 执行 init 打印的 join 命令(令牌默认 24 小时过期,可用 kubeadm token create 重新生成):
sudo kubeadm join 192.168.1.10:6443 \
--token <令牌值> \
--discovery-token-ca-cert-hash sha256:<校验值>
小结:minikube 一条命令即可体验;kubeadm 路线按"关 swap、加载模块、装三件套、init、配 kubeconfig、装 CNI、join"推进。最易遗漏的是 init 后必须配置 kubeconfig,否则 kubectl 的一切操作都会报连接失败。