美文网首页Openshift:可靠的Kubernetes发行版
OpenShift 通过Operator SDK制作Operat

OpenShift 通过Operator SDK制作Operat

作者: 潘晓华Michael | 来源:发表于2019-08-12 17:24 被阅读5次
    Operator 与 Openshift

    制作Operator过程

    1. 下载安装operator-sdk
    2. 创建github仓库
    3. operator-sdk创建应用
    $ operator-sdk new memcached-go-operator --repo=github.com/example-inc/memcached-operator
    $ # or
    $ operator-sdk new memcached-ansible-operator --api-version=fcloudy.com/v1alpha1 --kind=Memcached --type=ansible
    $ # or
    $ operator-sdk new memcached-helm-operator --api-version=fcloudy.com/v1alpha1 --kind=Memcached --type=helm
    

    operator-sdk new默认使用的type为go,必须在$GOPATH目录下创建项目。type为go时项目的目录结构如下:项目的目录结构

    type的可选值还可以为:ansible与helm,如果是这两个,则还可以带参数--kind来定义CRD
    示例:
    GO
    Ansible
    Helm
    更多实例:etcd,memcached,vault,bitcoin-sv

    1. 创建ansible role
    • 创建应用时使用变量{{ meta.name }}指的是CR中metadata的变量,而{{ size }}指的是CR中spec的变量。
    • 如果只有一个role的话,在watches.yaml中指定role即可,例如role: /opt/ansible/roles/memcached
    • 如果有多个role的话,可以添加playbook.yaml,并指定它为启动脚本,例如playbook: /opt/ansible/playbook.yaml
    1. 构建operator镜像
    $ operator-sdk build docker.io/xhuaustc/memcached-operator:v0.0.1
    $ docker push docker.io/xhuaustc/memcached-operator:v0.0.1
    
    1. 使用operator创建应用
    $ # 1. 导入crd文件
    $ create -f deploy/crds/cache_v1alpha1_memcached_crd.yaml
    $ # 2. 替换deploy/operator.yaml文件中的变量REPLACE_IMAGE,pull_policy
    $ sed -i "" 's|{{ REPLACE_IMAGE }}|docker.io/xhuaustc/memcached-operator:v0.0.1|g' deploy/operator.yaml
    $ sed -i "" 's|{{ pull_policy\|default('\''Always'\'') }}|Always|g' deploy/operator.yaml
    $ # 3. 创建相关资源
    $ oc create -f deploy
    
    1. 创建CR资源
    $ oc create -f deploy/crds/cache_v1alpha1_memcached_cr.yaml
    

    监控全局Namespace

    默认情况下,Operator只能监听当前project下创建的应用。如果要监听所有的namespace,需将WATCH_NAMESPACE值设置为"",同时将role更换为clusterrole,rolebinding更新为clusterrolebinding。以下为具体实例。

    1. 将deploy/operator.yaml中的WATCH_NAMESPACE值设置为""
    apiVersion: apps/v1
    kind: Deployment
    ...
    spec:
      ...
      template:
        ...
        spec:
          ...
          serviceAccountName: memcached-operator
          containers:
          - name: memcached-operator
            ...
            env:
              - name: WATCH_NAMESPACE
              value: ""
    
    1. 将deploy/role.yaml更改为ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: memcached-operator
    ...
    
    1. 将deploy/role_binding.yaml更改为ClusterRoleBinding
    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: memcached-operator
    subjects:
    - kind: ServiceAccount
      name: memcached-operator
      namespace: <operator-namespace>
    roleRef:
      kind: ClusterRole
      name: memcached-operator
      apiGroup: rbac.authorization.k8s.io
    

    总结

    operator会不断监听创建的CRD资源配置的变化,更新资源的状态,保证资源处于需要的状态下。目前Operator只支持openshift 3.11及以上版本
    通过使用operator-sdk可以非常方便地创建自己的operator。它不仅可以轻易将通用参数提取出来,同时支持编码的方式,让资源的定义更加灵活,而且可以通过operator的设置资源的调用顺序及依赖。

    相关文章

      网友评论

        本文标题:OpenShift 通过Operator SDK制作Operat

        本文链接:https://www.haomeiwen.com/subject/lbkadctx.html