kubectl 进阶命令 · explain 与在线 Schema至Helm 历史仓库与发布流程
本文承接 基础命令,按筛选与输出 → 受控变更 → 容器调试 → 节点维护 → 故障分层 → 脚本防护组织。历史 Helm 仓库/ChartMuseum 操作见独立案例。
示例主要面向 Bash/Zsh。debug profile 等参数受客户端版本和集群策略影响,执行前用本机帮助确认。生产变更先核对上下文、命名空间和目标。
explain 与在线 Schema
kubectl explain statefulset.spec.updateStrategy
kubectl explain pod.spec.securityContext --recursive
kubectl explain gateway --api-version=gateway.networking.k8s.io/v1kubectl explain 来自目标 API Server 的 OpenAPI,能覆盖已安装 CRD,是写清单前最可靠的本地入口之一。
权限诊断与模拟身份
kubectl auth whoami
kubectl auth can-i create deployments -n demo
kubectl auth can-i --list -n demo
kubectl auth can-i get pods \
--as=system:serviceaccount:demo:web -n demo--as 需要 impersonate 权限;有权限的用户仍应只用于授权验证。它不是完整登录模拟,外部身份属性和准入逻辑可能不同。
kubectl -n <namespace> get role,rolebinding
kubectl get clusterrole,clusterrolebinding
kubectl -n <namespace> describe rolebinding <name>对 secrets 的 get/list/watch、Pod 的 create、pods/exec、pods/portforward、impersonate、bind、escalate 和节点代理权限都需要谨慎评估。优先命名空间级 Role 和最小动词/资源集合。
脚本化原则
#!/usr/bin/env bash
set -euo pipefail
context="staging-cluster"
namespace="demo"
kubectl --context="$context" -n "$namespace" get deployment web >/dev/null
kubectl --context="$context" -n "$namespace" rollout status \
deployment/web --timeout=5m- 显式上下文、命名空间和超时。
- 对无匹配、多个匹配和空字段分别处理。
- 使用
--request-timeout防止调用无限挂起,但 rollout 自身也要有--timeout。 - 并发批量操作设置上限,避免冲击 API Server。
- 让命令失败向上游传播,不要用无条件
|| true隐藏故障。 - 自动化账号使用最小权限、短期凭据和审计。
高风险批量操作防护
先列出准确集合,再执行写操作:
selector='app=web,environment=staging'
kubectl -n demo get pods -l "$selector" -o name
# 人工确认后才执行;不要对空或宽泛 selector 自动删除
kubectl -n demo delete pods -l "$selector" --dry-run=server注意
不要把 kubectl delete ... --all、kubectl delete namespace 或宽泛 -A 写入普通清理脚本。资源选择器、上下文变量或命名空间变量为空时,应立即失败。
常见故障排查入口
| 症状 | 先取什么证据 | 继续阅读 |
|---|---|---|
| Pending | describe 的调度事件、requests、节点污点、PVC | 配额与调度 |
| CrashLoopBackOff / OOMKilled | 上一次日志、containerStatuses、退出码 | Pod 退出原因 |
| ImagePullBackOff / 不 Ready | 镜像拉取事件、readiness 和应用日志 | Pod 症状矩阵 |
| Service 不通 | Service selector、EndpointSlice、Pod 标签和 Ready | 网络排障 |
| 发布卡住 | rollout、Deployment Conditions、新旧 ReplicaSet | 发布失败 |
| Node NotReady | Node Conditions、节点事件、受影响 Pod | 节点排障 |
先按症状收集证据,再选择修改;完整事故处理流程见 Kubernetes 排障手册。
十四、危险操作边界
以下动作需要单独的审批、备份或恢复方案:
- 删除 Namespace、PVC/PV、CRD 或集群级资源。
- 修改 ClusterRole、ClusterRoleBinding、准入 webhook 或 APIService。
kubectl replace --force、强制删除 Pod 或移除 finalizer。drain --force、--disable-eviction或删除emptyDir数据。- 直接编辑控制平面静态 Pod、etcd 数据或节点运行时目录。
操作前至少保存:当前上下文、目标对象 YAML、依赖关系、数据备份、业务影响、回滚命令和验证指标。
十五、排障采集清单
kubectl config current-context
kubectl version
kubectl get nodes -o wide
kubectl -n <namespace> get all -o wide
kubectl -n <namespace> get events --sort-by=.metadata.creationTimestamp
kubectl -n <namespace> describe <resource> <name>
kubectl -n <namespace> logs <pod> -c <container> --tail=200
kubectl -n <namespace> logs <pod> -c <container> --previous --tail=200采集输出可能包含内部地址、镜像仓库、环境变量、事件消息和其他敏感元数据。分享前按最小必要原则脱敏;不要收集或传播 Secret 值。
Helm 历史仓库与发布流程
命令警告
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /Users/user/.kube/config
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /Users/user/.kube/config处理方法
bashchmod g-rw ~/.kube/config chmod o-r ~/.kube/config
plugin (插件管理)
cm-push 由下列插件提供,先安装后再推送 Chart:
helm plugin install https://github.com/chartmuseum/helm-pushrepo
# 以下为本地教学环境,不对应真实集群
kubectl get pods -n demo
kubectl logs -n demo deployment/example-api --tail=20
# 示例日志:INFO request_id=example status=200Chart
# 以下为本地教学环境,不对应真实集群
kubectl get pods -n demo
kubectl logs -n demo deployment/example-api --tail=20
# 示例日志:INFO request_id=example status=200应用安装与更新
# 以下为本地教学环境,不对应真实集群
kubectl get pods -n demo
kubectl logs -n demo deployment/example-api --tail=20
# 示例日志:INFO request_id=example status=200以上是 2023 年来源中的 Helm/ChartMuseum 案例:cm-push 依赖所列插件,仓库、命名空间和 chart 名均需按实际环境替换。原记录的 games 与 game 不一致,此处示例统一为 games;执行卸载前先用 helm list -n <namespace> 核对实际目标。仓库账号密码使用占位值,不应把实际密码写进可分享的命令历史。
参数结构参考 helm install 官方说明,历史插件操作仍按所用版本核对。
多集群 kubeconfig 的来源案例
原记录使用 KUBECONFIG=indonesia_dev:indonesia_dev_local_test kubectl config view --flatten > config 合并配置。合并前区分 cluster/context/user 名称,合并后检查上下文;不要不经核对就覆盖正在使用的 ~/.kube/config。基础连接和命令语法统一见 kubectl 基础命令。
继续阅读
- 知识专题
- 知识专题
- 命令