赞
踩
目录
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
使用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
* NAME:指定Resource的Name。Name区分大小写,如果省略Name,则显示所有资源的详细信息,例如:$ kubectl get pods。
当在多个资源上执行操作时,可以通过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
可以看到 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 获得当前集群支持的对象类型:
如上图,输出内容包含几个列:名称、简称、API 群组、是否归属命名空间以及对象的 Kind 属性。例如常用的 Deployment:
使用命令 kubectl get deploy,就能获得当前命名空间中的 Deployment 对象列表,如果在尾巴上加入 Deployment 的名称,就能得到符合名称要求的 Deployment 对象。
前面提到的 -f 参数,或者是 get -o yaml,都要用到具体的对象数据结构,这个结构到底是哪里规定的呢?基本结构可以分为三个部分,以一个 Namespace 为例:
- apiVersion: v1
- kind: Namespace
- metadata:
- name: default
- spec:
- finalizers:
- - kubernetes
一般会分为四个基础字段:apiVersion、kind、metadata、status 以及 spec。
下表包括了所有kubectl操作简短描述和通用语法:
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。 |
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=<output_format>
根据kubectl操作,支持以下输出格式:
输出格式 | 描述 |
-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对象。 |
例如:
在此示例中,以下命令将单个pod的详细信息作为YAML格式化对象输出:
kubectl get pod web-pod-13je7 -o=yaml
要定义custom columns并仅将所需的详细信息输出,可以使用该custom-columns选项,选择Inline定义custom columns或使用模板文件定义:-o=custom-columns=<spec>或-o=custom-columns-file=<filename>。
例如
Inline方式:
kubectl get pods <pod-name> -o=custom-columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion
模板文件方式:
kubectl get pods <pod-name> -o=custom-columns-file=template.txt
其中,template.txt文件包含:
NAME RSRC
metadata.name metadata.resourceVersion
任何一个命令运行的结果将是:
NAME RSRC
submit-queue 610995
要将对象输出到终端窗口中的排序列表,可以将--sort-by标志添加到kubectl支持的命令中,通过使用--sort-by标志指定任何数字或字符串字段来对对象进行排序,要指定字段,请使用jsonpath表达式。参考JSONPATH的具体介绍和详细使用文章。
命令:
kubectl [command] [TYPE] [NAME] --sort-by=<jsonpath_exp>
例如
要打印按名称排序的pod列表,请运行:
kubectl get pods --sort-by=.metadata.name
kubectl create - 从file或stdin中创建资源。
// Create a service using the definition in example-service.yaml.
kubectl create -f example-service.yaml
// Create a replication controller using the definition in example-controller.yaml.
kubectl create -f example-controller.yaml
// Create the objects that are defined in any .yaml, .yml, or .json file within the <directory> directory.
kubectl create -f <directory>
kubectl get 列出一个或多个资源。
// List all pods in plain-text output format.
kubectl get pods
// List all pods in plain-text output format and includes additional information (such as node name).
kubectl get pods -o wide
// List the replication controller with the specified name in plain-text output format. Tip: You can shorten and replace the 'replicationcontroller' resource type with the alias 'rc'.
kubectl get replicationcontroller <rc-name>
// List all replication controllers and services together in plain-text output format.
kubectl get rc,services
kubectl describe - 显示一个或多个资源的详细状态。
// Display the details of the node with name <node-name>.
kubectl describe nodes <node-name>
// Display the details of the pod with name <pod-name>.
kubectl describe pods/<pod-name>
// Display the details of all the pods that are managed by the replication controller named <rc-name>.
// Remember: Any pods that are created by the replication controller get prefixed with the name of the replication controller.
kubectl describe pods <rc-name>
kubectl delete - 从file、stdin或指定label选择器,names,resource选择器或resources中删除resources资源。
// Delete a pod using the type and name specified in the pod.yaml file.
kubectl delete -f pod.yaml
// Delete all the pods and services that have the label name=<label-name>.
kubectl delete pods,services -l name=<label-name>
// Delete all pods.
kubectl delete pods --all
kubectl exec - 对pod中的容器执行命令。
// Get output from running 'date' from pod <pod-name>. By default, output is from the first container.
kubectl exec <pod-name> date
// Get output from running 'date' in container <container-name> of pod <pod-name>.
kubectl exec <pod-name> -c <container-name> date
// Get an interactive TTY and run /bin/bash from pod <pod-name>. By default, output is from the first container.
kubectl exec -ti <pod-name> /bin/bash
kubectl logs - 打印pod中的容器的日志。
// Return a snapshot of the logs from pod <pod-name>.
kubectl logs <pod-name>
// Start streaming the logs from pod <pod-name>. This is similar to the 'tail -f' Linux command.
kubectl logs -f <pod-name>
参考阅读:
原文:https://blog.csdn.net/zhouruifu2015/article/details/130057847
五、Kubernetes(K8S):Kubectl常用命令详解_kubelet命令_SteveRocket的博客-CSDN博客
微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。