伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

kubernetes生产实践之mysql

来源:本站原创 浏览:90次 时间:2022-08-10
kubernetes生产实践之mysql

scofield 菜鸟运维杂谈

简介

kubedb mysql 生命周期及特性

Supported MySQL FeaturesFeatures    AvailabilityClustering    ✓Persistent Volume    ✓Instant Backup    ✓Scheduled Backup    ✓Initialize using Snapshot    ✓Initialize using Script (*.sql, *sql.gz and/or *.sh)    ✓Custom Configuration    ✓Using Custom docker image    ✓Builtin Prometheus Discovery    ✓Using Prometheus operator    ✓
查看kubedb支持的mysql版本
[root@qd01-stop-k8s-master001 mysql]# kubectl get mysqlversionsNAME        VERSION   DB_IMAGE                 DEPRECATED   AGE5.7.25-v1   5.7.25    kubedb/mysql:5.7.25-v1                17h5.7.29      5.7.29    kubedb/mysql:5.7.29                   17h5.7.31      5.7.31    kubedb/mysql:5.7.31                   17h8.0.14-v1   8.0.14    kubedb/mysql:8.0.14-v1                17h8.0.20      8.0.20    kubedb/mysql:8.0.20                   17h8.0.21      8.0.21    kubedb/mysql:8.0.21                   17h8.0.3-v1    8.0.3     kubedb/mysql:8.0.3-v1                 17h
编写配置文件

mode: GroupReplication

group.name可以使用这个网站生成:https://www.uuidgenerator.net/version4

apiVersion: kubedb.com/v1alpha2kind: MySQLmetadata:  name: mysql-group-test  namespace: opspec:  version: "8.0.21"  replicas: 3  topology:    mode: GroupReplication    group:      name: "d7f38430-d9ee-464b-af43-da9efa26fe02"      baseServerID: 100  storageType: Durable  storage:    storageClassName: "rbd"    accessModes:      - ReadWriteOnce    resources:      requests:        storage: 50Gi  terminationPolicy: Halt
安装Mysql
[root@qd01-stop-k8s-master001 mysql]# kubectl apply -f mysql-cluster-install.yamlmysql.kubedb.com/mysql-group-test created[root@qd01-stop-k8s-master001 mysql]# kubectl get po,ep,svc -n opNAME                     READY   STATUS    RESTARTS   AGEpod/mysql-group-test-0   2/2     Running   0          14mpod/mysql-group-test-1   2/2     Running   0          9m41spod/mysql-group-test-2   2/2     Running   0          4m19sNAME                                 ENDPOINTS                                                     AGEendpoints/mysql-group-test           100.64.147.157:3306                                           14mendpoints/mysql-group-test-pods      100.64.122.198:3306,100.64.147.157:3306,100.98.174.219:3306   14mendpoints/mysql-group-test-standby   100.98.174.219:3306                                           14mNAME                               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGEservice/mysql-group-test           ClusterIP   10.108.25.179   <none>        3306/TCP   14mservice/mysql-group-test-pods      ClusterIP   None            <none>        3306/TCP   14mservice/mysql-group-test-standby   ClusterIP   10.101.164.49   <none>        3306/TCP   14m

可以使用kubectl describe查看mysql集群详细信息

