在过去的几年里,我们看到人们对在Kubernetes中运行数据库和有状态工作负载越来越感兴趣。与跨度><一个href="https://kubernetes.io/blog/2019/01/15/container-storage-interface-ga/">容器存储接口跨度>一个><跨度风格=“粗细:400;”>(CSI)的成熟和越来越多的运营商的出现,在您喜欢的平台上运行有状态工作负载不再那么可怕了。我们在Percona的Kubernetes故事开雷竞技下载官网始于跨度><一个href="//m.doggingzone.com/software/percona-kubernetes-operators">运营商跨度>一个><跨度风格=“粗细:400;”>用于MySQL和MongoDB,稍后将添加PostgreSQL。跨度>
我们正在介绍的技术预览跨度><一个href="https://helm.sh">舵跨度>一个><跨度风格=“粗细:400;”>图表,以便在Kubernetes中轻松部署PMM。雷竞技下载官网您可以在我们的helm chart存储库中找到它跨度><一个href="https://github.com/percona/percona-helm-charts/tree/main/charts/pmm">在这里跨度>一个><跨度风格=“粗细:400;”>。跨度>
用例
单一平台
如果Kubernetes是你选择的一个平台,目前你需要一个单独的虚拟机来运行Percona Monitoring and Management。雷竞技下载官网raybet雷竞技竞猜在线官网不要再介绍舵图了。跨度>
如你所知,Percona 雷竞技下载官网operator都集成了PMM,可以监控部署在Kubernetes上的数据库。raybet雷竞技竞猜在线官网操作人员配置和部署PMM -client侧车容器,并在PMM服务器上注册节点。将PMM引入Kubernetes简化了这种集成和整个流程。现在PMM -client和PMM服务器之间的网络流量根本不会离开Kubernetes集群。跨度>
您所要做的就是在Custom Resource清单中的pmm部分中设置正确的端点。例如,对于<一个href="//m.doggingzone.com/doc/kubernetes-operator-for-psmongodb/index.html">雷竞技下载官网MongoDB的Percona Operator一个>, PMM部分看起来像这样:跨度>
|
1
2
3.
4
|
pmm跨度><跨度class="crayon-sy">:跨度>
启用跨度><跨度class="crayon-sy">:跨度><跨度class="crayon-h">
真正的跨度>
图像跨度><跨度class="crayon-sy">:跨度><跨度class="crayon-h">
雷竞技下载官网/<跨度class="crayon-i">pmm跨度>-<跨度class="crayon-i">客户端跨度><跨度class="crayon-sy">:跨度><跨度class="crayon-cn">2.28.0跨度>
serverHost跨度><跨度class="crayon-sy">:跨度><跨度class="crayon-h">
raybet雷竞技竞猜在线官网监控跨度>-<跨度class="crayon-i">服务跨度>
|
在哪里跨度><跨度风格=“粗细:400;”>raybet雷竞技竞猜在线官网监控服务跨度><跨度风格=“粗细:400;”>是由helm图表创建的用于公开PMM服务器的服务。跨度>
高可用性
雷竞技下载官网Praybet雷竞技竞猜在线官网ercona Monitoring and Management有很多可移动的部分:Victoria Metrics用于存储时间序列数据,ClickHouse用于查询分析功能,PostgreSQL用于保存PMM配置。现在,所有这些组件都是单一容器或虚拟机的一部分,Grafana作为前端。为了在任何环境中提供零停机部署,我们需要解耦这些组件。这将大大复杂化PMM的安装和管理。跨度>
我们现在提供的是在故障发生时在几分钟内自动恢复PMM的方法(例如利用EC2自愈机制)。跨度>
Kubernetes是一个用于容器编排的控制平面,可以为工程师自动执行手动任务。当你在Kubernetes中运行软件时,最好依靠它的原语来处理所有繁重的工作。这就是PMM在Kubernetes中的样子:跨度>

