四、Kubernetes(K8S):kubectl概述、安装、设置

目录

概述

安装与配置kubectl

语法

命令

对象

规则结构

命令选项

资源类型

输出选项

格式化输出

自定义列

排序列表对象

常用操作示例


四、Kubernetes(K8S):kubectl概述、安装、设置_第1张图片

概述

kubectl是Kubernetes命令行工具。它允许用户与Kubernetes集群进行交互,并管理Kubernetes对象,如Pod、Service、Deployment等。kubectl可以在命令行界面中使用,也可以在脚本中使用,并将Kubernetes集群的状态和操作暴露给自动化工具和CI/CD管道。它是Kubernetes的重要组件之一,并被广泛用于管理容器化应用程序。

kubectl是kubernetes声明式 API的客户端,所以 kubectl 的主要功能就是用来操作对象的。理顺 kubectl 的用法,也会对 Kubernetes 的知识体系以及运维工作有很大的帮助。

本文概述涵盖了kubectl语法,对命令操作的描述,并列举常见例子。有关每个命令的详细信息,包括支持的所有flags和子命令,请参考下一篇:Kubernetes(K8S):Kubectl常用命令详解。

 原文:https://blog.csdn.net/zhouruifu2015/article/details/130057847

安装与配置kubectl

使用Kubernetes命令行工具kubectl在Kubernetes上部署和管理应用程序。使用kubectl可以检查集群资源,创建,删除和更新组件。

1. Linux安装

下载最新版本:curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl

下载特定版本:curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.7.0/bin/linux/amd64/kubectl

下载到本地后,对kubectl二进制添加可执行权限:chmod +x ./kubectl

将二进制文件移动到PATH中:mv ./kubectl /usr/local/bin/kubectl

2. Windows安装

下载地址:https://storage.googleapis.com/kubernetes-release/release/v1.7.0/bin/windows/amd64/kubectl.exe

下载完后,将二进制文件添加到PATH中即可。

       如果使用的Docker Desktop APP,kubectl.exe默认位置在:C:\Program Files\Docker\Docker\resources\bin

3. 检查kubectl配置

通过获取集群状态来检查kubectl是否正确配置:kubectl cluster-info

语法

在管理工具界面使用kubectl语法运行如下命令:

kubectl [command] [TYPE] [NAME] [flags]

其中command,TYPE,NAME,和flags:

* command指定要在一个或多个资源执行的操作,例如操作create,get,describe,delete。

* TYPE指定资源类型Resource types。Resource types会区分大小写,也可以指定单数,复数或缩写的形式。

例如,以下命令将输出相同的结果:

$ kubectl get pod pod1

$ kubectl get pods pod1

$ kubectl get po pod1

四、Kubernetes(K8S):kubectl概述、安装、设置_第2张图片

* NAME指定Resource的Name。Name区分大小写,如果省略Name,则显示所有资源的详细信息,例如:$ kubectl get pods。

四、Kubernetes(K8S):kubectl概述、安装、设置_第3张图片

当在多个资源上执行操作时,可以通过type和name 指定每个资源,或者指定一个或多个file:通过type和name指定的资源。如果它们都是相同的type,就可以对资源进行分组TYPE1 name1 name2 name<#>

例:$ kubectl get pod example-pod1 example-pod2 

*单独指定多种资源type:TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>

例:$ kubectl get pod/example-pod1 replicationcontroller/example-rc1 

*使用一个或多个file来指定资源:-f file1 -f file2 -f file<#> 使用YAML而不是JSON,因为YAML往往更容易掌握也对用户更友好,特别是对于配置文件。

例:$ kubectl get pod -f ./pod.yaml 

* flags指定可选flags。例如,可以使用-s或--server flag来指定Kubernetes API Server的地址和端口。

提示:命令行指定的flags将覆盖默认值和任何相应的环境变量。

如果需要更多相关帮助,只需从终端命令窗口运行 kubectl help

命令

使用 kubectl --help 能看到可用的命令列表:

$ kubectl --help

四、Kubernetes(K8S):kubectl概述、安装、设置_第4张图片

可以看到 kubectl 的命令行帮助非常不错,不仅有功能说明、分类,还有难度标识,甚至有部分的中文说明,kubectl 的每个命令都可以用 --help 查看进一步的帮助说明。

1. 创建

新建命令用于在集群中创建对象,最常用的新建命令应该是 create、run 了,create 能够创建多种对象,而 run 则主要用来创建 Pod。这两个命令都需要在命令行中使用参数的方式来表达待创建的对象的字段内容,其表达力非常粗糙和有限,并且带有明显的命令式 API 风味,在我的日常工作中已经很少用到这样的命令了。

但是这种命令往往有个妙用,--dry-run=client(旧版本中是 --dry-run),可以在不产生实际操作的情况下,测试命令的输出,加上 -o yaml,可以帮助输出 YAML 文档。

2. 查询

