kubectl的核心功能是通过API server操作kubernetes的各种资源对象。官网提供了在linux、mac、windows上的安装方式,详见安装工具 | Kubernetes,比如:
curl -LO "https://dl.k8s.io/release/v1.21.1/bin/linux/amd64/kubectl"
还提供了一些插件,比如命令自动补全功能,自动补全功能可以显著提高使用体验,
详见在 Linux 系统中安装并设置 kubectl | Kubernetes
kubernetes API资源管理的操作包括增、删、改、查四种,kubectl提供了一系列子命令来执行此类任务,例如create、delete、patch、apply、replace、edit、get等,其中有些命令只能基于资源清单执行,比如apply和replace命令,有些既可以基于资源清单,也可以实时作用于活动资源上,比如create、get、patch和delete等。
资源清单一般为yaml格式或者json格式,在日常使用中,yaml格式较多。
在yaml格式的资源清单文件中,多个资源需要使用"---"符号做分割。
kubectl的多数子命令支持使用-f参数指定资源清单文件或存储有资源清单文件的目录,若指定的目录包含子目录,也可使用-R选项递归获取子目录中的资源清单。
以下给出kubernetes核心的一些资源,基本上字段稍微长一点的对象都有简写,比如replicaset可简写为rs,storageclass可简写为sc
node
pod
deployment
replicaset
daemonset
service
namespace
pv
pvc
storageclass
kubectl [command] [type] [name] [flags]
以下给出kubectl的通用选项
--add-dir-header
设置为 true 表示添加文件目录到日志信息头中
--alsologtostderr
表示将日志输出到文件的同时输出到 stderr
--as string
以指定用户的身份执行操作
--as-group stringArray
模拟指定的组来执行操作,可以使用这个标志来指定多个组。
--azure-container-registry-config string
包含 Azure 容器仓库配置信息的文件的路径。
--cache-dir string 默认值: "$HOME/.kube/cache"
默认缓存目录
--certificate-authority string
指向证书机构的 cert 文件路径
--client-certificate string
TLS 使用的客户端证书路径
--client-key string
TLS 使用的客户端密钥文件路径
--cloud-provider-gce-l7lb-src-cidrs cidrs 默认值: 130.211.0.0/22,35.191.0.0/16
在 GCE 防火墙中开放的 CIDR,用来进行 L7 LB 流量代理和健康检查。
--cloud-provider-gce-lb-src-cidrs cidrs 默认值: 130.211.0.0/22,209.85.152.0/22,209.85.204.0/22,35.191.0.0/16
在 GCE 防火墙中开放的 CIDR,用来进行 L4 LB 流量代理和健康检查。
--cluster string
要使用的 kubeconfig 集群的名称
--context string
要使用的 kubeconfig 上下文的名称
--default-not-ready-toleration-seconds int 默认值: 300
表示 `notReady` 状态的容忍度秒数:默认情况下,`NoExecute` 被添加到尚未具有此容忍度的每个 Pod 中。
--default-unreachable-toleration-seconds int 默认值: 300
表示 `unreachable` 状态的容忍度秒数:默认情况下,`NoExecute` 被添加到尚未具有此容忍度的每个 Pod 中。
-h, --help
kubectl 操作的帮助命令
--insecure-skip-tls-verify
设置为 true,则表示不会检查服务器证书的有效性。这样会导致您的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求使用的 kubeconfig 配置文件的路径。
--log-backtrace-at traceLocation 默认值: 0
当日志机制运行到指定文件的指定行(file:N)时,打印调用堆栈信息
--log-dir string
如果不为空,则将日志文件写入此目录
--log-file string
如果不为空,则将使用此日志文件
--log-file-max-size uint 默认值: 1800
定义日志文件的最大尺寸。单位为兆字节。如果值设置为 0,则表示日志文件大小不受限制。
--log-flush-frequency duration 默认值: 5s
两次日志刷新操作之间的最长时间(秒)
--logtostderr 默认值: true
日志输出到 stderr 而不是文件中
--match-server-version
要求客户端版本和服务端版本相匹配
-n, --namespace string
如果存在,CLI 请求将使用此命名空间
--one-output
如果为 true,则只将日志写入初始严重级别(而不是同时写入所有较低的严重级别)。
--password string
API 服务器进行基本身份验证的密码
--profile string 默认值: "none"
要记录的性能指标的名称。可取 (none|cpu|heap|goroutine|threadcreate|block|mutex) 其中之一。
--profile-output string 默认值: "profile.pprof"
用于转储所记录的性能信息的文件名
--request-timeout string 默认值: "0"
放弃单个服务器请求之前的等待时间,非零值需要包含相应时间单位(例如:1s、2m、3h)。零值则表示不做超时要求。
-s, --server string
Kubernetes API 服务器的地址和端口
--skip-headers
设置为 true 则表示跳过在日志消息中出现 header 前缀信息
--skip-log-headers
设置为 true 则表示在打开日志文件时跳过 header 信息
--stderrthreshold severity 默认值: 2
等于或高于此阈值的日志将输出到标准错误输出(stderr)
--token string
用于对 API 服务器进行身份认证的持有者令牌
--user string
指定使用 kubeconfig 配置文件中的用户名
--username string
用于 API 服务器的基本身份验证的用户名
-v, --v Level
指定输出日志的日志详细级别
--version version[=true]
打印 kubectl 版本信息并退出
--vmodule moduleSpec
以逗号分隔的 pattern=N 设置列表,用于过滤文件的日志记录
以下给出kubectl支持的所有命令
kubectl annotate - 更新资源所关联的注解
kubectl api-resources - 打印服务器上所支持的 API 资源
kubectl api-versions - 以“组/版本”的格式输出服务端所支持的 API 版本
kubectl apply - 基于文件名或标准输入,将新的配置应用到资源上
kubectl attach - 连接到一个正在运行的容器
kubectl auth - 检查授权信息
kubectl autoscale - 对一个资源对象(Deployment、ReplicaSet 或 ReplicationController )进行扩缩
kubectl certificate - 修改证书资源
kubectl cluster-info - 显示集群信息
kubectl completion - 根据已经给出的 Shell(bash 或 zsh),输出 Shell 补全后的代码
kubectl config - 修改 kubeconfig 配置文件
kubectl convert - 在不同的 API 版本之间转换配置文件
kubectl cordon - 标记节点为不可调度的
kubectl cp - 将文件和目录拷入/拷出容器
kubectl create - 通过文件或标准输入来创建资源
kubectl debug - 创建用于排查工作负载和节点故障的调试会话
kubectl delete - 通过文件名、标准输入、资源和名字删除资源,或者通过资源和标签选择器来删除资源
kubectl describe - 显示某个资源或某组资源的详细信息
kubectl diff - 显示目前版本与将要应用的版本之间的差异
kubectl drain - 腾空节点,准备维护
kubectl edit - 修改服务器上的某资源
kubectl exec - 在容器中执行相关命令
kubectl explain - 显示资源文档说明
kubectl expose - 给定副本控制器、服务、Deployment 或 Pod,将其暴露为新的 kubernetes Service
kubectl get - 显示一个或者多个资源信息
kubectl kustomize - 从目录或远程 URL 中构建 kustomization
kubectl label - 更新资源的标签
kubectl logs - 输出 pod 中某容器的日志
kubectl options - 打印所有命令都支持的共有参数列表
kubectl patch - 基于策略性合并修补(Stategic Merge Patch)规则更新某资源中的字段
kubectl plugin - 运行命令行插件
kubectl port-forward - 将一个或者多个本地端口转发到 pod
kubectl proxy - 运行一个 kubernetes API 服务器代理
kubectl replace - 基于文件名或标准输入替换资源
kubectl rollout - 管理资源的上线
kubectl run - 在集群中使用指定镜像启动容器
kubectl scale - 为一个 Deployment、ReplicaSet 或 ReplicationController 设置一个新的规模尺寸值
kubectl set - 为对象设置功能特性
kubectl taint - 在一个或者多个节点上更新污点配置
kubectl top - 显示资源(CPU /内存/存储)使用率
kubectl uncordon - 标记节点为可调度的
kubectl version - 打印客户端和服务器的版本信息
kubectl wait - 实验性:等待一个或多个资源达到某种状态
kubectl命令很多,但常用的更多是对资源的增删改查、进入容器、查看日志等等,其他的命令有个印象,用到的时候再查即可
create
创建资源可以使用kubectl create命令,比如创建一个命名空间,名字叫ns1,则可:
kubectl create namespace ns1
但更推荐的做法是先定义资源清单,然后使用"kubectl apply -f 资源清单"的方式,这种方式叫做声明式对象配置,定义的资源为用户期望达到的状态,多次apply操作是幂等的,并且也不必关心资源是否已存在,如果资源存在,则按当前定义的配置进行更新。比如现有资源清单pod1.yaml,则可:
kubectl apply -f pod1.yaml
get
查看default命名空间下的所有pod
kubectl get pod
查看kube-system命名空间下的所有pod,-n指定命名空间,不指定默认为default命名空间
kubectl get pod -n kube-system
查看单个pod
kubectl get pod pod1
查看单个pod并以yaml格式输出,即查看资源清单
kubectl get pod pod1 -o yaml
查看default命名空间下拥有app标签的pod,使用-l指定label
kubectl get pod -l app
查看default命名空间下拥有app=nginx标签的pod,使用-l指定label
kubectl get pod -l app=nginx
查看default命名空间下一个拥有app=nginx标签的pod的名称,使用-l指定label
kubectl get pod -l app=nginx -o jsonpath="{.items[0].metadata.name}"
describe
describe表示查看资源的状态信息,比如在pod启动失败时可通过describe命令查看相关事件进行排错
kubectl describe pod pod1
delete
删除default命名空间下名称为pod1的pod
kubectl delete pod pod1
通过资源清单进行删除,比如需要删除pod1,pod1的资源清单为pod1.yaml
kubectl delete -f pod1.yaml
一般使用apply命令
logs
打印default命名空间下名称为pod1的日志,前提为pod1中只有一个容器,如果有多个容器需要使用-c指定容器
kubectl logs pod1
使用-f选项持续输出日志,前提为pod1中只有一个容器,如果有多个容器需要使用-c指定容器
kubectl logs -f pod1
exec
kubectl exec命令和docker exec命令基本类似,一点区别是kubectl使用"-- command"这种方式,例:在pod1中执行ps命令,前提为pod1中只有一个容器,如果有多个容器需要使用-c指定容器
kubectl exec pod1 -- ps
能用apply就多用apply,因为apply命令就是声明式api最好的体现
更多操作:Kubectl Reference Docs