文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【云原生】学习K8s的扩展技能(CRD)

2023-10-03 17:18

关注

博主昵称:跳楼梯企鹅
博主主页面链接:博主主页传送门

博主专栏页面连接:专栏传送门--网路安全技术
创作初心:本博客的初心为与技术朋友们相互交流,每个人的技术都存在短板,博主也是一样,虚心求教,希望各位技术友给予指导。
博主座右铭:发现光,追随光,成为光,散发光;
博主研究方向:渗透测试、机器学习 ;
博主寄语:感谢各位技术友的支持,您的支持就是我前进的动力 ;

目录

一、CRD 扩展 Kubernetes 集群

1.什么是 CRD

 2.CRD 能做什么

(1)微服务管理总览

(2)创建 Yaml 配置

(3)自定义 Controller 逻辑

二、CRD 字段校验

1.校验方式

2.举例

3.API的常用方式

(1)配置

(2)查看文件  

(3)自定义CRD模型


 

一、CRD 扩展 Kubernetes 集群

1.什么是 CRD

CRD 本身是一种 Kubernetes 内置的资源类型,是 CustomResourceDefinition 的缩写,可以通过 kubectlget 命令查看集群内定义的 CRD 资源。

 

$kubectl get crdNAME                         CREATED ATapps.app.my.cn            2022-09-25T07:02:47Zmicroservices.app.my.cn   2022-09-25T07:02:47Z

 2.CRD 能做什么

(1)微服务管理总览

App 负责管理整个应用的生命周期,MicroService 负责管理微服务的生命周期。① 部署方面:App 可以直接管理多个 MicroService,同时 MicroService 利用控制器模式,可以为每个版本创建一个 Deployment, 实现多个版本同时部署。

 

MicroService 为自己创建 1 个的 LoadBalance,也为每个版本创建了 Service。如下图所示,MicroService 下的每个版本(对应每个 Deployment)都有 Service,而本身也有 LoadBalance,即总共拥有 n+1Service

(2)创建 Yaml 配置

apiVersion: apiextensions.k8s.io/v1beta1kind: CustomResourceDefinitionmetadata:  creationTimestamp: null  labels:    controller-tools.k8s.io: "1.0"  # 名称必须与下面的spec字段匹配,格式为: .  name: apps.app.o0w0o.cnspec:  # 用于REST API的组名称: /apis//  group: app.o0w0o.cn  names:    # kind字段使用驼峰命名规则. 资源清单使用如此    kind: App    # URL中使用的复数名称: /apis///    plural: apps  # 指定crd资源作用范围在命名空间或集群  scope: Namespaced  # 自定义资源的子资源的描述  subresources:    # 启用状态子资源    status: {}  # 验证机制  validation:    # openAPIV3Schema is the schema for validating custom objects.    openAPIV3Schema:      properties:        ...

(3)自定义 Controller 逻辑

