kubectl 命令
关于 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 可以使用 namePrefix
和 nameSuffix
为所有资源设置名称前缀或后缀。
获取资源信息
# 输出指定字段
$ 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 的回滚状态 |