【k8s深入理解之 Scheme 补充-3】理解 k8s 各个库(apimachinery、api、kubernetes)的关系

关联学习

附录1 | k8s 各个库(apimachinery、api、kubernetes)

k8s.io/apik8s.io/apimachineryk8s.io/kubernetes 是 Kubernetes 的核心模块,它们在功能上有明确的分工,共同构建 Kubernetes 的生态系统。以下是它们的详细对比和区别:


1. k8s.io/api

定义:

  • Kubernetes 的资源对象(如 Pod、Deployment、Service 等) API 类型定义的模块。
  • 用于描述 Kubernetes 对象的结构和字段,通常用于序列化/反序列化 Kubernetes 资源。

功能:

  • 定义 Kubernetes API 对象的结构(例如 Deployment, Pod, Service 等)。
  • 这些对象是 Kubernetes 使用的标准资源定义,通常用在客户端代码中(例如 kubectl 和自定义控制器)。

用途:

  • 用于编写客户端代码,比如使用 client-go

### 关于Kubernetes CRD和Operator模式 #### 自定义资源定义(CRD) CRD允许扩展API服务器的功能,无需修改核心组件即可引入新的API对象。通过CRD可以创建特定业务需求的对象类型[^1]。 ```yaml apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: kvdis.example.com spec: group: example.com versions: - name: v1alpha1 served: true storage: true scope: Namespaced names: plural: kvdis singular: kvdI kind: Kvdi shortNames: - kd ``` 这段YAML配置文件展示了如何定义一个新的名为`kvdI`的自定义资源,在命名空间范围内可用,并属于`example.com`组的一部分。 #### Operator模式 Operators是一种封装、部署并管理Kubernetes应用的方法。它利用定制控制器来实现复杂的状态管理和操作逻辑自动化。对于像KVDI这样的虚拟桌面基础设施项目来说,operator可以帮助简化集群中的VDI环境管理工作流。 为了构建一个基于Go语言编写的简单Operator,通常会遵循如下结构: - 定义所需的Custom Resource Definitions (CRDs). - 创建Controller用于监听这些新类型的事件变化. - 编写Reconcile函数处理实际的任务执行. ```go package main import ( "context" appsv1 "k8s.io/api/apps/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" ctrl "sigs.k8s.io/controller-runtime" logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/manager/signals" ) func main() { ctx := context.Background() log := logf.Log.WithName("controller_kvd") mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{}) if err != nil { panic(err.Error()) } clientset, _ := kubernetes.NewForConfig(mgr.GetConfig()) kvdiCtrl := &KvdiController{ ClientSet: clientset, Log: log, Scheme: mgr.GetScheme(), } err = kvdiCtrl.SetupWithManager(mgr) if err != nil { panic(err.Error()) } log.Info("starting manager") if err := mgr.Start(signals.SetupSignalHandler()); err != nil { log.Error(err, "problem running manager") } } ``` 上述代码片段提供了一个基本框架,其中包含了启动带有自定义控制器的manager所需的关键部分. #### 最佳实践建议 当开发针对KVDI或其他项目的operators时,请考虑以下几点最佳做法: - **模块化设计**: 将功能分解成独立的小型服务或,以便更容易维护和发展。 - **幂等性保障**: 确保每次调用都能得到相同的结果,即使重复多次也不会影响最终状态。 - **错误恢复机制**: 实现重试策略和其他方法来应对临时性的失败情况。 - **监控与日志记录**: 添加足够的指标暴露以及详细的日志输出支持调试工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值