func (r *ReconcileApp) Reconcile(request reconcile.Request) (reconcile.Result, error) {    ...        // 状态 App 同步    if err := r.syncAppStatus(instance); err != nil {        log.Info("Sync App error", err)        return reconcile.Result{}, err    }        // 协调资源 MicroService     if err := r.reconcileMicroService(request, instance); err != nil {        log.Info("Creating MicroService error", err)        return reconcile.Result{}, err    }    ...}func (r *ReconcileMicroService) Reconcile(request reconcile.Request) (reconcile.Result, error) {    ...    // 同步 MicroService 状态    if err := r.syncMicroServiceStatus(instance); err != nil {        log.Info("Sync MicroServiceStatus error", err)        return reconcile.Result{}, err    }    // 协调实例    if err := r.reconcileInstance(instance); err != nil {        log.Info("Reconcile Instance Versions error", err)        return reconcile.Result{}, err    }   // 协调负载均衡器    if err := r.reconcileLoadBalance(instance); err != nil {        log.Info("Reconcile LoadBalance error", err)        return reconcile.Result{}, err    }    ...}

二、CRD 字段校验

 

 

1.校验方式

kubernetes 目前提供了两种方式来对 CR 的校验

语法校验(OpenAPI v3 schema

语义校验( validatingadmissionwebhook

2.举例

apiVersion: apiextensions.k8s.io/v1beta1kind: CustomResourceDefinitionmetadata:  # name must match the spec fields below, and be in the form: .  name: kubernetesclusters.ecs.yun.comspec:  # group name to use for REST API: /apis//  group: ecs.yun.com  # list of versions supported by this CustomResourceDefinition  versions:    - name: v1      # Each version can be enabled/disabled by Served flag.      served: true      # One and only one version must be marked as the storage version.      storage: true  # either Namespaced or Cluster  scope: Namespaced  names:    # plural name to be used in the URL: /apis///    plural: kubernetesclusters    # singular name to be used as an alias on the CLI and for display    singular: kubernetescluster    # kind is normally the CamelCased singular type. Your resource manifests use this.    kind: KubernetesCluster      # listKind    listKind: KubernetesClusterList    # shortNames allow shorter string to match your resource on the CLI    shortNames:    - ecs#CRD 对象apiVersion: ecs.yun.com/v1kind: KubernetesClustermetadata:  name: test-clusterspec:  clusterType: kubernetes  serviceCIDR: ''  masterList:  - ip: 192.168.1.10  nodeList:  - ip: 192.168.1.11  privateSSHKey: ''  scaleUp: 0  scaleDown: 0

3.API的常用方式

 

(1)配置

 

apiVersion: apiextensions.k8s.io/v1 #API群组和版本kind: CustomResourceDefinition #资源类别metadata:  -name  #资源名称spec:  conversion  #定义不同版本间的格式转换方式    strategy # 不同版本间的自定义资源转换策略,有None和webhook两种取值    webhook <0bject>#如何调用用于进行格式转换的webhook  group #资源所属的API群组  names # 自定义资源的类型,即该CRD创建资源规范时使用的kind    categories <[]string>#资源所属的类别编目,例如"kubectl get all"中的all    kind  #kind名称,必选字段    listKind  #资源列表名称,默认为"`kind`List"    plural   #复数,用于API路径`/apis///. . ./"    shortNames <[string>#该资源的kind的缩写格式    singular #资源kind的单数形式,必须使用全小写字母,默认为小写的kind名称  preserveUnknownFields  #预留的非知名字段,kind等都是知名的预留字段  scope  #作用域,可用值为Cluster和Namespaced  versions <[]object>#版本号定义    additionalPrinterColumns <[]0bject> #需要返回的额外信息    name   #形如vM[alphaN|betaN]格式的版本名称,例如v1或vlalpha2等    schema  #该资源的数据格式(schema)定义,必选字段      openAPIV3Schema  #用于校验字段的schema对象,格式请参考相关手册    served  #是否允许通过RESTful API调度该版本,必选字段    storage  #将自定义资源存储于etcd中时是不是使用该版本    subresources <0bject>#子资源定义      scale <0bject># 启用scale子资源,通过autoscaling/v1.Scale发送负荷      status # 启用status子资源,为资源生成/status端点 

(2)查看文件  

calico的yaml文件

[root@k8s-master plugin]# vim calico.yaml   ...---apiVersion: apiextensions.k8s.io/v1kind: CustomResourceDefinitionmetadata:  name: ippools.crd.projectcalico.orgspec:.........[root@k8s-master plugin]# kubectl get CustomResourceDefinitionNAME                      CREATED ATbgpconfigurations.crd.projectcalico.org               2022-08-25T14:33:24Zbgppeers.crd.projectcalico.org                        2022-08-25T14:33:24Zblockaffinities.crd.projectcalico.org                 2022-08-25T14:33:24Zclusterinformations.crd.projectcalico.org             2022-08-25T14:33:24Zfelixconfigurations.crd.projectcalico.org             2022-08-25T14:33:24Zglobalnetworkpolicies.crd.projectcalico.org           2022-08-25T14:33:24Zglobalnetworksets.crd.projectcalico.org               2022-08-25T14:33:24Zhostendpoints.crd.projectcalico.org                   2022-08-25T14:33:24Zipamblocks.crd.projectcalico.org                      2022-08-25T14:33:24Zipamconfigs.crd.projectcalico.org                     2022-08-25T14:33:24Zipamhandles.crd.projectcalico.org                     2022-08-25T14:33:24Zippools.crd.projectcalico.org                         2022-08-25T14:33:24Zkubecontrollersconfigurations.crd.projectcalico.org   2022-08-25T14:33:24Znetworkpolicies.crd.projectcalico.org                 2022-08-25T14:33:24Znetworksets.crd.projectcalico.org                     2022-08-25T14:33:24Z

(3)自定义CRD模型

[root@k8s-master crd]# cat user-cr-demo.yaml apiVersion: auth.ilinux.io/v1alpha1kind: Usermetadata:  name: admin  namespace: defaultspec:  userID: 1  email: test@test.com  groups:  - superusers  - adminstrators  password: ikubernetes.io[root@k8s-master crd]# kubectl apply -f user-cr-demo.yaml user.auth.ilinux.io/admin created[root@k8s-master crd]# kubectl get UserNAME    AGEadmin   14s[root@k8s-master ~]# kubectl describe User adminName:         adminNamespace:    defaultLabels:       Annotations:  API Version:  auth.ilinux.io/v1alpha1Kind:         UserMetadata:  Creation Timestamp:  2022-09-25T14:51:53Z  Generation:          1  Managed Fields:    API Version:  auth.ilinux.io/v1alpha1    Fields Type:  FieldsV1    fieldsV1:      f:metadata:        f:annotations:          .:          f:kubectl.kubernetes.io/last-applied-configuration:      f:spec:        .:        f:email:        f:groups:        f:password:        f:userID:    Manager:         kubectl-client-side-apply    Operation:       Update    Time:            2022-09-25T14:51:53Z  Resource Version:  2583010  Self Link:         /apis/auth.ilinux.io/v1alpha1/namespaces/default/users/admin  UID:               5af89454-e067-4f30-83b7-cc2ad82e3526Spec:  Email:  test@test.com  Groups:    superusers    adminstrators  Password:  ikubernetes.io  User ID:   1Events:      

 

来源地址:https://blog.csdn.net/weixin_50481708/article/details/127033146

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容
咦!没有更多了?去看看其它编程学习网 内容吧