Skip to content
← 返回Kubernetes列表
实践公司适用

公司适用 · 请结合本文的项目背景与团队约定使用。

kubectl 进阶命令 · explain 与在线 Schema至Helm 历史仓库与发布流程 ​

返回分篇目录

本文承接 基础命令,按筛选与输出 → 受控变更 → 容器调试 → 节点维护 → 故障分层 → 脚本防护组织。历史 Helm 仓库/ChartMuseum 操作见独立案例。

示例主要面向 Bash/Zsh。debug profile 等参数受客户端版本和集群策略影响,执行前用本机帮助确认。生产变更先核对上下文、命名空间和目标。

explain 与在线 Schema ​

bash
kubectl explain statefulset.spec.updateStrategy
kubectl explain pod.spec.securityContext --recursive
kubectl explain gateway --api-version=gateway.networking.k8s.io/v1

kubectl explain 来自目标 API Server 的 OpenAPI,能覆盖已安装 CRD,是写清单前最可靠的本地入口之一。

权限诊断与模拟身份 ​

bash
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 权限;有权限的用户仍应只用于授权验证。它不是完整登录模拟,外部身份属性和准入逻辑可能不同。

bash
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 和最小动词/资源集合。

脚本化原则 ​

bash
#!/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 隐藏故障。
  • 自动化账号使用最小权限、短期凭据和审计。

高风险批量操作防护 ​

先列出准确集合,再执行写操作:

bash
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 写入普通清理脚本。资源选择器、上下文变量或命名空间变量为空时,应立即失败。

常见故障排查入口 ​

症状先取什么证据继续阅读
Pendingdescribe 的调度事件、requests、节点污点、PVC配额与调度
CrashLoopBackOff / OOMKilled上一次日志、containerStatuses、退出码Pod 退出原因
ImagePullBackOff / 不 Ready镜像拉取事件、readiness 和应用日志Pod 症状矩阵
Service 不通Service selector、EndpointSlice、Pod 标签和 Ready网络排障
发布卡住rollout、Deployment Conditions、新旧 ReplicaSet发布失败
Node NotReadyNode Conditions、节点事件、受影响 Pod节点排障

先按症状收集证据,再选择修改;完整事故处理流程见 Kubernetes 排障手册。

十四、危险操作边界 ​

以下动作需要单独的审批、备份或恢复方案:

  • 删除 Namespace、PVC/PV、CRD 或集群级资源。
  • 修改 ClusterRole、ClusterRoleBinding、准入 webhook 或 APIService。
  • kubectl replace --force、强制删除 Pod 或移除 finalizer。
  • drain --force、--disable-eviction 或删除 emptyDir 数据。
  • 直接编辑控制平面静态 Pod、etcd 数据或节点运行时目录。

操作前至少保存:当前上下文、目标对象 YAML、依赖关系、数据备份、业务影响、回滚命令和验证指标。

十五、排障采集清单 ​

bash
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 历史仓库与发布流程 ​

命令警告 ​

bash
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
  • 处理方法

    bash
      chmod g-rw ~/.kube/config
      chmod o-r ~/.kube/config

plugin (插件管理) ​

cm-push 由下列插件提供,先安装后再推送 Chart:

bash
helm plugin install https://github.com/chartmuseum/helm-push

repo ​

bash
# 以下为本地教学环境,不对应真实集群
kubectl get pods -n demo
kubectl logs -n demo deployment/example-api --tail=20
# 示例日志:INFO request_id=example status=200

Chart ​

bash
# 以下为本地教学环境,不对应真实集群
kubectl get pods -n demo
kubectl logs -n demo deployment/example-api --tail=20
# 示例日志:INFO request_id=example status=200

应用安装与更新 ​

bash
# 以下为本地教学环境,不对应真实集群
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 基础命令。

继续阅读