K8S使用operator部署和管理Percona - PXC集群

概述
pxc为mysql的一种集群模型,我们结合operator和k8s 完成pxc的部署和扩容

硬盘使用local卷,如何管理local卷请翻阅 我的另一篇文章

https://www.jianshu.com/p/bfa204cef8c0

英文文档详情 https://percona.github.io/percona-xtradb-cluster-operator/configure/backups

下载git


git clone-brelease-0.3.0 https://github.com/percona/percona-xtradb-cluster-operator

cd percona-xtradb-cluster-operator

安装自定义资源CRD

kubectl apply-fdeploy/crd.yaml

创建pxc namespace

kubectl create namespace pxc

kubectl config set-context $(kubectl config current-context) -n pxc

创建k8s用户和权限

kubectl apply-fdeploy/rbac.yaml

部署operator

kubectl apply-fdeploy/operator.yaml

配置初始密码

生成加密字符串
echo -n 'plain-text-password' | base64

vi deploy/secrets.yaml

apiVersion: v1

kind: Secret

metadata:

  name: my-cluster-secrets

type: Opaque

data:

  root: 加密字符

  xtrabackup: 加密字符

  monitor: 加密字符

  clustercheck: 加密字符

  proxyuser: 加密字符

  proxyadmin: 加密字符

  pmmserver: 加密字符

部署

kubectl apply-fdeploy/secrets.yaml

部署集群

自定义pxc参数

vi deploy/cr.yaml

apiVersion: "pxc.percona.com/v1alpha1"

kind: "PerconaXtraDBCluster"

metadata:

  #集群名称

  name: "cluster1"

  finalizers:

    - delete-pxc-pods-in-order

    # - delete-proxysql-pvc

    # - delete-pxc-pvc

spec:

  secretsName: my-cluster-secrets

  pxc:

    #集群节点数量

    size: 3

    image: perconalab/pxc-openshift:0.2.0

    #资源信息

    resources:

      requests:

        memory: 1G

        cpu: 600m

      limits:

        memory: 1G

        cpu: "1"

    volumeSpec:

      #存储卷信息

      storageClass: local-storage

      accessModes: [ "ReadWriteOnce" ]

      #大小

      size: 6Gi

    affinity:

      topologyKey: "kubernetes.io/hostname"

      # advanced:

    # nodeSelector:

    #  disktype: ssd

    # tolerations:

    # - key: "node.alpha.kubernetes.io/unreachable"

    #  operator: "Exists"

    #  effect: "NoExecute"

    #  tolerationSeconds: 6000

    # priorityClassName: high-priority

    # annotations:

    #  iam.amazonaws.com/role: role-arn

    # imagePullSecrets:

    #  - name: private-registry-credentials

    # labels:

    #  rack: rack-22

  proxysql:

    #是否部署proxy来完成读写分离

    enabled: true

    #proxysql几点数量

    size: 1

    image: perconalab/proxysql-openshift:0.2.0

    resources:

      requests:

        memory: 1G

        cpu: 600m

      # limits:

      #  memory: 1G

      #  cpu: 700m

    volumeSpec:

      storageClass: ssd-local-storage

      accessModes: [ "ReadWriteOnce" ]

      size: 2Gi

    # affinity:

    #  topologyKey: "failure-domain.beta.kubernetes.io/zone"

    #  # advanced:

    # nodeSelector:

    #  disktype: ssd

    # tolerations:

    # - key: "node.alpha.kubernetes.io/unreachable"

    #  operator: "Exists"

    #  effect: "NoExecute"

    #  tolerationSeconds: 6000

  pmm:

    #是否开启pmm

    enabled: false

    image: perconalab/pmm-client:1.17.0

    serverHost: monitoring-service

    serverUser: pmm

  backup:

    image: perconalab/backupjob-openshift:0.2.0

    # imagePullSecrets:

    #  - name: private-registry-credentials

    schedule:

      - name: "sat-night-backup"

        #crontab计划

        schedule: "0 0 * * 6"

        #保存几份备份

        keep: 3

        volume:

          storageClass: local-storage

          size: 6Gi

kubectl apply -f deploy/cr.yaml


查看pxc集群

kubectl -n pxc get po --show-labels


查看service

kubectl -n pxc get svc

将nodePORT

kubectl -n pxc edit svc cluster1-pxc-proxysql

# Please edit the object below. Lines beginning with a '#' will be ignored,

# and an empty file will abort the edit. If an error occurs while saving this file will be

# reopened with the relevant failures.

