Kubernetes operator(一)client-go篇
发布时间:2024年01月22日
云原生学习路线导航页(持续更新中)
- 本文是 Kubernetes operator学习 系列第一篇,主要对client-go进行学习,从源码阅读角度,学习client-go各个组件的实现原理、如何协同工作等
- 参考视频:Bilibili 2022年最新k8s编程operator篇,UP主:白丁云原生
1.kubernetes简单介绍
1.1.kubernetes的内置资源
- Pod:K8S最小的调度单元,可以将一组密切关联的容器组成一个逻辑单元,在这个单元里容器之间可以更好的共享资源。
- Deployment:主要用于无状态应用,用来部署多个副本的Pod,并且在Pod出现异常时帮助应用及时恢复正常。
- Statefulset:主要用于有状态应用,可以控制Pod的启动顺序,为Pod绑定不同的存储等。
- Job/CronJob:用于一次性和周期性的任务。
- Daemonset:通常用来部署后台常驻任务,会在每台Worker节点启动。
- Service:应用的访问入口,通过selector选择具有指定label的Pod,为其提供服务发现和负载均衡的功能,每个Service都可以通过CoreDNS获取到其对应的IP。
- Ingress:提供K8S集群外部访问应用。
- Configmap、Secret:描述应用的配置和密钥等数据。
- PV、PVC、HostPath、EmptyDir:描述应用的各类存储。
- …
1.2.kubernetes的扩展点
- 为了适应更多的业务场景,k8s提供了很多的扩展点,用于满足更复杂的需求
- K8s的扩展点如下:
- ① kubectl
- 用户通过kubectl与ApiServer进行交互,kubectl提供了插件,可以扩展kubectl的行为,但是这些插件只能影响用户本地的环境
- ② API Server
- 处理所有的请求,可以对用户请求进行 身份认证、基于其内容阻止请求、编辑请求内容、处理删除操作等等。
- 这个扩展点应该说的是:用户可以 自定义 API Server
- ③ k8s提供的内置资源
- 我们无法修改,只能通过 annotation、label 控制他们
- ④ CRD
- 自定义资源,配合 自定义控制器Custom Controller,扩展k8s的特定业务场景
- ⑤ scheduler
- 调度器,决定k8s把Pod放到哪个节点执行。k8s提供了多种方式扩展调度行为
- ⑥ Controller Manager
- 实际上也是k8s的一个客户端,通过与API Server交互。k8s的每种资源都有对应的控制器,都属于ControllerManager
- client-go本质上就是一个与apiserver交互的库,所以Controller Manager也是通过 client-go 库与 API Server交互的
- ⑦ Custom Controller
- 自定义控制器,可以控制 内置资源,也可以控制自定义资源CRD
- ⑧ kubelet
- 使用CNI:使得k8s可以使用不同技术,连接Pod网络
- 使用CSI:使得k8s可以支持不同的存储类型
- 使用CRI:使得k8s可以支持不同的容器运行时
- ⑨ client-go
- 一个通用的Golang库,用于和 apiserver 交互
- 不管是k8s的各个组件,还是我们自己为CRD开发Custom Controller,都需要使用 client-go 与 API Server 进行通信
文章来源:https://blog.csdn.net/a1369760658/article/details/135752515
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:chenni525@qq.com进行投诉反馈,一经查实,立即删除!