温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

helm如何安装mysql教程

发布时间:2020-04-24 17:23:29 来源:亿速云 阅读:1255 作者:三月 栏目:云计算

本文主要给大家介绍helm如何安装mysql教程,其所涉及的东西,从理论知识来获悉,有很多书籍、文献可供大家参考,从现实意义角度出发,亿速云累计多年的实践经验可分享给大家。

导航:

一、前提 1.版本信息-2.查看方法-3.查看k8s集群节点状态-4.配置docker仓库下载加速 二、安装部署helm 1.下载软件包-2.安装helm-3.初始化 三、使用helm安装mysql1.搜索mysql的helm包-2.准备后端存储-3.准备docker image-4.配置集群内的kube-dns-5.安装mysql的helm包-6.查看mysql的有状态应用、pod、svc、pvc等k8s资源-7.客户端验证 四、故障排除 五、参考资料

一、前提

使用helm安装有状态应用mysql主备集群,首先确保你已经搭建好一个3节点的k8s集群(如何搭建k8s集群、k8s集群网络配置flannel请参考百度)。

helm如何安装mysql教程

1.版本信息
k8s: v1.5.2 docker: 1.13.1 flannel:0.7.1 helm: v3.0.0
2.查看方法
kubectl version docker version flanneld --version helm version
3.查看k8s集群节点状态
[root@master ~]# kubectl get node NAME      STATUS    AGE master    Ready     4d node2     Ready     18h node3     Ready     4m [root@master ~]# 
4.配置docker仓库下载加速

使用163的国内docker仓库,提高docker image的下载速度。

[root@master ~]# cat /etc/docker/daemon.json {"registry-mirrors": ["http://hub-mirror.c.163.com"]} [root@master ~]# systemctl restart docker   #重启docker服务生效 [root@master ~]# 

二、安装部署helm

使用helm的v3版本,v3版本不用配置服务端组件 Tiller。

1.下载软件包

下载helm的二进制包。
helm如何安装mysql教程
下载地址:
https://space.dingtalk.com/s/gwHOAF91cwLOABfU0gPaACBkNjc5YmMwMDUzZmQ0YWQwYjg2MmNhZWRiMGU3YmU1ZA 密码: 5kEK

2.安装helm

使用xshell或者winscp将安装包传输到linux中。

[root@master ~]# tar -tvf helm-v3.0.0-alpha.1-linux-amd64.tar.gz     #查看压缩包中的内容 drwxr-xr-x circleci/circleci 0 2019-05-16 05:44 linux-amd64/ -rwxr-xr-x circleci/circleci 39771936 2019-05-16 05:42 linux-amd64/helm -rw-r--r-- circleci/circleci    11373 2019-05-16 05:44 linux-amd64/LICENSE -rw-r--r-- circleci/circleci     3159 2019-05-16 05:44 linux-amd64/README.md [root@master ~]# 

将二进制文件复制到$PATH路径下即可使用。

[root@master ~]# which helm      #查看helm二进制文件所在的路径,将helm复制到$PATH中即可直接使用,例如将helm放在/usr/bin/helm的路径 /usr/bin/helm [root@master ~]# helm --help The Kubernetes package manager To begin working with Helm, run the 'helm init' command:    $ helm init This will set up any necessary local configuration. Common actions from this point include: - helm search:    search for charts - helm fetch:     download a chart to your local directory to view - helm install:   upload the chart to Kubernetes - helm list:      list releases of charts Environment:  $HELM_HOME          set an alternative location for Helm files. By default, these are stored in ~/.helm  $HELM_DRIVER        set the backend storage driver. Values are: configmap, secret, memory  $HELM_NO_PLUGINS    disable plugins. Set HELM_NO_PLUGINS=1 to disable plugins.  $KUBECONFIG         set an alternative Kubernetes configuration file (default "~/.kube/config") Usage:  helm [command] Available Commands:  chart       push, pull, tag, or remove Helm charts  completion  Generate autocompletions script for the specified shell (bash or zsh)  create      create a new chart with the given name  dependency  manage a chart's dependencies  get         download a named release  help        Help about any command  history     fetch release history  home        displays the location of HELM_HOME  init        initialize Helm client  install     install a chart  lint        examines a chart for possible issues  list        list releases  package     package a chart directory into a chart archive  plugin      add, list, or remove Helm plugins  pull        download a chart from a repository and (optionally) unpack it in local directory  registry    login to or logout from a registry  repo        add, list, remove, update, and index chart repositories  rollback    roll back a release to a previous revision  search      search for a keyword in charts  show        inspect a chart  status      displays the status of the named release  template    locally render templates  test        test a release or cleanup test artifacts  uninstall   uninstall a release  upgrade     upgrade a release  verify      verify that a chart at the given path has been signed and is valid  version     print the client version information Flags:      --debug                 enable verbose output  -h, --help                  help for helm      --home string           location of your Helm config. Overrides $HELM_HOME (default "/root/.helm")      --kube-context string   name of the kubeconfig context to use      --kubeconfig string     path to the kubeconfig file  -n, --namespace string      namespace scope for this request Use "helm [command] --help" for more information about a command. [root@master ~]# 
3.初始化

使用helm前,需要初始化。

[root@docker repository]# helm init --stable-repo-url=https://apphub.aliyuncs.com     #配置helm使用的仓库为国内阿里云地址,国外的访问不了,而且比较慢 Creating /root/.helm/repository/repositories.yaml Adding stable repo with URL: https://apphub.aliyuncs.com $HELM_HOME has been configured at /root/.helm. Happy Helming! [root@docker repository]# ls cache  local  repositories.yaml [root@docker repository]# cat repositories.yaml     #helm初始化完后会有一个配置文件生成,下面是repositories.yaml的内容 apiVersion: v1 generated: "2019-08-25T07:08:38.917953914+08:00" repositories: - caFile: ""  cache: /root/.helm/repository/cache/stable-index.yaml  certFile: ""  keyFile: ""  name: stable  password: ""  url: https://apphub.aliyuncs.com  username: ""

三、使用helm安装mysql

使用helm安装有状态应用mysql,使用到的docker镜像有:

docker.io/mysql:latest docker.io/ist0ne/xtrabackup:latest

构建mysql的1主2从,主备集群,使用xtrabackup工具进行数据同步。

1.搜索mysql的helm包
[root@docker ~]# helm search mysql     #搜索mysql的helm包 NAME                                CHART VERSION   APP VERSION DESCRIPTION                                       apphub/mysql                        6.3.1           8.0.17      Chart to create a Highly available MySQL cluster   apphub/mysqldump                    2.6.0           2.4.1       A Helm chart to help backup MySQL databases usi... apphub/mysqlha                      1.0.0           5.7.13      MySQL cluster with a single master and zero or ... apphub/prometheus-mysql-exporter    0.5.1           v0.11.0     A Helm chart for prometheus mysql exporter with... stable/mysql                        6.3.1           8.0.17      Chart to create a Highly available MySQL cluster   stable/mysqldump                    2.6.0           2.4.1       A Helm chart to help backup MySQL databases usi... stable/mysqlha                      1.0.0           5.7.13      MySQL cluster with a single master and zero or ... stable/prometheus-mysql-exporter    0.5.1           v0.11.0     A Helm chart for prometheus mysql exporter with... apphub/percona                      1.1.0           5.7.17      free, fully compatible, enhanced, open source d... apphub/percona-xtradb-cluster       1.0.1           5.7.19      free, fully compatible, enhanced, open source d... apphub/phpmyadmin                   3.0.1           4.9.0-1     phpMyAdmin is an mysql administration frontend     stable/percona                      1.1.0           5.7.17      free, fully compatible, enhanced, open source d... stable/percona-xtradb-cluster       1.0.1           5.7.19      free, fully compatible, enhanced, open source d... stable/phpmyadmin                   3.0.1           4.9.0-1     phpMyAdmin is an mysql administration frontend     apphub/mariadb                      6.8.1           10.3.17     Fast, reliable, scalable, and easy to use open-... apphub/mariadb-galera               0.2.1           10.3.17     MariaDB Galera is a multi-master database clust... stable/mariadb                      6.8.1           10.3.17     Fast, reliable, scalable, and easy to use open-... stable/mariadb-galera               0.2.1           10.3.17     MariaDB Galera is a multi-master database clust...
2.准备后端存储