#

apiVersion: v1

kind: Service

metadata:

  creationTimestamp: "2019-03-25T10:58:37Z"

  labels:

    app: pxc

    cluster: cluster1

  name: cluster1-pxc-proxysql

  namespace: pxc

  ownerReferences:

  - apiVersion: pxc.percona.com/v1alpha1

    controller: true

    kind: PerconaXtraDBCluster

    name: cluster1

    uid: f0a9a0ba-4eec-11e9-ba71-005056ac2dbb

  resourceVersion: "2771712"

  selfLink: /api/v1/namespaces/pxc/services/cluster1-pxc-proxysql

  uid: f0c3c844-4eec-11e9-9e18-005056ac20e9

spec:

  clusterIP: 10.99.239.180

  externalTrafficPolicy: Cluster

  ports:

  - name: mysql

    nodePort: 31239

    port: 3306

    protocol: TCP

    targetPort: 3306

  - name: proxyadm

    nodePort: 31531

    port: 6032

    protocol: TCP

    targetPort: 6032

  selector:

    component: cluster1-pxc-proxysql

  sessionAffinity: None

  type: NodePort

status:

  loadBalancer: {}


再次查看



连接mysql

mysql -h 10.16.16.119 -P 31239 -u root -p

连接proxyadmin

mysql -h 10.16.16.119 -P 31531 -u proxyadmin -p



扩容

将3节点扩容到5节点

需要注意必须为奇数节点,

而且po分布在不同的k8snode上 所以k8s node必须大于pxc节点,不然po会一直处于pend状态

kubectl -n pxc get pxc/cluster1 -o yaml | sed -e 's/size: 3/size: 5/' | kubectl -n pxc apply -f -


查看读写分离,新节点已经加入


缩减节点


kubectl -n pxc get pxc/cluster1 -o yaml | sed -e 's/size: 4/size: 3/' | kubectl -n pxc apply -f -


创建用户和同步用户到proxysql

mysql -u root -p -P 31239 -h node1

create database database1;

GRANT ALL PRIVILEGES ON database1.* TO 'user1'@'%' IDENTIFIED BY 'password1';

同步proxy

kubectl -n pxc exec -it cluster1-pxc-proxysql-0 -- proxysql-admin --config-file=/etc/proxysql-admin.cnf --syncusers 


测试



备份和恢复

crontab 已经在创建集群的时候创建完毕


手动backup

cat <<EOF | kubectl -n pxc apply -f-

apiVersion: "pxc.percona.com/v1alpha1"

kind: "PerconaXtraDBBackup"

metadata:

  name: "backup20190326"

spec:

  pxcCluster: "cluster1"

  volume:

    storageClass: local-storage

    size: 6G

EOF


查看备份

kubectl get pxc-backup

查看pxc集群

kubectl get pxc

从备份恢复数据


查看备份

kubectl get pxc-backup

查看pxc集群

kubectl get pxc

将指定备份恢复到指定集群
./deploy/backup/restore-backup.sh <备份名称> <集群名称>


将备份copy到本地

./deploy/backup/copy-backup.sh <备份名称> path/to/dir


安装PMM监控


helm repo add percona https://percona-charts.storage.googleapis.com

helm repo update


查看pmmserver 参数

helm inspect percona/pmm-server

安装

helm install percona/pmm-server --name pcx-monitoring --namespace=pxc --set platform=kubernetes --set persistence.storageClass=local-storage --set credentials.username=pmm

如果下载有问题可以代理下载

https://percona-charts.storage.googleapis.com/pmm-server-1.17.1.tgz

然后放到本机

tar -xvf ~/pmm-server-1.17.1.tgz

更改:

vi ./pmm-server/templates/statefulset.yaml 

115行加入

storageClassName: {{ .Values.persistence.storageClass }}

类似下图


helm install ./pmm-server --name pcx-monitoring --namespace=pxc --set platform=kubernetes --set persistence.storageClass=local-storage --set credentials.username=pmm --set "credentials.password=密码"

这里的密码必须和my-cluster-secrets中的pmmserver一致

如果忘记kubectl -n pxc get secret 查看

kubectl -n pxc edit secret 密码文件 修改


查看


开启客户端pmm

kubectl -n pxc get pxc

kubectl -n pxc get svc 获取pmmserver名称

kubectl -n pxc edit pxc cluster1


kubectl -n pxc get pxc

骑宠serverHost为kubectl -n pxc get svc 获取pmmserver的名称

serverUser为账号

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容