温馨提示×

K8s在Linux上的安装流程是怎样的

小樊
45
2025-11-18 19:01:14
栏目: 智能运维

Linux 上安装 Kubernetes 的两种常用方式概览

  • 使用 kubeadm 搭建多节点集群:可控性强、适合学习与生产前验证,需准备至少 2 台 Linux 主机(1 个 Master,1 个及以上 Worker)。
  • 使用 microk8s 在单机上快速体验:一条命令安装,适合 Ubuntu 桌面/单节点开发与测试,内置常用插件(如 dashboard、dns、registry)。

使用 kubeadm 搭建集群的标准流程

  • 环境准备(所有节点)
    • 禁用 Swap:执行 sudo swapoff -a,并在 /etc/fstab 中注释含 swap 的行,避免重启后恢复。
    • 加载内核模块与网络参数:
      • 模块:sudo modprobe overlay && sudo modprobe br_netfilter
      • 参数:sudo tee /etc/sysctl.d/kubernetes.conf <<EOF net.bridge.bridge-nf-call-ip6tables=1 net.bridge.bridge-nf-call-iptables=1 net.ipv4.ip_forward=1 EOF 并执行 sudo sysctl --system
    • 主机名与解析:设置唯一主机名(如 hostnamectl set-hostname k8s-master),并在所有节点的 /etc/hosts 中添加主从节点 IP 与主机名 映射,保证互通。
    • 容器运行时(二选一)
      • containerd(推荐):sudo apt-get update && sudo apt-get install -y containerd.io,随后按默认配置启动即可(生产可进一步配置 systemd cgroup 等)。
      • Docker(亦可):安装 Docker 并配置 cgroup 驱动为 systemd,例如 /etc/docker/daemon.json 中加入 "exec-opts": ["native.cgroupdriver=systemd"],然后 sudo systemctl daemon-reload && sudo systemctl restart docker
    • 安装 kubeadm、kubelet、kubectl(所有节点):配置 Kubernetes APT 源后执行 sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl,并 sudo systemctl enable --now kubelet 保持开机自启(暂不启动,待 init 后再就绪)。
  • 初始化控制平面(仅在 Master)
    • 执行初始化:sudo kubeadm init --pod-network-cidr=10.244.0.0/16(如使用 Flannel,该 CIDR 为官方示例;如使用 Calico,常见为 192.168.0.0/16,以所选网络插件文档为准)。
    • 配置 kubectl(当前用户):mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/config
    • 安装网络插件(CNI)
      • Flannel:kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
      • Calico:kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
  • 加入工作节点(在每台 Worker 执行)
    • 方式一:使用 kubeadm init 完成后屏幕输出的 kubeadm join ... 命令直接加入。
    • 方式二:在 Master 上生成新令牌:sudo kubeadm token create --print-join-command,复制并在 Worker 上执行。
  • 验证与测试
    • 查看节点:kubectl get nodes(状态应为 Ready
    • 部署测试应用:kubectl create deployment nginx --image=nginxkubectl expose deployment nginx --port=80 --type=NodePort,随后通过 NodeIP:NodePort 访问验证。

使用 microk8s 快速安装(Ubuntu 单机)

  • 安装与启用组件
    • 安装:sudo snap install microk8s --classic
    • 常用组件:microk8s enable dashboardmicrok8s enable dnsmicrok8s enable registry(可按需启用 istiocommunity 等)
  • 常用操作
    • 查看状态:microk8s status
    • 部署测试应用:microk8s kubectl create deployment nginx --image=nginxmicrok8s kubectl expose deployment nginx --port=80 --target-port=80 --type=ClusterIP
    • 启动/停止:microk8s startmicrok8s stop
  • 说明:microk8s 将 kubectl 命令前缀为 microk8s kubectl,如需使用原生命令,可设置别名或导出 KUBECONFIG

常见问题与排查要点

  • Swap 未关闭或 cgroup 驱动不匹配会导致 kubelet 无法启动或 Pod 一直处于 Pending
  • 网络插件未安装或 Pod CIDR 与插件不匹配,节点会 NotReady 或 Pod 无法分配 IP。
  • 防火墙/安全组未放行 6443(API Server)、10250(kubelet)等端口,节点无法加入或 kubectl 无法连接。
  • 时间不同步会引起证书校验失败,建议启用 NTP 或 chrony 同步时间。
  • 镜像拉取缓慢或失败,可配置国内镜像源/私有仓库,或使用 kubeadm init --image-repository 指定镜像仓库前缀。

0