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启动有问题如何排查?
- 首先查看pods状态, 可以使用命令kubectl get pods
(base) ➜ kubectl get pods -n dev
NAME READY STATUS RESTARTS AGE
dev-java-resource-back-question-provider-6bf66cd85f-zrtjt 0/1 CrashLoopBackOff 5761 20d
-
如果查看是错误的状态, 可以使用
kubectl describe pod [name]
继续调试 -
如果没有发现问题可以使用
kubectl logs [pod-name] -n [namespace]
查看日志输出 -
如果当前pod的日志没有发现问题可以查看以前pod的输出
kubectl logs --previous [pod-name] -n [namespace]
-
如果还是不能解决问题重新启动pod, 先执行
kubectl scale deployment [name] --replicas=0
关闭所有pod, 再执行kubectl scale deployment [name] --replicas=1
启动pod,也可以直接执行删除pod操作
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 对象 |
网友评论