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 主要目标是:
- 与 k8s server 做互信认证
- kubeconfig 配置
- kubectl conifg 管理 (
k config
)
- 合理封装 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
- 创建资源
- 提供用户操作过程中的常用工具
- 获取所有 api-resource (
k api-resources
) - 解释资源字段含义 (
k explain
) - 管理 kubectl 插件 (
k plugin
) - 命令行提示 (
k completion
)
- 获取所有 api-resource (
上面是 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 的进一步使用
- helm的一些简单使用 ✅ 2022-11-03
- 做 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 协议 ,转载请注明出处!