• Kubernetes 实践指南之Kubernetes 的命令行工具详解


     

    kubectl作为客户端CLI工具,可以让用户通过命令行的方式对Kubernetes集群进行管理。本节内容将对kubectl的子命令和用法进行详细描述。

    一、kubectl 用法概述

    • kubectl语法运行如下命令:

      kubectl [command] [TYPE] [NAME] [FLAGS]
      其中command、TYPE、NAME、FLAGS的含义如下:
    1. command:指定要在一个或多个资源执行的操作,例如操作create,get,describe,delete。
    2. TYPE:指定资源类型Resource types。Resource types会区分大小写,也可以指定单数,复数或缩写的形式。
      例如以下三种TYPE是等价的。
      kubectl get pod pod1
      kubectl get pods pod1
      kubectl get po pod1
    3. NAME:指定Resource的Name。Name区分大小写,如果省略Name,则显示所有资源的详细信息,例如:
      kubectl get pods
    4. FLAGS:kubectl 子命令的可选参数,例如使用“-s”指定apiserver的URL地址而不用默认值。
    • kubectl可操作的资源对象类型如下表:
      在一个命令行也可可以同时对多个资源对象进行操作,以多个TYPE和NAME的组合表示,示例如下:
    1. 获取多个Pod 的信息
      kubectl get pods pod1 pod2 pod2
    2. 获取多种对象的信息
      kubectl get pod/pod1 rc/rc1
    3. 同时应用多个yaml文件,以多个-f file 参数表示
      kubectl get pod -f pod1.yaml -f pod2.yaml
      kubectl create -f pod1.yaml -f rc1.yaml -f servicel.yaml

    二、kubectl 子命令详解

    Kubernetes子命令非常丰富,涵盖了对Kubernetes集群的主要操作,包括资源对象的创建、查看、修改、配置、删除、运行等。详细的子命令如下列表所示。

    Operation
    Syntax
    Description
    kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags]
    为一个或多个资源添加注释
    api-versions
    kubectl api-versions [flags]
    列出支持的API版本。
    apply
    kubectl apply -f FILENAME [flags]
    对文件或stdin的资源进行配置更改。
    attach
    kubectl attach POD -c CONTAINER [-i] [-t] [flags]
    连接到一个运行的容器,既可以查看output stream,也可以与容器(stdin)进行交互。
    autoscale
    kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags]
    自动扩容/缩容由replication controller管理的一组pod。
    cluster-info
    kubectl cluster-info [flags]
    显示有关集群中master和services的终端信息。
    config
    kubectl config SUBCOMMAND [flags]
    修改kubeconfig文件。有关详细信息,请参阅各个子命令。
    create
    kubectl create -f FILENAME [flags]
    从file或stdin创建一个或多个资源。
    delete
    kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags]
    从file,stdin或指定label 选择器,names,resource选择器或resources中删除resources。
    describe
    kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags]
    显示一个或多个resources的详细状态。
    kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags]
    使用默认编辑器编辑和更新服务器上一个或多个定义的资源。
    exec
    kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]]
    对pod中的容器执行命令。
    explain
    kubectl explain [--include-extended-apis=true] [--recursive=false] [flags]
    获取各种资源的文档。例如pod,node,services等
    expose
    kubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [----external-ip=external-ip-of-service] [--type=type] [flags]
    将 replication controller,service或pod作为一个新的Kubernetes service显示。
    get
    kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags]
    列出一个或多个资源。
    label
    kubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags]
    添加或更新一个或多个资源的flags。
    logs
    kubectl logs POD [-c CONTAINER] [--follow] [flags]
    在pod中打印容器的日志。
    patch
    kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags]
    使用strategic merge 补丁程序更新资源的一个或多个字段。
    port-forward
    kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags]
    将一个或多个本地端口转发到pod。
    proxy
    kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags]
    在Kubernetes API服务器运行代理。
    replace
    kubectl replace -f FILENAME
    从file或stdin替换资源。
    rolling-update
    kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] --image=NEW_CONTAINER_IMAGE | -f NEW_CONTROLLER_SPEC) [flags]
    通过逐步替换指定的replication controller及其pod来执行滚动更新。
    run
    kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [flags]
    在集群上运行指定的镜像。
    scale
    kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags]
    更新指定replication controller的大小。
    stop
    kubectl stop
    已弃用:请参阅kubectl delete
    uncordon
    kubectl uncordon NODE [flags]
    将NODE设置为schedulable
    version
    kubectl version [--client] [flags]
    显示客户端和服务器上运行的Kubernetes版本。
                                                                                                                                               表一 kubectl子命令详解
    上表几乎包含kubectl对集群操作的所有子命令,当然还有一些新的命令没有更新上去,如convert、taint、set等。

    三、kubectl 输出格式

    kubectl 命令可以以多种格式对结果进行显示,输出的格式通过-o参数指定:
    kubectl [command] [TYPE] [NAME] -o=
    根据不同的命令的输出结果,可选的输出格式如表所示:
    输出格式
    描述
    -o=custom-columns=<spec>
    使用逗号分隔的custom columns列表打印一个表。
    -o=custom-columns-file=<filename>
    使用文件中的custom columns模板打印表<filename>。
    -o=json
    输出JSON格式的API对象。
    -o=jsonpath=<template>
    打印在jsonpath表达式中定义的字段。
    -o=jsonpath-file=<filename>
    打印由 file中的jsonpath表达式定义的字段<filename>。
    -o=name
    仅打印资源名称,而不打印其他内容。
    -o=wide
    以纯文本格式输出任何附加信息。对于pod,包括node名称。
    -o=yaml
    输出YAML格式的API对象。
                                       表二 kubectl命令的输出格式列表
     
    • 常见的输出格式如下:

    1. 显示Pod 的更多信息
      kubectl get pod [pod-name] -o wide
    2. 以yaml格式显示Pod 的更多信息
      kubectl get pod [pod-name] -o yaml
    3. 以json格式显示Pod 的更多信息
      kubectl get pod [pod-name] -o json
    4. 以自定义列名显示Pod信息:
      kubectl get pod -o=custom-
      columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion
    5. 基于文件的自定义列名输出
      kubectl get pods -o=custom-columns-file=template.txt
         鉴于篇幅有点长,上面我就不一一举例了。

    五、kubectl 操作示例

    • 创建资源对象

      根据yaml 配置文件一次性创建service 和 rc:
      kubectl create -f my-service.yaml -f my-rc.yaml
    • 查看资源对象

    1. 查看所有的Pod 列表
      kubectl get pods
    2. 查看rc 和 service 列表
      kubectl get rc,service
    • 描述资源对象

    1. 显示Node的详细信息
      kubectl describe nodes
    2. 显示Pod 的详细信息
      kubectl describe pods /
    3. 显示由RC管理的Pod 的信息
      kubectl describe pods
    • 删除资源对象

    1. 基于pod.yaml定义的名称删除Pod:
      kubectl delete -f pod.yaml
    2. 删除所有包含某个label的Pod 和Service
      kubectl delete pods,services -l name=
    3. 删除所有Pod
      kubectl delete pod --all
             生产环境,我们一般用kubectl delete pod pod-name 来重启某个pod
    • 执行容器的命令

    1. 执行Pod 的date 命令,默认使用Pod 中的第一个容器执行
      kubectl exec date
    2. 指定Pod 中某个容器执行date 命令
      kubectl exec -c date
    3. 通过/bin/bash 获得Pod 中某个容器的TTY,相当于登陆容器:
      kubectl exec -ti -c /bin/bash
    • 查看容器的日志

    1. 查看容器输出到stdout的日志
      kubectl logs
    2. 跟踪查看容器的日志,相当于tail -f 命令的结果
      kubectl logs -f -c
     
     
      
     
  • 相关阅读:
    Eclipse详细设置护眼背景色和字体颜色并导出
    详解equals()方法和hashCode()方法
    MFC+WinPcap编写一个嗅探器之七(协议)
    fastjson使用
    2017-04-07 开通博客
    开启mysql慢查询
    MYSQL介绍安装及一些问题解决
    python基础入门
    Linux重启与关机命令
    Scanner类与Random类
  • 原文地址:https://www.cnblogs.com/yxh1008/p/10057933.html
Copyright © 2020-2023  润新知