由于mysql的helm包需要使用pv,而开源的k8s集群默认没有配置pv后端存储,因此需要手动添加nfs云服务器(如何搭建nfs服务器请参考百度)为后端存储。
nfs配置:

[root@master ~]# cat /etc/exports /nfsdata/pv001  *(rw,no_root_squash)   #添加no_root_squash不压缩root权限,因为容器里会使用root权限写入数据,否则后面会有权限不足的报错 /nfsdata/pv002  *(rw,no_root_squash) /nfsdata/pv003  *(rw,no_root_squash) [root@master ~]# ls -ld /nfsdata/      #配置目录的权限为nfsnobody drwxr-xr-x 5 nfsnobody nfsnobody 45 Aug 26 01:18 /nfsdata/ [root@master ~]# ls -ll /nfsdata/ total 0 drwxr-xr-x 2 nfsnobody nfsnobody 6 Aug 26 01:18 pv001 drwxr-xr-x 2 nfsnobody nfsnobody 6 Aug 26 01:18 pv002 drwxr-xr-x 2 nfsnobody nfsnobody 6 Aug 26 01:18 pv003 [root@master ~]# 

创建pv的yaml文件:

[root@master hrr]# cat pv.yml apiVersion: v1 kind: PersistentVolume metadata:  name: pv003 spec:  capacity:    storage: 10Gi  accessModes:    - ReadWriteOnce   #accessModes需要和pvc的模式一样  nfs:    path: /nfsdata/pv003    server: 192.168.222.129 [root@master hrr]# 

创建pv:

[root@docker hrr]# kubectl create -f pv.yml persistentvolume "pv003" created [root@docker hrr]#

查看pv:

[root@master hrr]# kubectl get pv    #Available表示没有被PVC使用 NAME      CAPACITY   ACCESSMODES   RECLAIMPOLICY   STATUS      CLAIM     REASON    AGE pv001     10Gi       RWO           Retain          Available                       26s pv002     10Gi       RWO           Retain          Available                       14s pv003     10Gi       RWO           Retain          Available                       3s [root@master hrr]# [root@master hrr]# kubectl get pv     #Bound表示被PVC使用 NAME      CAPACITY   ACCESSMODES   RECLAIMPOLICY   STATUS    CLAIM                          REASON    AGE pv001     10Gi       RWO           Retain          Bound     default/data-mysql-mysqlha-0             32s pv002     10Gi       RWO           Retain          Bound     default/data-mysql-mysqlha-1             17s pv003     10Gi       RWO           Retain          Bound     default/data-mysql-mysqlha-2             4s [root@master hrr]#
3.准备docker image

在安装mysql的helm包时需要mysql与xtrabackup的docker镜像。

[root@docker docker]# docker pull docker.io/ist0ne/xtrabackup   #下载xtrabackup镜像 Using default tag: latest Trying to pull repository docker.io/ist0ne/xtrabackup ... latest: Pulling from docker.io/ist0ne/xtrabackup 386a066cd84a: Pull complete 40f175e652e1: Pull complete 5eb6b5905d55: Pull complete Digest: sha256:e5e5519b874363f1bf35541cef2caed5803645937e29834817be51b30aabc479 Status: Downloaded newer image for docker.io/ist0ne/xtrabackup:latest [root@docker docker]# [root@docker docker]# docker pull docker.io/mysql   #下载mysql镜像

查看本地的镜像:

[root@master hrr]# docker images   REPOSITORY                                                  TAG                 IMAGE ID            CREATED             SIZE 192.168.222.129:5000/nginx                                  latest              5a3221f0137b        9 days ago          126 MB docker.io/nginx                                             latest              5a3221f0137b        9 days ago          126 MB docker.io/mysql                                             latest              62a9f311b99c        11 days ago         445 MB mysql                                                       5.7.13              62a9f311b99c        11 days ago         445 MB docker.io/ist0ne/xtrabackup                                 latest              c415dbd7af07        2 years ago         265 MB registry.cn-hangzhou.aliyuncs.com/kubeapps/gcr-xtrabackup   1.0                 c415dbd7af07        2 years ago         265 MB 192.168.222.129:5000/pod-infrastructure                     latest              f9d5de079539        5 years ago         240 kB docker.io/kubernetes/pause                                  latest              f9d5de079539        5 years ago         240 kB [root@master hrr]#

将镜像打tag,用于后面创建mysql的helm包:

[root@docker hrr]# docker tag docker.io/mysql:latest mysql:5.7.13 [root@docker docker]# docker tag docker.io/ist0ne/xtrabackup:latest registry.cn-hangzhou.aliyuncs.com/kubeapps/gcr-xtrabackup:1.0

将docker镜像导出,用于导入到其它k8s节点中:

[root@master ~]# docker save mysql:5.7.13 -o mysql5713.tgz  #将docker镜像导出,名为mysql5713.tgz [root@master ~]# docker save registry.cn-hangzhou.aliyuncs.com/kubeapps/gcr-xtrabackup:1.0 -o xtrabackup10.tgz [root@master ~]# scp mysql5713.tgz xtrabackup10.tgz root@192.168.222.130: root@192.168.222.130's password: mysql5713.tgz                                                                                      100%  429MB  35.7MB/s   00:12     xtrabackup10.tgz                                                                                   100%  260MB  43.4MB/s   00:06     [root@master ~]#

在其它k8s节点中导入docker镜像:

[root@node2 ~]# docker load -i  mysql5713.tgz   #将导出的docker镜像mysql5713.tgz导入 8fa655db5360: Loading layer [==================================================>] 58.48 MB/58.48 MB f5741d086b76: Loading layer [==================================================>] 338.4 kB/338.4 kB 9f77b78f01a7: Loading layer [==================================================>] 10.44 MB/10.44 MB 7f33ce1066af: Loading layer [==================================================>] 4.472 MB/4.472 MB 1dd5f3e365cf: Loading layer [==================================================>] 1.536 kB/1.536 kB 65430c57aee2: Loading layer [==================================================>] 46.15 MB/46.15 MB bb1ef34119b2: Loading layer [==================================================>] 32.77 kB/32.77 kB 995fa4bb8afe: Loading layer [==================================================>] 3.584 kB/3.584 kB bdebd19e878f: Loading layer [==================================================>] 329.8 MB/329.8 MB 79a46f1eb9d0: Loading layer [==================================================>] 5.632 kB/5.632 kB 5b96d5043191: Loading layer [==================================================>] 9.728 kB/9.728 kB 647229410363: Loading layer [==================================================>] 1.536 kB/1.536 kB Loaded image: mysql:5.7.13 [root@node2 ~]# docker load -i  xtrabackup10.tgz fe4c16cbf7a4: Loading layer [==================================================>] 128.9 MB/128.9 MB 82d548d175dd: Loading layer [==================================================>] 9.216 kB/9.216 kB f85c58969eb0: Loading layer [==================================================>]   144 MB/144 MB Loaded image: registry.cn-hangzhou.aliyuncs.com/kubeapps/gcr-xtrabackup:1.0 [root@node2 ~]#

node3做同样的操作。

