• kubectl概述
    • 语法
    • 操作
    • 资源类型
    • 输出选项
      • 格式化输出
        • 语法
          • 例子
      • 排序列表对象
        • 语法
          • 例子
    • 示例:常用操作
    • 下一步
    • 反馈

    kubectl概述

    kubectl是用于针对Kubernetes集群运行命令的命令行接口。本概述涵盖kubectl语法,描述命令操作,并提供常见的示例。有关每个命令的详细信息,包括所有支持的flags和子命令,请参考kubectl相关文档。有关安装说明,请参阅安装kubectl。

    语法

    从您的终端窗口使用以下语法运行kubectl命令:

    1. kubectl [command] [TYPE] [NAME] [flags]

    其中command,TYPE,NAME,和flags分别是:

    • command: 指定要在一个或多个资源进行操作,例如creategetdescribedelete

    • TYPE:指定资源类型。资源类型区分大小写,您可以指定单数,复数或缩写形式。例如,以下命令产生相同的输出:

    $ kubectl get pod pod1$ kubectl get pods pod1$ kubectl get po pod1

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

    在多个资源上执行操作时,可以按类型和名称指定每个资源,或指定一个或多个文件:

    • 按类型和名称指定资源:
    1. * 要分组资源,如果它们都是相同的类型:`TYPE1 name1 name2 name<#>`.<br/>
    2. 例: `$ kubectl get pod example-pod1 example-pod2`
    3. * 要分别指定多种资源类型: `TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>`.<br/>
    4. 例: `$ kubectl get pod/example-pod1 replicationcontroller/example-rc1`

    使用一个或多个文件指定资源: -f file1 -f file2 -f file<#> 使用YAML而不是JSON,因为YAML往往更加用户友好,特别是对于配置文件。例:$ kubectl get pod -f ./pod.yaml

    • flags:指定可选标志。例如,您可以使用-s—serverflags来指定Kubernetes API服务器的地址和端口。重要提示:从命令行指定的标志将覆盖默认值和任何相应的环境变量。

    如果您需要帮助,只需从终端窗口运行kubectl help

    操作

    下表包括所有kubectl操作的简短描述和一般语法:

    OperationSyntaxDescription
    annotatekubectl annotate (-f FILENAME</td><td>TYPE NAME</td></tr><tr><td><code>api-versions</code></td><td><code>kubectl api-versions [flags]</code></td><td>列出可用的API版本。</td></tr><tr><td><code>apply</code></td><td><code>kubectl apply -f FILENAME [flags]</code></td><td>对文件或标准输入流更改资源应用配置。</td></tr><tr><td><code>attach</code></td><td><code>kubectl attach POD -c CONTAINER [-i] [-t] [flags]</code></td><td>attach 到正在运行的容器来查看输出流或与容器(stdin)进行交互。</td></tr><tr><td><code>autoscale</code></td><td>kubectl autoscale (-f FILENAMETYPE NAME
    cluster-infokubectl cluster-info [flags]显示有关集群中master节点和服务的端点信息。
    configkubectl config SUBCOMMAND [flags]修改kubeconfig文件。有关详细信息,请参阅各个子命令。
    createkubectl create -f FILENAME [flags]从文件或stdin创建一个或多个资源。
    deletekubectl delete (-f FILENAME</td><td>TYPE [NAME</td></tr><tr><td><code>describe</code></td><td>kubectl describe (-f FILENAMETYPE [NAME_PREFIX
    editkubectl edit (-f FILENAME</td><td>TYPE NAME</td></tr><tr><td><code>exec</code></td><td><code>kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]]</code></td><td>对pod中的容器执行命令</td></tr><tr><td><code>explain</code></td><td><code>kubectl explain [--include-extended-apis=true] [--recursive=false] [flags]</code></td><td>获取各种资源的文档。例如 pods, nodes, services 等.</td></tr><tr><td><code>expose</code></td><td>kubectl expose (-f FILENAMETYPE NAME
    getkubectl get (-f FILENAME</td><td>TYPE [NAME</td></tr><tr><td><code>label</code></td><td>kubectl label (-f FILENAMETYPE NAME
    logskubectl logs POD [-c CONTAINER] [—follow] [flags]在pod的容器中打印日志。
    patchkubectl patch (-f FILENAME</td><td>TYPE NAME</td></tr><tr><td><code>port-forward</code></td><td><code>kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags]</code></td><td>将一个或多个本地端口转发到pod。</td></tr><tr><td><code>proxy</code></td><td><code>kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags]</code></td><td>运行一个代理到Kubernetes API服务器。</td></tr><tr><td><code>replace</code></td><td><code>kubectl replace -f FILENAME</code></td><td>从文件或stdin替换资源。</td></tr><tr><td><code>rolling-update</code></td><td>kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] –image=NEW_CONTAINER_IMAGE-f NEW_CONTROLLER_SPEC) [flags]</td></tr><tr><td><code>run</code></td><td><code>kubectl run NAME --image=image [--env=&#34;key=value&#34;] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [flags]</code></td><td>在集群上运行指定的镜像。</td></tr><tr><td><code>scale</code></td><td>kubectl scale (-f FILENAMETYPE NAME
    versionkubectl version [—client] [flags]显示在客户端和服务器上运行的Kubernetes版本。

    请记住:有关命令操作的更多信息,请参阅kubectl参考文档。

    资源类型

    下表包括所有支持的资源类型及其缩写别名的列表:

    资源类型缩写别名
    apiservices
    certificatesigningrequestscsr
    clusters
    clusterrolebindings
    clusterroles
    componentstatusescs
    configmapscm
    controllerrevisions
    cronjobs
    customresourcedefinitioncrd, crds
    daemonsetsds
    deploymentsdeploy
    endpointsep
    eventsev
    horizontalpodautoscalershpa
    ingressesing
    jobs
    limitrangeslimits
    namespacesns
    networkpoliciesnetpol
    nodesno
    persistentvolumeclaimspvc
    persistentvolumespv
    poddisruptionbudgetpdb
    podpreset
    podspo
    podsecuritypoliciespsp
    podtemplates
    replicasetsrs
    replicationcontrollersrc
    resourcequotasquota
    rolebindings
    roles
    secrets
    serviceaccountssa
    servicessvc
    statefulsets
    storageclasses

    输出选项

    请使用以下部分查看如何格式化或排序某些命令的输出的信息,有关哪些命令支持各种输出选项的详细信息,请参阅kubectl参考文档。

    格式化输出

    所有kubectl命令的默认输出格式是可读的纯文本格式。要以特定格式将详细信息输出到终端窗口,您可以将一个-o或多个-output标志添加到支持的kubectl命令中。

    语法

    1. kubectl [command] [TYPE] [NAME] -o=<output_format>

    根据kubectl操作,支持以下输出格式:

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

    例子

    在此示例中,以下命令将单个pod的详细信息作为YAML格式化对象输出:$ kubectl get pod web-pod-13je7 -o=yaml记住:有关每个命令支持哪种输出格式的详细信息,请参阅kubectl参考文档。

    自定义列

    要定义自定义列并仅将所需的详细信息输出到表中,可以使用该custom-columns选项。您可以选择内联定义自定义列或使用模板文件:-o=custom-columns=<spec>-o=custom-columns-file=<filename>

    例子

    一致:

    1. $ kubectl get pods <pod-name> -o=custom-columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion

    模版文件:

    1. $ kubectl get pods <pod-name> -o=custom-columns-file=template.txt

    template.txt文件包含:

    1. NAME RSRC
    2. metadata.name metadata.resourceVersion

    运行任一命令的结果是:

    1. NAME RSRC
    2. submit-queue 610995

    排序列表对象

    要将对象列表在终端窗口中排序输出,可以将该—sort-by标志添加到支持的kubectl命令中。通过使用—sort-by标志指定任何数字或字符串字段来对对象进行排序。要指定一个字段,请使用jsonpath表达式。

    语法

    1. kubectl [command] [TYPE] [NAME] --sort-by=<jsonpath_exp>
    例子

    打印按名称排序的列表,请运行:

    $ kubectl get pods —sort-by=.metadata.name

    示例:常用操作

    使用以下一组示例来帮助您熟悉运行常用kubectl操作:

    1. // 使用在example-service.yaml中的定义创建一个service.
    2. $ kubectl create -f example-service.yaml
    3. // 使用在example-controller.yaml中的定义创建一个replication controller.
    4. $ kubectl create -f example-controller.yaml
    5. // 使用在<directory>目录下的any .yaml, .yml, or .json文件创建对象.
    6. $ kubectl create -f <directory>

    kubectl get - 列出一个或更多资源.

    1. // 使用文本格式列出所有的pods.
    2. $ kubectl get pods
    3. // 使用文本格式列出所有的信息,包含一些额外的信息(比如节点名称).
    4. $ kubectl get pods -o wide
    5. // 使用文本格式列出指定名称的replicationcontroller. 注: 你可以缩短 'replicationcontroller' 资源类型使用别名 'rc'.
    6. $ kubectl get replicationcontroller <rc-name>
    7. // 使用文本格式列出所有的rc,services.
    8. $ kubectl get rc,services
    1. `kubectl describe` - 显示一个或多个资源的详情状态.

    shell// 显示指定节点名称的详情信息.$ kubectl describe nodes

    // 显示指定pods名称的详情信息.$ kubectl describe pods/

    // 显示所有被名称为的replication controller管理的所有pods的详情信息.// 请记住: 任何被replication controller的pod的名称前缀为replication controller的名称.$ kubectl describe pods

    1. `kubectl delete` - 从文件, stdin,或者指定的label selectors, 名称,资源选择器, 或者资源去删除资源.

    shell// 通过 pod.yaml 文件中的资源类型和名称删除一个pod.$ kubectl delete -f pod.yaml

    // 删除所有label名称为name=的pods和services.$ kubectl delete pods,services -l name=

    // 删除所有pods.$ kubectl delete pods –all

    1. `kubectl exec` - 针对pod中的某个容器执行命令.

    shell// 在名称为的pod允许 ‘date’ 命令获得输出. 默认返回的是pod中第一个容器的终端.$ kubectl exec date

    // 在的pod中的容器中运行’date’获取输出.$ kubectl exec -c date

    // 从名称为的pod获取一个交互的终端和运行/bin/bash. 默认返回的是pod中第一个容器的终端.$ kubectl exec -ti /bin/bash

    1. `kubectl logs` - 输出一个pod的容器日志.

    shell// 从名称为的pod返回日志快照.$ kubectl logs

    // 从名称为的pod中获取日志流. 这个和Linux命令’tail -f’相似.$ kubectl logs -f ```

    下一步

    开始使用kubectl命令。

    反馈

    此页是否对您有帮助?

    感谢反馈。如果您有一个关于如何使用 Kubernetes 的特定的、需要答案的问题,可以访问Stack Overflow.在 GitHub 仓库上登记新的问题报告问题或者提出改进建议.