g hub安装失败_树莓派k8s集群安装mysql及监控
安装准备
树莓派k8s集群
root@pi4-master01:~# kubectl get nodes -o wideNAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIMEpi4-master01 Ready master 4d18h v1.15.10 192.168.5.18 <none> Ubuntu 20.04 LTS 5.4.0-1011-raspi docker://18.9.9pi4-node01 Ready node 4d17h v1.15.10 192.168.5.19 <none> Ubuntu 20.04 LTS 5.4.0-1011-raspi docker://18.9.9pi4-node02 Ready node 4d17h v1.15.10 192.168.5.20 <none> Ubuntu 20.04 LTS 5.4.0-1011-raspi docker://18.9.9
树莓派k8s集群已安装helm和nginx-ingress
root@pi4-master01:~/k8s/cluster-monitoring-0.37.0# helm versionClient: &version.Version{SemVer:"v2.15.0", GitCommit:"c2440264ca6c078a06e088a838b0476d2fc14750", GitTreeState:"clean"}Server: &version.Version{SemVer:"v2.15.0+unreleased", GitCommit:"9668ad4d90c5e95bd520e58e7387607be6b63bb6", GitTreeState:"dirty"}root@pi4-master01:~/k8s/cluster-monitoring-0.37.0# helm listNAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACEnginx-ingress 1 Fri Jul 3 17:11:20 2020 DEPLOYED nginx-ingress-0.9.5 0.10.2 default root@pi4-master01:~/k8s/cluster-monitoring-0.37.0# kubectl get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 10.96.0.1 443/TCP 4d21hnginx-ingress-controller NodePort 10.110.89.242 192.168.5.18 80:12001/TCP,443:12002/TCP 4d16hnginx-ingress-default-backend ClusterIP 10.104.65.1 80/TCP 4d16h
树莓派k8s集群已安装存储类,并设置为默认存储
root@pi4-master01:~/k8s/cluster-monitoring-0.37.0# kubectl get storageclassNAME PROVISIONER AGElocal-path (default) rancher.io/local-path 4d15h
对了,如果你还没有树莓派k8s集群,这里有一篇树莓派 k8s 集群
helm安装mysql
这里我们选择用helm安装,helm有一个默认仓库stable,指向https://kubernetes-charts.storage.googleapis.com, 国内访问比较困难,所以网上很多安装helm的文档都以https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts 来代替。但最近发现,这个仓库也不再更新了,很多chart的最新版本都没有,这里提供一个新地址http://mirror.azure.cn/kubernetes/charts 。经简单验证,发现这个仓库至少比阿里的那个仓库新,建议切换。
root@pi4-master01:~# helm repo remove stable"stable" has been removed from your repositoriesroot@pi4-master01:~# helm repo add stable http://mirror.azure.cn/kubernetes/charts/"stable" has been added to your repositoriesroot@pi4-master01:~# helm repo listNAME URLlocal http://127.0.0.1:8879/chartsstable http://mirror.azure.cn/kubernetes/charts/root@pi4-master01:~# helm search mysqlNAME CHART VERSION APP VERSION DESCRIPTIONstable/mysql 1.6.6 5.7.30 Fast, reliable, scalable, and easy to use open-source rel...stable/mysqldump 2.6.0 2.4.1 A Helm chart to help backup MySQL databases using mysqldump stable/prometheus-mysql-exporter 0.7.0 v0.11.0 A Helm chart for prometheus mysql exporter with cloudsqlp...
使用helm安装mysql命令如下
helm install -n mysql \stable/mysql \--set image=biarms/mysql \--set imageTag=5.7.30-linux-arm64v8 \--set busybox.images=arm64v8/busybox \--set mysqlRootPassword=abc123
该chart中涉及的镜像均是x86的,只要把相关的镜像换成arm64v8架构的镜像即可。另外,该chart默认开启了持久化存储,不指定storageclass的话,将使用k8s的默认存储。因为我们的树莓派k8s集群已经设置了local-path为默认storageclass,所以不需要关闭持久化存储既可正常安装。
查看创建的pod
root@pi4-master01:~# kubectl get pod | grep mysqlmysql-56b767d54b-tfrng 1/1 Running 0 89m
查看创建的svc
root@pi4-master01:~# kubectl get svc | grep mysqlmysql ClusterIP 10.108.134.203 3306/TCP 90m
查看创建的pv,pvc
root@pi4-master01:~# kubectl get pvc,pvNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGEpersistentvolumeclaim/mysql Bound pvc-7e596f23-af80-480f-8713-fe3dc9e42157 8Gi RWO local-path 91mNAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGEpersistentvolume/pvc-7e596f23-af80-480f-8713-fe3dc9e42157 8Gi RWO Delete Bound default/mysql local-path
验证
进入mysql容器
root@pi4-master01:~# kubectl exec -it mysql-56b767d54b-tfrng bashroot@mysql-56b767d54b-tfrng:/#
连接mysql服务
root@mysql-56b767d54b-tfrng:/# mysql -uroot -pabc123mysql: [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 1128Server version: 5.7.30-0ubuntu0.18.04.1 (Ubuntu)Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> status--------------mysql Ver 14.14 Distrib 5.7.30, for Linux (aarch64) using EditLine wrapperConnection id: 1128Current database: Current user: root@localhostSSL: Not in useCurrent pager: stdoutUsing outfile: ''Using delimiter: ;Server version: 5.7.30-0ubuntu0.18.04.1 (Ubuntu)Protocol version: 10Connection: Localhost via UNIX socketServer characterset: latin1Db characterset: latin1Client characterset: latin1Conn. characterset: latin1UNIX socket: /var/run/mysqld/mysqld.sockUptime: 1 hour 33 min 54 secThreads: 1 Questions: 2259 Slow queries: 0 Opens: 113 Flush tables: 1 Open tables: 0 Queries per second avg: 0.400--------------mysql>
基于helm在树莓派k8s集群安装mysql还是很方便的,只需要使用arm64v8架构的镜像即可。但是如果想更部署的mysql更具有个性,还是很有必要研究一下该chart的其它配置项,这些配置项我们可以通过helm inspect命令来查看
root@pi4-master01:~# helm inspect values stable/mysql## mysql image version## ref: https://hub.docker.com/r/library/mysql/tags/##image: "mysql"imageTag: "5.7.30"strategy: type: Recreatebusybox: image: "busybox" tag: "1.32"testFramework: enabled: true image: "bats/bats" tag: "1.2.1" imagePullPolicy: IfNotPresent securityContext: {}## Specify password for root user#### Default: random 10 character string# mysqlRootPassword: testing## Create a database user### mysqlUser:## Default: random 10 character string# mysqlPassword:## Allow unauthenticated access, uncomment to enable### mysqlAllowEmptyPassword: true## Create a database### mysqlDatabase:## 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## Additionnal arguments that are passed to the MySQL container.## For example use --default-authentication-plugin=mysql_native_password if older clients need to## connect to a MySQL 8 instance.args: []extraVolumes: | # - name: extras # emptyDir: {}extraVolumeMounts: | # - name: extras # mountPath: /usr/share/extras # readOnly: trueextraInitContainers: | # - name: do-something # image: busybox # command: ['do', 'something']## A string to add extra environment variables# extraEnvVars: |# - name: EXTRA_VAR# value: "extra"# Optionally specify an array of imagePullSecrets.# Secrets must be manually created in the namespace.# ref: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod# imagePullSecrets: # - name: myRegistryKeySecretName## Node selector## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselectornodeSelector: {}## Affinity## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinityaffinity: {}## Tolerations for pod assignment## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/##tolerations: []livenessProbe: initialDelaySeconds: 30 periodSeconds: 10 timeoutSeconds: 5 successThreshold: 1 failureThreshold: 3readinessProbe: initialDelaySeconds: 5 periodSeconds: 10 timeoutSeconds: 1 successThreshold: 1 failureThreshold: 3## Persist data to a persistent volumepersistence: enabled: true ## database data Persistent Volume Storage Class ## If defined, storageClassName: ## 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, standard on ## GKE, AWS & OpenStack) ## # storageClass: "-" accessMode: ReadWriteOnce size: 8Gi annotations: {}## Use an alternate scheduler, e.g. "stork".## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/### schedulerName:## Security contextsecurityContext: enabled: false runAsUser: 999 fsGroup: 999## Configure resource requests and limits## ref: http://kubernetes.io/docs/user-guide/compute-resources/##resources: requests: memory: 256Mi cpu: 100m# Custom mysql configuration files pathconfigurationFilesPath: /etc/mysql/conf.d/# Custom mysql configuration files used to override default mysql settingsconfigurationFiles: {}# mysql.cnf: |-# [mysqld]# skip-name-resolve# ssl-ca=/ssl/ca.pem# ssl-cert=/ssl/server-cert.pem# ssl-key=/ssl/server-key.pem# Custom mysql init SQL files used to initialize the databaseinitializationFiles: {}# first-db.sql: |-# CREATE DATABASE IF NOT EXISTS first DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;# second-db.sql: |-# CREATE DATABASE IF NOT EXISTS second DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;metrics: enabled: false image: prom/mysqld-exporter imageTag: v0.10.0 imagePullPolicy: IfNotPresent resources: {} annotations: {} # prometheus.io/scrape: "true" # prometheus.io/port: "9104" livenessProbe: initialDelaySeconds: 15 timeoutSeconds: 5 readinessProbe: initialDelaySeconds: 5 timeoutSeconds: 1 flags: [] serviceMonitor: enabled: false additionalLabels: {}## Configure the service## ref: http://kubernetes.io/docs/user-guide/services/service: annotations: {} ## Specify a service type ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services---service-types type: ClusterIP port: 3306 # nodePort: 32000 # loadBalancerIP:## Pods Service Account## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/serviceAccount: ## Specifies whether a ServiceAccount should be created ## create: false ## The name of the ServiceAccount to use. ## If not set and create is true, a name is generated using the mariadb.fullname template # name:ssl: enabled: false secret: mysql-ssl-certs certificates:# - name: mysql-ssl-certs# ca: |-# -----BEGIN CERTIFICATE-----# ...# -----END CERTIFICATE-----# cert: |-# -----BEGIN CERTIFICATE-----# ...# -----END CERTIFICATE-----# key: |-# -----BEGIN RSA PRIVATE KEY-----# ...# -----END RSA PRIVATE KEY-----## Populates the 'TZ' system timezone environment variable## ref: https://dev.mysql.com/doc/refman/5.7/en/time-zone-support.html#### Default: nil (mysql will use image's default timezone, normally UTC)## Example: 'Australia/Sydney'# timezone:# Deployment AnnotationsdeploymentAnnotations: {}# To be added to the database server pod(s)podAnnotations: {}podLabels: {}## Set pod priorityClassName# priorityClassName: {}## Init container resources defaultsinitContainer: resources: requests: memory: 10Mi cpu: 10m
显然,配置项很丰富,从mysql的配置文件、mysql启动pod的时区、是否开启监控都能支持。
开启监控
开启监控前,需要在集群部署prometheus,否则不会有效果。可以参考树莓派k8s集群安装监控prometheus进行部署。
开启监控,需要设置metrics.enabled和metrics.serviceMonitor.enabled为true,且metrics.image需要设置为支持arm64v8架构的镜像监控才能使用,这里选择的镜像是pi4k8s/prom-mysqld-exporter:v0.12.1,具体的Dockerfile参考如下
FROM arm64v8/ubuntu:18.04RUN sed -i "s/ports.ubuntu.com/mirrors.aliyun.com/g" /etc/apt/sources.list \ && cd opt && apt update && apt upgrade -y \ && apt -y install wget \ && wget -q "https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-arm64.tar.gz" \ && tar -zxf mysqld_exporter-0.12.1.linux-arm64.tar.gz \ && rm -rf mysqld_exporter-0.12.1.linux-arm64.tar.gz \ && apt remove -y --purge wget && apt clean \ && rm -rf /tmp/* /var/cache/* /usr/share/doc/* /usr/share/man/* /var/lib/apt/lists/* \ && mv /opt/mysqld_exporter-0.12.1.linux-arm64/mysqld_exporter /bin/mysqld_exporterUSER nobodyEXPOSE 9104ENTRYPOINT [ "/bin/mysqld_exporter" ]# arm64v8# docker build . -t pi4k8s/prom-mysqld-exporter:v0.12.1
使用helm安装开启监控的mysql命令如下
helm install -n mysql \stable/mysql \--set image=biarms/mysql \--set imageTag=5.7.30-linux-arm64v8 \--set busybox.image=arm64v8/busybox \--set mysqlRootPassword=abc123 \--set metrics.enabled=true \--set metrics.image=pi4k8s/prom-mysqld-exporter \--set metrics.imageTag=v0.12.1 \--set metrics.serviceMonitor.enabled=true
确认安装状态
root@pi4-master01:~# kubectl get po|grep mysqlmysql-7b74677bf4-shchz 2/2 Running 0 11hroot@pi4-master01:~# kubectl get svc|grep mysqlmysql ClusterIP 10.107.31.127 3306/TCP,9104/TCP 11hroot@pi4-master01:~# kubectl get servicemonitor|grep mysqlmysql 11h在prometheus查看exporter是否生效
生效后在grafana系统配置mysql监控面板
mysql监控面板 :https://grafana.com/grafana/dashboards/7362
部署步骤如下:
点"Upload .json file"按钮,选择已经下载好的mysql监控面板文件 ,进入面试设置界面如下
设置好相应参数后,点"Import"按钮,继续导入,引导入mysql监控页面如下
总结
本实践简单介绍了如何使用chart在树莓派k8s集群用helm部署mysql并配置对于mysql的监控,读者可以基于自己的需要自行调整mysql参数以便适用更多场景。
参考:
树莓派 k8s 集群入坑指南(点击阅读原文直达链接)
树莓派k8s集群安装监控prometheus
g hub安装失败_树莓派k8s集群安装mysql及监控相关推荐
- 备份k8s_树莓派k8s集群安装kafka集群及监控
安装准备 树莓派k8s集群 root@pi4-master01:~# kubectl get nodes -o wideNAME STATUS ROLES AGE VERSION INTERNAL-I ...
- Hadoop集群安装部署_伪分布式集群安装_02
文章目录 一.解压安装 1. 安装包上传 2. 解压hadoop安装包 二.修改Hadoop相关配置文件 2.1. hadoop-env.sh 2.2. core-site.xml 2.3. hdfs ...
- Hadoop集群安装部署_伪分布式集群安装_01
文章目录 一.配置基础环境 1. 设置静态ip 2. hostname 3. firewalld 4. ssh免密码登录 5. JDK 一.配置基础环境 1. 设置静态ip [root@bigdata ...
- Kubeadm安装高可用的K8S集群--多master单node
Kubeadm安装高可用的K8S集群–多master单node master1 IP 192.168.1.180/24 OS Centos7.6 master2 IP 192.168.1.181/24 ...
- 一起来学k8s 38. 二进制k8s集群安装EFK
二进制k8s集群安装EFK 环境准备 ##/etc/hosts 192.168.48.101 master01 192.168.48.102 master02 192.168.48.103 maste ...
- Kubeadm 快速搭建 k8s 集群安装可视化管理界面
文章目录 1. 实验准备 2. 安装 docker 3. 配置阿里云 K8S repo 源(三个节点) 4. 安装 kubeadm,kubelet,kubectl(三个节点) 5. 部署 kubern ...
- K8S 集群安装和学习
文章目录 K8S 集群的安装 参考文章 操作系统准备 查看和升级系统内核 安装图形界面 配置系统环境变量 安装Docker 和 K8S 集群初始化 添加集群节点 检查安装结果 Kubernets Da ...
- Kubernetes(k8s)集群安装(需要3台centos7)
k8s安装的命令 1:关闭防火墙,关闭selinux 2:修改主机名 3:修改hosts文件 4:禁用swap内存交换 5:安装docker 6:上传k8s.repo 7:初始化集群 8:初始化k8s ...
- Kubernetes的学习笔记总结之k8s集群安装部署
kubernets 集群安装部署. 安装 Docker 所有节点都需要安装 Docker. apt-get update && apt-get install docker.io 安装 ...
最新文章
- python使用fpdf将生成的长字符串手动换行写入pdf
- linux的消息机制,linux消息机制的过程是什么啊,请赐教
- tensorflow 学习:用CNN进行图像分类
- java 构造方法和析构方法_PHP面向对象程序设计之构造方法和析构方法详解
- cp命令的编写——浅谈系统调用
- 书呆子rico_寻找设计和类型书呆子的清道夫
- 微信公众平台——被动回复用户消息
- 存储技术与iSCSI
- Executor源码解读
- ios html gif 显示,显示gif时出现巨大的内存使用Swift iOS
- vba显示正在加载_利用VBA代码显示工作簿的路径及完全路径的方案及对工作薄的操作...
- 中望lisp加密_alisp文件加密测试.LSP
- Pyramidal Convolution Rethinking Convolutional Neural Networks for Visual Recognition
- 数仓 - 生命周期、用户价值、忠诚度、活跃度计算
- 没事别想不开去创业公司
- 京东上什么卖得最好?
- [解疑][TI]TI毫米波雷达系列(三):调频连续波雷达回波信号3DFFT处理原理(测距、测速、测角)
- 微信H5手机网页开发—快速入门
- 【实验五 一维数组】7-9 sdut-C语言实验- 排序
- 转大数据开发,适合什么岗位?
热门文章
- 最简单的PHP MVC留言本实例(二)
- 以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机...
- RHCSA试题+答案
- 从当前文件夹以及子文件夹中,批量移动指定名字的文件
- org.apache.hadoop.hbase.TableNotDisabledException 解决方法
- okhttp3 ExceptionInInitializerError 异常处理
- 解决FastCGI 进程超过了配置的活动超时时限的问题
- SpringMVC项目中中文字符乱码问题及解决办法总结(非专业最优解决办法) -- ajax传值乱码; request.getParameter()乱码;
- IIS7 应用程序池自动回收关闭的解决方案
- Message:Unable to locate element 问题解决方法