kubectl命令速查

2021-05-03  本文已影响0人  一瓶多先生

1. 基本命令

1.1 运行pod

kubectl run

如何运行一个 nginx Deployment 并将其暴露出来? 查看 kubectl run

# start the pod running nginx
$ kubectl run --image=nginx nginx-app --port=80 --env="DOMAIN=cluster"
deployment "nginx-app" created

1.2 查看服务

kubectl get

如何列出哪些正在运行?查看 kubectl get

$ kubectl get po
NAME              READY     STATUS    RESTARTS   AGE
nginx-app-5jyvm   1/1       Running   0          1h

如何连接到已经运行在容器中的进程?查看 kubectl attach

使用 kubectl 命令:

$ kubectl get pods
NAME              READY     STATUS    RESTARTS   AGE
nginx-app-5jyvm   1/1       Running   0          10m
$ kubectl attach -it nginx-app-5jyvm
...

kubectl get 定义输出格式

$ kubectl get pods traefik-ingress-public-hsgkl   -n kube-system  -o yaml
查看node
kubectl get nodes
查看所有namespace的pod
kubectl get pods --all-namespaces

查看ingress

kubectl get ing 

查看dev命名空间下dev-java-xxl-job-admin-public的ingress规则, 输出yaml格式

kubectl get ing dev-java-xxl-job-admin-public -n dev -o yaml

1.3 获取指定pod的信息

kubectl describe pod <pod_name>

2. 高级命令

2.1 与容器交互

kubectl exec

$ kubectl get po
NAME              READY     STATUS    RESTARTS   AGE
nginx-app-5jyvm   1/1       Running   0          10m
$ kubectl exec nginx-app-5jyvm -- cat /etc/hostname
nginx-app-5jyvm

执行交互式命令怎么办?

$ kubectl exec -ti nginx-app-5jyvm -- /bin/sh      
# exit

更多信息请查看 获取运行中容器的 Shell 环境

2.2 查看日志

如何查看运行中进程的 stdout/stderr?查看 kubectl logs

kubectl logs

$ kubectl logs -f nginx-app-zibvs
10.240.63.110 - - [14/Jul/2015:01:09:01 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"
10.240.63.110 - - [14/Jul/2015:01:09:02 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"

现在是时候提一下 pod 和容器之间的细微差别了;默认情况下如果 pod 中的进程退出 pod 也不会终止,相反它将会重启该进程。这类似于 docker run 时的 --restart=always 选项, 这是主要差别。在 docker 中,进程的每个调用的输出都是被连接起来的,但是对于 kubernetes,每个调用都是分开的。要查看以前在 kubernetes 中执行的输出,请执行以下操作:

$ kubectl logs --previous nginx-app-zibvs
10.240.63.110 - - [14/Jul/2015:01:09:01 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"
10.240.63.110 - - [14/Jul/2015:01:09:02 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"

查看 记录和监控集群活动 获取更多信息。

2.3 删除pod

如何停止和删除运行中的进程?查看 kubectl delete

kubectl delete

$ kubectl get deployment nginx-app
NAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx-app   1         1         1            1           2m
$ kubectl get po -l run=nginx-app
NAME                         READY     STATUS    RESTARTS   AGE
nginx-app-2883164633-aklf7   1/1       Running   0          2m
$ kubectl delete deployment nginx-app
deployment "nginx-app" deleted
$ kubectl get po -l run=nginx-app
# Return nothing

请注意,我们不直接删除 pod。使用 kubectl 命令,我们要删除拥有该 pod 的 Deployment。如果我们直接删除pod,Deployment 将会重新创建该 pod。

2.4 强制删除pod

kubectl delete pod $POD_ID --grace-period=0 --force

将Pod的优雅终止时间设置为0,并强制删除。

2.5 切换namespace

默认在default namespace下

kubectl config set-context --current --namespace=devops

3. 如果一个pod启动有问题如何排查?

(base) ➜  kubectl get pods  -n dev
NAME                                                        READY   STATUS             RESTARTS   AGE
dev-java-resource-back-question-provider-6bf66cd85f-zrtjt   0/1     CrashLoopBackOff   5761       20d

4. 资源类型

下表列出的是 kubernetes 中所有支持的类型和缩写的别名。

资源类型 缩写别名
clusters
componentstatuses cs
configmaps cm
daemonsets ds
deployments deploy
endpoints ep
event ev
horizontalpodautoscalers hpa
ingresses ing
jobs
limitranges limits
namespaces ns
networkpolicies
nodes no
statefulsets
persistentvolumeclaims pvc
persistentvolumes pv
pods po
podsecuritypolicies psp
podtemplates
replicasets rs
replicationcontrollers rc
resourcequotas quota
cronjob
secrets
serviceaccount sa
services svc
storageclasses
thirdpartyresources

4.1 格式化输出

要以特定的格式向终端窗口输出详细信息,可以在 kubectl 命令中添加 -o 或者 -output 标志。

输出格式 描述
-o=custom-columns=<spec> 使用逗号分隔的自定义列列表打印表格
-o=custom-columns-file=<filename> 使用 文件中的自定义列模板打印表格
-o=json 输出 JSON 格式的 API 对象
-o=jsonpath=<template> 打印 jsonpath 表达式中定义的字段
-o=jsonpath-file=<filename> 打印由 文件中的 jsonpath 表达式定义的字段
-o=name 仅打印资源名称
-o=wide 以纯文本格式输出任何附加信息,对于 Pod ,包含节点名称
-o=yaml 输出 YAML 格式的 API 对象
上一篇下一篇

猜你喜欢

热点阅读