4.配置集群内的kube-dns
5.安装mysql的helm包
[root@master ~]#  helm install mysql apphub/mysqlha NAME: mysql LAST DEPLOYED: 2019-08-25 09:43:33.16471802 +0800 CST m=+0.898633546 NAMESPACE: default STATUS: deployed NOTES: The MySQL cluster is comprised of 3 MySQL pods: 1 master and 2 slaves. Each instance is accessible within the cluster through:    <pod-name>.mysql-mysqlha `mysql-mysqlha-0.mysql-mysqlha` is designated as the master and where all writes should be executed against. Read queries can be executed against the `mysql-mysqlha-readonly` service which distributes connections across all MySQL pods. To connect to your database: 1. Obtain the root password:    kubectl get secret --namespace default mysql-mysqlha -o jsonpath="{.data.mysql-root-password}" | base64 --decode; echo 2. Run a pod to use as a client:    kubectl run mysql-client --image=mysql:5.7.13 -it --rm --restart='Never' --namespace default -- /bin/sh 3. To connect to Master service (read/write):    mysql -h mysql-mysqlha-0.mysql-mysqlha -u root -p 4. To connect to slave service (read-only):   mysql -h mysql-mysqlha-readonly -u root -p [root@master ~]#

安装完后,在本地会有mysql的helm包:

[root@master archive]# pwd /root/.helm/cache/archive [root@master archive]# ls guestbook-0.2.0.tgz  mysqlha-1.0.0.tgz [root@master archive]# [root@master archive]# tar -tvf mysqlha-1.0.0.tgz -rwxr-xr-x 0/0             378 2019-08-22 13:20 mysqlha/Chart.yaml -rwxr-xr-x 0/0            2561 2019-08-22 13:20 mysqlha/values.yaml -rwxr-xr-x 0/0            1216 2019-08-22 13:20 mysqlha/templates/NOTES.txt -rwxr-xr-x 0/0             961 2019-08-22 13:20 mysqlha/templates/_helpers.tpl -rwxr-xr-x 0/0             756 2019-08-22 13:20 mysqlha/templates/configmap.yaml -rwxr-xr-x 0/0             967 2019-08-22 13:20 mysqlha/templates/secret.yaml -rwxr-xr-x 0/0           10905 2019-08-22 13:20 mysqlha/templates/statefulset.yaml -rwxr-xr-x 0/0            1203 2019-08-22 13:20 mysqlha/templates/svc.yaml -rwxr-xr-x 0/0              56 2019-08-22 13:20 mysqlha/OWNERS -rwxr-xr-x 0/0            6724 2019-08-22 13:20 mysqlha/README.md [root@master archive]# 

将mysqlha-1.0.0.tgz解压,查看文件内容:

[root@master mysqlha]# ls Chart.yaml  OWNERS  README.md  templates  values.yaml [root@master mysqlha]# cat README.md # MySQL - Single Master, Multiple Slaves [MySQL](https://MySQL.org) is one of the most popular database servers in the world. Notable users include Wikipedia, Facebook and Google. ## Introduction This chart bootstraps a single master and multiple slave MySQL deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. Largely inspired by this [tutorial](https://kubernetes.io/docs/tutorials/stateful-application/run-replicated-stateful-application/), further work was made to 'production-ize' the example. ## Prerequisites - Kubernetes 1.6+ - PV provisioner support in the underlying infrastructure ## Installing the Chart To install the chart with the release name `my-release`: $ helm install --name my-release <helm-repo>/mysqlha The command deploys MySQL cluster on the Kubernetes cluster in the default configuration. The [configuration](#configuration) section lists the parameters that can be configured during installation. ### Uninstall To uninstall/delete the `my-release` deployment: $ helm delete my-release ## Configuration The following table lists the configurable parameters of the MySQL chart and their default values. | Parameter                                    | Description                                       | Default                                | | -----------------------------------------    | ------------------------------------------------- | -------------------------------------- | | `mysqlImage`                                 | `mysql` image and tag.                            | `mysql:5.7.13`                         | | `xtraBackupImage`                            | `xtrabackup` image and tag.                       | `gcr.io/google-samples/xtrabackup:1.0` | | `imagePullPolicy`                            | Image pull policy.                                | `IfNotPresent`                         | | `nameOverride`                               | `String to partially override mysqlha.fullname template with a string (will prepend the release name)` | `nil` | | `fullnameOverride`                           | `String to fully override mysqlha.fullname template with a string`                 | `nil` | | `replicaCount`                               | Number of MySQL replicas                          | 3                                      | | `mysqlRootPassword`                          | Password for the `root` user.                     | Randomly generated                     | | `mysqlUser`                                  | Username of new user to create.                   | `nil`                                  | | `mysqlPassword`                              | Password for the new user.                        | Randomly generated                     | | `mysqlReplicationUser`                       | Username for replication user                     | `repl`                                 | | `mysqlReplicationPassword`                   | Password for replication user.                    | Randomly generated                     | | `mysqlDatabase`                              | Name of the new Database to create                | `nil`                                  | | `configFiles.master.cnf`                     | Master configuration file                         | See `values.yaml`                      | | `configFiles.slave.cnf`                      | Slave configuration file                          | See `values.yaml`                      | | `podAnnotations`                             | Pod annotations                                   | `nil`                                  | | `schedulerName`                              | Name of the k8s scheduler (other than default)    | `nil`                                  | | `persistence.enabled`                        | Create a volume to store data                     | true                                   | | `persistence.size`                           | Size of persistent volume claim                   | 10Gi                                   | | `persistence.storageClass`                   | Type of persistent volume claim                   | `nil`                                  | | `persistence.accessModes`                    | Persistent volume access modes                    | `[ReadWriteOnce]`                      | | `persistence.annotations`                    | Persistent volume annotations                     | `{}`                                   | | `resources`                                  | CPU/Memory resource requests/limits               | Memory: `128Mi`, CPU: `100m`           | | `metrics.enabled`                            | Start a side-car prometheus exporter              | false                                  | | `metrics.image`                              | Exporter image                                    | `prom/mysqld-exporter`                 | | `metrics.imageTag`                           | Exporter image                                    | `v0.10.0`                              | | `metrics.imagePullPolicy`                    | Exporter image pull policy                        | `IfNotPresent`                         | | `metrics.resources`                          | Exporter resource requests/limit                  | See `values.yaml`                      | | `metrics.livenessProbe.initialDelaySeconds`  | Delay before metrics liveness probe is initiated  | 15                                     | | `metrics.livenessProbe.timeoutSeconds`       | When the probe times out                          | 5                                      | | `metrics.readinessProbe.initialDelaySeconds` | Delay before metrics readiness probe is initiated | 5                                      | | `metrics.readinessProbe.timeoutSeconds`      | When the probe times out                          | 1                                      | Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example, ## Persistence The [MySQL](https://hub.docker.com/_/mysql/) image stores the MySQL data and configurations at the `/var/lib/mysql` path of the container. By default persistence is enabled, and a PersistentVolumeClaim is created and mounted in that directory. As a result, a persistent volume will need to be defined: # https://kubernetes.io/docs/user-guide/persistent-volumes/#azure-disk kind: StorageClass apiVersion: storage.k8s.io/v1 metadata:  name: fast provisioner: kubernetes.io/azure-disk parameters:  skuName: Premium_LRS  location: westus In order to disable this functionality you can change the values.yaml to disable persistence and use an emptyDir instead.

查看values.yaml文件:

[root@master mysqlha]# cat values.yaml ## mysql image version ## ref: https://hub.docker.com/r/library/mysql/tags/ ## mysqlImage: mysql:5.7.13     #前面下载的mysql镜像 xtraBackupImage: registry.cn-hangzhou.aliyuncs.com/kubeapps/gcr-xtrabackup:1.0      #前面下载的xtrabackup镜像 ## Specify an imagePullPolicy (Required) ## It's recommended to change this to 'Always' if the image tag is 'latest' ## ref: http://kubernetes.io/docs/user-guide/images/#updating-images ## imagePullPolicy: IfNotPresent ## String to partially override orangehrm.fullname template (will maintain the release name) ## # nameOverride: "" ## String to fully override orangehrm.fullname template ## # fullnameOverride: "" mysqlha:  replicaCount: 3  ## Password for MySQL root user  ##  # mysqlRootPassword: ## Default: random 10 character string  ## Username/password for MySQL replication user  ##  mysqlReplicationUser: repl  # mysqlReplicationPassword:  ## Create a database user  ##  # mysqlUser:  # mysqlPassword: ## Default: random 10 character string  ## Allow unauthenticated access, uncomment to enable  ##  # mysqlAllowEmptyPassword: true  ## Create database with name and grant all permissions to user on startup, if needed  # mysqlDatabase:  ## Configuration files for the master and slaves  ##  configFiles:    master.cnf: |      # Apply this config only on the master.      [mysqld]      log-bin      skip_name_resolve    slave.cnf: |      # Apply this config only on slaves.      [mysqld]      super-read-only      skip_name_resolve  podAnnotations: {} ## Use an alternate scheduler, e.g. "stork". ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/ ## # schedulerName: ## Enable persistence using Persistent Volume Claims ## ref: http://kubernetes.io/docs/user-guide/persistent-volumes/ ## persistence:  enabled: true  ## If defined, storageClassName: <storageClass>  ## If set to "-", storageClassName: "", which disables dynamic provisioning  ## If undefined (the default) or set to null, no storageClassName spec is  ##   set, choosing the default provisioner.  (gp2 on AWS, azure-disk on  ##   Azure, standard on GKE, AWS & OpenStack)  ##  # storageClass: "-"  accessModes:  - ReadWriteOnce  size: 10Gi  annotations: {} resources:  requests:    cpu: 100m    memory: 128Mi metrics:  enabled: false  image: prom/mysqld-exporter  imageTag: v0.10.0  annotations: {}  livenessProbe:    initialDelaySeconds: 15    timeoutSeconds: 5  readinessProbe:    initialDelaySeconds: 5    timeoutSeconds: 1  resources:    requests:      cpu: 100m      memory: 100Mi [root@master mysqlha]# 
6.查看mysql的有状态应用、pod、svc、pvc等k8s资源
[root@master hrr]# kubectl get statefulset NAME            DESIRED   CURRENT   AGE mysql-mysqlha   3         1         18s [root@master hrr]# kubectl get svc NAME                     CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE kubernetes               10.254.0.1      <none>        443/TCP    4d mysql-mysqlha            None            <none>        3306/TCP   27s mysql-mysqlha-readonly   10.254.54.188   <none>        3306/TCP   27s [root@master hrr]# kubectl get pod NAME              READY     STATUS    RESTARTS   AGE mysql-mysqlha-0   2/2       Running   0          45s mysql-mysqlha-1   2/2       Running   0          24s mysql-mysqlha-2   1/2       Running   0          4s [root@master hrr]# kubectl get pv NAME      CAPACITY   ACCESSMODES   RECLAIMPOLICY   STATUS    CLAIM                          REASON    AGE pv001     10Gi       RWO           Retain          Bound     default/data-mysql-mysqlha-0             2m pv002     10Gi       RWO           Retain          Bound     default/data-mysql-mysqlha-2             2m pv003     10Gi       RWO           Retain          Bound     default/data-mysql-mysqlha-1             1m [root@master hrr]# kubectl get pvc NAME                   STATUS    VOLUME    CAPACITY   ACCESSMODES   AGE data-mysql-mysqlha-0   Bound     pv001     10Gi       RWO           51s data-mysql-mysqlha-1   Bound     pv003     10Gi       RWO           51s data-mysql-mysqlha-2   Bound     pv002     10Gi       RWO           51s [root@master hrr]# kubectl get configmap NAME            DATA      AGE mysql-mysqlha   4         54s [root@master hrr]# kubectl get secret NAME            TYPE              DATA      AGE mysql-mysqlha   Opaque            2         51m mysql.v1        helm.sh/release   1         51m [root@master hrr]# [root@master hrr]# kubectl get pod -owide NAME              READY     STATUS    RESTARTS   AGE       IP            NODE mysql-mysqlha-0   2/2       Running   0          1m        172.17.93.2   node3 mysql-mysqlha-1   2/2       Running   0          41s       172.17.78.2   node2 mysql-mysqlha-2   2/2       Running   0          21s       172.17.86.2   master

查看第一个节点的docker容器

[root@master hrr]# docker ps CONTAINER ID        IMAGE                                                           COMMAND                  CREATED             STATUS              PORTS               NAMES 41ec983706b8        registry.cn-hangzhou.aliyuncs.com/kubeapps/gcr-xtrabackup:1.0   "/bin/bash -c 'set..."   25 seconds ago      Up 24 seconds                           k8s_xtrabackup.516a4a61_mysql-mysqlha-2_default_387e4cdb-c772-11e9-83c0-000c296be0a4_72aba107 691066dcf870        mysql:5.7.13                                                    "docker-entrypoint..."   25 seconds ago      Up 24 seconds                           k8s_mysql.b9eef278_mysql-mysqlha-2_default_387e4cdb-c772-11e9-83c0-000c296be0a4_894896de d83f031101ef        192.168.222.129:5000/pod-infrastructure:latest                  "/pause"                 26 seconds ago      Up 25 seconds                           k8s_POD.62b22cd9_mysql-mysqlha-2_default_387e4cdb-c772-11e9-83c0-000c296be0a4_c46314b7

查看第二个节点的docker容器

[root@node2 ~]# docker ps CONTAINER ID        IMAGE                                                           COMMAND                  CREATED             STATUS              PORTS               NAMES 211a5deed23f        registry.cn-hangzhou.aliyuncs.com/kubeapps/gcr-xtrabackup:1.0   "/bin/bash -c 'set..."   52 seconds ago      Up 51 seconds                           k8s_xtrabackup.516a4a61_mysql-mysqlha-1_default_2c7419c8-c772-11e9-83c0-000c296be0a4_982995a3 51d9e7cd3d1d        mysql:5.7.13                                                    "docker-entrypoint..."   52 seconds ago      Up 51 seconds                           k8s_mysql.b9eef278_mysql-mysqlha-1_default_2c7419c8-c772-11e9-83c0-000c296be0a4_3acd8bf2 71bb21654249        192.168.222.129:5000/pod-infrastructure:latest                  "/pause"                 52 seconds ago      Up 51 seconds                           k8s_POD.62b22cd9_mysql-mysqlha-1_default_2c7419c8-c772-11e9-83c0-000c296be0a4_cce640c3 [root@node2 ~]# 

查看第三个节点的docker容器

[root@node3 ~]# docker ps CONTAINER ID        IMAGE                                                           COMMAND                  CREATED              STATUS              PORTS               NAMES d159b422bcdf        registry.cn-hangzhou.aliyuncs.com/kubeapps/gcr-xtrabackup:1.0   "/bin/bash -c 'set..."   About a minute ago   Up About a minute                       k8s_xtrabackup.516a4a61_mysql-mysqlha-0_default_1fbcfe77-c772-11e9-83c0-000c296be0a4_63f2a879 6aae997c995d        mysql:5.7.13                                                    "docker-entrypoint..."   About a minute ago   Up About a minute                       k8s_mysql.b9eef278_mysql-mysqlha-0_default_1fbcfe77-c772-11e9-83c0-000c296be0a4_7dee904b 40695f86aaf7        192.168.222.129:5000/pod-infrastructure:latest                  "/pause"                 About a minute ago   Up About a minute                       k8s_POD.62b22cd9_mysql-mysqlha-0_default_1fbcfe77-c772-11e9-83c0-000c296be0a4_58c67c1e [root@node3 ~]#

查看pvc里的数据

