01-kubectl 命令之基础命令

  • kubectl create:通过yaml/json 文件或者标准输入创建一个资源对象,支持很多子命令 例如namespace pod deployment service等
  • kubectl expose:将json/yaml文件中定义的资源对象的端口暴露给新的service资源对象
  • kubectl run:创建并运行一个或多个容器镜像
  • kubectl set:配置资源对象设置特定功能
  • kubectl explain:查看资源对象的详细信息(一般用一编写yaml的时候做一个提示 kubectl explain deployment 会出现 deployment 下面可以写的字段以及字段属性还有 可以逐级使用)
  • kubectl get:获取一个或多个资源对象的信息
  • kubectl edit:使用默认编辑器编辑服务器上定义的资源对象
  • kubectl delete:通过json/yaml文件、标准舒服、资源名称或标签选择器来删除资源

kubectl create

通过配置文件名或stdin创建一个集群资源对象。支持JSON和YAML格式的文件。

官方文档

语法

1
kubectl create -f FILENAME

示例

1
2
3
4
5
6
7
8
9
10
# 通过pod.json文件创建一个pod
kubectl create -f ./pod.json


# 通过stdin的JSON创建一个pod。
cat pod.json | kubectl create -f -


# API版本为v1的JSON格式的docker-registry.yaml文件创建资源。
kubectl create -f docker-registry.yaml --edit --output-version=v1 -o json

kubectl expose

将资源暴露为新的Kubernetes Service。

指定deployment、service、replica set、replication controller或pod,并使用该资源的选择器作为指定端口上新服务的选择器。deployment 或 replica set只有当其选择器可转换为service支持的选择器时,即当选择器仅包含matchLabels组件时才会作为暴露新的Service。

资源包括(不区分大小写): pod(po),service(svc),replication controller(rc),deployment(deploy),replica set(rs)。

官方文档

语法

1
kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type]

示例

1
2
3
4
5
6
# 为RC的nginx创建service,并通过Service的80端口转发至容器的8000端口上。
kubectl expose rc nginx --port=80 --target-port=8000


# 由“nginx-controller.yaml”中指定的type和name标识的RC创建Service,并通过Service的80端口转发至容器的8000端口上。
kubectl expose -f nginx-controller.yaml --port=80 --target-port=8000

kubectl run

  • 创建并运行一个或多个容器镜像。
  • 创建一个deployment 或job 来管理容器。

官方文档

语法

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
# 启动nginx实例。
kubectl run nginx --image=nginx


# 启动hazelcast实例,暴露容器端口 5701。
kubectl run hazelcast --image=hazelcast --port=5701


# 运行一个名称为nginx,副本数为3,标签为app=example,镜像为nginx:1.10,端口为80的容器实例
kubectl run nginx --replicas=3 --labels="app=example" --image=nginx:1.10 --port=80


# 运行一个名称为nginx,副本数为3,标签为app=example,镜像为nginx:1.10,端口为80的容器实例,并绑定到k8s-node1上
kubectl run nginx --image=nginx:1.10 --replicas=3 --labels="app=example" --port=80 --overrides='{"apiVersion":"apps/v1","spec":{"template":{"spec":{"nodeSelector":{"kubernetes.io/hostname":"k8s-node1"}}}}}'

kubectl set

配置资源对象设置特定功能。 使用这些命令能帮你更改现有应用资源一些信息。

官方文档

语法

1
kubectl set SUBCOMMAND

子命令

  • env
  • image
  • resources
  • selector
  • serviceaccount
  • subject

kubectl set image

  • 用于更新现有资源的容器镜像。
  • 可用资源对象包括:pod (po)、replicationcontroller (rc)、deployment (deploy)、daemonset (ds)、job、replicaset (rs)。

语法

1
image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE\_1 ... CONTAINER_NAME_N=CONTAINER\_IMAGE_N

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 将deployment中的nginx容器镜像设置为“nginx:1.9.1”
kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1


# 所有deployment和rc的nginx容器镜像更新为“nginx:1.9.1”
kubectl set image deployments,rc nginx=nginx:1.9.1 --all


