kubernetes命令行工具kubectl详解
1、kubectl概述
kubectl是Kubernetes集群的命令行工具,通过kubectl能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。运行kubectl命令的语法如下所示:
kubectl [command] [TYPE] [NAME] [flags]
注意:在一个命令行中也可以同时对多个资源对象进行操作,以多个TYPE和NAME的组合表示。
示例如下:
1.获取多个Pod的信息:kubectl get pods pod1 pod2
2.获取多种对象的信息:kubectl get pod/pod1 rc/rc1
3.同时应用多个yaml文件,以多个-f file参数表示:kubectl create -f pod1.yaml -f rc1.yaml -f service1.yaml
- comand:指定要对资源执行的操作。例如create、get、describe、delete、log、exec等等;
- TYPE:指定资源类型,资源类型是大小学敏感的,开发者能够以单数、复数和缩略的形式。如node、pod、deployment、namespaces等等;
- NAME:资源对象的名称,区分大小写。如果不指定名称,则系统将返回属于TYPE的全部对象的列表,例如$ kubectl get pods将返回所有Pod的列表。
- flags:kubectl子命令的可选参数,例如使用“-s”指定apiserver的URL地址而不用默认值。
2、资源对象类型
在kubernetes中,提供了很多的资源对象,开发和运维人员可以通过这些对象对容器进行编排。在下表中,是kubectl所支持的资源对象类型,以及它们的缩略别名:
资源对象类型 | 缩略别名 |
---|---|
apiservices | - |
certificatesigningrequests | csr |
clusterrolebindings | - |
clusters | - |
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 |
- |
3、kubectl命令大全
kubectl作为kubernetes的命令行工具,主要的职责就是对集群中的资源的对象进行操作,这些操作包括对资源对象的创建、删除和查看等。下表中显示了kubectl支持的所有操作,以及这些操作的语法和描述信息:
注意:每个命令的具体使用可以使用kubectl [command] -h
进行查看。设置kubectl命令自动补充source <(kubectl completion bash)
。
- 基础命令
命令 | 语法 | 描述 |
---|---|---|
create |
kubectl create -f FILENAME [options] | 从文件或stdin中创建一个或多个资源对象 |
expose |
kubectl expose (-f FILENAME | TYPE NAME) [ --port=port] [ --protocol=TCP |UDP|SCTP] [ --target-port=number-or-name][ --name=name] [ --external-ip=external-ip-of-service] [ --type=type] [options] | 将rc,svc,deploy,pod暴露为一个新的svc |
run |
kubectl run NAME --image=image [ --env=“key=value”] [ --port=port] [ --replicas=replicas] [ --dry-run=bool] [ --overrides=inline-json] [ --command] --[COMMAND] [args…] [options] | 在集群上运行一个指定的镜像 |
set | kubectl set SUBCOMMAND [options] | 更改现有的应用程序资源,SUBCOMMAND包括image、resources、selector、subject、env、serviceaccount ,具体用法可以使用kubectl set [SUBCOMMAND ] -h 查看 |
explain |
kubectl explain RESOURCE [options] | 查询资源的文档 |
get |
kubectl get [(-o| --output=)json|yaml|wide|custom-columns=…|custom-columns-file=…|go-template=…|go-template-file=…|jsonpath=…|jsonpath-file=…](TYPE[.VERSION][.GROUP] [NAME | -l label] | TYPE[.VERSION][.GROUP]/NAME …) [flags] [options] | 查询一个或者多个资源 |
edit |
kubectl edit (RESOURCE/NAME | -f FILENAME) [options] | 通过默认编辑器编辑和更新服务器上的一个或多个资源对象 |
delete |
kubectl delete ([-f FILENAME] | [-k DIRECTORY] | TYPE [(NAME | -l label | --all)]) [options] | 删除资源对象 |
- 部署命令
命令 | 语法 | 描述 |
---|---|---|
rollout |
kubectl rollout SUBCOMMAND [options] | 管理资源的部署,SUBCOMMAND包括history、pause、restart、resume、status、undo |
rolling-update |
kubectl rolling-update OLD_CONTROLLER_NAME([NEW_CONTROLLER_NAME] --image=NEW_CONTAINER_IMAGE | -f NEW_CONTROLLER_SPEC) [options] | 通过逐步替换指定的副本控制器和Pod来执行滚动更新 |
scale |
kubectl scale [ --resource-version=version] [ --current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)[options] | 扩宿容副本集的数量 |
autoscale |
kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [ --min=MINPODS] --max=MAXPODS [ --cpu-percent=CPU] [options] | 自动扩宿容由副本控制器管理的Pod |
- 集群管理命令
命令 | 语法 | 描述 |
---|---|---|
certificate | kubectl certificate SUBCOMMAND [options] | 修改证书资源,SUBCOMMAND包括approve、deny |
cluster-info |
kubectl cluster-info [flags] [options] | 显示群集中的主节点和服务的的端点信息 |
top |
kubectl top [flags] [options] | 显示node或pod资源(CPU/内存/存储)使用情况 |
cordon |
kubectl cordon NODE [options] | 将node标记为不可调度 |
uncordon |
kubectl uncordon NODE [options] | 将node标记为可调度 |
drain |
kubectl drain NODE [options] | 驱逐节点,准备维护 |
taint |
kubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 … KEY_N=VAL_N:TAINT_EFFECT_N [options] | 更新一个或多个节点上的污点 |
- 故障排除和调试命令
命令 | 语法 | 描述 |
---|---|---|
describe |
kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME) [options] | 显示一个或者多个资源对象的详细信息 |
logs |
kubectl logs [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER] [options] | 显示Pod中一个容器的日志 |
attach |
kubectl attach (POD | TYPE/NAME) -c CONTAINER [options] | 连接到正在运行的容器上,以查看输出流或与容器交互(stdin)。 |
exec |
kubectl exec (POD | TYPE/NAME) [-c CONTAINER] [flags] --COMMAND [args…] [options] | 在Pod的容器中执行一个命令 |
port-forward | kubectl port-forward TYPE/NAME [options] [LOCAL_PORT:]REMOTE_PORT […[LOCAL_PORT_N:]REMOTE_PORT_N] | 将一个或多个本地端口转发到Pod |
proxy | kubectl proxy [ --port=PORT] [ --www=static-dir] [ --www-prefix=prefix] [ --api-prefix=prefix] [options] | 为kubernetes API服务器运行一个代理 |
cp | kubectl cp <file-spec-src> <file-spec-dest> [options] | 从容器中复制文件和目录 |
auth | kubectl auth [flags] [options] | 检查授权 |
- 高级命令
命令 | 语法 | 描述 |
---|---|---|
diff | kubectl diff -f FILENAME [options] | Diff live version against would-be applied version |
apply |
kubectl apply (-f FILENAME | -k DIRECTORY) [options] | 将来自于文件或stdin的配置变更应用到主要对象中 |
patch |
kubectl patch (-f FILENAME | TYPE NAME) -p PATCH [options] | 使用策略合并补丁过程更新资源对象中的一个或多个字段 |
replace |
kubectl replace -f FILENAME [options] | 从文件或stdin中替换资源对象 |
wait |
kubectl wait ([-f FILENAME] | resource.group/resource.name | resource.group [(-l label | --all)]) [ --for=delete| --for condition=available] [options] | 等待一个或多个资源上的特定条件 |
convert | kubectl convert -f FILENAME [options] | 将配置文件转换为不同的API Version |
kustomize | kubectl kustomize <dir> [flags] [options] | 从目录或远程url构建kustomization目标 |
- 设置命令
命令 | 语法 | 描述 |
---|---|---|
label |
kubectl label [ --overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 … KEY_N=VAL_N [ --resource-version=version][options] | 添加或更新一个或者多个资源对象的标签 |
annotate |
kubectl annotate [ --overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 … KEY_N=VAL_N [ --resource-version=version][options] | 添加或更新一个或多个资源的注释 |
completion | kubectl completion SHELL [options] | 输出指定shell的代码完成命令 (bash or zsh) |
- 其它命令
命令 | 语法 | 描述 |
---|---|---|
api-resources |
kubectl api-resources [flags] [options] | 在服务器上打印支持的API资源 |
api-versions |
kubectl api-versions [flags] [options] | 在服务器上以“group/version”的形式打印支持的API版本 |
config |
kubectl config SUBCOMMAND [options] | 修改kubeconfig文件,SUBCOMMAND 包括current-context、delete-cluster、delete-context、get-clusters、get-contexts、rename-context、set、set-cluster、set-context、set-credentials、unset、use-context、view ,具体用法可查看kubectl config SUBCOMMAND -h |
plugin | kubectl plugin [flags] [options] | 提供与插件交互的实用程序 |
version |
kubectl version [flags] [options] | 输出client和server的版本信息 |
- global options
以下选项可以传递给任何命令:
全局参数 | 描述 |
---|---|
--add-dir-header=false | 如果为真,则将文件目录添加到标头 |
--alsologtostderr=false | 日志到标准错误以及文件 |
--as=’’ | 模拟操作的用户名 |
--as-group=[] | 集团的模拟操作,这个标志可以重复指定多个组。 |
--cache-dir=’/root/.kube/http-cache’ | 默认HTTP cache目录 |
--certificate-authority=’’ | 指向证书颁发机构的证书文件的路径 |
--client-certificate=’’ | TLS客户端证书文件的路径 |
--client-key=’’ | TLS的客户端密钥文件的路径 |
--cluster=’’ | 要使用的kubeconfig集群的名称 |
--context=’’ | The name of the kubeconfig context to use |
--insecure-skip-tls-verify=false | 如果为真,将不检查服务器的证书的有效性。这将使您的HTTPS连接不安全 |
--kubeconfig=’’ | 用于CLI请求的kubeconfig文件的路径。 |
--log-backtrace-at=:0 | 当日志记录命中行文件N时,发出堆栈跟踪 |
--log-dir=’’ | 如果非空,则在此目录中写入日志文件 |
--log-file=’’ | 如果非空,则使用此日志文件 |
--log-file-max-size=1800 | 定义日志文件可以增长到的最大大小。单位是字节。如果该值为0,则最大文件大小不受限制。 |
--log-flush-frequency=5s | 日志刷新之间的最大秒数 |
--logtostderr=true | 日志到标准错误而不是文件 |
--match-server-version=false | 要求服务器版本与客户端版本匹配 |
-n, --namespace=’’ | 如果存在,此CLI请求的名称空间范围 |
--password=’’ | API服务器的基本身份验证密码 |
--profile=‘none’ | 要捕获的配置文件的名称,可设置(none|cpu|heap|goroutine|threadcreate|block|mutex) |
--profile-output=‘profile.pprof’ | 要写入概要文件的文件名称 |
--request-timeout=‘0’ | 在放弃单个服务器请求之前等待的时间长度。非零值应包含相应的时间单位(如1s、2m、3h)。值为0表示不超时请求。 |
-s, --server=’’ | Kubernetes API服务器的地址和端口 |
--skip-headers=false | 如果为真,则在日志消息中避免头前缀 |
--skip-log-headers=false | 如果为真,在打开日志文件时要避免头文件 |
--stderrthreshold=2 | 在此阈值或以上的日志将转到stderr |
--token=’’ | 用于向API服务器进行身份验证的承载令牌 |
--user=’’ | 要使用的kubeconfig用户的名称 |
--username=’’ | API服务器的基本身份验证的用户名 |
-v, --v=0 | 日志级别冗长性的编号 |
--vmodule=‘’ | 逗号分隔的模式列表=N个文件过滤日志记录设置 |
4、kubectl安装部署
- 下载kubectl
执行以下命令,获取 Kubectl 工具:
-
Mac OS X 系统
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.8.13/bin/darwin/amd64/kubectl
-
Linux 系统
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.8.13/bin/linux/amd64/kubectl
-
Windows 系统
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.8.13/bin/windows/amd64/kubectl.exe
以linux为例,若要下载最新的kubectl,可以执行以下命令:
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 -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)
例如,要在Linux上下载版本v1.17.0,请输入:
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.17.0/bin/linux/amd64/kubectl
- 安装 Kubectl 工具
已下载kubectl工具,安装步骤以 Linux 系统为例
-
执行以下命令,添加执行权限
chmod +x ./kubectl sudo mv ./kubectl /usr/local/bin/kubectl
-
执行以下命令,测试安装结果
kubectl version
如若输出类似以下版本信息,即表示安装成功。
Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"08e099554f3c31f6e6f07b448ab3ed78d0520507", GitTreeState:"clean", BuildDate:"2017-01-12T04:57:25Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"}
5、kubectl连接集群
通过证书信息使用 Kubectl 操作集群
-
单次连接集群
Kubectl 命令格式如下所示:-s "域名信息" --username=用户名 --password=密码 --certificate-authority=证书路径
示例:
kubectl get node -s "https://cls-66668888.ccs.tencent-cloud.com" --username=admin --password=6666o9oIB2gHD88882quIfLMy6666 --certificate-authority=/etc/kubernetes/cluster-ca.crt
-
修改 Kubectl 配置文件,长期连接集群
-
参考以下命令,修改 Kubectl 配置文件中的密码、证书信息
kubectl config set-credentials default-admin --username=admin --password=6666o9oIB2gHD88882quIfLMy6666 kubectl config set-cluster default-cluster --server=https://cls-66668888.ccs.tencent-cloud.com --certificate-authority=/etc/kubernetes/cluster-ca.crt kubectl config set-context default-system --cluster=default-cluster --user=default-admin kubectl config use-context default-system
-
配置完成后,执行以下命令,获取 node 节点信息
kubectl get nodes
返回类似以下信息,即表示修改成功
NAME STATUS AGE 10.0.0.61 Ready 10h
本文仅是个人学习时的整理收藏,以便回顾所用,内容均来源其它处。
[参考文档]https://www.kubernetes.org.cn/4060.html.
[参考文档]https://kubernetes.io/docs/tasks/tools/install-kubectl/#tabset-2.