[root@master hrr]# ll /nfsdata/pv001 total 4 drwxr-xr-x 6 polkitd input 4096 Aug 26 03:54 mysql [root@master hrr]# ll /nfsdata/pv001/mysql/ total 177164 -rw-r----- 1 polkitd input       56 Aug 26 03:54 auto.cnf -rw-r----- 1 polkitd input  3091158 Aug 26 03:54 binlog.000001 -rw-r----- 1 polkitd input      155 Aug 26 03:54 binlog.000002 -rw-r----- 1 polkitd input       32 Aug 26 03:54 binlog.index -rw------- 1 polkitd input     1676 Aug 26 03:54 ca-key.pem -rw-r--r-- 1 polkitd input     1112 Aug 26 03:54 ca.pem -rw-r--r-- 1 polkitd input     1112 Aug 26 03:54 client-cert.pem -rw------- 1 polkitd input     1680 Aug 26 03:54 client-key.pem -rw-r----- 1 polkitd input     5419 Aug 26 03:54 ib_buffer_pool -rw-r----- 1 polkitd input 12582912 Aug 26 03:54 ibdata1 -rw-r----- 1 polkitd input 50331648 Aug 26 03:54 ib_logfile0 -rw-r----- 1 polkitd input 50331648 Aug 26 03:54 ib_logfile1 -rw-r----- 1 polkitd input 12582912 Aug 26 03:55 ibtmp1 drwxr-x--- 2 polkitd input      187 Aug 26 03:54 #innodb_temp drwxr-x--- 2 polkitd input      143 Aug 26 03:54 mysql -rw-r----- 1 polkitd input 29360128 Aug 26 03:54 mysql.ibd drwxr-x--- 2 polkitd input     8192 Aug 26 03:54 performance_schema -rw------- 1 polkitd input     1680 Aug 26 03:54 private_key.pem -rw-r--r-- 1 polkitd input      452 Aug 26 03:54 public_key.pem -rw-r--r-- 1 polkitd input     1112 Aug 26 03:54 server-cert.pem -rw------- 1 polkitd input     1680 Aug 26 03:54 server-key.pem drwxr-x--- 2 polkitd input       28 Aug 26 03:54 sys -rw-r----- 1 polkitd input 12582912 Aug 26 03:54 undo_001 -rw-r----- 1 polkitd input 10485760 Aug 26 03:54 undo_002

查看svc

[root@master hrr]# kubectl describe svc mysql-mysqlha Name:           mysql-mysqlha Namespace:      default Labels:         app=mysql-mysqlha            chart=mysqlha-1.0.0            heritage=Helm            release=mysql Selector:       app=mysql-mysqlha Type:           ClusterIP IP:         None Port:           mysql-mysqlha   3306/TCP Endpoints:      172.17.78.2:3306,172.17.86.2:3306,172.17.93.2:3306 Session Affinity:   None No events. [root@master hrr]# kubectl describe svc mysql-mysqlha-readonly Name:           mysql-mysqlha-readonly Namespace:      default Labels:         app=mysql-mysqlha            chart=mysqlha-1.0.0            heritage=Helm            release=mysql Selector:       app=mysql-mysqlha Type:           ClusterIP IP:         10.254.54.188 Port:           mysql-mysqlha   3306/TCP Endpoints:      172.17.78.2:3306,172.17.86.2:3306,172.17.93.2:3306 Session Affinity:   None No events. [root@master hrr]# 

查看有状态应用stateful

[root@master hrr]# kubectl get statefulset -oyaml apiVersion: v1 items: - apiVersion: apps/v1beta1  kind: StatefulSet  metadata:    creationTimestamp: 2019-08-25T19:54:18Z    generation: 1    labels:      app: mysql-mysqlha      chart: mysqlha-1.0.0      heritage: Helm      release: mysql    name: mysql-mysqlha    namespace: default    resourceVersion: "94760"    selfLink: /apis/apps/v1beta1/namespaces/default/statefulsets/mysql-mysqlha    uid: 1fa6f230-c772-11e9-83c0-000c296be0a4  spec:    replicas: 3    selector:      matchLabels:        app: mysql-mysqlha    serviceName: mysql-mysqlha    template:      metadata:        creationTimestamp: null        labels:          app: mysql-mysqlha      spec:        containers:        - env:          - name: MYSQL_DATABASE          - name: MYSQL_ROOT_PASSWORD            valueFrom:              secretKeyRef:                key: mysql-root-password                name: mysql-mysqlha          - name: MYSQL_REPLICATION_USER            value: repl          - name: MYSQL_REPLICATION_PASSWORD            valueFrom:              secretKeyRef:                key: mysql-replication-password                name: mysql-mysqlha          image: mysql:5.7.13          imagePullPolicy: IfNotPresent          livenessProbe:            exec:              command:              - /bin/sh              - -c              - mysqladmin ping -h 127.0.0.1 -u root -p${MYSQL_ROOT_PASSWORD}            failureThreshold: 3            initialDelaySeconds: 30            periodSeconds: 10            successThreshold: 1            timeoutSeconds: 5          name: mysql          ports:          - containerPort: 3306            name: mysql            protocol: TCP          readinessProbe:            exec:              command:              - /bin/sh              - -c              - MYSQL_PWD="${MYSQL_ROOT_PASSWORD}"              - mysql -h 127.0.0.1 -u root -e "SELECT 1"            failureThreshold: 3            initialDelaySeconds: 10            periodSeconds: 10            successThreshold: 1            timeoutSeconds: 1          resources:            requests:              cpu: 100m              memory: 128Mi          terminationMessagePath: /dev/termination-log          volumeMounts:          - mountPath: /var/lib/mysql            name: data            subPath: mysql          - mountPath: /etc/mysql/conf.d            name: conf        - args:          - -c          - |            set -ex            echo "Waiting for mysqld to be ready (accepting connections)"            until mysql -h 127.0.0.1 -e "SELECT 1"; do sleep 5; done            # Create replication user            cd /mnt/scripts            # file exists and is not empty with -s            if [[ -s create-replication-user.sh  ]]; then              ls -la              ./create-replication-user.sh            fi            cd /var/lib/mysql            # Determine binlog position of cloned data, if any.            if [[ -f xtrabackup_slave_info ]]; then              # XtraBackup already generated a partial "CHANGE MASTER TO" query              # because we're cloning from an existing slave.              cp xtrabackup_slave_info change_master_to.sql.in            elif [[ -f xtrabackup_binlog_info ]]; then              # We're cloning directly from master. Parse binlog position.              [[ $(cat xtrabackup_binlog_info) =~ ^(.*?)[[:space:]]+(.*?)$ ]] || exit 1              echo "CHANGE MASTER TO MASTER_LOG_FILE='${BASH_REMATCH[1]}',\                    MASTER_LOG_POS=${BASH_REMATCH[2]}" > change_master_to.sql.in            fi            # Check if we need to complete a clone by starting replication.            if [[ -f change_master_to.sql.in ]]; then              # In case of container restart, attempt this at-most-once.              cp change_master_to.sql.in change_master_to.sql.orig              mysql -h 127.0.0.1 --verbose<<EOF              STOP SLAVE IO_THREAD;              $(<change_master_to.sql.orig),              MASTER_HOST='mysql-mysqlha-0.mysql-mysqlha',              MASTER_USER='${MYSQL_REPLICATION_USER}',              MASTER_PASSWORD='${MYSQL_REPLICATION_PASSWORD}',              MASTER_CONNECT_RETRY=10;              START SLAVE;            EOF            fi            # Start a server to send backups when requested by peers.            exec ncat --listen --keep-open --send-only --max-conns=1 3307 -c \              "xtrabackup --backup --slave-info --stream=xbstream --host=127.0.0.1 --user=${MYSQL_REPLICATION_USER} --password=${MYSQL_REPLICATION_PASSWORD}"          command:          - /bin/bash          env:          - name: MYSQL_PWD            valueFrom:              secretKeyRef:                key: mysql-root-password                name: mysql-mysqlha          - name: MYSQL_REPLICATION_USER            value: repl          - name: MYSQL_REPLICATION_PASSWORD            valueFrom:              secretKeyRef:                key: mysql-replication-password                name: mysql-mysqlha          image: registry.cn-hangzhou.aliyuncs.com/kubeapps/gcr-xtrabackup:1.0          imagePullPolicy: IfNotPresent          name: xtrabackup          ports:          - containerPort: 3307            name: xtrabackup            protocol: TCP          resources:            requests:              cpu: 100m              memory: 100Mi          terminationMessagePath: /dev/termination-log          volumeMounts:          - mountPath: /var/lib/mysql            name: data            subPath: mysql          - mountPath: /etc/mysql/conf.d            name: conf          - mountPath: /mnt/scripts            name: scripts        dnsPolicy: ClusterFirst        restartPolicy: Always        securityContext: {}        terminationGracePeriodSeconds: 30        volumes:        - emptyDir: {}          name: conf        - configMap:            defaultMode: 420            name: mysql-mysqlha          name: config-map        - emptyDir: {}          name: scripts    volumeClaimTemplates:    - metadata:        creationTimestamp: null        name: data      spec:        accessModes:        - ReadWriteOnce        resources:          requests:            storage: 10Gi      status:        phase: Pending  status:    replicas: 3 kind: List metadata: {} resourceVersion: "" selfLink: "" [root@master hrr]# 
7.客户端验证

