Featured image of post K8s 工具链速装:kubectl / kubeadm / minikube / kind / helm

K8s 工具链速装:kubectl / kubeadm / minikube / kind / helm

K8s 工具族全景:客户端 kubectl、本地集群 minikube/kind、集群初始化 kubeadm、包管理 helm。覆盖安装、apt 源、命令补全、转换工具、版本锁定。

写于 2018-12,背景:K8s 1.13 GA、Helm v3 alpha 即将发布。客户端工具已经收敛到 kubectl/kubeadm/kubelet 三件套,本地实验工具有 minikube / kind 双雄,包管理是 helm。

一、工具全景图

K8s 生态里跟"集群打交道的"工具,按使用场景分四类:

场景工具角色
客户端kubectl必装,对集群执行命令的唯一官方 CLI
本地实验minikube / kind一键起本地 K8s 集群(学习/测试用)
集群初始化kubeadm官方推荐的集群 bootstrap 工具
包管理helmK8s 应用的包管理(类似 apt/yum)

二、kubectl 安装

2.1 二进制安装(推荐)

1
2
3
4
5
6
7
8
9
# 下载最新稳定版
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

# 安装
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

# 验证
kubectl version --client
kubectl version --client --output=yaml

2.2 apt 安装

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 国外官方源
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/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.28/deb/ /' | \
    sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl

# 国内阿里源(cn region 推荐)
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | \
    gpg --dearmor > /usr/share/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/usr/share/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main' | \
    sudo tee /etc/apt/sources.list.d/kubernetes.list
apt-get update && apt-get install -y kubectl

2.3 命令补全

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 装 bash-completion
apt-get install bash-completion

# 加到 .bashrc
echo 'source <(kubectl completion bash)' >> ~/.bashrc
source ~/.bashrc

# 推荐别名:把 kubectl 缩成 k
alias k=kubectl
complete -F __start_kubectl k

2.4 kubectl-convert 转换工具

K8s API 经常废弃/迁移,旧的 Deployment extensions/v1beta1 在 1.16 之后要换成 apps/v1kubectl-convert 一键转换:

1
2
3
4
5
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl-convert"
sudo install -o root -g root -m 0755 kubectl-convert /usr/local/bin/kubectl-convert

# 把老 API 转换成新 API
kubectl-convert -f old-deployment.yaml --output-version apps/v1

三、kubeadm / kubelet 安装

kubeadm 用于初始化集群,kubelet 是 worker 节点上的核心 agent。它们必须和 kubectl 版本一致(同 minor 版本):

1
2
3
4
5
6
7
# apt 安装
sudo apt-get install -y kubelet kubeadm kubectl
# 锁定版本,防止 apt upgrade 时被升级
sudo apt-mark hold kubelet kubeadm kubectl

# 查看可用版本
apt-cache madison kubeadm

为什么 lock 版本? K8s minor 版本升级时 API 可能废弃,跨版本 kubectl 可能无法解析新格式的 manifest。生产环境永远锁版本。

四、minikube:本地 K8s 一体化

minikube 在你本机(Windows/macOS/Linux)启动一个单节点 K8s 集群,适合学习/开发。

4.1 安装

1
2
3
4
5
6
# Linux
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# 验证
minikube version

4.2 启动集群

1
2
3
4
5
6
7
8
9
# 默认 driver(Linux 通常是 docker,macOS 是 hyperkit,Windows 是 hyperv)
minikube start

# 显式指定
minikube start --driver=docker --kubernetes-version=v1.28.5

# 国内环境加代理
minikube start --docker-env http_proxy=http://192.168.x.x:7890 \
               --docker-env https_proxy=http://192.168.x.x:7890

4.3 常用命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
minikube status                    # 集群状态
minikube ip                        # 集群 IP
minikube ssh                       # SSH 进节点
minikube dashboard --url           # Dashboard URL
minikube addons enable metrics-server

# 镜像操作(minikube 自带 docker)
minikube image list
minikube image pull nginx:latest

# 清理
minikube delete --purge --all

五、kind:Docker-in-Docker 集群

kindKubernetes in Docker)用 Docker 容器模拟 K8s 节点,可以快速起多节点集群做测试。

5.1 安装

