Skip to content

命令行

Kubernetes 指令介绍

kubectl 是用于运行 Kubernetes 集群命令的管理工具,用户大多时候都是都是使用 kubectl 指令来控制 kubernetes 。
kubectl 具体语法为 kubectl [command] [TYPE] [NAME] [flags] ,其中:

  • command:指定要在一个或多个资源执行的操作,例如操作 create,get,describe,delete。
  • TYPE:指定资源类型 Resource types。
    Resource types 会区分大小写,也可以指定单数,复数或缩写的形式。例如,以下命令将输出相同的结果:kubectl get pod pod1kubectl get pods pod1kubectl get po pod1
  • NAME:指定 Resource 的 Name 。
    Name 区分大小写,如果省略 Name ,则显示所有资源的详细信息,例如 kubectl get pods 。当在多个资源上执行操作时,可以通过 type 和 name 指定每个资源,或者指定一个或多个 file 。
    • 通过 type 和 name 指定的资源,如果它们都是相同的 type ,就可以对资源进行分组,比如 TYPE1 name1 name2 name3 ,具体指令例如 kubectl get pod example-pod1 example-pod2
    • 也可以单独指定多种资源 type : TYPE1/name1 TYPE1/name2 TYPE2/name3 ,具体例如 kubectl get pod/example-pod1 replicationcontroller/example-rc1
    • 还可以使用一个或多个 file 来指定资源 -f file1 -f file2 -f file3 ,具体例如: kubectl get pod -f ./pod.yaml
  • flags:指定可选 flags 。例如,你可以使用 -s--server 来指定 Kubernetes API Server 的地址和端口。

常用的 command 有runcreate,delete,get,discribe,exec,attach

run

指令格式为 kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [flags]
作用为在集群上运行指定的镜像。
docker run 一样,它能将一个镜像运行起来,但它创建的是 Pod ,同时还会创建一个 Deployment 。
例如,使用 kubectl run 来启动一个 sonarqube 的镜像:
[root@test]$ kubectl run sonarqube --image=192.168.32.131:5000/sonarqube:5.6.5 --replicas=1 --port=9000
启动之后可以使用 get 指令来查看创建的 Deployment 以及 Pod

create

指令格式为 kubectl create -f FILENAME [flags]
作用为从 file 或 stdin 创建一个或多个资源。
使用 kubectl run 在设定很复杂的时候需要非常长的一条语句,容易出错,也没法保存,在碰到转义字符的时候会更加麻烦。所以更多场景下会使用 yaml 或者 json 文件来运行镜像,而 kubectl create 则是读取 yaml 或 json 文件来创建镜像。
例如存在一个 mysql.yaml 的文件保存了 mysql 的 RC 配置信息,则可以使用 kubectl create 来创建 RC:
kubectl create -f yamls/mysql.yaml

delete

指令格式为 kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags]
作用为从 file ,stdin 或指定 label 选择器,names ,resource 选择器或 resources 中删除 resources 。
例如:

  • 使用 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

get

指令格式为 kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags]
用于获取集群的一个或一些 resource 信息。
resource 包括集群节点、运行的 pod ,ReplicationController ,service 等。
例如想获得所有 pod 的信息,可以使用指令 kubectl get pods

describe

指令格式为 kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags] ,
作用为显示一个或多个 resources 的详细状态。
describe 类似于 get ,同样用于获取 resource 的相关信息。不同的是,get 获得的是更详细的 resource 个性的详细信息,describe 获得的是 resource 集群相关的信息。
如某个 pod 并不是在 running 状态,这时需要获取更详尽的状态信息时,就应该使用 describe 命令。
例如获取名称为 mysql 的 Pod 的相关信息,需要使用指令 kubectl describe pod mysql

exec

指令格式为 kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]]
作用为对 pod 中的容器执行命令。
例如在名为 mysql 的 Pod 中名为 python 的容器中运行指令 date 并获取输出,其指令为 kubectl exec mysql -c python date

attach

指令格式为 kubectl attach POD -c CONTAINER [-i] [-t] [flags]
作用为连接到一个运行的容器,既可以查看 output stream ,也可以与容器( stdin )进行交互。
若不给定容器,则默认连接到 pod 里的第一个容器。
例如获取名为 mysql 的 Pod 中名为 python 的容器的并输出,其指令为
kubectl exec mysql -c python date

完整的指令介绍可以查看官方文档

参考:
kubernetes官方文档
kubernetes中文文档