- statfulset控制Pod的创建跨度>
- 有一个单独的Pod,其中有一个容器,其中包含所有组件跨度>
- 该Pod通过PMM用户和PMM客户端使用的服务公开跨度>
- 所有数据都存储在一个持久卷中跨度>
- ConfigMap有各种环境变量跨度><一个href="//m.doggingzone.com/doc/percona-monitoring-and-management/1.x/glossary.option.html">设置跨度>一个><跨度风格=“粗细:400;”>可以帮助微调PMM跨度>
如果节点或Pod发生故障,StatefulSet将自动恢复PMM Pod并将Persistent Volume重新挂载到它。恢复时间取决于集群的负载和节点的可用性,但在正常的操作环境中,PMM Pod在一分钟内就会启动并再次运行。跨度>
部署
让我们看看如何在Kubernetes中部署PMM。跨度>
添加舵图:跨度>
|
1
2
|
舵跨度><跨度class="crayon-e">回购跨度><跨度class="crayon-e">添加跨度><跨度class="crayon-e">雷竞技下载官网
https跨度><跨度class="crayon-sy">:跨度>//<跨度class="crayon-i">雷竞技下载官网
.github跨度><跨度class="crayon-e">.io跨度>/<跨度class="crayon-i">雷竞技下载官网-<跨度class="crayon-i">舵跨度>-<跨度class="crayon-i">图表跨度>/
舵跨度><跨度class="crayon-e">回购跨度><跨度class="crayon-i">更新跨度>
|
安装PMM:跨度>
|
1
|
舵跨度><跨度class="crayon-e">安装跨度><跨度class="crayon-i">pmm跨度><跨度class="crayon-h">--<跨度class="crayon-e">集跨度><跨度class="crayon-i">服务跨度><跨度class="crayon-e">.type跨度>=<跨度class="crayon-s">“loadbalance”跨度><跨度class="crayon-h">
雷竞技下载官网/<跨度class="crayon-i">pmm跨度>
|
您现在可以使用LoadBalancer IP地址登录到PMM,并使用存储在<跨度id="crayon-64368b5bc74f5485747607" class="crayon-syntax crayon-syntax-inline crayon-theme-familiar crayon-theme-familiar-inline crayon-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;">pmm跨度>-<跨度class="crayon-i">秘密跨度>跨度>跨度>年代ecret对象(默认用户为admin)。跨度>
调用为PMM创建的Service对象<跨度id="crayon-64368b5bc74f6727672413" class="crayon-syntax crayon-syntax-inline crayon-theme-familiar crayon-theme-familiar-inline crayon-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;">raybet雷竞技竞猜在线官网监控跨度>-<跨度class="crayon-i">服务跨度>跨度>跨度>:跨度>
|
1
2
3.
4
5
6
7
8
9
10
11
12
|
美元跨度><跨度class="crayon-h">
kubectl跨度><跨度class="crayon-r">得到跨度><跨度class="crayon-h">
服务跨度><跨度class="crayon-i">raybet雷竞技竞猜在线官网监控跨度>-<跨度class="crayon-e">服务跨度>
名字跨度><跨度class="crayon-h">
类型跨度><跨度class="crayon-h">
集群跨度>-<跨度class="crayon-i">知识产权跨度><跨度class="crayon-h">
外部跨度>-<跨度class="crayon-i">知识产权跨度><跨度class="crayon-h">
港口跨度><跨度class="crayon-sy">(跨度><跨度class="crayon-i">年代跨度><跨度class="crayon-sy">)跨度><跨度class="crayon-h">
年龄跨度>
raybet雷竞技竞猜在线官网监控跨度>-<跨度class="crayon-i">服务跨度><跨度class="crayon-h">
loadbalance跨度><跨度class="crayon-h">
10.68.29.40跨度><跨度class="crayon-h">
108.59.80.108跨度><跨度class="crayon-h">
443跨度><跨度class="crayon-sy">:跨度><跨度class="crayon-cn">32591跨度>/<跨度class="crayon-i">TCP跨度><跨度class="crayon-h">
3 m34s跨度>
美元跨度><跨度class="crayon-h">
kubectl跨度><跨度class="crayon-r">得到跨度><跨度class="crayon-h">
秘密跨度><跨度class="crayon-i">pmm跨度>-<跨度class="crayon-i">秘密跨度><跨度class="crayon-h">-<跨度class="crayon-i">o跨度><跨度class="crayon-h">
yaml跨度>
apiVersion跨度><跨度class="crayon-sy">:跨度><跨度class="crayon-h">
v1跨度>
数据跨度><跨度class="crayon-sy">:跨度>
PMM_ADMIN_PASSWORD跨度><跨度class="crayon-sy">:跨度><跨度class="crayon-h">
LE5lSTx3IytrUWBmWEhFTQ跨度>==
…
美元跨度><跨度class="crayon-h">
回声跨度><跨度class="crayon-h">
“LE5lSTx3IytrUWBmWEhFTQ = =”跨度><跨度class="crayon-h">
|跨度><跨度class="crayon-h">
base64跨度><跨度class="crayon-h">--<跨度class="crayon-i">解码跨度><跨度class="crayon-h">& &<跨度class="crayon-h">
回声跨度>
,跨度><跨度class="crayon-i">NeI跨度><跨度class="crayon-h"><跨度><跨度class="crayon-i">w跨度><跨度class="crayon-c"># + kQ 'fXHEM跨度>
|
通过连接到登录到PMM跨度><跨度风格=“粗细:400;”>HTTPS:// < YOUR_PUBLIC_IP >。跨度>
定制
Helm chart是YAML清单的模板引擎,它允许用户自定义部署。您可以看到可以设置以微调PMM安装的各种参数跨度><一个href="https://github.com/percona/percona-helm-charts/tree/main/charts/pmm">自述跨度>一个><跨度风格=“粗细:400;”>。跨度>
例如,要设置选择另一个存储类并设置所需的存储大小,请设置以下标志:跨度>
|
1
2
3.
|
舵跨度><跨度class="crayon-e">安装跨度><跨度class="crayon-e">pmm跨度><跨度class="crayon-i">雷竞技下载官网/<跨度class="crayon-i">pmm跨度><跨度class="crayon-h">
\跨度>
--<跨度class="crayon-e">集跨度><跨度class="crayon-i">存储跨度><跨度class="crayon-e">.storageClassName跨度>=<跨度class="crayon-s">“premium-rwo”跨度><跨度class="crayon-h">
\跨度>
- - -<跨度class="crayon-e">集跨度><跨度class="crayon-i">存储跨度><跨度class="crayon-e">.size跨度>="<跨度class="crayon-cn">20胃肠道跨度>”
|
中也可以更改这些参数跨度><一个href="https://github.com/percona/percona-helm-charts/blob/main/charts/pmm/values.yaml">values.yaml跨度>一个><跨度风格=“粗细:400;”>并使用“-f”标志:跨度>
|
1
2
3.
4
5
6
7
|
#值。yamlcontents跨度>
存储跨度><跨度class="crayon-sy">:跨度>
storageClassName跨度><跨度class="crayon-sy">:跨度><跨度class="crayon-h">”<跨度class="crayon-i">溢价跨度>-<跨度class="crayon-i">两跨度>”
大小跨度><跨度class="crayon-sy">:跨度><跨度class="crayon-h">
20胃肠道跨度>
<跨度><跨度class="crayon-e">跨度跨度><跨度class="crayon-i">风格跨度>=<跨度class="crayon-s">“粗细:400;”跨度><跨度class="crayon-h">>跨度><跨度class="crayon-e">舵跨度><跨度class="crayon-e">安装跨度><跨度class="crayon-e">pmm跨度><跨度class="crayon-i">雷竞技下载官网/<跨度class="crayon-i">pmm跨度><跨度class="crayon-h">-<跨度class="crayon-i">f跨度><跨度class="crayon-h">
值跨度><跨度class="crayon-e">.yaml跨度><跨度class="crayon-h"><跨度>/<跨度class="crayon-i">跨度跨度><跨度class="crayon-h">>跨度>
|
维护
对于大多数维护任务,可以使用常规的Kubernetes技术。让我们回顾几个例子。跨度>
计算比例
可以通过添加或删除资源来垂直扩展PMM<跨度id="crayon-64368b5bc74fd497861934" class="crayon-syntax crayon-syntax-inline crayon-theme-familiar crayon-theme-familiar-inline crayon-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;">pmmResources跨度>跨度>跨度>values.yaml中的变量。跨度>
|
1
2
3.
4
5
6
7
|
pmmResources跨度><跨度class="crayon-sy">:跨度>
请求跨度><跨度class="crayon-sy">:跨度>
内存跨度><跨度class="crayon-sy">:跨度><跨度class="crayon-h">
“4 gi”跨度>
cpu跨度><跨度class="crayon-sy">:跨度><跨度class="crayon-h">
“2”跨度>
限制跨度><跨度class="crayon-sy">:跨度>
内存跨度><跨度class="crayon-sy">:跨度><跨度class="crayon-h">
“8 gi”跨度>
cpu跨度><跨度class="crayon-sy">:跨度><跨度class="crayon-h">
“4”跨度>
|
完成后,升级部署:跨度>
|
1
|
舵跨度><跨度class="crayon-i">升级跨度><跨度class="crayon-h">-<跨度class="crayon-i">f跨度><跨度class="crayon-h">
值跨度><跨度class="crayon-e">.yaml跨度><跨度class="crayon-h">
pmm跨度><跨度class="crayon-i">雷竞技下载官网/<跨度class="crayon-i">pmm跨度>
|
这将重新启动PMM Pod,因此最好仔细计划它,以免扰乱团队的工作。跨度>
存储扩展
这在很大程度上取决于您的存储接口功能和底层实现。在大多数云中,持久卷可以是跨度><一个href="https://kubernetes.io/docs/concepts/storage/storage-classes/">扩大跨度>一个><跨度风格=“粗细:400;”>。你可以通过描述它来检查你的存储类是否支持它:跨度>
|
1
2
3.
|
kubectl跨度><跨度class="crayon-e">描述跨度><跨度class="crayon-e">storageclass跨度><跨度class="crayon-i">标准跨度>
…
AllowVolumeExpansion跨度><跨度class="crayon-sy">:跨度><跨度class="crayon-h">
真正的跨度>
|
不幸的是,只是在值中更改存储的大小。yaml (跨度><跨度风格=“粗细:400;”>storage.size跨度><跨度风格=“粗细:400;”>)将不起作用,您将看到以下错误:跨度>
|
1
2
|
舵跨度><跨度class="crayon-i">升级跨度><跨度class="crayon-h">-<跨度class="crayon-i">f跨度><跨度class="crayon-h">
值跨度><跨度class="crayon-e">.yaml跨度><跨度class="crayon-h">
pmm跨度><跨度class="crayon-i">雷竞技下载官网/<跨度class="crayon-e">pmm跨度>
错误跨度><跨度class="crayon-sy">:跨度><跨度class="crayon-h">
升级跨度><跨度class="crayon-i">失败的跨度><跨度class="crayon-sy">:跨度><跨度class="crayon-h">
不能跨度><跨度class="crayon-r">补丁跨度><跨度class="crayon-h">
“pmm”跨度><跨度class="crayon-h">
与跨度><跨度class="crayon-e">种类跨度><跨度class="crayon-i">StatefulSet跨度><跨度class="crayon-sy">:跨度><跨度class="crayon-h">
StatefulSet跨度><跨度class="crayon-e">.apps跨度><跨度class="crayon-h">
“pmm”跨度><跨度class="crayon-h">
是跨度><跨度class="crayon-h">
无效的跨度><跨度class="crayon-sy">:跨度><跨度class="crayon-h">
规范跨度><跨度class="crayon-sy">:跨度><跨度class="crayon-h">
被禁止的跨度><跨度class="crayon-sy">:跨度><跨度class="crayon-h">
更新跨度><跨度class="crayon-st">来跨度><跨度class="crayon-h">
statefulset跨度><跨度class="crayon-e">规范跨度><跨度class="crayon-st">为跨度><跨度class="crayon-h">
字段跨度><跨度class="crayon-e">其他跨度><跨度class="crayon-i">比跨度><跨度class="crayon-h">
“副本”跨度><跨度class="crayon-sy">,跨度><跨度class="crayon-h">
“模板”跨度><跨度class="crayon-sy">,跨度><跨度class="crayon-h">
和跨度><跨度class="crayon-h">
“updateStrategy”跨度><跨度class="crayon-h">
是跨度><跨度class="crayon-i">被禁止的跨度>
|
我们使用statfulset对象来部署PMM,而statfulset大多是不可变的,有一些东西可以动态更改。不过这里有个小窍门。跨度>
首先,删除statfulset,但保留pod和pvc:跨度>
|
1
|
kubectl跨度><跨度class="crayon-e">删除跨度><跨度class="crayon-e">sts跨度><跨度class="crayon-i">pmm跨度><跨度class="crayon-h">--<跨度class="crayon-i">级联跨度>=<跨度class="crayon-i">孤儿跨度>
|
使用新的存储配置重新创建它:跨度>
|
1
|
舵跨度><跨度class="crayon-i">升级跨度><跨度class="crayon-h">-<跨度class="crayon-i">f跨度><跨度class="crayon-h">
值跨度><跨度class="crayon-e">.yaml跨度><跨度class="crayon-h">
pmm跨度><跨度class="crayon-i">雷竞技下载官网/<跨度class="crayon-i">pmm跨度>
|
它将用新的存储大小配置重新创建StatefulSet。跨度>
手动编辑Persistent Volume Claim并更改存储大小(您可以使用不同的PVC名称)。你需要更改存储空间跨度><跨度风格=“粗细:400;”>spec.resources.requests.storage跨度><跨度风格=“粗细:400;”>部分:跨度>
|
1
|
kubectl跨度><跨度class="crayon-e">编辑跨度><跨度class="crayon-e">聚氯乙烯跨度><跨度class="crayon-i">pmm跨度>-<跨度class="crayon-i">存储跨度>-<跨度class="crayon-i">pmm跨度>-<跨度class="crayon-cn">0跨度>
|
PVC还没有调整大小,当你描述它时,你可以看到以下消息:跨度>
|
1
2
3.
4
5
6
|
kubectl跨度><跨度class="crayon-e">描述跨度><跨度class="crayon-e">聚氯乙烯跨度><跨度class="crayon-i">pmm跨度>-<跨度class="crayon-i">存储跨度>-<跨度class="crayon-i">pmm跨度>-<跨度class="crayon-cn">0跨度>
…
条件跨度><跨度class="crayon-sy">:跨度>
类型跨度><跨度class="crayon-h">
状态跨度><跨度class="crayon-h">
LastProbeTime跨度><跨度class="crayon-h">
LastTransitionTime跨度><跨度class="crayon-h">
原因跨度><跨度class="crayon-h">
消息跨度>
----<跨度class="crayon-h">
------<跨度class="crayon-h">-----------------<跨度class="crayon-h">
------------------<跨度class="crayon-h">
------<跨度class="crayon-h">-------
FileSystemResizePending跨度><跨度class="crayon-h">
真正的跨度><跨度class="crayon-h">
我的跨度><跨度class="crayon-sy">,跨度><跨度class="crayon-h">
01跨度><跨度class="crayon-h">
1月跨度><跨度class="crayon-h">
0001跨度><跨度class="crayon-h">
00跨度><跨度class="crayon-sy">:跨度><跨度class="crayon-cn">00跨度><跨度class="crayon-sy">:跨度><跨度class="crayon-cn">00跨度><跨度class="crayon-h">+<跨度class="crayon-cn">0000跨度><跨度class="crayon-h">
星期四跨度><跨度class="crayon-sy">,跨度><跨度class="crayon-h">
16跨度><跨度class="crayon-h">
小君跨度><跨度class="crayon-h">
2022跨度><跨度class="crayon-h">
11跨度><跨度class="crayon-sy">:跨度><跨度class="crayon-cn">55跨度><跨度class="crayon-sy">:跨度><跨度class="crayon-cn">56跨度><跨度class="crayon-h">+<跨度class="crayon-cn">0300跨度><跨度class="crayon-h">
等待跨度><跨度class="crayon-st">为跨度><跨度class="crayon-h">
用户跨度><跨度class="crayon-st">来跨度><跨度class="crayon-h">
(跨度><跨度class="crayon-i">再保险跨度>-<跨度class="crayon-sy">)跨度><跨度class="crayon-i">开始跨度><跨度class="crayon-h">
一个跨度><跨度class="crayon-h">
圆荚体跨度><跨度class="crayon-st">来跨度><跨度class="crayon-h">
完成跨度><跨度class="crayon-r">文件跨度><跨度class="crayon-h">
系统跨度><跨度class="crayon-e">调整跨度><跨度class="crayon-e">的跨度><跨度class="crayon-e">体积跨度><跨度class="crayon-e">在跨度><跨度class="crayon-i">节点跨度><跨度class="crayon-sy">。跨度>
|
最后一步是重新启动Pod:跨度>
|
1
|
kubectl跨度><跨度class="crayon-e">删除跨度><跨度class="crayon-e">圆荚体跨度><跨度class="crayon-i">pmm跨度>-<跨度class="crayon-cn">0跨度>
|
升级
运行跨度><跨度风格=“粗细:400;”>执掌升级跨度><跨度风格=“粗细:400;”>是一种推荐的方法。一旦发布了新的掌舵图,或者当您想通过替换文件中的图像来升级PMM的新版本时跨度><跨度风格=“粗细:400;”>图像跨度><跨度风格=“粗细:400;”>部分。跨度>
备份和恢复
PMM将所有数据存储在一个Persistent Volume中。如前所述,这里可以应用常规的Kubernetes技术来备份和恢复数据。有很多选择:跨度>
- 卷快照跨度>一个><跨度风格=“粗细:400;”>-检查您的CSI和存储实现是否支持它跨度>
- 第三方工具,比如跨度><一个href="https://velero.io/docs/">Velero跨度>一个><跨度风格=“粗细:400;”>,可以处理备份和恢复的pvc跨度>
- 存储提供的快照(例如AWS EBS快照)在恢复期间手动映射到PVC跨度>
接下来会发生什么
为了让你保持兴奋,我们正在做或计划做很多事情来支持进一步的Kubernetes集成。跨度>
OpenShift支持
我们正在构建一个无根的容器,这样OpenShift用户就可以在那里运行Percona监控和管理,而无需授予更高的权限。雷竞技下载官网raybet雷竞技竞猜在线官网跨度>
Microservices架构
这个问题我们内部已经讨论了一段时间了。如前所述,PMM中有许多组件。为了实现适当的水平扩展,我们需要分解我们的整体容器,并将这些组件作为单独的微服务运行。跨度>
管理所有这些独立的容器和pod(如果我们谈论的是Kubernetes),将需要提出单独的维护策略。这就提出了为PMM创建一个单独的Operator来管理所有这些的问题,但这是一项重要的工作。如果你有什么意见,请在我们的社区论坛上告诉我们。跨度>
在DBaaS中自动注册k8s
如您所知,Percona监雷竞技下载官网控raybet雷竞技竞猜在线官网和管理附带的技术预览跨度><一个href="https://docs.percona.com/percona-monitoring-and-management/using/dbaas.html">数据库即服务(DBaaS)跨度>一个><跨度风格=“粗细:400;”>。现在,当您在Kubernetes集群上安装PMM时,您仍然需要注册集群以部署数据库。我们希望自动化此过程,以便在安装后您可以立即开始部署和管理数据库。跨度>
结论
雷竞技下载官网Praybet雷竞技竞猜在线官网ercona监控与管理使数据库管理员和站点可靠性工程师能够查明开源数据库环境中的问题,无论是快速查看仪表板还是使用Query Analytics进行详细分析。雷竞技下载官网Percona在Kubernetes上对PMM的支持是对我们正在改造其基础设施的客户需求的回应。跨度>
一些有用的链接可以帮助你在Kubernetes上部署PMM:跨度>





优秀的youtube视频。使用服务类型的示例非常完美。这在其他地方没有记录,一些k8s平台需要负载均衡器服务而不是nodeport。感谢视频和文档。