kubectl命令行工具

kubectl命令行工具

资源对象类型及缩写

资源对象类型 缩写
clusters
componentstatuses cs
configmaps cm
daemonsets ds
deployments deploy
endpoints ep
events ev
horizontalpodautoscalers hpa
ingresses ing
Jobs
limitranges limits
nodes no
namespaces ns
networkpolicies
statefulsets
persistentvolumeclaims pvc
persistentvolumes pv
pods po
podsecuritypolicies psp
podtemplates
replicasets rs
replicationcontrollers rc
resourcequotas quota
cronjob
secrets
serviceaccounts
services svc
storageclasses sc
thirdpartyresources
# get
kubectl get pods [pod_name]
kubectl get pod [pod_name]
kubectl get po [pod_name]
# 获取多个
kubectl get pods [pod_name1] [pod_name2]
# 获取多种对象信息
kubectl get pod/pod1 rc/rc1
# 同时应用多个YAML文件,以file为示例
kubectl get pod -f pod1.yaml -f pod2.yaml
kubectl create pod -f pod1.yaml -f rc1.yaml -f service1.yml

kubectl子命令

子命令 语法 描述
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] 附加到正在运行的容器,查看输出流或与容器(stdin)交互
autoscale kubectl autoscale (-f FILENAME |TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags] 自动伸缩由副本控制器管理的一组 pod
cluster-info kubectl cluster-info [flags] 显示有关集群中主服务器和服务的端口信息
config kubectl config SUBCOMMAND [flags] 修改 kubeconfig 文件
create kubectl create -f FILENAME [flags] 从文件或 stdin 创建一个或多个资源
delete kubectl delete (-f FILENAME | TYPE [NAME | /NAME | --all]) [flags] 从文件、标准输入或指定标签选择器、名称、资源选择器或资源中删除资源
describe kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME| -l label]) [flags] 显示一个或多个资源的详细状态
diff kubectl diff -f FILENAME [flags] 将 live 配置和文件或标准输入做对比
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 [--recursive=false] [flags] 获取多种资源的文档。例如 pod, node, service 等
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] 将副本控制器、服务或 pod 作为新的 Kubernetes 服务暴露
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] 添加或更新一个或多个资源的标签
logs kubectl logs POD [-c CONTAINER] [--follow] [flags] 在 pod 中打印容器的日志
patch kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags] 使用策略合并 patch 程序更新资源的一个或多个字段
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 从文件或标准输入中替换资源
rolling-update kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] --image=NEW_CONTAINER_IMAGE | -f NEW_CONTROLLER_SPEC) [flags] 通过逐步替换指定的副本控制器及其 pod 来执行滚动更新
run kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server | client | none] [--overrides=inline-json] [flags] 在集群上运行指定的镜像
scale kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags] 更新指定副本控制器的大小
stop kubectl stop 不推荐:相反,请参阅 kubectl delete
version kubectl version [--client] [flags] 显示运行在客户端和服务器上的 Kubernetes 版本

示例

  1. 创建资源对象
# 根据YAML配置文件一次向创建RC和Service
kubectl apply  -f service.yaml -f rc.yaml

# 根据目录下所有.yaml .yml .json文件的定义进行创建
kubectl apply  -f <directory>
  1. 查看资源对象
# 以纯文本输出格式列出所有 pod。
kubectl get pods

# 以纯文本输出格式列出所有 pod,并包含附加信息(如节点名)。
kubectl get pods -o wide

# 以纯文本输出格式列出具有指定名称的副本控制器。提示:您可以使用别名 'rc' 缩短和替换 'replicationcontroller' 资源类型。
kubectl get replicationcontroller <rc-name>

# 以纯文本输出格式列出所有副本控制器和服务。
kubectl get rc,services

# 以纯文本输出格式列出所有守护程序集,包括未初始化的守护程序集。
kubectl get ds --include-uninitialized

# 列出在节点 server01 上运行的所有 pod
kubectl get pods --field-selector=spec.nodeName=server01
  1. 描述资源对象
# 显示名称为 <node-name> 的节点的详细信息。
kubectl describe nodes <node-name>

# 显示名为 <pod-name> 的 pod 的详细信息。
kubectl describe pods/<pod-name>

# 显示由名为 <rc-name> 的副本控制器管理的所有 pod 的详细信息。
# 记住:副本控制器创建的任何 pod 都以复制控制器的名称为前缀。
kubectl describe pods <rc-name>

# 描述所有的 pod,不包括未初始化的 pod
kubectl describe pods --include-uninitialized=false
  1. 删除资源对象
# 使用 pod.yaml 文件中指定的类型和名称删除 pod。
kubectl delete -f pod.yaml

# 删除标签名= <label-name> 的所有 pod 和服务。
kubectl delete pods,services -l name=<label-name>

# 删除所有具有标签名称= <label-name> 的 pod 和服务,包括未初始化的那些。
kubectl delete pods,services -l name=<label-name> --include-uninitialized

# 删除所有 pod,包括未初始化的 pod。
kubectl delete pods --all
  1. 执行容器命令
# 从 pod <pod-name> 中获取运行 'date' 的输出。默认情况下,输出来自第一个容器。
kubectl exec <pod-name> date
  
# 运行输出 'date' 获取在容器的 <container-name> 中 pod <pod-name> 的输出。
kubectl exec <pod-name> -c <container-name> date

# 获取一个交互 TTY 并运行 /bin/bash <pod-name >。默认情况下,输出来自第一个容器。
kubectl exec -ti <pod-name> /bin/bash
  1. 查看容器日志
