5
博客oceanbase on k8s 部署篇

oceanbase on k8s 部署篇-c7电子娱乐

一、ob-operator简介


ob-operator是满足 kubernetes operator 扩展范式的自动化工具,可以极大简化在 kubernetes 上部署和管理 oceanbase 集群及相关资源的过程。


ob-operator 支持 oceanbase 集群的管理、租户管理、备份恢复、故障恢复等功能,具体如下:

  • 集群管理:集群自举、调整集群拓扑、支持 k8s 拓扑配置、扩缩容、集群升级、修改参数
  • 租户管理:创建租户、调整租户拓扑、管理资源单元、修改用户密码
  • 备份恢复:向 oss 或 nfs 目的地周期性备份数据、从 oss 或 nfs 中恢复数据
  • 物理备库:从备份中恢复出备租户、创建空备租户、备租户升主、主备切换
  • 故障恢复:单节点故障恢复,ip 保持情况下的集群故障恢复
  • dashboard(gui):基于 ob-operator 的图形化 oceanbase 集群管理工具

1732868044

二、部署oceanbase前置条件


在开始之前,请确保您已满足以下要求:

  • kubernetes版本:>1.18版本
  • oceanbase版本:根据需求选择4.2.5/4.3.3
  • kubernetes 资源:基于local-path-provisioner 来管理 pvc,并且nodes上创建目录生成的待绑定的local pv。
  • ob-operator 依赖 cert-manager,请确保您已安装 cert-manager。cert-manager 的安装方法请参考对应的 安装文档。


kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.16.1/cert-manager.yaml
namespace/cert-manager created
customresourcedefinition.apiextensions.k8s.io/certificaterequests.cert-manager.io created
.................
customresourcedefinition.apiextensions.k8s.io/orders.acme.cert-manager.io created
serviceaccount/cert-manager-cainjector created
serviceaccount/cert-manager created
serviceaccount/cert-manager-webhook created
clusterrole.rbac.authorization.k8s.io/cert-manager-cainjector created
..................
rolebinding.rbac.authorization.k8s.io/cert-manager-webhook:dynamic-serving created
service/cert-manager-cainjector created
service/cert-manager created
service/cert-manager-webhook created
deployment.apps/cert-manager-cainjector created
deployment.apps/cert-manager created
deployment.apps/cert-manager-webhook created
mutatingwebhookconfiguration.admissionregistration.k8s.io/cert-manager-webhook created
validatingwebhookconfiguration.admissionregistration.k8s.io/cert-manager-webhook created

三、部署 ob-operator