# 将daemonset abc的所有容器镜像更新为“nginx:1.9.1”
kubectl set image daemonset abc *=nginx:1.9.1


# 从本地文件中更新nginx容器镜像
kubectl set image -f path/to/file.yaml nginx=nginx:1.9.1 --local -o yaml

kubectl set resources

  • 这个命令用于设置资源的一些范围限制。
  • 资源对象中的Pod可以指定计算资源需求(CPU-单位m、内存-单位Mi),即使用的最小资源请求(Requests),限制(Limits)的最大资源需求,Pod将保证使用在设置的资源数量范围。
  • 对于每个Pod资源,如果指定了Limits(限制)值,并省略了Requests(请求),则Requests默认为Limits的值。
  • 可用资源对象包括(支持大小写):replicationcontroller、deployment、daemonset、job、replicaset。

语法

1
kubectl set resources (-f FILENAME | TYPE NAME) ([--limits=LIMITS & --requests=REQUESTS]

示例

1
2
3
4
5
6
7
8
# 将deployment的nginx容器cpu限制为“200m”,将内存设置为“512Mi”
kubectl set resources deployment nginx -c=nginx --limits=cpu=200m,memory=512Mi

# 设置所有nginx容器中 Requests和Limits
kubectl set resources deployment nginx --limits=cpu=200m,memory=512Mi --requests=cpu=100m,memory=256Mi

# 删除nginx中容器的计算资源值
kubectl set resources deployment nginx --limits=cpu=0,memory=0 --requests=cpu=0,memory=0

kubectl set selector

  • 设置资源的 selector(选择器)。如果在调用”set selector”命令之前已经存在选择器,则新创建的选择器将覆盖原来的选择器。
  • selector必须以字母或数字开头,最多包含63个字符,可使用:字母、数字、连字符” - “ 、点”.“和下划线” _ “。如果指定了–resource-version,则更新将使用此资源版本,否则将使用现有的资源版本。
  • 注意:目前selector命令只能用于Service对象。

语法

1
kubectl set selector (-f FILENAME | TYPE NAME) EXPRESSIONS [--resource-version=version]

kubectl explain

用于显示资源文档信息

官方文档

语法

1
kubectl explain RESOURCE

示例

1
kubectl explain rs

kubectl get

官方地址

语法

1
2
3
4
kubectl get resource_name 
[(-o|--output=)json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file|custom-columns|custom-columns-file|wide]
(TYPE[.VERSION][.GROUP] [NAME | -l label] | TYPE[.VERSION][.GROUP]/NAME ...)
[flags]
  • 常见 resource_name

    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
    all
    certificatesigningrequests (缩写 csr)
    clusterrolebindings
    clusterrol
    componentstatuses (缩写 cs)
    configmaps (缩写 cm)
    controllerrevisions
    cronjobs
    customresourcedefinition (缩写 crd)
    daemonsets (缩写 ds)
    deployments (缩写 deploy)
    endpoints (缩写 ep)
    events (缩写 ev)
    horizontalpodautoscalers (缩写 hpa)
    ingresses (缩写 ing)
    jobs
    limitranges (缩写 limits)
    namespaces (缩写 ns)
    networkpolicies (缩写 netpol)
    nodes (缩写 no)
    persistentvolumeclaims (缩写 pvc)
    persistentvolumes (缩写 pv)
    poddisruptionbudgets (缩写 pdb)
    podpreset
    pods (缩写 po)
    podsecuritypolicies (缩写 psp)
    podtemplates
    replicasets (缩写 rs)
    replicationcontrollers (缩写 rc)
    resourcequotas (缩写 quota)
    rolebindings
    roles
    secrets
    serviceaccounts (缩写 sa)
    services (缩写 svc)
    statefulsets (缩写 sts)
    storageclasses (缩写 sc)
  • 其它可选参数

    1
    2
    3
    4
    5
    # 用不同的格式查看
    -o wide/yaml/json

    # 看指定标签的pods,支持’=’, ‘==’, and ‘!=’操作符
    -l key=value

举例

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
51
52
53
54
55
56
57
58
59
60
61
62
# 获取所有resource
kubectl get all


# 查看Master状态
kubectl get componentstatuses


# 查看所有命名空间
kubectl get ns
kubectl get namespaces


# 列出默认空间pods
kubectl get po
kubectl get pod
kubectl get pods


# 获取某一pod的信息
kubectl get pod my-pod --namespace my-namespace


# 列出所有空间的 pods
kubectl get pods --all-namespaces
kubectl get pods -A


# 列出指定空间的 podes
kubectl get pods -n kube-system


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

# 显示pod节点的标签信息
kubectl get pod --show-labels

# 根据指定标签匹配到具体的pod
kubectl get pods -l app=example

# 显示了服务名称,类型,集群ip,端口,时间等信息
kubectl get svc


# 列出名字为web的rc
kubectl get replicationcontroller web

# 获取名字为web-pod-13je7的pod的信息,并以json格式输出
kubectl get -o json pod web-pod-13je7

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

# 获取pod容器的状态
kubectl get -o template pod/kube-dns-795f5f6f9c-ldxxs --template {{.status.phase}}

# 同时获取所有的rc和service
kubectl get rc,services

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

kubectl edit

使用 默认编辑器 编辑服务器上定义的资源。

使用 命令行工具 获取的任何资源都可以使用 edit 命令编辑。edit 命令会打开使用 KUBE_EDITOR、GIT_EDITOR 或者 EDITOR 环境变量定义的编辑器,可以同时编辑多个资源,但所编辑过的资源只会一次性提交。edit除命令参数外还接受文件名形式。

文件默认输出格式为YAML。要以JSON格式编辑,请指定“-o json”选项。

如果在更新资源时报错,将会在磁盘上创建一个临时文件来记录。在更新资源时最常见的错误是几个用户同时使用编辑器更改服务器上资源,发生这种情况,你需要将你的更改应用到最新版本的资源上,或者更新保存的临时副本。

官方文档

语法

1
kubectl edit (RESOURCE/NAME | -f FILENAME)

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 编辑名为’docker-registry’的service
kubectl edit svc/docker-registry


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


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


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

kubectl delete

通过配置文件名、stdin、资源名称或label选择器来删除资源。

支持 JSON 和 YAML 格式文件。可以只指定一种类型的参数:文件名、资源名称或 label 选择器。

有些资源如 pod,支持优雅的(graceful)删除,因为这些资源一般是集群中的实体,所以删除不可能会立即生效,这些资源在强制终止之前默认定义了一个周期(宽限期),但是你可以使用 -grace-period flag 来覆盖该值,或者通过 pass --now 设置该周期为1。

如果托管 Pod 的 Node 节点已经停止或者无法连接 API Server,使用 delete 命令删除 Pod 需等待时间更长。要强制删除资源,需指定 -force flag,且设置周期(宽限期)为 0。

如果执行强制删除 Pod,则调度程序会在节点释放这些 Pod 之前将新的 Pod 放在这些节点上,并使之前 Pod 立即被逐出。

注意:执行 delete 命令时不会检查资源版本,如果在执行 delete kube操作时有人进行了更新操作,那么更新操作将连同资源一起被删除。

官方文档

语法

1
kubectl delete ([-f FILENAME] | TYPE [(NAME | -l label | --all)])

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 使用 pod.json 中指定的资源类型和名称删除pod
kubectl delete -f ./pod.json


# 根据传入stdin的JSON所指定的类型和名称删除pod。
cat pod.json | kubectl delete -f -


# 删除名为“baz”和“foo”的Pod和Service。
kubectl delete pod,service baz foo


# 删除 Label name = myLabel的pod和Service。
kubectl delete pods,services -l name=myLabel


# 强制删除dead node上的pod
kubectl delete pod foo --grace-period=0 --force


# 删除所有pod
kubectl delete pods --all

01-kubectl 命令之基础命令
https://flepeng.github.io/042-云原生-02-kubernetes-13-命令-kubectl-01-kubectl-命令之基础命令/
作者
Lepeng
发布于
2023年3月1日
许可协议