# 从 pod 返回日志快照。
kubectl logs <pod-name>

# 从 pod <pod-name> 开始流式传输日志。这类似于 'tail -f' Linux 命令。
kubectl logs -f <pod-name>
  1. 创建或更新资源对象
kubectl apply  -f service.yaml
  1. 在线编辑运行中的资源对象
# 通过YANL格式展示该对象的定义和状态
kubectl edit deploy nginx
  1. 将Pod的开放端口映射到本地
# 将集群上Pod的80端口映射到本地的8888端口,访问127.0.0.1:8888就可以访问到容器提供的服务
kubectl port-forward --address 0.0.0.0 pod/mypod 8888:80
  1. 在Pod和本地之间复制文件
# 将Pod上的/tmp/foo复制到本地/tmp/bar
kubectl cp <some-namespace>/<some-pod>:/tmp/foo /tmp/bar
  1. 资源对象的标签设置
# 为pods foo设置unhealthy=true标签
kubectl label pods foo unhealthy=true

# 为default namespaces设置testing=true标签
kubectl label namespaces default testing=true
  1. 检查可用的API资源类型列表
# 列出所有资源对象类型
kubectl api-resources
[root@k8s-master01 .kube]# kubectl api-resources
NAME                    SHORTNAMES   APIGROUP      NAMESPACED   KIND
bindings                                           true         Binding
componentstatuses       cs                         false        ComponentStatus
configmaps              cm                         true         ConfigMap
endpoints               ep                         true         Endpoints
events                  ev                         true         Event
limitranges             limits                     true         LimitRange
namespaces              ns                         false        Namespace
nodes                   no                         false        Node
persistentvolumeclaims  pvc                        true         PersistentVolumeClaim
persistentvolumes       pv                         false        PersistentVolume
pods                    po                         true         Pod
podtemplates                                       true         PodTemplate

  1. 使用命令行插件
# 用任何语言创建一个简单的插件,并为生成的可执行文件命名
# 以前缀 "kubectl-" 开始
cat ./kubectl-hello
#!/bin/bash

# 这个插件打印单词 "hello world"
echo "hello world"

# 我们的插件写好了,让我们把它变成可执行的
sudo chmod +x ./kubectl-hello

# 并将其移动到路径中的某个位置
sudo mv ./kubectl-hello /usr/local/bin

# 创建并"安装"了一个 kubectl 插件。
# 使用插件,从 kubectl 调用它,就像是一个常规命令
kubectl hello

# "卸载"一个插件,只需从路径中删除它
sudo rm /usr/local/bin/kubectl-hello

# 查看所有插件
kubectl plugin list

kubectl参数列表

参数名和取值示例 说明
--alsologtostderr=false 设置为true,表示将日志输出到文件的同时输出到stderr
--as='' 以指定用户的身份执行操作
--certificate-authority='' 用于CA授权的cert文件路径
--client-certificate='' 用于TLS使用的客户端证书路径
--client-key='' 用于TLS使用的客户端密钥文件路径
--cluster='' 设置要使用的 kubeconfig中的cluster名称
--context='' 设置要使用的 kubeconfig中的context名称
--insecure-skip-tls-verify=false 设置为 true,表示跳过TSL安全验证.导致HTTPS 连接不安全
--kubeconfig='' kubeconfig配置文件的路径,在配置文件中包括Master地址信息及必要的认证信息
--log-backtrace-at=:0 当日志机制运行到指定文件的指定行(file:行号)时,打印一次stack trace
--log-dir='' 日志文件路径
--log-flush-frequency=5s 设置刷新日志文件的时间间隔
--logtostderr=true 表示将日志输出到 stderr,不输出到日志文件
--match-server-version=false 设置true,表示要求客户端版本和服务端版本相匹配
--namespace='' 设置本次操作所在的namespace
--password='' API 服务器进行基本身份验证的密码
-s, --server='' Kubernetes API 服务器的地址和端口,默认值为localhost:8080
--stderrthreshold=2 等于或高于此阈值的日志将输出到标准错误输出(stderr)
--token='' 用于对 API 服务器进行身份认证的持有者令牌
--user='' 指定使用 kubeconfig 配置文件中的用户名
--username='' 用于 API 服务器的基本身份验证的用户名
--v=0 glog日志级别
--vmodule= glog基于模块的详细日志级别

kubectl输出格式

输出格式 说明
-o=custom-columns=<spec> 根据自定义列名进行输出,以逗号分隔
-o=custom-colimns-file=<filename> 从文件中获取自定义列名进行输出
-o=json 以JSON格式显示结果
-o=jsonpath=<template> 输出jsonpath表达式定义的字段信息
-o=jsonpath-file=<filename> 输出jsonpath表达式定义的字段信息,来源于文件
-o=name 仅输出资源对象的名称
-o=wide 输出额外信息。对于Pod,将输出Pod所在的Node名
-o=yaml 以yaml格式显示结果

示例

# 将单个pod的详细信息输出为YAML格式的对象
kubectl get pod web-pod-13je7 -o yaml

# 显示pod的更多信息
kubectl get pod web-pod-13je7 -o wide

# 自定义列名显示Pod信息
# 要定义自定义列并仅将所需的详细信息输出到表中,可以使用custom-columns选项.可以选择内联定义自定义列或使用模板文件:-o=custom-columns=<spec>或-o=custom-columns-file=<filename>
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

# 排序列表对象
# 语法
kubectl [command] [TYPE] [NAME] --sort-by=<jsonpath_exp>
# 示例
kubectl get pods --sort-by=.metadata.name
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354