创建mysql-client容器,参考前面“ helm install mysql apphub/mysqlha”中的

[root@master hrr]# kubectl run mysql-client --image=mysql:5.7.13 -it --rm --restart='Never' --namespace default -- /bin/sh Waiting for pod default/mysql-client to be running, status is Pending, pod ready: false If you don't see a command prompt, try pressing enter. Error attaching, falling back to logs: error dialing backend: dial tcp: lookup node3 on 192.168.222.2:53: no such host Error from server: Get https://node3:10250/containerLogs/default/mysql-client/mysql-client: dial tcp: lookup node3 on 192.168.222.2:53: no such host [root@master hrr]# [root@master hrr]# kubectl get pod -owide NAME              READY     STATUS    RESTARTS   AGE       IP            NODE mysql-client      1/1       Running   0          48s       172.17.93.3   node3 mysql-mysqlha-0   2/2       Running   0          54m       172.17.93.2   node3 mysql-mysqlha-1   2/2       Running   0          53m       172.17.78.2   node2 mysql-mysqlha-2   2/2       Running   0          53m       172.17.86.2   master [root@master hrr]# 

在node3上查看

[root@node3 ~]# docker ps CONTAINER ID        IMAGE                                                           COMMAND                  CREATED             STATUS              PORTS               NAMES 8261abe363b0        mysql:5.7.13                                                    "docker-entrypoint..."   56 seconds ago      Up 55 seconds                           k8s_mysql-client.d32e2e5_mysql-client_default_90905092-c779-11e9-83c0-000c296be0a4_0d4f202f 1fac37badaa8        192.168.222.129:5000/pod-infrastructure:latest                  "/pause"                 56 seconds ago      Up 56 seconds                           k8s_POD.cace165_mysql-client_default_90905092-c779-11e9-83c0-000c296be0a4_a0f9ab22 d159b422bcdf        registry.cn-hangzhou.aliyuncs.com/kubeapps/gcr-xtrabackup:1.0   "/bin/bash -c 'set..."   54 minutes ago      Up 54 minutes                           k8s_xtrabackup.516a4a61_mysql-mysqlha-0_default_1fbcfe77-c772-11e9-83c0-000c296be0a4_63f2a879 6aae997c995d        mysql:5.7.13                                                    "docker-entrypoint..."   54 minutes ago      Up 54 minutes                           k8s_mysql.b9eef278_mysql-mysqlha-0_default_1fbcfe77-c772-11e9-83c0-000c296be0a4_7dee904b 40695f86aaf7        192.168.222.129:5000/pod-infrastructure:latest                  "/pause"                 54 minutes ago      Up 54 minutes                           k8s_POD.62b22cd9_mysql-mysqlha-0_default_1fbcfe77-c772-11e9-83c0-000c296be0a4_58c67c1e [root@node3 ~]# 

写入数据

[root@node3 ~]# docker exec -ti 8261abe363b0 sh # mysql -h272.17.93.2 -uroot ERROR 1045 (28000): Access denied for user 'root'@'172.17.93.3' (using password: NO) # mysql -h272.17.93.2 -uroot -pghScMZT1bTJN mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor.  Commands end with ; or \g. Your MySQL connection id is 1018 Server version: 8.0.17 MySQL Community Server - GPL Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. 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 | | mysql              | | performance_schema | | sys                | +--------------------+ 4 rows in set (0.01 sec) mysql> CREATE DATABASE test; Query OK, 1 row affected (0.02 sec) mysql> CREATE TABLE test.messages (message VARCHAR(250)); Query OK, 0 rows affected (0.03 sec) mysql> INSERT INTO test.messages VALUES ('hello'); Query OK, 1 row affected (0.03 sec) mysql> show databases; +--------------------+ | Database           | +--------------------+ | information_schema | | mysql              | | performance_schema | | sys                | | test               | +--------------------+ 5 rows in set (0.00 sec) mysql> use test; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> select * from messages; +---------+ | message | +---------+ | hello   | +---------+ 1 row in set (0.01 sec) mysql> exit Bye # 

连接svc查看,这个是read-only的,可以看到是轮询的,查询了2次才到有test中的库去

# mysql -h20.254.54.188 -uroot -pghScMZT1bTJN mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor.  Commands end with ; or \g. Your MySQL connection id is 1058 Server version: 8.0.17 MySQL Community Server - GPL Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. 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 | | mysql              | | performance_schema | | sys                | +--------------------+ 4 rows in set (0.00 sec) mysql> exit Bye # mysql -h20.254.54.188 -uroot -pghScMZT1bTJN mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor.  Commands end with ; or \g. Your MySQL connection id is 1054 Server version: 8.0.17 MySQL Community Server - GPL Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. 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 | | mysql              | | performance_schema | | sys                | +--------------------+ 4 rows in set (0.01 sec) mysql> exit Bye # mysql -h20.254.54.188 -uroot -pghScMZT1bTJN mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor.  Commands end with ; or \g. Your MySQL connection id is 1072 Server version: 8.0.17 MySQL Community Server - GPL Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. 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 | | mysql              | | performance_schema | | sys                | | test               | +--------------------+ 5 rows in set (0.00 sec) mysql> exit Bye #

四、故障排除

1.helm init报错

故障现象:

[root@docker ~]# helm init Creating /root/.helm/repository/repositories.yaml Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com Error: https://kubernetes-charts.storage.googleapis.com is not a valid chart repository or cannot be reached: Get https://kubernetes-charts.storage.googleapis.com/index.yaml: net/http: TLS handshake timeout [root@docker ~]# 

可能原因:
可能国内访问不了https://kubernetes-charts.storage.googleapis.com/index.yaml,并且网速慢。
解决方法:
在初始化时,使用--stable-repo-url参数,将仓库地址改为阿里云的helm仓库地址。
helm init --stable-repo-url=https://apphub.aliyuncs.com

2.Pending、PersistentVolumeClaim is not bound

故障现象:

[root@docker ~]# kubectl get pod NAME              READY     STATUS    RESTARTS   AGE mysql-mysqlha-0   0/2       Pending   0          35s nginx             1/1       Running   0          2m [root@docker ~]# [root@docker ~]# kubectl describe pod mysql-mysqlha-0 …… Events:  FirstSeen LastSeen    Count   From            SubObjectPath   Type        Reason          Message  --------- --------    -----   ----            -------------   --------    ------          -------  1m        4s      8   {default-scheduler }            Warning     FailedScheduling    SchedulerPredicates failed due to PersistentVolumeClaim is not bound: "data-mysql-mysqlha-0", which is unexpected.

