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 
  1. 查看资源对象
# 以纯文本输出格式列出所有 pod。
kubectl get pods

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

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

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

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

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

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

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

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

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

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

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

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

# 从 pod  开始流式传输日志。这类似于 'tail -f' Linux 命令。
kubectl logs -f 
  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 /:/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= 根据自定义列名进行输出,以逗号分隔
-o=custom-colimns-file= 从文件中获取自定义列名进行输出
-o=json 以JSON格式显示结果
-o=jsonpath=