1
2
3
4
5
6
# AMD64 / x86_64
[ $(uname -m) = x86_64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
# ARM64
[ $(uname -m) = aarch64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-arm64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind

5.2 与 minikube 对比

维度minikubekind
实现VM / 容器纯 Docker 容器
多节点实验性一等公民(multi-node config)
启动速度较慢(拉镜像+启动 VM)很快(共享 host docker 缓存)
适合场景个人学习、单节点CI/CD、e2e 测试、多节点演练

注意:kind 集群不能用于生产。它的"集群"本质是 Docker 容器,节点宕机 = 容器被回收,etcd 数据可能丢。

六、Helm:K8s 包管理

Helm 把 K8s 资源打成一个 “Chart”(类似 Debian 的 .deb / Python 的 wheel),方便应用分发和版本管理。

6.1 安装

1
2
3
4
5
6
7
# 下载
curl -L -O https://get.helm.sh/helm-v3.13.3-linux-amd64.tar.gz
tar xvf helm-v3.13.3-linux-amd64.tar.gz
sudo cp linux-amd64/helm /usr/local/bin/

# 验证
helm version

6.2 三大概念

概念含义
Chart应用包(yaml 模板 + values.yaml)
ReleaseChart 的一个部署实例(同一 Chart 可装多次,每次一个 release)
RepositoryChart 仓库(公共有 artifacthub.io)

6.3 常用命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 添加仓库
helm repo add bitnami https://charts.bitnami.com/bitnami

# 搜索 chart
helm search repo nginx

# 安装(会生成一个 release)
helm install my-nginx bitnami/nginx

# 查看已安装
helm list -A

# 升级(改 values 后)
helm upgrade my-nginx bitnami/nginx --set replicaCount=3

# 回滚
helm rollback my-nginx 1

# 卸载
helm uninstall my-nginx

七、工具选型决策树

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
你是要学习 K8s 概念?
minikube start (最简单)
你需要快速拉起多节点做 CI 测试?
kind (Docker 容器,秒级启动)
你要部署生产集群?
kubeadm init(最常见)
二进制部署(理解原理,2017-2018 主流)
你要分发应用到多个集群?
helm chart + 私有 repo

八、常见坑

  1. kubectl 与集群版本不一致kubectl get nodes 报 “couldn’t get version” 时,先 kubectl version 看 client/server 版本
  2. apt 源没换 cn:国外源拉 kubectl 慢到怀疑人生,先换阿里源
  3. minikube 启动失败:99% 是 driver 问题,Linux 推荐 docker,macOS 用 hyperkit
  4. kind 容器间网络不通:通常是因为 host 防火墙,iptables 临时关一下验证
  5. Helm v2 → v3 迁移:v2 还需要 Tiller(一个集群内 agent),v3 完全去除了,更安全

九、前置知识 / 下一步

前置:Docker 基础、K8s 架构概念(参考 2017-06-15《Kubernetes 入门》

下一步

  1. Containerd 实战(2019-12-15)—— 替代 Docker 的轻量容器运行时
  2. K8s 二进制部署(2020-03-15)—— 深入理解组件协作
  3. Kubeadm 一键部署(2022-06-15)—— 生产环境部署实战

参考资料

2024+ 视角

K8s 工具链到 2024-2026 年整体走向"轻量化 + 声明式 + 多云":

  1. kubectl 被 Krew 增强:Krew 已成为 kubectl 插件事实标准(200+ 插件),推荐安装 ctxnstailimagesresource-capacitynode-shellmtail 等,把 kubectl 从 CLI 升级为"瑞士军刀"。
  2. kind 持续领先本地多节点测试:kind v0.20+ 支持 loadbalancer mirror(模拟云 LB)、Ingress dual-stackextraPortMappings;CI 集成(GitHub Actions、GitLab CI)首选 kind + MetalLB。k3d(k3s on Docker)在低资源 CI 环境也很流行。
  3. minikube 地位变化:v1.32+ minikube 默认 driver 仍为 docker,但实际场景已被 kind/k3d 蚕食——CI 几乎全用 kind/k3d,个人学习仍可用 minikube(自带 dashboard、metrics-server addon)。
  4. Helm 4.0 路线图(2025):v3.x 仍是主流,但 Helm 4 计划将 --dependency-build 改为 helm dependency up 单一命令、引入 OCI registry 默认(Helm 3.8 已支持 OCI,Helm 4 默认全 OCI)。生产强烈建议 OCI 化——避免 HTTP tgz repo 不可达。
  5. 新工具崛起
    • k9s(终端 TUI,kubectl 的视觉化)——运维日常神器
    • Lens / OpenLens(桌面 IDE)—— 团队协作场景
    • Argo CD / Flux(GitOps)—— K8s 部署的事实标准
    • Karpenter(AWS)或 Cluster Autoscaler(多云)——节点自动扩缩容
    • Kustomize(裸 YAML 模板)—— 已被 kubectl 1.14+ 内置,kubectl apply -k
  6. 包管理二分:Helm 仍是 Chart 的事实标准,KubeVela / Open Application Model(OAM) 在多云/多集群部署场景作为补充。

实战选型更新(2024 视角)

  • 本地学习:minikube(dashboard 加分)
  • CI 集成:kind(首选) / k3d(低资源)
  • 生产部署:Helm 3 + OCI + Argo CD(GitOps)
  • 运维日常:k9s + Krew
  • 集群自扩缩:Karpenter(AWS)或 Cluster Autoscaler(多云)

2018 年这篇的"kubectl/kubeadm/kind/helm 四件套"基础仍然成立,变化的是 OCI、GitOps、可视化运维这三层。

使用 Hugo 构建
主题 StackJimmy 设计