可能原因:
第一次使用helm安装mysql时,没有提前创建pv,导致报pvc没有bound的错。
解决方法:
查看pvc的模式,创建pv,创建过程请参考前面。

3.RunContainerError、Failed to pull image "mysql:5.7.13"

故障现象:

[root@docker hrr]# kubectl get pod NAME              READY     STATUS              RESTARTS   AGE mysql-mysqlha-0   0/2       RunContainerError   0          19s nginx             1/1       Running             1          1h [root@docker hrr]# [root@docker ~]# kubectl describe pod mysql-mysqlha-0 …… Events:  FirstSeen LastSeen    Count   From            SubObjectPath           Type        Reason          Message  --------- --------    -----   ----            -------------           --------    ------          -------  18m       5m      49  {default-scheduler }                    Warning     FailedScheduling    SchedulerPredicates failed due to PersistentVolumeClaim is not bound: "data-mysql-mysqlha-0", which is unexpected.  4m        4m      1   {default-scheduler }                    Normal      Scheduled       Successfully assigned mysql-mysqlha-0 to master  4m        4m      1   {kubelet master}                    Warning     MissingClusterDNS   kubelet does not have ClusterDNS IP configured and cannot create Pod using "ClusterFirst" policy. Falling back to DNSDefault policy.  4m        4m      1   {kubelet master}    spec.containers{mysql}      Normal      Pulling         pulling image "mysql:5.7.13"  10s       10s     1   {kubelet master}    spec.containers{mysql}      Warning     Failed          Failed to pull image "mysql:5.7.13": Get https://registry-1.docker.io/v2/library/mysql/manifests/5.7.13: Get https://auth.docker.io/token?scope=repository%3Alibrary%2Fmysql%3Apull&service=registry.docker.io: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)  10s       10s     1   {kubelet master}    spec.containers{xtrabackup} Normal      Pulling         pulling image "registry.cn-hangzhou.aliyuncs.com/kubeapps/gcr-xtrabackup:1.0"  9s        9s      1   {kubelet master}    spec.containers{xtrabackup} Warning     Failed          Failed to pull image "registry.cn-hangzhou.aliyuncs.com/kubeapps/gcr-xtrabackup:1.0": image pull failed for registry.cn-hangzhou.aliyuncs.com/kubeapps/gcr-xtrabackup:1.0, this may be because there are no credentials on this request.  details: (repository registry.cn-hangzhou.aliyuncs.com/kubeapps/gcr-xtrabackup not found: does not exist or no pull access)  9s        9s      1   {kubelet master}                    Warning     FailedSync      Error syncing pod, skipping: [failed to "StartContainer" for "mysql" with ErrImagePull: "Get https://registry-1.docker.io/v2/library/mysql/manifests/5.7.13: Get https://auth.docker.io/token?scope=repository%3Alibrary%2Fmysql%3Apull&service=registry.docker.io: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)" , failed to "StartContainer" for "xtrabackup" with ErrImagePull: "image pull failed for registry.cn-hangzhou.aliyuncs.com/kubeapps/gcr-xtrabackup:1.0, this may be because there are no credentials on this request.  details: (repository registry.cn-hangzhou.aliyuncs.com/kubeapps/gcr-xtrabackup not found: does not exist or no pull access)" ]  8s    8s  1   {kubelet master}    spec.containers{mysql}      Normal  BackOff     Back-off pulling image "mysql:5.7.13"  8s    8s  1   {kubelet master}    spec.containers{xtrabackup} Normal  BackOff     Back-off pulling image "registry.cn-hangzhou.aliyuncs.com/kubeapps/gcr-xtrabackup:1.0"  8s    8s  1   {kubelet master}                    Warning FailedSync  Error syncing pod, skipping: [failed to "StartContainer" for "mysql" with ImagePullBackOff: "Back-off pulling image \"mysql:5.7.13\"" , failed to "StartContainer" for "xtrabackup" with ImagePullBackOff: "Back-off pulling image \"registry.cn-hangzhou.aliyuncs.com/kubeapps/gcr-xtrabackup:1.0\"" ] [root@docker hrr]# 

可能原因:
下载不到docker image,本地没有mysql镜像。
解决方法:
手动下载mysql镜像,将镜像docker tag为配置中的名字,如何手动下载,请参考上面。

4.CrashLoopBackOff、permission denied

故障现象:

