kubectl工具使用

kubectl安装

        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资源管理

        kubernetes API资源管理的操作包括增、删、改、查四种,kubectl提供了一系列子命令来执行此类任务,例如create、delete、patch、apply、replace、edit、get等,其中有些命令只能基于资源清单执行,比如apply和replace命令,有些既可以基于资源清单,也可以实时作用于活动资源上,比如create、get、patch和delete等。

        资源清单一般为yaml格式或者json格式,在日常使用中,yaml格式较多。

        在yaml格式的资源清单文件中,多个资源需要使用"---"符号做分割。

        kubectl的多数子命令支持使用-f参数指定资源清单文件或存储有资源清单文件的目录,若指定的目录包含子目录,也可使用-R选项递归获取子目录中的资源清单。

kubernetes核心资源

        以下给出kubernetes核心的一些资源,基本上字段稍微长一点的对象都有简写,比如replicaset可简写为rs,storageclass可简写为sc

node

pod

deployment

replicaset

daemonset

service

namespace

pv

pvc

storageclass

kubectl命令格式       

kubectl [command] [type] [name] [flags]
  • command: 对资源操作的子命令,比如get、apply、delete等;
  • type: 要操作的资源类型,比如pods、services等,类型名称大小写敏感,但支持使用单数,例如:kubectl get pods和kubectl get pod是同样的效果;
  • name:要操作的资源对象名称,大小写敏感,如果不指定name,则表示取所有指定type的资源,指定则表示取单个资源;
  • flags:命令行选项,比如-s或者--server等,尤其在使用get操作时,经常会使用到-o 选项,表示以什么格式输出,例如:kubectl get pod pod1 -o yaml,表示以yaml格式输出,另外一种常用操作是将输出内容指定到文件。比如kubectl get pod pod1 -o yaml > pod1.yaml,然后修改pod1.yaml再重新使用apply命令更新。

kubectl通用选项

        以下给出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支持的所有命令

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常用命令

        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        

你可能感兴趣的:(kubernetes之路,kubernetes,kubectl)