get 是最常用的查询指令,用于获取对象列表和基本信息,而 describe 则用于获取一个对象的详细信息。另外一个常用的读取指令就是 Debug 常用的日志查看指令:kubectl logs。

3. 更新

最重要的更新命令可以说是 apply,edit 了,patch、label、annotation、scale 等命令也算常用。

apply 是把 yaml 提交给 Kubernetes 集群的最常用方式,而 edit patch 都是用于修改线上负载的常用手段。label 和 annotation 命令则是用于修改对象元数据的,例如标签和注解。

4. 获取帮助

kubectl 的所有命令、子命令都支持 --help 参数,可以用这种方式获取帮助。

kubectl options 命令能够获取 kubectl 的所有全局参数。

常用参数

-f:很多指令(不只是 apply 和 create)都可以用 -f <文件名> 的方式进行输入,如果使用管道操作,则可以用参数 -f - 接收 STDIN 的输入。

-l:可以使用各种对象上的标签对操作范围进行过滤,例如 -l app=hello

-o:指定输出格式,这个参数相对复杂,最常用的是 yaml 或者 json 用于输出机器报文,还可以用 JSON Path 或者 Go Template 对结果进行处理。

对象

对象通常是类型+名称的一个组合,可以用 kubectl 获得当前集群支持的对象类型:

四、Kubernetes(K8S):kubectl概述、安装、设置_第5张图片

如上图,输出内容包含几个列:名称、简称、API 群组、是否归属命名空间以及对象的 Kind 属性。例如常用的 Deployment:

  1. NAME-名称:Deployment
  2. SHORTNAMES-简称:Deploy
  3. APIVERSION-API 群组:apps
  4. NAMESPACED归属命名空间:是
  5. KIND:Deployment

使用命令 kubectl get deploy,就能获得当前命名空间中的 Deployment 对象列表,如果在尾巴上加入 Deployment 的名称,就能得到符合名称要求的 Deployment 对象。

四、Kubernetes(K8S):kubectl概述、安装、设置_第6张图片

规则结构

前面提到的 -f 参数,或者是 get -o yaml,都要用到具体的对象数据结构,这个结构到底是哪里规定的呢?基本结构可以分为三个部分,以一个 Namespace 为例:

apiVersion: v1
kind: Namespace
metadata:
  name: default
spec:
  finalizers:
  - kubernetes

一般会分为四个基础字段:apiVersion、kind、metadata、status 以及 spec。

  1. apiVersion:格式为 /,一个对象的 API Group,可以用前文提到的 api-resources 命令查到,而版本则可以通过 kubectl api-versions 查询得到。
  2. kind:对应 api-resources 命令输出的字段。
  3. metadata:元数据,其中包括标签、注解、名称等字段,如果对象是属于命名空间的,也会把命名空间写在这里。
  4. status:这个字段的内容通常是由 Kubenretes 自动填写的。经常会被省略掉。
  5. spec:具体的对象内容,可以由几个途径获取其定义结构
    1. 部分资源可以使用 kubectl explain <对象类别> 获得解释
    2. 如果该资源在集群中有对象存在,可以使用 kubectl get <对象类别> <对象名称> -o yaml 的方式获得原文。
    3. 如果前两种方法都没有,就需要去查看 Kubernetes 或者第三方的 API Reference 了。

命令选项

下表包括了所有kubectl操作简短描述和通用语法:

Operation

Syntax

Description

annotate

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]

显示有关集群中masterservices的终端信息。

config

kubectl config SUBCOMMAND [flags]

修改kubeconfig文件。有关详细信息,请参阅各个子命令。

create

kubectl create -f FILENAME [flags]

filestdin创建一个或多个资源。

delete

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

filestdin或指定label 选择器,namesresource选择器或resources中删除resources

describe

kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags]

显示一个或多个resources的详细状态。

edit

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]

获取各种资源的文档。例如podnodeservices

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 controllerservicepod作为一个新的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

filestdin替换资源。

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

version

kubectl version [--client] [flags]

显示客户端和服务器上运行的Kubernetes版本。

资源类型

下表列出了所有支持的资源类型及其缩写:

Resource type

Abbreviated alias

apiservices

certificatesigningrequests

csr

clusters

clusterrolebindings

clusterroles

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

poddisruptionbudget

pdb

podpreset

pods

po

podsecuritypolicies

psp

podtemplates

replicasets

rs

replicationcontrollers

rc

resourcequotas

quota

rolebindings

roles

secrets

serviceaccounts

sa

services

svc

statefulsets

storageclasses

输出选项

使用以下部分来了解如何格式化或对某些命令的输出进行排序。关于哪些命令支持什么输出选项,请查阅kubectl参考文档。

格式化输出

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

语法:

kubectl [command] [TYPE] [NAME] -o=

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

输出格式

描述

-o=custom-columns=

使用逗号分隔的custom columns列表打印一个表。

-o=custom-columns-file=

使用文件中的custom columns模板打印表

-o=json

输出JSON格式的API对象。

-o=jsonpath=