[root@qd01-stop-k8s-master001 mysql]# kubectl describe mysql mysql-group-test -n opName:         mysql-group-testNamespace:    opLabels:       <none>Annotations:  <none>API Version:  kubedb.com/v1alpha2Kind:         MySQLMetadata:  Creation Timestamp:  2021-03-11T02:03:38Z  Finalizers:    kubedb.com  Generation:  2  Managed Fields:    API Version:  kubedb.com/v1alpha2    Fields Type:  FieldsV1    fieldsV1:      f:metadata:        f:annotations:          .:          f:kubectl.kubernetes.io/last-applied-configuration:      f:spec:        .:        f:replicas:        f:storage:          .:          f:accessModes:          f:resources:            .:            f:requests:              .:              f:storage:          f:storageClassName:        f:storageType:        f:terminationPolicy:        f:topology:          .:          f:group:            .:            f:baseServerID:            f:name:          f:mode:        f:version:    Manager:      kubectl-client-side-apply    Operation:    Update    Time:         2021-03-11T02:03:38Z    API Version:  kubedb.com/v1alpha2    Fields Type:  FieldsV1    fieldsV1:      f:metadata:        f:finalizers:      f:spec:        f:authSecret:          .:          f:name:      f:status:        .:        f:conditions:        f:observedGeneration:        f:phase:    Manager:         operator    Operation:       Update    Time:            2021-03-11T02:03:39Z  Resource Version:  7283091  UID:               38d0b2c8-2d56-4fcf-ba3b-dff211d8a63dSpec:  Auth Secret:    Name:  mysql-group-test-auth  Pod Template:    Controller:    Metadata:    Spec:      Affinity:        Pod Anti Affinity:          Preferred During Scheduling Ignored During Execution:            Pod Affinity Term:              Label Selector:                Match Labels:                  app.kubernetes.io/instance:    mysql-group-test                  app.kubernetes.io/managed-by:  kubedb.com                  app.kubernetes.io/name:        mysqls.kubedb.com              Namespaces:                op              Topology Key:  kubernetes.io/hostname            Weight:          100            Pod Affinity Term:              Label Selector:                Match Labels:                  app.kubernetes.io/instance:    mysql-group-test                  app.kubernetes.io/managed-by:  kubedb.com                  app.kubernetes.io/name:        mysqls.kubedb.com              Namespaces:                op              Topology Key:  failure-domain.beta.kubernetes.io/zone            Weight:          50      Resources:        Limits:          Cpu:     500m          Memory:  1Gi        Requests:          Cpu:               500m          Memory:            1Gi      Service Account Name:  mysql-group-test  Replicas:                  3  Storage:    Access Modes:      ReadWriteOnce    Resources:      Requests:        Storage:         50Gi    Storage Class Name:  rbd  Storage Type:          Durable  Termination Policy:    Halt  Topology:    Group:      Base Server ID:  100      Name:            d7f38430-d9ee-464b-af43-da9efa26fe02    Mode:              GroupReplication  Version:             8.0.21Status:  Conditions:    Last Transition Time:  2021-03-11T02:03:39Z    Message:               The KubeDB operator has started the provisioning of MySQL: op/mysql-group-test    Reason:                DatabaseProvisioningStartedSuccessfully    Status:                True    Type:                  ProvisioningStarted    Last Transition Time:  2021-03-11T02:21:17Z    Message:               All desired replicas are ready.    Reason:                AllReplicasReady    Status:                True    Type:                  ReplicaReady    Last Transition Time:  2021-03-11T02:03:49Z    Message:               The MySQL: op/mysql-group-test is accepting client requests.    Observed Generation:   2    Reason:                DatabaseAcceptingConnectionRequest    Status:                True    Type:                  AcceptingConnection    Last Transition Time:  2021-03-11T02:21:17Z    Message:               The MySQL: op/mysql-group-test is ready.    Observed Generation:   2    Reason:                ReadinessCheckSucceeded    Status:                True    Type:                  Ready    Last Transition Time:  2021-03-11T02:21:18Z    Message:               The MySQL: op/mysql-group-test is successfully provisioned.    Observed Generation:   2    Reason:                DatabaseSuccessfullyProvisioned    Status:                True    Type:                  Provisioned  Observed Generation:     2  Phase:                   ReadyEvents:  Type    Reason      Age    From             Message  ----    ------      ----   ----             -------  Normal  Successful  17m    KubeDB Operator  Successfully created governing service  Normal  Successful  17m    KubeDB Operator  Successfully created service for primary/standalone  Normal  Successful  17m    KubeDB Operator  Successfully created service for secondary replicas  Normal  Successful  17m    KubeDB Operator  Successfully created database auth secret  Normal  Successful  17m    KubeDB Operator  Successfully created StatefulSet  Normal  Successful  17m    KubeDB Operator  Successfully created appbinding  Normal  Successful  17m    KubeDB Operator  Successfully patched StatefulSet  Normal  Successful  17m    KubeDB Operator  Successfully patched StatefulSet  Normal  Successful  13m    KubeDB Operator  Successfully patched StatefulSet  Normal  Successful  11m    KubeDB Operator  Successfully patched StatefulSet  Normal  Successful  7m39s  KubeDB Operator  Successfully patched StatefulSet  Normal  Successful  102s   KubeDB Operator  Successfully patched StatefulSet  Normal  Successful  16s    KubeDB Operator  Successfully patched StatefulSet  Normal  Successful  16s    KubeDB Operator  Successfully patched StatefulSet  Normal  Successful  16s    KubeDB Operator  Successfully patched StatefulSet

