Kubectl

最后更新: 2025-10-02 07:12:04 +0800 +0800
原文以英文撰写。您正在阅读AI翻译版本。

kubectl 是 Kubernetes 命令行客户端。它从 kubeconfig 中读取连接和凭据​​信息,选择上下文和命名空间,并向 API 服务器发送请求。请将 kubeconfig 文件视为敏感信息,因为其中可能包含 bearer token、客户端证书和私钥。

选择配置和上下文 #

kubectl 首先使用显式指定的 --kubeconfig 文件,然后使用 KUBECONFIG 指定的文件,最后使用 $HOME/.kube/config。在进行任何更改之前,先检查当前活动目标:

sh
kubectl config current-context
kubectl config view --minify
kubectl config view --minify -o jsonpath='{..namespace}'; echo

对于不得依赖环境状态的脚本,请使用 --context 和 --namespace。相比在机器之间复制长期有效的管理员凭据,优先使用短期 exec 凭据或 OIDC 身份验证。

创建、应用、修补和替换 #

这些命令具有不同的所有权和更新语义:

  • kubectl create -f object.yaml 创建对象;如果对象已存在则失败。
  • kubectl apply -f object.yaml 执行声明式应用。服务器端应用会跟踪字段所有权,通常更适合多写入者声明式工作流。
  • kubectl patch 更改现有对象的选定字段,通常用于处理运维例外。
  • kubectl replace -f object.yaml 替换对象规范,并要求对象已存在;它不是常规更新的安全捷径。
  • kubectl delete 删除对象,并可能触发依赖对象的级联删除。

在应用之前预览声明式更改:

sh
kubectl diff -f manifests/
kubectl apply --server-side --dry-run=server -f manifests/
kubectl apply --server-side -f manifests/

如果不了解字段所有权,请避免在同一字段上混用客户端应用、服务器端应用、命令式修补和多个控制器。冲突通常是有用的证据,表明另一个参与者拥有该字段。

检查和故障排查 #

从对象的期望状态、当前状态、事件和控制器日志开始:

sh
kubectl get deployment web -n app -o wide
kubectl describe deployment web -n app
kubectl get events -n app --sort-by=.lastTimestamp
kubectl logs deployment/web -n app --all-containers=true
kubectl rollout status deployment/web -n app

使用标签选择工作负载,而不要依赖生成的名称。kubectl exec 和 kubectl port-forward 是有价值的诊断工具,但生产环境中的修复应编码在声明式配置中。Krew 可以安装第三方插件;安装前请检查插件的源代码和所需权限。

评论

在 GitHub 上阅读或评论(发表评论需要登录)