下面以部署version=2.2.0版本的ob-operator,operator最新应该已经到2.3.0版本(建议使用该版本)

    /opt/ob-operator# helm repo add ob-operator https://oceanbase.github.io/ob-operator/
    warning: kubernetes configuration file is group-readable. this is insecure. location: /root/.kube/config
    warning: kubernetes configuration file is world-readable. this is insecure. location: /root/.kube/config
    "ob-operator" has been added to your repositories
    /opt/ob-operator# helm install ob-operator ob-operator/ob-operator --namespace=oceanbase-system --create-namespace --version=2.2.0
    warning: kubernetes configuration file is group-readable. this is insecure. location: /root/.kube/config
    warning: kubernetes configuration file is world-readable. this is insecure. location: /root/.kube/config
    name: ob-operator
    last deployed: mon oct 28 10:53:12 2024
    namespace: oceanbase-system
    status: deployed
    revision: 1
    test suite: none

    部署过程依赖镜像,需要提前下载到自己公司的镜像中心,否则报错镜像拉取失败报错:

      events:
        type     reason   age                   from     message
          ----     ------   ----                  ----     -------
          warning  failed   31m (x60 over 165m)   kubelet  (combined from similar events): failed to pull image "oceanbase/ob-operator:2.2.0": rpc error: code = unknown desc = error response from daemon: get https://registry-1.docker.io/v2/: dial tcp 199.16.158.190:443: connect: connection timed out
          normal   pulling  26m (x33 over 171m)   kubelet  pulling image "oceanbase/ob-operator:2.2.0"
          normal   backoff  91s (x728 over 171m)  kubelet  back-off pulling image "oceanbase/ob-operator:2.2.0"

      查看ob-operator安装是否ok(ready:2/2且status:running)

      /opt/ob-operator# kubectl get pods -n oceanbase-system
      name                                            ready   status    restarts   age
      oceanbase-controller-manager-85f4b9d58c-cl9rq   2/2     running   0          3m27s

      四、部署 oceanbase 集群

      按照以下步骤在 kubernetes 集群上部署 oceanbase 集群:

      (1)新建namespace:kubectl create ns oceanbase-test

      (2)创建 secrets 在创建 oceanbase 集群之前,您必须创建特定用户所需的 secrets。创建的目的就是ob集群初始化密码,使用以下命令创建 secrets:

        kubectl create secret generic ob-root-password --from-literal=password='yourpassword' -n oceanbase-test
        kubectl create secret generic ob-proxyro-password --from-literal=password='yourpassword' -n oceanbase-test

        ps:注意在创建ob-proxyro-password时建议不要带特殊字符,否则可能出现部署obproxy时因权限链接不上后端observer的问题

        (3)编辑集群配置文件oceanbase-test.yaml

        apiversion: oceanbase.oceanbase.com/v1alpha1
        kind: obcluster
        metadata:
          name: obcluste-test    #ob的kubectl get obcluster名
          namespace: oceanbase-test
        spec:
          clustername: obcluster-test   #ob集群名
          clusterid: 1
          usersecrets:
            root: ob-root-password
            proxyro: ob-proxyro-password
          topology:
            - zone: zone1    #可以自定义zone名称
              replica: 1     #一个zone的observer数量
              # nodeselector:
              #   k1: v1
              # affinity:         亲和性设置,生产环境必备
              #   nodeaffinity:
              #   podaffinity:
              #   podantiaffinity:
              # tolerations:      污点设定,生产环境必备
              #   - key: "obtopo"
              #     value: "zone"
              #     effect: "noschedule"
            - zone: zone2
              replica: 1
              # nodeselector:
              #   k1: v1
              # affinity:
              #   nodeaffinity:
              #   podaffinity:
              #   podantiaffinity:
              # tolerations:
              #   - key: "obtopo"
              #     value: "zone"
              #     effect: "noschedule"
            - zone: zone3
              replica: 1
              # nodeselector:
              #   k1: v1
              # affinity:
              #   nodeaffinity:
              #   podaffinity:
              #   podantiaffinity:
              # tolerations:
              #   - key: "obtopo"
              #     value: "zone"
              #     effect: "noschedule"
          observer:
            image: oceanbase/oceanbase-cloud-native:4.3.3.0-100000142024101215
            resource:
              cpu: 12
              memory: 40gi
            storage:
              datastorage:
                storageclass: local-ssd-storage
                size: 500gi
              redologstorage:
                storageclass: local-ssd-storage
                size: 150gi
              logstorage:
                storageclass: local-ssd-storage
                size: 20gi
          monitor:
            image: oceanbase/obagent:4.2.1-100000092023101717
            resource:
              cpu: 8
              memory: 10gi

        (4)应用yaml,需要等待oceanbase集群创建,大概2分钟

          kubectl apply -f oceanbase-test.yaml -n oceanbase-test

          注:如果需要镜像问题记得下载镜像到自己公司仓库

          oceanbase/oceanbase-cloud-native:4.3.3.0-100000142024101215
          oceanbase/obagent:4.2.1-100000092023101717

          (5)查看ob集群

          /opt/ob-operator# kubectl get obcluster -n oceanbase-test1
          name        status    age
          obcluster   running   3d2h
          /opt/ob-operator# kubectl get pods -n oceanbase-test1 -o wide
          name                                  ready   status    restarts   age    ip               node      nominated node   readiness gates
          obcluster-test-1-zone1-6a036c0d84bf   2/2     running   0          3d2h   10.xxx.xxx.143   db02                 
          obcluster-test-1-zone2-384f9bf55992   2/2     running   0          3d2h   10.xxx.xxx.142   db08                 
          obcluster-test-1-zone3-6f375db39867   2/2     running   0          3d2h   10.xxx.xxx.242   db07                 
          obproxy-test-6479ccb497-6r7xv         1/1     running   0          2d6h   10.xxx.xxx.182    kube610              
          obproxy-test-6479ccb497-bnj48         1/1     running   0          2d6h   10.xxx.xxx.227    kube600              

          (6)访问集群,因为没有部署obproxy,所以先直通过ob pods ip访问。

          /opt/ob-operator# mysql -h10.xxx.xxx.143 -p2881 -uroot@sys -p oceanbase -a -c
          enter password:
          welcome to the mysql monitor.  commands end with ; or \g.
          your mysql connection id is 3221489701
          server version: 5.7.25 oceanbase_ce 4.3.3.0 (r100000142024101215-0723f9774e5f77a1253149261ba75a94414625d0) (built oct 12 2024 16:04:08)
          c7电子娱乐 copyright (c) 2009-2023 percona llc and/or its affiliates
          c7电子娱乐 copyright (c) 2000, 2023, oracle and/or its affiliates.
          oracle is a registered trademark of oracle corporation and/or its
          affiliates. other names may be trademarks of their respective
          owners.
          type 'help;' or '\h' for help. type '\c' to clear the current input statement.mysql> show databases;
           -------------------- 
          | database           |
           -------------------- 
          | information_schema |
          | lbacsys            |
          | mysql              |
          | oceanbase          |
          | oraauditor         |
          | sys                |
          | sys_external_tbs   |
          | test               |
           -------------------- 
          8 rows in set (0.01 sec)
          mysql> exit
          bye

          五、总结

          ob-operator 是基于 kubernetes operator 框架构建的工具,实现了声明式管理、自动化调谐和统一管理等优势,它提供简单可靠的方式实现 oceanbase 集群的容器化部署,简化oceanbase集群运维。

          如果想更深入的了解ob-operator,可以参考以下资料

          ob-operator文档:https://www.oceanbase.com/docs/community-ob-operator-doc-1000000000659335

          ob-operator github文档:https://oceanbase.github.io/ob-operator/

          集群yaml的详细配置:https://www.oceanbase.com/docs/community-ob-operator-doc-1000000000659352


          点赞5
          收藏

          声明

          本网站下的“博客”等板块为技术爱好者提供分享、交流的平台。发布者发布的任何内容、信息等,并不反映或代表本网站的观点、立场或政策。本网站不对其任何内容和信息的错误以及由此产生的损失或损坏承担任何责任。

          尊重知识产权是本网站的基本原则之一,如您在使用本网站过程中发现本网站中存在侵犯您或其他第三人合法知识产权的情况,请您即可将侵权材料及初步证据提交至下述邮箱:obcompliance@oceanbase.com 。本网站将在收到材料后尽快进行审核及处理。

          已发布 1 篇博文

          网站地图