github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/deploy/polardbx/templates/clusterDefintion.yaml (about)

     1  apiVersion: apps.kubeblocks.io/v1alpha1
     2  kind: ClusterDefinition
     3  metadata:
     4    name: polardbx
     5    labels:
     6      {{- include "polardbx.labels" . | nindent 4 }}
     7  spec:
     8    connectionCredential:
     9      username: "polardbx_root"
    10      password: "$(RANDOM_PASSWD)"
    11      endpoint: "$(SVC_FQDN):$(SVC_PORT_mysql)"
    12      host: "$(SVC_FQDN)"
    13      port: "$(SVC_PORT_mysql)"
    14      metaDbPasswd: "$(RANDOM_PASSWD)"
    15    componentDefs:
    16      - name: gms
    17        scriptSpecs:
    18          - name: polardbx-scripts
    19            templateRef: polardbx-scripts
    20            volumeName: scripts
    21            namespace: {{ .Release.Namespace }}
    22            defaultMode: 0555
    23        workloadType: Consensus
    24        characterType: polardbx
    25        rsmSpec:
    26          roles:
    27            - name: "leader"
    28              accessMode: ReadWrite
    29              isLeader: true
    30              canVote: true
    31            - name: "follower"
    32              accessMode: Readonly
    33              canVote: true
    34          roleProbe:
    35            roleUpdateMechanism: DirectAPIServerEventUpdate
    36            customHandler:
    37              - image: "arey/mysql-client:latest"
    38                command:
    39                  - mysql
    40                  - "-h127.0.0.1"
    41                  - "-P3306"
    42                  - "-uroot"
    43                  - "-N"
    44                  - "-B"
    45                  - "-e"
    46                  - "\"select role from information_schema.alisql_cluster_local\""
    47                  - "|"
    48                  - "xargs echo -n"
    49          memberUpdateStrategy: Serial
    50        service:
    51          ports:
    52            - name: mysql
    53              port: 3306
    54              targetPort: 3306
    55            - name: metrics
    56              port: 9104
    57              targetPort: 9104
    58        monitor:
    59          builtIn: false
    60          exporterConfig:
    61            scrapePort: 9104
    62            scrapePath: "/metrics"
    63        podSpec:
    64          volumes: &xstoreVolumes
    65            - emptyDir: {}
    66              name: xstore-tools
    67            - downwardAPI:
    68                defaultMode: 420
    69                items:
    70                  - fieldRef:
    71                      apiVersion: v1
    72                      fieldPath: metadata.labels
    73                    path: labels
    74                  - fieldRef:
    75                      apiVersion: v1
    76                      fieldPath: metadata.annotations
    77                    path: annotations
    78                  - fieldRef:
    79                      apiVersion: v1
    80                      fieldPath: metadata.annotations['runmode']
    81                    path: runmode
    82                  - fieldRef:
    83                      apiVersion: v1
    84                      fieldPath: metadata.name
    85                    path: name
    86                  - fieldRef:
    87                      apiVersion: v1
    88                      fieldPath: metadata.namespace
    89                    path: namespace
    90              name: podinfo
    91          initContainers: &xsotreInitContainers
    92            - name: tools-updater
    93              command: ["/bin/ash"]
    94              args: ["-c", "./hack/update.sh /target"]
    95              env:
    96                - name: NODE_NAME
    97                  valueFrom:
    98                    fieldRef:
    99                      apiVersion: v1
   100                      fieldPath: spec.nodeName
   101              volumeMounts:
   102                - name: xstore-tools
   103                  mountPath: /target
   104          containers:
   105            - name: engine
   106              command: ["/scripts/xstore-setup.sh"]
   107              lifecycle:
   108                postStart:
   109                  exec:
   110                    command:
   111                      - /scripts/xstore-post-start.sh
   112                      - GMS
   113              env: &xstoreEngineEnv
   114                - name: LANG
   115                  value: en_US.utf8
   116                - name: LC_ALL
   117                  value: en_US.utf8
   118                - name: ENGINE
   119                  value: galaxy
   120                - name: ENGINE_HOME
   121                  value: /opt/galaxy_engine
   122                - name: NODE_ROLE
   123                  value: candidate
   124                - name: NODE_IP
   125                  valueFrom:
   126                    fieldRef:
   127                      apiVersion: v1
   128                      fieldPath: status.hostIP
   129                - name: NODE_NAME
   130                  valueFrom:
   131                    fieldRef:
   132                      apiVersion: v1
   133                      fieldPath: spec.nodeName
   134                - name: POD_IP
   135                  valueFrom:
   136                    fieldRef:
   137                      apiVersion: v1
   138                      fieldPath: status.podIP
   139                - name: POD_NAME
   140                  valueFrom:
   141                    fieldRef:
   142                      apiVersion: v1
   143                      fieldPath: metadata.name
   144                - name: LIMITS_CPU
   145                  valueFrom:
   146                    resourceFieldRef:
   147                      containerName: engine
   148                      resource: limits.cpu
   149                      divisor: "1m"
   150                - name: LIMITS_MEM
   151                  valueFrom:
   152                    resourceFieldRef:
   153                      containerName: engine
   154                      resource: limits.memory
   155                - name: PORT_MYSQL
   156                  value: "3306"
   157                - name: PORT_PAXOS
   158                  value: "11306"
   159                - name: PORT_POLARX
   160                  value: "31600"
   161                - name: KB_SERVICE_USER
   162                  value: "polardbx_root"
   163                - name: KB_SERVICE_PASSWORD
   164                  valueFrom:
   165                    secretKeyRef:
   166                      name: $(CONN_CREDENTIAL_SECRET_NAME)
   167                      key: password
   168                      optional: false
   169                - name: RSM_COMPATIBILITY_MODE
   170                  value: "true"
   171              ports: &xstoreEnginePorts
   172                - name: mysql
   173                  containerPort: 3306
   174                - name: paxos
   175                  containerPort: 11306
   176                - name: polarx
   177                  containerPort: 31600
   178              startupProbe:
   179                failureThreshold: 60
   180                tcpSocket:
   181                  port: mysql
   182                initialDelaySeconds: 5
   183                periodSeconds: 10
   184                successThreshold: 1
   185                timeoutSeconds: 30
   186              volumeMounts: &xstoreEngineVolumeMounts
   187                - name: data
   188                  mountPath: /data/mysql
   189                - name: data-log
   190                  mountPath: /data-log/mysql
   191                - name: xstore-tools
   192                  mountPath: /tools/xstore
   193                - name: scripts
   194                  mountPath: /scripts/xstore-post-start.sh
   195                  subPath: xstore-post-start.sh
   196                - name: scripts
   197                  mountPath: /scripts/xstore-setup.sh
   198                  subPath: xstore-setup.sh
   199                - name: podinfo
   200                  mountPath: /etc/podinfo
   201            - name: exporter
   202              imagePullPolicy: IfNotPresent
   203              ports:
   204                - name: metrics
   205                  containerPort: 9104
   206                  protocol: TCP
   207              env:
   208                - name: "MYSQL_MONITOR_USER"
   209                  valueFrom:
   210                    secretKeyRef:
   211                      name: $(CONN_CREDENTIAL_SECRET_NAME)
   212                      key: username
   213                - name: "MYSQL_MONITOR_PASSWORD"
   214                  valueFrom:
   215                    secretKeyRef:
   216                      name: $(CONN_CREDENTIAL_SECRET_NAME)
   217                      key: password
   218                - name: "DATA_SOURCE_NAME"
   219                  value: "$(MYSQL_MONITOR_USER):$(MYSQL_MONITOR_PASSWORD)@(localhost:3306)/"
   220      - name: dn
   221        scriptSpecs:
   222          - name: polardbx-scripts
   223            templateRef: polardbx-scripts
   224            volumeName: scripts
   225            namespace: {{ .Release.Namespace }}
   226            defaultMode: 0555
   227        workloadType: Consensus
   228        characterType: polardbx
   229        componentDefRef:
   230          - &gmsRef
   231            componentDefName: gms
   232            componentRefEnv:
   233              - name: GMS_SVC_PORT
   234                valueFrom:
   235                  type: FieldRef
   236                  fieldPath: $.componentDef.service.ports[?(@.name == "mysql")].port
   237              - name: GMS_SVC_NAME
   238                valueFrom:
   239                  type: ServiceRef
   240        rsmSpec:
   241          roles:
   242            - name: "leader"
   243              accessMode: ReadWrite
   244              isLeader: true
   245              canVote: true
   246            - name: "follower"
   247              accessMode: Readonly
   248              canVote: true
   249          roleProbe:
   250            roleUpdateMechanism: DirectAPIServerEventUpdate
   251            customHandler:
   252              - image: "arey/mysql-client:latest"
   253                command:
   254                  - mysql
   255                  - "-h127.0.0.1"
   256                  - "-P3306"
   257                  - "-uroot"
   258                  - "-N"
   259                  - "-B"
   260                  - "-e"
   261                  - "\"select role from information_schema.alisql_cluster_local\""
   262                  - "|"
   263                  - "xargs echo -n"
   264          memberUpdateStrategy: Serial
   265        service:
   266          ports:
   267            - name: mysql
   268              port: 3306
   269              targetPort: 3306
   270        monitor:
   271          builtIn: false
   272          exporterConfig:
   273            scrapePort: 9104
   274            scrapePath: "/metrics"
   275        podSpec:
   276          volumes: *xstoreVolumes
   277          initContainers: *xsotreInitContainers
   278          containers:
   279            - name: engine
   280              command: [ "/scripts/xstore-setup.sh" ]
   281              lifecycle:
   282                postStart:
   283                  exec:
   284                    command:
   285                      - /scripts/xstore-post-start.sh
   286                      - DN
   287              env: *xstoreEngineEnv
   288              ports: *xstoreEnginePorts
   289              startupProbe:
   290                failureThreshold: 60
   291                tcpSocket:
   292                  port: mysql
   293                initialDelaySeconds: 20
   294                periodSeconds: 10
   295                successThreshold: 1
   296                timeoutSeconds: 30
   297              volumeMounts: *xstoreEngineVolumeMounts
   298            - name: exporter
   299              imagePullPolicy: IfNotPresent
   300              ports:
   301                - name: metrics
   302                  containerPort: 9104
   303                  protocol: TCP
   304              env:
   305                - name: "MYSQL_MONITOR_USER"
   306                  valueFrom:
   307                    secretKeyRef:
   308                      name: $(CONN_CREDENTIAL_SECRET_NAME)
   309                      key: username
   310                - name: "MYSQL_MONITOR_PASSWORD"
   311                  valueFrom:
   312                    secretKeyRef:
   313                      name: $(CONN_CREDENTIAL_SECRET_NAME)
   314                      key: password
   315                - name: "DATA_SOURCE_NAME"
   316                  value: "$(MYSQL_MONITOR_USER):$(MYSQL_MONITOR_PASSWORD)@(localhost:3306)/"
   317      - name: cn
   318        scriptSpecs:
   319          - name: polardbx-scripts
   320            templateRef: polardbx-scripts
   321            volumeName: scripts
   322            namespace: {{ .Release.Namespace }}
   323            defaultMode: 0555
   324        workloadType: Stateless
   325        characterType: mysql
   326        componentDefRef:
   327          - *gmsRef
   328          - componentDefName: dn
   329            componentRefEnv:
   330              - name: DN_SVC_PORT
   331                valueFrom:
   332                  type: FieldRef
   333                  fieldPath: $.componentDef.service.ports[?(@.name == "mysql")].port
   334              - name: DN_HEADLESS_SVC_NAME
   335                valueFrom:
   336                  type: HeadlessServiceRef
   337                  format: $(POD_FQDN){{ .Values.clusterDomain }}
   338                  joinWith: ","
   339        service:
   340          ports:
   341            - name: mysql
   342              port: 3306
   343              targetPort: 3306
   344            - name: metrics
   345              port: 9104
   346              targetPort: 9104
   347        monitor:
   348          builtIn: false
   349          exporterConfig:
   350            scrapePort: 9104
   351            scrapePath: "/metrics"
   352        podSpec:
   353          shareProcessNamespace: true  # For jmx collector
   354          volumes:
   355            - name: shared
   356              emptyDir: {}
   357          initContainers:
   358            - name: metadb-init
   359              command: ["/scripts/metadb-setup.sh"]
   360              env:
   361              - name: metaDbAddr
   362                value: "$(GMS_SVC_NAME):$(GMS_SVC_PORT)"
   363              - name: metaDbName
   364                value: "polardbx_meta_db"
   365              - name: metaDbUser
   366                valueFrom:
   367                  secretKeyRef:
   368                    name: $(CONN_CREDENTIAL_SECRET_NAME)
   369                    key: username
   370                    optional: false
   371              - name: metaDbNonEncPasswd
   372                valueFrom:
   373                  secretKeyRef:
   374                    name: $(CONN_CREDENTIAL_SECRET_NAME)
   375                    key: password
   376                    optional: false
   377              - name: dnPasswordKey
   378                value: "$(metaDbNonEncPasswd)$(metaDbNonEncPasswd)"
   379              - name: switchCloud
   380                value: aliyun
   381              - name: metaDbConn
   382                value: "mysql -h$(GMS_SVC_NAME) -P3306 -u$(metaDbUser) -p$(metaDbNonEncPasswd) -D$(metaDbName)"
   383              volumeMounts:
   384                - name: scripts
   385                  mountPath: /scripts/metadb-setup.sh
   386                  subPath: metadb-setup.sh
   387                - name: scripts
   388                  mountPath: /scripts/gms-init.sql
   389                  subPath: gms-init.sql
   390                - name: scripts
   391                  mountPath: /scripts/gms-metadata.tpl
   392                  subPath: gms-metadata.tpl
   393                - name: shared
   394                  mountPath: /shared
   395            - name: init
   396              command: [ "sh" ]
   397              args: [ "-c", 'source /shared/env.sh && /polardbx-init' ]
   398              env: &cnEngineEnv
   399                - name: POD_ID
   400                  valueFrom:
   401                    fieldRef:
   402                      apiVersion: v1
   403                      fieldPath: metadata.name
   404                - name: POD_IP
   405                  valueFrom:
   406                    fieldRef:
   407                      apiVersion: v1
   408                      fieldPath: status.podIP
   409                - name: HOST_IP
   410                  valueFrom:
   411                    fieldRef:
   412                      apiVersion: v1
   413                      fieldPath: status.hostIP
   414                - name: NODE_NAME
   415                  valueFrom:
   416                    fieldRef:
   417                      apiVersion: v1
   418                      fieldPath: spec.nodeName
   419                - name: metaDbAddr
   420                  value: "$(GMS_SVC_NAME):$(GMS_SVC_PORT)"
   421                - name: metaDbName
   422                  value: "polardbx_meta_db"
   423                - name: metaDbUser
   424                  valueFrom:
   425                    secretKeyRef:
   426                      name: $(CONN_CREDENTIAL_SECRET_NAME)
   427                      key: username
   428                      optional: false
   429                - name: metaDbNonEncPasswd
   430                  valueFrom:
   431                    secretKeyRef:
   432                      name: $(CONN_CREDENTIAL_SECRET_NAME)
   433                      key: password
   434                      optional: false
   435                - name: switchCloud
   436                  value: aliyun
   437                - name: metaDbConn
   438                  value: "mysql -h$(GMS_SVC_NAME) -P3306 -u$(metaDbUser) -p$(metaDbPasswd) -D$(metaDbName)"
   439                - name: dnPasswordKey
   440                  value: "$(metaDbNonEncPasswd)$(metaDbNonEncPasswd)"
   441                - name: metaDbXprotoPort
   442                  value: "0"
   443                - name: storageDbXprotoPort
   444                  value: "0"
   445                - name: instanceId
   446                  value: "$(KB_CLUSTER_NAME)"
   447                - name: instanceType
   448                  value: "0"
   449                - name: serverPort
   450                  value: "3306"
   451                - name: mgrPort
   452                  value: "3406"
   453                - name: mppPort
   454                  value: "3506"
   455                - name: htapPort
   456                  value: "3606"
   457                - name: logPort
   458                  value: "8507"
   459                - name: ins_id
   460                  value: dummy
   461                - name: polarx_dummy_log_port
   462                  value: "$(logPort)"
   463                - name: polarx_dummy_ssh_port
   464                  value: "-1"
   465                - name: cpuCore
   466                  valueFrom:
   467                    resourceFieldRef:
   468                      containerName: engine
   469                      resource: limits.cpu
   470                - name: memSize
   471                  valueFrom:
   472                    resourceFieldRef:
   473                      containerName: engine
   474                      resource: limits.memory
   475                - name: cpu_cores
   476                  valueFrom:
   477                    resourceFieldRef:
   478                      containerName: engine
   479                      resource: limits.cpu
   480                - name: memory
   481                  valueFrom:
   482                    resourceFieldRef:
   483                      containerName: engine
   484                      resource: limits.memory
   485                - name: galaxyXProtocol
   486                  value: "1"
   487                - name: processorHandler
   488                  value: "1"
   489                - name: processors
   490                  value: "1"
   491                - name: serverExecutor
   492                  value: "1024"
   493                - name: TDDL_OPTS
   494                  value: -Dpod.id=$(POD_ID) -XX:+UnlockExperimentalVMOptions -XX:+UseWisp2 -Dio.grpc.netty.shaded.io.netty.transport.noNative=true
   495                    -Dio.netty.transport.noNative=true -DinstanceVersion=8.0.3
   496              volumeMounts:
   497                - name: shared
   498                  mountPath: /shared
   499          containers:
   500            - name: engine
   501              command:
   502                - /bin/bash
   503                - -c
   504              args:
   505                - "source /shared/env.sh && /home/admin/entrypoint.sh 20"
   506              env: *cnEngineEnv
   507              ports:
   508                - containerPort: 3306
   509                  name: mysql
   510                  protocol: TCP
   511                - containerPort: 3406
   512                  name: mgr
   513                  protocol: TCP
   514                - containerPort: 3506
   515                  name: mpp
   516                  protocol: TCP
   517                - containerPort: 3606
   518                  name: htap
   519                  protocol: TCP
   520                - containerPort: 8507
   521                  name: log
   522                  protocol: TCP
   523              startupProbe:
   524                failureThreshold: 60
   525                tcpSocket:
   526                  port: mysql
   527                initialDelaySeconds: 5
   528                periodSeconds: 10
   529                successThreshold: 1
   530                timeoutSeconds: 30
   531              livenessProbe:
   532                failureThreshold: 60
   533                tcpSocket:
   534                  port: mysql
   535                initialDelaySeconds: 5
   536                periodSeconds: 10
   537                successThreshold: 1
   538                timeoutSeconds: 30
   539              readinessProbe:
   540                failureThreshold: 60
   541                tcpSocket:
   542                  port: mysql
   543                initialDelaySeconds: 5
   544                periodSeconds: 10
   545                successThreshold: 1
   546                timeoutSeconds: 30
   547              volumeMounts:
   548                - name: tmp
   549                  mountPath: /tmp
   550                - name: polardbx-log
   551                  mountPath: /home/admin/drds-server/logs
   552                - name: polardbx-spill
   553                  mountPath: /home/admin/drds-server/spill
   554                - name: shared
   555                  mountPath: /shared
   556            - name: exporter
   557              args:
   558               - -collectors.process
   559               - -collectors.jvm
   560               - -target.type=CN
   561               - -target.port=3406
   562               - -web.listen-addr=:9104
   563               - -web.metrics-path=/metrics
   564              env:
   565                - name: GOMAXPROCS
   566                  value: "1"
   567              ports:
   568                - containerPort: 9104
   569                  name: metrics
   570                  protocol: TCP
   571              volumeMounts:
   572                - name: tmp
   573                  mountPath: /tmp
   574      - name: cdc
   575        scriptSpecs:
   576          - name: polardbx-scripts
   577            templateRef: polardbx-scripts
   578            volumeName: scripts
   579            namespace: {{ .Release.Namespace }}
   580            defaultMode: 0555
   581        workloadType: Stateless
   582        characterType: mysql
   583        componentDefRef:
   584          - *gmsRef
   585          - componentDefName: cn
   586            componentRefEnv:
   587              - name: CN_SVC_PORT
   588                valueFrom:
   589                  type: FieldRef
   590                  fieldPath: $.componentDef.service.ports[?(@.name == "mysql")].port
   591              - name: CN_SVC_NAME
   592                valueFrom:
   593                  type: ServiceRef
   594        service:
   595          ports:
   596            - name: mysql
   597              port: 3306
   598              targetPort: 3306
   599            - name: metrics
   600              port: 9104
   601              targetPort: 9104
   602        monitor:
   603          builtIn: false
   604          exporterConfig:
   605            scrapePort: 9104
   606            scrapePath: "/metrics"
   607        podSpec:
   608          initContainers:
   609            - name: wait-cn-ready
   610              command:
   611                - bin/sh
   612                - -c
   613                - |
   614                  until mysql -h$CN_SVC_NAME -P$CN_SVC_PORT -u$polarx_username -p$polarx_password -e 'select 1'; do
   615                    sleep 1;
   616                    echo "cn is not ready"
   617                  done
   618              env:
   619                - name: polarx_username
   620                  valueFrom:
   621                    secretKeyRef:
   622                      name: $(CONN_CREDENTIAL_SECRET_NAME)
   623                      key: username
   624                      optional: false
   625                - name: polarx_password
   626                  valueFrom:
   627                    secretKeyRef:
   628                      name: $(CONN_CREDENTIAL_SECRET_NAME)
   629                      key: password
   630                      optional: false
   631          containers:
   632            - name: engine
   633              env:
   634                - name: switchCloud
   635                  value: aliyun
   636                - name: cluster_id
   637                  value: "$(KB_CLUSTER_NAME)"
   638                - name: ins_id
   639                  valueFrom:
   640                    fieldRef:
   641                      apiVersion: v1
   642                      fieldPath: metadata.name
   643                - name: daemonPort
   644                  value: "3300"
   645                - name: common_ports
   646                  value: '{"cdc1_port":"3009","cdc3_port":"3011","cdc2_port":"3010","cdc6_port":"3014","cdc5_port":"3013","cdc4_port":"3012"}'
   647                - name: metaDb_url
   648                  value: "jdbc:mysql://$(GMS_SVC_NAME):$(GMS_SVC_PORT)/polardbx_meta_db?useSSL=false"
   649                - name: polarx_url
   650                  value: "jdbc:mysql://$(CN_SVC_NAME):$(CN_SVC_PORT)/__cdc__?useSSL=false"
   651                - name: metaDb_username
   652                  valueFrom:
   653                    secretKeyRef:
   654                      name: $(CONN_CREDENTIAL_SECRET_NAME)
   655                      key: username
   656                      optional: false
   657                - name: metaDb_password
   658                  valueFrom:
   659                    secretKeyRef:
   660                      name: $(CONN_CREDENTIAL_SECRET_NAME)
   661                      key: password
   662                      optional: false
   663                - name: polarx_username
   664                  valueFrom:
   665                    secretKeyRef:
   666                      name: $(CONN_CREDENTIAL_SECRET_NAME)
   667                      key: username
   668                      optional: false
   669                - name: polarx_password
   670                  valueFrom:
   671                    secretKeyRef:
   672                      name: $(CONN_CREDENTIAL_SECRET_NAME)
   673                      key: password
   674                      optional: false
   675                - name: metaDbNonEncPasswd
   676                  valueFrom:
   677                    secretKeyRef:
   678                      name: $(CONN_CREDENTIAL_SECRET_NAME)
   679                      key: password
   680                      optional: false
   681                - name: dnPasswordKey
   682                  value: "$(metaDbNonEncPasswd)$(metaDbNonEncPasswd)"
   683                - name: cpu_cores
   684                  valueFrom:
   685                    resourceFieldRef:
   686                      containerName: engine
   687                      resource: limits.cpu
   688                - name: mem_size
   689                  valueFrom:
   690                    resourceFieldRef:
   691                      containerName: engine
   692                      resource: limits.memory
   693                      divisor: "1M"
   694                - name: disk_size
   695                  value: "10240"
   696                - name: disk_quota
   697                  value: "10240"
   698              volumeMounts:
   699                - name: binlog
   700                  mountPath: /home/admin/binlog
   701                - name: log
   702                  mountPath: /home/admin/logs
   703            - name: exporter
   704              args:
   705                - -web.listen-addr=:9104
   706                - -web.metrics-path=/metrics
   707                - -target.port=3007
   708                - -target.type=CDC
   709              env:
   710                - name: GOMAXPROCS
   711                  value: "1"
   712              ports:
   713                - containerPort: 9104
   714                  name: metrics
   715                  protocol: TCP
   716