写于 2018-12,背景:K8s 1.13 GA、Helm v3 alpha 即将发布。客户端工具已经收敛到 kubectl/kubeadm/kubelet 三件套,本地实验工具有 minikube / kind 双雄,包管理是 helm。
一、工具全景图
K8s 生态里跟"集群打交道的"工具,按使用场景分四类:
| 场景 | 工具 | 角色 |
|---|
| 客户端 | kubectl | 必装,对集群执行命令的唯一官方 CLI |
| 本地实验 | minikube / kind | 一键起本地 K8s 集群(学习/测试用) |
| 集群初始化 | kubeadm | 官方推荐的集群 bootstrap 工具 |
| 包管理 | helm | K8s 应用的包管理(类似 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/v1。kubectl-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 集群
kind(Kubernetes 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 对比
| 维度 | minikube | kind |
|---|
| 实现 | 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) |
| Release | Chart 的一个部署实例(同一 Chart 可装多次,每次一个 release) |
| Repository | Chart 仓库(公共有 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
|
八、常见坑
- kubectl 与集群版本不一致:
kubectl get nodes 报 “couldn’t get version” 时,先 kubectl version 看 client/server 版本 - apt 源没换 cn:国外源拉 kubectl 慢到怀疑人生,先换阿里源
- minikube 启动失败:99% 是 driver 问题,Linux 推荐 docker,macOS 用 hyperkit
- kind 容器间网络不通:通常是因为 host 防火墙,iptables 临时关一下验证
- Helm v2 → v3 迁移:v2 还需要 Tiller(一个集群内 agent),v3 完全去除了,更安全
九、前置知识 / 下一步
前置:Docker 基础、K8s 架构概念(参考 2017-06-15《Kubernetes 入门》)
下一步:
- Containerd 实战(2019-12-15)—— 替代 Docker 的轻量容器运行时
- K8s 二进制部署(2020-03-15)—— 深入理解组件协作
- Kubeadm 一键部署(2022-06-15)—— 生产环境部署实战
参考资料
2024+ 视角
K8s 工具链到 2024-2026 年整体走向"轻量化 + 声明式 + 多云":
- kubectl 被 Krew 增强:Krew 已成为 kubectl 插件事实标准(200+ 插件),推荐安装
ctx、ns、tail、images、resource-capacity、node-shell、mtail 等,把 kubectl 从 CLI 升级为"瑞士军刀"。 - kind 持续领先本地多节点测试:kind v0.20+ 支持 loadbalancer mirror(模拟云 LB)、Ingress dual-stack、
extraPortMappings;CI 集成(GitHub Actions、GitLab CI)首选 kind + MetalLB。k3d(k3s on Docker)在低资源 CI 环境也很流行。 - minikube 地位变化:v1.32+ minikube 默认 driver 仍为 docker,但实际场景已被 kind/k3d 蚕食——CI 几乎全用 kind/k3d,个人学习仍可用 minikube(自带 dashboard、metrics-server addon)。
- 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 不可达。 - 新工具崛起:
- k9s(终端 TUI,kubectl 的视觉化)——运维日常神器
- Lens / OpenLens(桌面 IDE)—— 团队协作场景
- Argo CD / Flux(GitOps)—— K8s 部署的事实标准
- Karpenter(AWS)或 Cluster Autoscaler(多云)——节点自动扩缩容
- Kustomize(裸 YAML 模板)—— 已被 kubectl 1.14+ 内置,
kubectl apply -k
- 包管理二分: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、可视化运维这三层。