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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。