kubectl的一些总结

背景

kubectl 是 k8s 的命令行工具,可以认为,如果对 kubectl 使用熟练了,就对 k8s 达到初级熟练度推进到 25% 了,相关标准可以参考 k8s熟练度标准 ,本文对 kubectl 命令做一次整体整理。

api-server

在整理 kubectl 之前,我们先看 api-server,为什么?因为 kubectl 实际上是一个 api-server 的 client SDK,了解清楚了 api-server,kubectl 就清楚 90% 了。

api-server 是 k8s 对外接口的入口,负责一切对 元数据 的修改,是 k8s 几大核心组件中的一个。 [notes:这里可以增加 k8s 的核心逻辑图]

可以认为,我们所有的操作,实际都是在给 api-server 发送不同的指令。那么,api-server 的指令有哪些类型呢?

  • 工作负载类资源
    • 包括一切会影响到 pod 的资源,例如: Pod、副本控制器 (ReplicationController)、副本集 (ReplicaSet)、部署集 (deployment)、有状态应用集(StatefulSet)、任务(job 和 cronjob)、自动扩缩容(AutoScaler)
  • 网络连通类资源
    • 包括一些会影响到 pod 访问的资源,例如: service(clusterIP、NodePort、LoadBalancer、headless)、endpoints、ingress
  • 外部存储类资源
    • secrets
    • configmap
    • 卷挂载类,例如: 卷(volume)、持久化卷(persistentVolume)、持久化卷申明(persistentVolumeClaim)、存储类(StorageClass)、存储引擎(CSIDriver)
  • 身份与鉴权类资源
    • ServiceAccount (账户)
    • CertificateSigningRequest (证书签名请求)
    • 角色类,例如: Role、ClusterRole、RoleBinding、ClusterRoleBinding
  • 集群及管理类资源
    • Node
    • Namespace
    • Event
  • 扩展类资源
    • CRD
    • MutatingWebhookConfiguration
    • ValidatingWebhookConfiguration

kubectl

作为一个运行在终端的与远端 k8s server 通信的 cli,kubectl 主要目标是:

  1. 与 k8s server 做互信认证
    • kubeconfig 配置
    • kubectl conifg 管理 ( k config )
  2. 合理封装 api-server 的命令,供用户操作
    • 创建资源
      • k create
      • k expose
      • k diff
      • k run
      • k apply
      • k kustomize
      • k replace
    • 操作资源
      • k get/edit/delete/set/patch svc/deploy/nodes/pv/xxx
    • 调度和选择
      • k label
      • k taint
      • k cordon/uncordon
      • k drain
    • 部署集操作
      • k rollout (history)
      • k scale
      • k autoscale
    • 调试使用
      • k logs
      • k describe
      • k exec
      • k cp
      • k port-forward
      • k proxy
      • k top pod/node
      • k attach/auth/debug
  3. 提供用户操作过程中的常用工具
    • 获取所有 api-resource ( k api-resources )
    • 解释资源字段含义 ( k explain )
    • 管理 kubectl 插件 ( k plugin )
    • 命令行提示 ( k completion )

上面是 kubectl 其中一个维度的分类,也可以按照 kubectl -h 进行分类 (主要差别在于各种 高级命令 被单独分成组了)。

一些好用的操作

  • k logs -f --tail 10 做应用调试的时候,方便到没朋友
  • k run xxname --image xxxx --command=true --privilege=true -- tail -f /dev/null 在测试状态应用时把 k8s 当 docker 用
  • k create svc clusterip longtest --tcp=8080:8080 -o=yaml --dry-run > longtest.svc.yaml 用 –dry-run 的方式拿到基本的资源 yaml,可以简化从其他地方 copy 资源基本清单的流程
  • watch kubectl get pod -l app=xxx 可以监听状态变化,在部署之后检查部署状态挺好用。 (原生的 -w 也有类似功能,但变化方式不是很习惯)
  • kubectx 命令,用于快速切换 context 和 namespace (kubens)

总结

kubectl 只是一些简单的 k8s 操作,提升对 kubectl 使用的熟练度有助于日常业务运维中的效率,只要能熟练使用 kubectl 了,也就意味着具备了基本的 k8s 资源管理能力。

进一步的 k8s 熟练度,需要通过 提升对各项资源字段含义的熟练度
来增加,这是一个从 浪漫期精确期 的过程。

TODO

  • 做命令的练习及验收方案
  • 做 helm 的进一步使用 / kustomize 的进一步使用
  • 做 k9s 和 kubeboard/k8s dashboard 的搭建和使用的简单教程 ✅ 2023-02-16
    • 没啥需要写的,都很简洁明了

其他和 k8s 相关的一些信息,可以参考:


Edison failed 10,000 times before he made the electric light. Do not be discouraged if you fail a few times.
Napoleon Hill


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!