从以上输出可以看到,集群部署完毕。

验证数据库

1、获取root用户名密码

[root@qd01-stop-k8s-master001 mysql]# kubectl get secrets -n op mysql-group-test-auth  -o jsonpath='{.data.\username}' | base64 -droot[root@qd01-stop-k8s-master001 mysql]# kubectl get secrets -n op mysql-group-test-auth  -o jsonpath='{.data.\password}' | base64 -d8(wVGGRfF4iQq1Zt

2、查看mysql pod 列表

[root@qd01-stop-k8s-master001 mysql]# kubectl get pods -n op -l app.kubernetes.io/instance=mysql-group-test  -o jsonpath='{range.items[*]}{.metadata.name} ........... {.status.podIP} ............ {.metadata.name}.my-group-gvr.{.metadata.namespace}{"\t\n"}{end}'mysql-group-test-0 ........... 100.64.147.157 ............ mysql-group-test-0.my-group-gvr.opmysql-group-test-1 ........... 100.98.174.219 ............ mysql-group-test-1.my-group-gvr.opmysql-group-test-2 ........... 100.64.122.198 ............ mysql-group-test-2.my-group-gvr.op[root@qd01-stop-k8s-master001 mysql]# kubectl get svc -n opNAME                       TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGEmysql-group-test           ClusterIP   10.108.25.179   <none>        3306/TCP   43mmysql-group-test-pods      ClusterIP   None            <none>        3306/TCP   43mmysql-group-test-standby   ClusterIP   10.101.164.49   <none>        3306/TCP   43m

3、现在可以使用获取到的信息连接数据库

[root@qd01-stop-k8s-master001 mysql]# kubectl exec -it -n op mysql-group-test-0 -c mysql -- mysql -u root --password="8(wVGGRfF4iQq1Zt"  --host=10.108.25.179  -e "select 1;"mysql: [Warning] Using a password on the command line interface can be insecure.+---+| 1 |+---+| 1 |+---+

4、检查集群状态

[root@qd01-stop-k8s-master001 mysql]# kubectl exec -it -n op mysql-group-test-0 -c mysql -- mysql -u root --password="8(wVGGRfF4iQq1Zt"  --host=10.108.25.179  -e "show status like '%primary%'"mysql: [Warning] Using a password on the command line interface can be insecure.+----------------------------------+--------------------------------------+| Variable_name                    | Value                                |+----------------------------------+--------------------------------------+| group_replication_primary_member | 596744e1-820e-11eb-8425-f2f48f05462c |+----------------------------------+--------------------------------------+[root@qd01-stop-k8s-master001 mysql]# kubectl exec -it -n op mysql-group-test-0 -c mysql -- mysql -u root --password="8(wVGGRfF4iQq1Zt"  --host=10.108.25.179  -e "select * from performance_schema.replication_group_members"mysql: [Warning] Using a password on the command line interface can be insecure.+---------------------------+--------------------------------------+---------------------------------------------+-------------+--------------+-------------+----------------+| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST                                 | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |+---------------------------+--------------------------------------+---------------------------------------------+-------------+--------------+-------------+----------------+| group_replication_applier | 18b45cbd-820f-11eb-8060-9a70fb141a1f | mysql-group-test-1.mysql-group-test-pods.op |        3306 | ONLINE       | SECONDARY   | 8.0.21         || group_replication_applier | 1dd5699c-8210-11eb-b13a-9a07d15a7e1f | mysql-group-test-2.mysql-group-test-pods.op |        3306 | ONLINE       | SECONDARY   | 8.0.21         || group_replication_applier | 596744e1-820e-11eb-8425-f2f48f05462c | mysql-group-test-0.mysql-group-test-pods.op |        3306 | ONLINE       | PRIMARY     | 8.0.21         |+---------------------------+--------------------------------------+---------------------------------------------+-------------+--------------+-------------+----------------+

