【从入门到放弃-Kubernetes】Kubernetes进阶-CustomResources-阿里云开发者社区

开发者社区> aloof_> 正文

【从入门到放弃-Kubernetes】Kubernetes进阶-CustomResources

简介:
+关注继续查看

前言

上文【从入门到放弃-Kubernetes】Kubernetes进阶-pod水平自动伸缩(hpa),我们学习了如何对标准资源Deployment、replication controller、replica set等内置资源进行水平自动伸缩。

实际在生产中(一般较大的公司)不太会用到这些内置标准资源,都会使用CustomResources自定义资源进行灵活的扩展,来满足复杂多变的业务需求。

CustomResources是Kubernetes API的扩展,可以通过动态注册,控制资源在集群中的运行状态。

安装CustomResources后,就可以和内置资源如pod一样,通过kubectl创建和访问对象。

下面我们将CustomResources简称为CR。

定义CRD

添加CR通常有两种方式,通过CRD(CustomResourceDefinitions)的方式和使用聚合API的方式。

CRD的方式使用简单,聚合API的方式更灵活。

选型建议如下:

更详细的对比可以在官方文档中查看详情。

这里我们使用CRD的方式创建,有两种版本的CRD定义方式分别如下

apiextensions.k8s.io/v1

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  # name must match the spec fields below, and be in the form: <plural>.<group>
  name: crontabs.stable.example.com
spec:
  # group name to use for REST API: /apis/<group>/<version>
  group: stable.example.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
      schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              properties:
                cronSpec:
                  type: string
                image:
                  type: string
                replicas:
                  type: integer
  # either Namespaced or Cluster
  scope: Namespaced
  names:
    # plural name to be used in the URL: /apis/<group>/<version>/<plural>
    plural: crontabs
    # singular name to be used as an alias on the CLI and for display
    singular: crontab
    # kind is normally the CamelCased singular type. Your resource manifests use this.
    kind: CronTab
    # shortNames allow shorter string to match your resource on the CLI
    shortNames:
    - ct

apiextensions.k8s.io/v1beta1

# Deprecated in v1.16 in favor of apiextensions.k8s.io/v1
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  # name must match the spec fields below, and be in the form: <plural>.<group>
  name: crontabs.stable.example.com
spec:
  # group name to use for REST API: /apis/<group>/<version>
  group: stable.example.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/<group>/<version>/<plural>
    plural: crontabs
    # singular name to be used as an alias on the CLI and for display
    singular: crontab
    # kind is normally the CamelCased singular type. Your resource manifests use this.
    kind: CronTab
    # shortNames allow shorter string to match your resource on the CLI
    shortNames:
    - ct
  preserveUnknownFields: false
  validation:
    openAPIV3Schema:
      type: object
      properties:
        spec:
          type: object
          properties:
            cronSpec:
              type: string
            image:
              type: string
            replicas:
              type: integer

创建并验证

# 使用上面任意一版本的yaml文件
kubectl apply -f crd.yaml

# 开启api server http代理
kubectl proxy --port=8080 &

# 访问/apis/stable.example.com/v1/namespaces/*/crontabs查看
curl http://127.0.0.1:8080/apis/stable.example.com/v1/namespaces/*/crontabs

# 查看crd
kubectl get crd

可以看到类似以下输出

创建CR对象

apiVersion: "stable.example.com/v1"
kind: CronTab
metadata:
  name: my-new-cron-object
spec:
  cronSpec: "* * * * */5"
  image: my-awesome-cron-image
# 创建CR对象
kubectl apply -f cr-object.yaml

# 查看crontab资源
kubectl get crontab

# 查看crontab yaml文件
kubectl get crontab -o yaml

删除CRD

# 删除CRD
kubectl delete -f crd.yaml

# 再次查看crontab资源,会看到Error from server (NotFound): Unable to list "stable.example.com/v1, Resource=crontabs": the server could not find the requested resource (get crontabs.stable.example.com)
kubectl get crontabs

总结

本文学习了如何通过CRD来创建CR,实际上通常还需要通过Custom controllers监听资源的变化,在周期内的各个阶段做相应的处理。
接下里会开始学习Custom controllers的开发。

更多文章

见我的博客:https://nc2era.com

written by AloofJr,转载请注明出处

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
带你读《Kubernetes进阶实战》之二:Kubernetes快速入门
本书几乎涵盖了应用Kubernetes系统的所有主流知识点,它甚至可以作为计划考取CKA认证的读者的配套参考图书。
1368 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9494 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13177 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
11507 0
一文get数据库进阶排坑实用技能 | 开发者社区精选文章合集(八)
引发死锁的原因是什么?如何避免?如何将关联子查询改写为普通语义的sql查询?.....这些你都会吗?速度pick这份实用指南,数据库进阶必备心法!
73 0
区块链Hyperledger Fabric在阿里云容器服务Kubernetes中的进阶使用技巧(一)
区块链Hyperledger Fabric在Kubernetes集群中的进阶使用经验、技巧和最佳实践,涵盖了系统设计、资源规划、服务使用、错误诊断、运营维护等方面,适用于区块链Hyperledger Fabric应用和方案的开发测试、以及生产部署等用途。这些内容将以系列文章的形式陆续发布并更新
6866 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
6890 0
+关注
aloof_
前阿里巴巴集团UC事业群服务端研发,现蚂蚁金服技术风险部服务端研发。擅长语言Java、PHP,对MySQL兴趣浓厚,热爱技术,热爱分享
38
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载