[root@docker docker]# kubectl get pod NAME              READY     STATUS              RESTARTS   AGE mysql-mysqlha-0   0/2       RunContainerError   0          9s nginx             1/1       Running             2          1h [root@docker docker]# [root@docker docker]# kubectl describe pod mysql-mysqlha-0 …… Events:  FirstSeen LastSeen    Count   From            SubObjectPath           Type        Reason          Message  --------- --------    -----   ----            -------------           --------    ------          -------  15s       15s     1   {default-scheduler }                    Normal      Scheduled       Successfully assigned mysql-mysqlha-0 to master  14s       14s     1   {kubelet master}                    Warning     MissingClusterDNS   kubelet does not have ClusterDNS IP configured and cannot create Pod using "ClusterFirst" policy. Falling back to DNSDefault policy.  14s       3s      3   {kubelet master}    spec.containers{mysql}      Normal      Pulled          Container image "mysql:5.7.13" already present on machine  14s       3s      3   {kubelet master}    spec.containers{xtrabackup} Normal      Pulled          Container image "registry.cn-hangzhou.aliyuncs.com/kubeapps/gcr-xtrabackup:1.0" already present on machine  14s       3s      3   {kubelet master}                    Warning     FailedSync      Error syncing pod, skipping: [failed to "StartContainer" for "mysql" with RunContainerError: "GenerateRunContainerOptions: mkdir /var/lib/kubelet/pods/18f319d5-c6d2-11e9-baf7-000c296be0a4/volumes/kubernetes.io~nfs/pv001/mysql: permission denied" , failed to "StartContainer" for "xtrabackup" with RunContainerError: "GenerateRunContainerOptions: mkdir /var/lib/kubelet/pods/18f319d5-c6d2-11e9-baf7-000c296be0a4/volumes/kubernetes.io~nfs/pv001/mysql: permission denied" ] [root@docker docker]# [root@docker docker]# kubectl get pod NAME              READY     STATUS             RESTARTS   AGE mysql-mysqlha-0   1/2       CrashLoopBackOff   2          5m nginx             1/1       Running            2          1h [root@docker docker]# Events:  FirstSeen LastSeen    Count   From            SubObjectPath   Type        Reason      Message  --------- --------    -----   ----            -------------   --------    ------      -------  5m        5m      1   {default-scheduler }            Normal      Scheduled   Successfully assigned mysql-mysqlha-0 to master  1m        1m      1   {kubelet master}            Warning     FailedSync  Error syncing pod, skipping: [failed to "StartContainer" for "xtrabackup" with RunContainerError: "GenerateRunContainerOptions: mkdir /var/lib/kubelet/pods/18f319d5-c6d2-11e9-baf7-000c296be0a4/volumes/kubernetes.io~nfs/pv001/mysql: permission denied" , failed to "StartContainer" for "mysql" with RunContainerError: "GenerateRunContainerOptions: mkdir /var/lib/kubelet/pods/18f319d5-c6d2-11e9-baf7-000c296be0a4/volumes/kubernetes.io~nfs/pv001/mysql: permission denied" ]  5m    44s 23  {kubelet master}        Warning FailedSync  Error syncing pod, skipping: [failed to "StartContainer" for "mysql" with RunContainerError: "GenerateRunContainerOptions: mkdir /var/lib/kubelet/pods/18f319d5-c6d2-11e9-baf7-000c296be0a4/volumes/kubernetes.io~nfs/pv001/mysql: permission denied" , failed to "StartContainer" for "xtrabackup" with RunContainerError: "GenerateRunContainerOptions: mkdir /var/lib/kubelet/pods/18f319d5-c6d2-11e9-baf7-000c296be0a4/volumes/kubernetes.io~nfs/pv001/mysql: permission denied" ]  32s   32s 1   {kubelet master}    spec.containers{mysql}      Normal  Started     Started container with docker id d2f5e2c645b8  32s   32s 1   {kubelet master}    spec.containers{xtrabackup} Normal  Started     Started container with docker id 6f2fb901a587  5m    32s 25  {kubelet master}    spec.containers{xtrabackup} Normal  Pulled      Container image "registry.cn-hangzhou.aliyuncs.com/kubeapps/gcr-xtrabackup:1.0" already present on machine  32s   32s 1   {kubelet master}    spec.containers{mysql}      Normal  Created     Created container with docker id d2f5e2c645b8; Security:[seccomp=unconfined]  32s   32s 1   {kubelet master}    spec.containers{xtrabackup} Normal  Created     Created container with docker id 6f2fb901a587; Security:[seccomp=unconfined]  30s   30s 1   {kubelet master}    spec.containers{mysql}      Normal  Created     Created container with docker id 104f64db6e8c; Security:[seccomp=unconfined]  30s   30s 1   {kubelet master}    spec.containers{mysql}      Normal  Started     Started container with docker id 104f64db6e8c  28s   26s 3   {kubelet master}                    Warning FailedSync  Error syncing pod, skipping: failed to "StartContainer" for "mysql" with CrashLoopBackOff: "Back-off 10s restarting failed container=mysql pod=mysql-mysqlha-0_default(18f319d5-c6d2-11e9-baf7-000c296be0a4)"  5m    11s 27  {kubelet master}    spec.containers{mysql}  Normal  Pulled          Container image "mysql:5.7.13" already present on machine  5m    11s 5   {kubelet master}                Warning MissingClusterDNS   kubelet does not have ClusterDNS IP configured and cannot create Pod using "ClusterFirst" policy. Falling back to DNSDefault policy.  11s   11s 1   {kubelet master}    spec.containers{mysql}  Normal  Created         Created container with docker id ec8f0827294b; Security:[seccomp=unconfined]  11s   11s 1   {kubelet master}    spec.containers{mysql}  Normal  Started         Started container with docker id ec8f0827294b  28s   7s  5   {kubelet master}    spec.containers{mysql}  Warning BackOff         Back-off restarting failed docker container  10s   7s  2   {kubelet master}                Warning FailedSync      Error syncing pod, skipping: failed to "StartContainer" for "mysql" with CrashLoopBackOff: "Back-off 20s restarting failed container=mysql pod=mysql-mysqlha-0_default(18f319d5-c6d2-11e9-baf7-000c296be0a4)" [root@docker docker]# [root@docker docker]# docker ps -a CONTAINER ID        IMAGE                                                           COMMAND                  CREATED              STATUS                          PORTS               NAMES 24a5e40cfbe6        mysql:5.7.13                                                    "docker-entrypoint..."   About a minute ago   Exited (1) About a minute ago                       k8s_mysql.b9eef278_mysql-mysqlha-0_default_18f319d5-c6d2-11e9-baf7-000c296be0a4_f37f9154 6f2fb901a587        registry.cn-hangzhou.aliyuncs.com/kubeapps/gcr-xtrabackup:1.0   "/bin/bash -c 'set..."   5 minutes ago        Up 5 minutes                                        k8s_xtrabackup.516a4a61_mysql-mysqlha-0_default_18f319d5-c6d2-11e9-baf7-000c296be0a4_4c633d64 61a82b9ad65a        192.168.222.129:5000/pod-infrastructure:latest                  "/pause"                 10 minutes ago       Up 10 minutes                                       k8s_POD.62b22cd9_mysql-mysqlha-0_default_18f319d5-c6d2-11e9-baf7-000c296be0a4_9f7337a5 dc6071e8f613        192.168.222.129:5000/nginx                                      "nginx -g 'daemon ..."   26 minutes ago       Up 26 minutes                                       k8s_nginx.3556dff8_nginx_default_30a915ea-c6c5-11e9-bbd7-000c296be0a4_9d257b60 15929311253f        192.168.222.129:5000/pod-infrastructure:latest                  "/pause"                 26 minutes ago       Up 26 minutes                                       k8s_POD.cace165_nginx_default_30a915ea-c6c5-11e9-bbd7-000c296be0a4_d9ad1e0f 48f464ad9c9b        192.168.222.129:5000/pod-infrastructure:latest                  "/pause"                 37 minutes ago       Exited (2) 26 minutes ago                           k8s_POD.cace165_nginx_default_30a915ea-c6c5-11e9-bbd7-000c296be0a4_eb3bebdb c01c41763b06        192.168.222.129:5000/nginx                                      "nginx -g 'daemon ..."   About an hour ago    Exited (0) 37 minutes ago                           k8s_nginx.3556dff8_nginx_default_30a915ea-c6c5-11e9-bbd7-000c296be0a4_0848bc8b [root@docker docker]# docker logs 24a5e40cfbe6 chown: changing ownership of '/var/lib/mysql/': Operation not permitted [root@docker docker]#

可能原因:
docker对pvc没有权限,由于这里使用的是nfs作后端存储,所以可能是nfs目录的权限没放开。
解决方法:
将nfs目录权限设置为chown nfsnobody:nfsnobody -R /nfsdata,并且/etc/exportfs中设置no_root_squash,不压缩root权限,即在docker可以使用任何用户写入数据,具体操作步骤请参考上面。

5.MissingClusterDNS

故障现象:

[root@master ~]# kubectl describe pod mysql-mysqlha-0 …… Events:  FirstSeen LastSeen    Count   From            SubObjectPath           Type        Reason          Message  --------- --------    -----   ----            -------------           --------    ------          -------  56m       56m     1   {default-scheduler }                    Normal      Scheduled       Successfully assigned mysql-mysqlha-0 to master  56m       56m     3   {kubelet master}                    Warning     MissingClusterDNS   kubelet does not have ClusterDNS IP configured and cannot create Pod using "ClusterFirst" policy. Falling back to DNSDefault policy.  56m       56m     1   {kubelet master}    spec.containers{mysql}      Normal      Pulled          Container image "mysql:5.7.13" already present on machine  56m       56m     1   {kubelet master}    spec.containers{mysql}      Normal      Created         Created container with docker id 31013a7822ae; Security:[seccomp=unconfined]  56m       56m     1   {kubelet master}    spec.containers{mysql}      Normal      Started         Started container with docker id 31013a7822ae  56m       56m     1   {kubelet master}    spec.containers{xtrabackup} Normal      Pulled          Container image "registry.cn-hangzhou.aliyuncs.com/kubeapps/gcr-xtrabackup:1.0" already present on machine  56m       56m     1   {kubelet master}    spec.containers{xtrabackup} Normal      Created         Created container with docker id a5f2f49c1eef; Security:[seccomp=unconfined]  56m       56m     1   {kubelet master}    spec.containers{xtrabackup} Normal      Started         Started container with docker id a5f2f49c1eef

可能原因:
没有配置kube-dns。
解决方法:
请参考上面配置kube-dns。

故障现象:
可能原因:
解决方法:

看了以上helm如何安装mysql教程介绍,希望能给大家在实际运用中带来一定的帮助。本文由于篇幅有限,难免会有不足和需要补充的地方,大家可以继续关注亿速云行业资讯板块,会定期给大家更新行业新闻和知识,如有需要更加专业的解答,可在官网联系我们的24小时售前售后,随时帮您解答问题的。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI