关于 kubectl 命令的一些记录。

一些概念

命令种类:

  • 声明式资源管理(Declarative Resource Management)
  • 命令式资源管理(Imperative Resource Management)
  • 输出工作负载状态(Printing Workload State)
  • 容器交互(Interacting with Containers)
  • 集群管理(Cluster Management)

资源和控制器

  • Kubernetes API 由两部分组成 - 资源类型和控制前
  • 资源是以 Json 或 Yaml 声明并写入集群的对象
  • 控制器在存储资源后异步启动资源

应用管理

Kubernetes 对象的实例(例如部署、服务、命名空间等)成为资源。运行容器的资源被称为工作负载。

控制器启动 Kubernetes API。他们观察系统的状态,并寻找对资源的期望状态(创建、更新、删除)或系统(Pod 或 Node 挂掉)的更改。

Pod 运行应用的单副本并提供:

  • 计算资源(CPU、内存、磁盘)
  • 环境变量
  • 就绪和健康检查
  • 网络(容器内 Pod 共享 IP 地址)
  • 挂载共享配置和密钥
  • 挂载存储卷
  • 初始化

kustomization 可以使用 namePrefixnameSuffix 为所有资源设置名称前缀或后缀。

获取资源信息

# 输出指定字段
$ kubectl get deployments -o custom-columns="Name:metadata.name,Replicas:spec.replicas,Strategy:spec.strategy.type"

# 忽略报错信息
kubectl get deployment nginx --ignore-not-found

# --watch vs --watch-only
$ kubectl get deployments --watch
$ kubectl get deployments --watch-only

# 获取用法
$ kubectl explain deployment --api-version apps/v1

容器排障

# 打印之前的日志
$ kubectl logs -p nginx-6db489d4b7-v59zm -c nginx

# 代理
$ kubectl proxy
Starting to serve on 127.0.0.1:8001
# 访问服务 http://<apiserver-address>/api/v1/namespaces/<service-namespace>/services/[https:]<service-name>[:<port-name>]/proxy
$ curl "http://127.0.0.1:8001/api/v1/namespaces/logcenter-cluster/services/kafka-manager:9000/proxy" -I

命令行环境配置

# 使用 oh-my-zsh

$ vim .zshrc
# 开启插件
plugins=(git zsh-autosuggestions kubectl)
# 自动补全
source <(kubectl completion zsh)

$ source .zshrc

# 针对多 contexts 进行管理,可以开启 kube-ps1
# https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/kube-ps1

常用命令示例

# 输出格式
$ kgp -n kube-system -o name

# 输出镜像
$ kgp --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}"
$ kgp --namespace kube-system -o jsonpath="{..image}"
$ kgp -n kube-system metrics-server-6d684c7b5-2jmd9 -o jsonpath="{.spec.containers[*].image}"; echo

# 过滤
$ kgp -n kube-system --field-selector=status.phase="Running"
$ kgp -n kube-system --field-selector=status.phase!="Running"

# 排序
$ kgp -n kube-system --sort-by=.metadata.name
$ kgp -n kube-system --sort-by=.status.phase

Kubectl plugin

关于此插件的粗略翻译

该插件为 Kubernetes 集群管理器添加了补全功能,并为常见的 kubectl 命令添加了一些别名。

为了使用它,请将 kubectl 添加到 .zshrc 文件的 plugins 数组中。

plugins=(... kubectl)

别名

别名 命令 描述
k kubectl kubectl 命令
kca kubectl --all-namespaces 针对所有名称空间的 kubectl 命令
kaf kubectl apply -f 使用 YAML 文件或存放 YAML 文件的文件夹
keti kubectl exec -ti 进入容器内的交互式终端
    管理配置以在本地、开发和测试环境之间快速切换上下文
kcuc kubectl config use-context 设置 kubeconfig 文件中的 current-context (当前上下文)字段
kcsc kubectl config set-context 在 kubeconfig 文件中设置一个上下文
kcdc kubectl config delete-context 删除 kubeconfig 文件中的指定上下文
kccc kubectl config current-context 显示 current-context(当前上下文)
kcgc kubectl config get-contexts 显示可用上下文列表
    一般别名
kdel kubectl delete 按文件名、输入、资源和名称,或按资源和标签选择器删除资源
kdelf kubectl delete -f 使用 -f 参数中指定的类型和名称删除 Pod
    Pod 管理
kgp kubectl get pods 以 ps 格式列出所有 Pod
kgpw kgp --watch 列出/获取请求的对象后,观察实时状态
kgpwide kgp -o wide 以纯文本格式输出并包含额外信息,例如,对于 Pod,额外信息时 node 名称
kep kubectl edit pods 使用默认编辑器编辑 Pod
kdp kubectl describe pods 输出所有 Pod 的描述信息
kdelp kubectl delete pods 删除所有与传递参数匹配的 Pod
kgpl kgp -l 按标签获取 Pod,例如:kgpl "app=myapp" -n myns
    Service 管理
kgs kubectl get svc 以 ps 输出格式列出所有服务
kgsw kgs --watch 列出所有 service 后,观察实时状态
kgswide kgs -o wide 列出所有 service 后,以纯文本格式输出并包含所有其他信息
kes kubectl edit svc 使用默认编辑器编辑 service(svc)
kds kubectl describe svc 详细描述所有 svc
kdels kubectl delete svc 删除所有与传递的参数匹配的服务
    Ingress 管理
kgi kubectl get ingress 以 ps 格式列出所有 ingress
kei kubectl edit ingress 使用默认编辑器编辑 ingress 资源
kdi kubectl describe ingress 详细描述 ingress 资源
kdeli kubectl delete ingress 删除与传递的参数匹配的 ingress 资源
    Namespace 管理
kgns kubectl get namespaces 列出 cluster 内当前的所有 namespace
kcn kubectl config set-context ... 改变当前 namespace
kens kubectl edit namespace 使用默认编辑器编辑 namespace 资源
kdns kubectl describe namespace 详细描述 namespace 资源
kdelns kubectl delete namespace 删除 namespace。警告!这将删除 namespace 中的所有内容
    ConfigMap 管理
kgcm kubectl get configmaps 以 ps 输出格式列出所有 configmap
kecm kubectl edit configmap 使用默认编辑器编辑 configmap
kdcm kubectl describe configmap 详细描述 configmap 资源
kdelcm kubectl delete configmap 删除指定 configmap
    Secret 管理
kgsec kubectl get secret 获取 secret
kdsec kubectl describe secret 详细描述 secret 资源
kdelsec kubectl delete secret 删除 secret
    Deployment 管理
kgd kubectl get deployment 获取 deployment
kgdw kgd --watch 获取 deployment,并观察实时状态
kgdwide kgd -o wide 获取 deployment 之后,以纯文本格式输出包含额外信息的内容
ked kubectl edit deployment 使用默认编辑器编辑 deployment
kdd kubectl describe deployment 详细描述 deployment 资源
kdeld kubectl delete deployment 删除 deployment 资源
ksd kubectl scale deployment 扩展 deployment
krsd kubectl rollout status deployment 检查 deployment 的部署状态
kres kubectl set env $@ REFRESHED_AT=... 零停机时间重新创建 deployment 中的所有 Pod
    Rollout 管理
kgrs kubectl get rs 查看 deployment 创建的 ReplicaSet rs
krh kubectl rollout history 检查此 deployment 的变更历史记录
kru kubectl rollout undo 回滚到上一个修订版
    端口转发
kpf kubectl port-forward 将一个或多个本地端口转发到 Pod
    用于访问所有信息的工具
kga kubectl get all 以 ps 格式列出所有资源
kgaa kubectl get all --all-namespaces 列出所有 namespace 中的请求对象
    日志
kl kubectl logs 打印容器或资源的日志
klf kubectl logs -f 流式传输容器或资源的日志(实时)
    文件拷贝
kcp kubectl cp 在容器之间复制文件和目录
    Node 管理
kgno kubectl get nodes 以 ps 格式列出所有 node
keno kubectl edit node 使用默认的编辑器编辑 node
kdno kubectl describe node 详细描述 node 资源
kdelno kubectl delete node 删除 node
    Persistent Volume Claim 管理
kgpvc kubectl get pvc 列出所有 PVC
kgpvcw kgpvc --watch 列出所有请求对象并观察实时状态
kepvc kubectl edit pvc 使用默认编辑器编辑 PVC
kdpvc kubectl describe pvc 显示所有 PVC 的描述
kdelpvc kubectl delete pvc 删除所有与传入参数匹配的 PVC
    Statefulset 管理
kgss kubectl get statefulset 以 ps 格式列出所有 statefulset
kgssw kgss --watch 获取 statefulset 列表,并观察实时状态
kgsswide kgss -o wide 获取 statefulset,并以纯文本格式输出包含其他信息的内容
kess kubectl edit statefulset 使用默认的编辑器编辑 statefulset
kdss kubectl describe statefulset 详细描述 statefulset 资源
kdelss kubectl delete statefulset 删除 statefulset
ksss kubectl scale statefulset 扩展 statefulset
krsss kubectl rollout status statefulset 检查 deployment 的回滚状态

参考