文章目录
- 1. 环境管理 (Minikube)
- 核心命令
- `minikube start`
- `minikube image`
- `minikube docker-env`
- `minikube tunnel`
- 2. 资源查看与基础管理 (Basic Operations)
- `kubectl get`
- `kubectl describe`
- `kubectl delete`
- `kubectl explain`
- 3. Pod 生命周期与调试 (Debugging)
- `kubectl run`
- `kubectl logs`
- `kubectl exec`
- `kubectl port-forward`
- `kubectl cp`
- 4. 标签与筛选 (Labels & Selectors)
- `kubectl label`
- Selector 参数 (`-l`)
- 5. 控制器与应用管理 (Deployments & ReplicaSets)
- `kubectl apply`
- `kubectl scale`
- `kubectl rollout`
- `kubectl patch`
- 6. Helm 包管理
- 核心命令
- `helm repo`
- `helm search`
- `helm install`
- `helm upgrade`
- `helm pull`
- 7. 总结:常用的参数组合
本文档基于Kubernetes Up & Running学习笔记(Chapter 3 - 10),对学习过程中涉及的minikube、kubectl及helm命令进行系统性总结。
文档旨在不仅列出命令,更重点解释核心参数(Flags)的含义与使用场景,帮助理解命令背后的机制。
1. 环境管理 (Minikube)
Minikube 是我们在 macOS 上运行本地 Kubernetes 集群的工具。它在 Docker 容器中封装了一个单节点(或多节点)的 K8s 集群。
核心命令
minikube start
启动集群。
-p <name>: 指定配置文件的名称(Profile),用于同时管理多个集群。--nodes <n>: 指定启动节点的数量。--memory,--cpus: 限制虚拟机的资源(注意:集群创建后无法直接修改,需重建)。
# 启动一个名为 k8s-demo 的集群,包含 2 个节点minikube start-pk8s-demo--nodes2minikube image
管理 Minikube 内部 Docker 环境的镜像。由于 Minikube 与宿主机 Docker 环境隔离,大镜像建议先下载到宿主机,再导入 Minikube。
load: 将宿主机 Docker 镜像导入 Minikube。ls: 列出 Minikube 内的镜像。
# 将宿主机的 starrocks/fe-ubuntu:latest 导入 Minikubeminikube image load starrocks/fe-ubuntu:latestminikube docker-env
配置当前 Shell 终端的环境变量,使其直接指向 Minikube 内部的 Docker Daemon。
- 作用:执行后,宿主机的
docker build命令会直接构建镜像到 Minikube 中,无需推送到远程仓库。 - 退出:关闭终端或执行
eval $(minikube docker-env -u)。
# 切换 Docker 环境指向 Minikubeeval$(minikube docker-env)minikube tunnel
创建一个网络隧道,用于向宿主机暴露 LoadBalancer 类型的 Service。
- 注意:该命令会独占一个终端窗口,且需要
sudo权限。
sudominikube tunnel2. 资源查看与基础管理 (Basic Operations)
这是与 K8s 交互最高频的命令组。
kubectl get
列出资源列表。
-o wide:最常用。显示更多列信息(如 Pod IP、所在 Node 节点、镜像名称)。-o yaml/-o json: 输出资源的完整定义(常用于导出配置或查看系统添加的默认字段)。--show-labels: 显示资源绑定的所有标签。-w/--watch: 持续监听资源变化(类似于tail -f)。-A/--all-namespaces: 列出所有命名空间的资源。
# 查看 Pod 运行在哪个节点上(排查调度问题)kubectl get pods-owide# 实时监控 Pod 创建过程kubectl get pods-w# 导出 Deployment 配置用于备份kubectl get deploy my-app-oyaml>my-app-backup.yamlkubectl describe
查看资源的详细描述,是排错(Troubleshooting)的第一手工具。
- 核心关注点:底部的
Events区域。这里记录了调度成功、镜像拉取失败、探针检查失败等关键事件。
# 查看 Pod 启动失败的具体原因(如 ImagePullBackOff)kubectl describe pod my-pod-namekubectl delete
删除资源。
-f <file>: 删除文件中定义的所有资源。--now: 立即删除(忽略宽限期),强制终止。
# 根据配置文件删除资源kubectl delete-fnginx-pod.yamlkubectl explain
内置的 API 文档手册。当忘记 YAML 字段层级时非常有用。
# 查看 Pod 的 spec.containers 字段下有哪些属性kubectl explain pod.spec.containers3. Pod 生命周期与调试 (Debugging)
kubectl run
快速创建一个单 Pod(非 Deployment)。常用于临时测试或排错。
--image: 指定镜像。--restart: 重启策略(Never创建普通 Pod,OnFailure创建 Job)。--port: 指定容器暴露端口。--dry-run=client -o yaml:技巧。不实际创建,而是生成 YAML 模板。
# 生成一个简单的 Pod YAML 模板kubectl run temp-pod--image=nginx--restart=Never --dry-run=client-oyaml>pod.yamlkubectl logs
查看容器日志。
-f: 持续流式输出(Follow)。-c <container>: 当 Pod 包含多个容器(如 Sidecar)时,必须指定容器名称。--previous: 查看上一次崩溃前的日志(排查 CrashLoopBackOff)。
# 查看 starrocks namespace 下带有特定标签的 Pod 日志kubectl logs-nstarrocks-lapp.kubernetes.io/component=operator-fkubectl exec
在运行的容器中执行命令。
-it: 分配交互式终端(Interactive TTY)。--: 分隔符,用于区分 kubectl 参数和容器内命令。
# 进入容器内部 Shellkubectlexec-itmy-pod -- /bin/bashkubectl port-forward
将集群内部端口映射到本地(localhost),用于调试未暴露公网的服务。
# 将 Pod 的 80 端口映射到本地 8080kubectl port-forward pod/nginx-pod8080:80kubectl cp
在本地与容器之间复制文件。
# 将本地配置文件复制到容器内kubectlcp./config.toml my-pod:/etc/config/config.toml4. 标签与筛选 (Labels & Selectors)
标签(Labels)是 K8s 组织资源的核心机制,Service 和 Deployment 均通过 Selector 关联 Pod。
kubectl label
添加或修改标签。
--overwrite: 覆盖已存在的标签值。-: 移除标签(如key-)。
# 给 Pod 打上 env=production 标签kubectl label pods barenv=production# 移除 env 标签kubectl label pods bar env-Selector 参数 (-l)
几乎所有 kubectl 命令都支持-l参数,用于批量操作。
# 删除所有 app=nginx 的 Podkubectl delete pods-lapp=nginx# 查看 release=canary 的所有资源kubectl get all-lrelease=canary5. 控制器与应用管理 (Deployments & ReplicaSets)
涉及 Chapter 9 (ReplicaSets) 和 Chapter 10 (Deployments) 的核心内容。
kubectl apply
声明式配置的核心。根据文件内容创建或更新资源。
-f <file/dir>: 指定文件或目录。
kubectl apply-f./deployment.yamlkubectl scale
手动调整副本数。
--replicas=<n>: 目标副本数。
# 将 Nginx 扩容到 3 个副本kubectl scale deployment nginx-deploy--replicas=3kubectl rollout
管理 Deployment 的滚动更新。
status: 查看更新进度。history: 查看历史版本。undo: 回滚到上一个版本。pause/resume: 暂停/恢复更新(常用于金丝雀发布)。
# 检查更新状态kubectl rollout status deployment/nginx-deploy# 回滚到上一个版本kubectl rollout undo deployment/nginx-deploykubectl patch
动态修改资源的特定字段,无需编辑完整 YAML。
--type='merge': 合并模式(默认)。--type='json': JSON Patch 模式,支持更复杂的数组操作。
# 修改 Deployment 的镜像拉取策略kubectl patch deployment my-dep-p'{"spec":{"template":{"spec":{"containers":[{"name":"app","imagePullPolicy":"IfNotPresent"}]}}}}'6. Helm 包管理
Helm 是 K8s 的包管理器,用于管理复杂的应用集合(Chart)。
核心命令
helm repo
管理 Chart 仓库。
add <name> <url>: 添加仓库。update: 更新本地缓存。
helm search
查找 Chart。
repo <keyword>: 在已添加的仓库中搜索。
helm install
安装 Chart。
-n <ns> --create-namespace: 指定并自动创建命名空间。-f values.yaml: 使用自定义配置文件覆盖默认值。
helminstallstarrocks starrocks/kube-starrocks-nstarrocks-fmy-values.yamlhelm upgrade
更新已安装的 Release。
- 幂等性:如果配置未变,Helm 不会执行多余操作;如果变了,只更新差异部分。
- 避坑:不要使用
--force,已废弃。如有冲突,建议先 delete 冲突资源再 install/upgrade。
helm upgrade starrocks starrocks/kube-starrocks-nstarrocks-fmy-values.yamlhelm pull
下载 Chart 到本地查看。
--untar: 下载并自动解压。
# 下载并解压,以便查看其中的 values.yaml 默认配置helm pull starrocks/kube-starrocks--untar7. 总结:常用的参数组合
| 场景 | 推荐命令组合 | 作用 |
|---|---|---|
| 日常巡检 | kubectl get pods -o wide | 查看 Pod IP 分布和所在节点 |
| 排查崩溃 | kubectl describe pod <name> | 查看 Events 事件和状态原因 |
| 排查应用 | kubectl logs -f <pod> | 实时查看应用日志 |
| 生成模板 | kubectl run tmp --image=img --dry-run=client -o yaml | 快速生成 YAML 骨架 |
| 批量清理 | kubectl delete pod -l app=demo | 按标签批量删除 |
| 强制删除 | kubectl delete pod <name> --grace-period=0 --force | 强制删除卡死的 Pod (慎用) |