Kubectl 常用命令复习

通用公式

kubectl + [command]+ [type]+ [name]+[flags]

command:指定要对一个或多个资源执行的操作,例如create、get、describe、delete等。(增删改查)

type:指定资源类型。资源类型不区分大小写,可以指定单数、复数或缩写形式。

name:指定资源的名称。名称区分大小写。如果省略名称,则显示所有资源的详细信息:kubectl get pods

flags: 指定可选的参数。例如,可以使用-s或-server参数指定 Kubernetes API服务器的地址和端口。

注意事项说明:

从命令行指定的参数会覆盖默认值和任何相应的环境变量

命令汇总

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
get      # 显示一个或多个资源

describe # 显示资源详情

create # 从文件或标准输入创建资源

edit # 从文件或标准输入更新资源

delete # 通过文件名、标准输入、资源名或者 label 删除资源

log # 输出 pod 中一个容器的日志

rolling-update # 对指定的 RC 执行滚动升级

exec # 在容器内部执行命令

port-forward # 将本地端口转发到 Pod

proxy # 为 Kubernetes API server 启动代理服务器

run # 在集群中使用指定镜像启动容器

expose # 将 SVC 或 pod 暴露为新的 kubernetes service

label # 更新资源的 label

config # 修改 kubernetes 配置文件

cluster-info # 显示集群信息

api-versions # 以”组/版本”的格式输出服务端支持的 API 版本

version # 输出服务端和客户端的版本信息

help # 显示各个命令的帮助信息

ingress-nginx # 管理 ingress 服务的插件(官方安装和使用方式)

kubectl get - 显示一个或者多个资源信息

点我查看

常用可选参数

1
2
3
4
5
6
# 使用不同的格式查看
-o wide/yaml/json (列表格式/yaml格式/json格式)
# 查看指定标签的pods,支持’=’, ‘==’, and ‘!=’操作符
-l key=value
# 查看指定的命名空间
-n 命名空间 -A 所有命名空间

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# 查看Master状态
kubectl get componentstatuses (简写cs)

# 查看所有命名空间
kubectl get namespace

# 列出所有的pods
kubectl get pods -A

# 显示更多的pods列表信息(例如 pod的ip和所处的node)
kubectl get pods -o wide

# 列出名字为mysql-default-0的rc
kubectl get replicationcontroller mysql-default-0

# 获取名字为mysql-default-0的pod的信息,并以json格式输出
kubectl get -o json pod mysql-default-0

# 根据pod文件查找pod,并以json格式输出
kubectl get -f pod.yaml -o json

# 获取pod容器的状态
kubectl get -o template pod/mysql-default-0 --template {{.status.phase}}

# 同时获取所有的rc和service replicasets (可简写为"rs")
kubectl get rc,services

# 获取符合条件的所有rc,svc,pod
kubectl get rc/web service/frontend pods/mysql-default-0

# 获取指定命名空间的cm configmaps (可简写为"cm")
kubectl get cm -n namespace

# 编辑指定的cm
kubectl edit cm -n namespace cm名称

# 获取指定命名空间的deploy
kubectl get deploy -n namespace

# 编辑指定的deploy
kubectl edit deploy -n namespace deploy名称

# 获取指定命名空间的secrets
kubectl get secrets -n namespace

# 编辑指定的secrets
kubectl edit secrets -n namespace secret名称

# 获取所有resource
kubectl get all

kubectl apply- 基于文件名或标准输入,将新的配置应用到资源上

点我查看

kubectl apply 命令用于以声明方式创建和更新对象

nginx.yaml

1
2
3
4
5
6
7
8
9
10
11
apiVersion: v1
kind: Pod
metadata:
name: fl-nginx
labels:
app: fl-nginx
type: front-end-service
spec:
containers:
- name: nginx-container
image: nginx:1.18
1
kubectl apply -f nginx.yaml

image-20221227160139309

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 1)将pod.json中的配置应用到pod
kubectl apply -f ./pod.json

# 2)将控制台输入的JSON配置应用到Pod
cat pod.json | kubectl apply -f -

# 3)创建资源
kubectl apply -f ./my-manifest.yaml

# 4)使用多个文件创建
kubectl apply -f ./my1.yaml -f ./my2.yaml

# 5)基于目录下的所有清单文件创建资源
kubectl apply -f ./dir

# 6)从 URL 中创建资源
kubectl apply -f https://git.io/vPieo

kubectl describe - 显示某个资源或某组资源的详细信息

点我查看

支持的资源类型包括但不限于:pods (po)、services (svc)、 replicationcontrollers (rc)、nodes (no)、events (ev)、componentstatuses (cs)、 limitranges (limits)、persistentvolumes (pv)、persistentvolumeclaims (pvc)、 resourcequotas (quota)和secrets。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 描述一个node详细信息  
kubectl describe nodes ulgqv45xaqziqeri -n defalut