5、故障测试

我现在把PRIMARY的mysql-group-test-0 pod删除,然后再查看集群信息,mysql-group-test-1会提升为PRIMARY

[root@qd01-stop-k8s-master001 ~]# kubectl delete po  mysql-group-test-0 -n op[root@qd01-stop-k8s-master001 ~]# kubectl exec -it -n op mysql-group-test-0 -n op -c mysql -- mysql -u root --password="8(wVGGRfF4iQq1Zt"  --host=10.108.25.179  -e "select * from performance_schema.replication_group_members"mysql: [Warning] Using a password on the command line interface can be insecure.+---------------------------+--------------------------------------+---------------------------------------------+-------------+--------------+-------------+----------------+| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST                                 | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |+---------------------------+--------------------------------------+---------------------------------------------+-------------+--------------+-------------+----------------+| group_replication_applier | 18b45cbd-820f-11eb-8060-9a70fb141a1f | mysql-group-test-1.mysql-group-test-pods.op |        3306 | ONLINE       | PRIMARY     | 8.0.21         || group_replication_applier | 1dd5699c-8210-11eb-b13a-9a07d15a7e1f | mysql-group-test-2.mysql-group-test-pods.op |        3306 | ONLINE       | SECONDARY   | 8.0.21         |+---------------------------+--------------------------------------+---------------------------------------------+-------------+--------------+-------------+----------------+等待一段时间 mysql-group-test-0起来以后,角色就变成SECONDARY[root@qd01-stop-k8s-master001 ~]# kubectl exec -it -n op mysql-group-test-0 -c mysql -- mysql -u root --password="8(wVGGRfF4iQq1Zt"  --host=10.108.25.179  -e "select * from performance_schema.replication_group_members"mysql: [Warning] Using a password on the command line interface can be insecure.+---------------------------+--------------------------------------+---------------------------------------------+-------------+--------------+-------------+----------------+| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST                                 | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |+---------------------------+--------------------------------------+---------------------------------------------+-------------+--------------+-------------+----------------+| group_replication_applier | 18b45cbd-820f-11eb-8060-9a70fb141a1f | mysql-group-test-1.mysql-group-test-pods.op |        3306 | ONLINE       | PRIMARY     | 8.0.21         || group_replication_applier | 1dd5699c-8210-11eb-b13a-9a07d15a7e1f | mysql-group-test-2.mysql-group-test-pods.op |        3306 | ONLINE       | SECONDARY   | 8.0.21         || group_replication_applier | 596744e1-820e-11eb-8425-f2f48f05462c | mysql-group-test-0.mysql-group-test-pods.op |        3306 | ONLINE       | SECONDARY   | 8.0.21         |+---------------------------+--------------------------------------+---------------------------------------------+-------------+--------------+-------------+----------------+

注意:因为本文部署是使用的是GroupReplication模式(目前kubed只支持这种模式),只能从PRIMARY节点写入数据,所有节点都可以读取数据;如下图所示。

如果想使用集群模式,参见以前的文章
PS:文章会同步到dev.kubeops.net

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net