# 描述一个pod
kubectl describe pods/kube-apiserver-db1 -n kube-system

# 描述nginx.yaml中的资源类型和名称指定的pod
kubectl describe -f nginx.yaml

# 描述所有的pod
kubectl describe pods --all-namespaces

# 描述所有包含label k8s-app=calico-kube-controllers的pod
kubectl describe po -l k8s-app=calico-kube-controllers --all-namespaces

kubectl create - 通过文件或标准输入来创建资源

点我查看

示例

通过配置文件名或 stdin 创建一个集群资源对象。

支持 JSON 和 YAML 格式的文件

1
kubectl create -f ./nginx.yaml

通过stdin的JSON创建一个pod

1
cat pod.json | kubectl create -f -

kubectl delete - 通过文件名、标准输入、资源和名字删除资源,或者通过资源和标签选择算符来删除资源

点我查看

示例

1
2
3
4
5
6
7
8
9
10
11
# 使用 pod.yaml 文件中指定的类型和名称删除 pod。  
kubectl delete -f pod.yaml

# 删除标签名= 的所有 pod 和服务。
kubectl delete pods,services -l name=<label-name>

# 删除所有具有标签名称= 的 pod 和服务,包括未初始化的那些。
kubectl delete pods,services -l name=<label-name> --include-uninitialized

# 删除所有 pod,包括未初始化的 pod。
kubectl delete pods --all

kubectl edit - 修改服务器上的某资源

点我查看

示例

1
2
3
4
5
6
7
8
9
10
11
# 1)编辑名为“mysql”的service
kubectl edit svc/mysql

# 2)使用替代的编辑器
KUBE_EDITOR="nano" kubectl edit svc/docker-registry

# 3)编辑名为“myjob”的service,输出JSON格式 V1 API版本
kubectl edit job.v1.batch/myjob -o json

# 4)以YAML格式输出编辑deployment“mydeployment”,并将修改的配置保存在annotation中
kubectl edit deployment/mydeployment -o yaml --save-config

kubectl logs - 输出 Pod 中某容器的日志

点我查看

1
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f

解析一下这行代码

-n 指定命名空间

-f 持续输出 类似与 tail -f 的方式

$() 包裹其他命令

1
kubectl logs -f <pod_name> # 类似tail -f的方式查看(tail -f 实时查看日志文件 tail -f 日志文件log)

kubectl exec - 在容器中执行相关命令

点我查看

1
2
3
4
5
6
7
8
9
10
11
12
kubectl exec[POD名称] -- bash -c'[需要执行的命令]'

# exec命令同样类似于docker的exec命令,为在一个已经运行的容器中执行一条shell命令,如果一个pod容器中,有多个容器,需要使用-c选项指定容器。

# 例如
kubectl exec my-pod --bash -c 'ps -ef| grep hello'

# 获取命名空间下的POD,进行批量操作
kubectl get pods -o name -n your-namespace |grep -v "demo\|hello" | xargs -I{} kubectl -n your-namespace exec {} -- bash -c 'ps ux|grep ng'

# 通过bash获得pod中某个容器的TTY,相当于登录容器
kubectl exec -it <pod-name> -n <name-space> bash

示例

1
kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"

kubectl run - 在集群中使用指定镜像启动容器

点我查看

格式:

1
kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...]

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 启动一个 Nginx 实例。
kubectl run nginx --image=nginx

# 启动一个 hazelcast 单个实例,并开放容器的5701端口。
kubectl run hazelcast --image=hazelcast --port=5701

# 运行一个 hazelcast 单个实例,并设置容器的环境变量"DNS_DOMAIN=cluster" and "POD_NAMESPACE=default"。
kubectl run hazelcast --image=hazelcast --env="DNS_DOMAIN=cluster" --env="POD_NAMESPACE=default"

# 启动一个 replicated 实例去复制 nginx。
kubectl run nginx --image=nginx --replicas=5

# 试运行。不创建他们的情况下,打印出所有相关的 API 对象。
kubectl run nginx --image=nginx --dry-run

# 用可解析的 JSON 来覆盖加载 `deployment` 的 `spec`,来运行一个 nginx 单个实例。
kubectl run nginx --image=nginx --overrides='{ "apiVersion": "v1", "spec": { ... } }'

# 运行一个在前台运行的 busybox 单个实例,如果退出不会重启。
kubectl run -i --tty busybox --image=busybox --restart=Never

# 使用默认命令来启动 nginx 容器,并且传递自定义参数(arg1 .. argN)给 nginx。
kubectl run nginx --image=nginx -- <arg1> <arg2> ... <argN>

# 使用不同命令或者自定义参数来启动 nginx 容器。
kubectl run nginx --image=nginx --command -- <cmd> <arg1> ... <argN>

# 启动 perl 容器来计算 bpi(2000) 并打印出结果。
kubectl run pi --image=perl --restart=OnFailure -- perl -Mbignum=bpi -wle 'print bpi(2000)'