利用Helm在K8S上部署 PolarDB-X 集群(详细步骤--亲测!!!)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 利用Helm在K8S上部署 PolarDB-X 集群(详细步骤--亲测!!!)

1、Helm简介

Helm 是 Kubernetes 上的包管理器,用来管理 Kubernetes 应用程序,Helm Charts 可帮助您定义,安装和升级复杂的 Kubernetes 应用程序。Helm 把 Kubernetes 资源(比如deployments、services或ingress等) 打包到一个chart 中,而 chart 被保存到 chart 仓库。通过 chart 仓库可用来存储和分享 chart。 Helm 使发布可配置,支持发布应用配置的版本管理,简化了 Kubernetes 部署应用的版本控制、打包、发布、删除、更新等操作。

Helm 之于 Kubernetes 好比 yum 之于 RHEL,或者 apt-get 之于 Ubuntu。Helm 使用 Chart 帮助我们管理应用,Chart 就好像 RPM 一样,里面描述了应用及其依赖关系

helm v3 版本了移除 Tiller、让 Helm 成为一个纯客户端工具。

Helm 可以理解为 Kubernetes 的包管理工具,可以方便地发现、共享和使用为 Kubernetes 构建的应用。

  • Chart:Helm 应用(package),包括该应用的所有 Kubernetes manifest 模版,类似于 [YUM] RPM 或 Apt
    dpkg 文件。
  • Repository:Helm package 存储仓库。
  • Release:chart 的部署实例,每个 chart 可以部署一个或多个 release。

2、Helm 和 kubernetes 对应版本

Helm版本 支持的Kubernetes版本
3.8.x 1.23.x - 1.20.x
3.7.x 1.22.x - 1.19.x
3.6.x 1.21.x - 1.18.x
3.5.x 1.20.x - 1.17.x
3.4.x 1.19.x - 1.16.x
3.3.x 1.18.x - 1.15.x
3.2.x 1.18.x - 1.15.x
3.1.x 1.17.x - 1.14.x
3.0.x 1.16.x - 1.13.x
2.16.x 1.16.x - 1.15.x
2.15.x 1.15.x - 1.14.x
2.14.x 1.14.x - 1.13.x
2.13.x 1.13.x - 1.12.x
2.12.x 1.12.x - 1.11.x
2.11.x 1.11.x - 1.10.x
2.10.x 1.10.x - 1.9.x
2.9.x 1.10.x - 1.9.x
2.8.x 1.9.x - 1.8.x
2.7.x 1.8.x - 1.7.x
2.6.x 1.7.x - 1.6.x
2.5.x 1.6.x - 1.5.x
2.4.x 1.6.x - 1.5.x
2.3.x 1.5.x - 1.4.x
2.2.x 1.5.x - 1.4.x
2.1.x 1.5.x - 1.4.x
2.0.x 1.4.x - 1.3.x

3、Helm chart 仓库

3.1 添加仓库

##阿里云
$ helm repo add ali-stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
##bitnami
$ helm repo add bitnami https://charts.bitnami.com/bitnami
##kube-charts-mirror
$ helm repo add stable https://burdenbear.github.io/kube-charts-mirror
##chart repository
$ helm repo add gf-stable https://charts.helm.sh/stable

3.2 查看仓库

helm repo list

3.3 更新chart仓库

helm repo update

3.4 移除chart仓库

helm repo remove gf-stable

3.5 查看可安装的charts

# 展现仓库的charts
helm search repo

3.6 搜索charts

# helm search repo可以在已添加的存储库中找到chart的名称
# 搜索nginx
helm search repo nginx

3.7 展示charts的详细信息

# 展示charts的详细信息
helm show all bitnami/nginx

3.8 查看charts上可配置的选项

helm show values bitnami/nginx

3.9 安装charts

# 安装
# 在最简单的情况下,它需要两个参数:您选择的版本名称和您要安装的charts的名称
# helm install happy-panda bitnami/wordpress
# 如果您希望Helm为您生成名称,请省略发布名称并使用--generate-name
# helm install --generate-name bitnami/wordpress
# 更多安装方式
# 1、一个charts存储库(正如我们在上面看到的)
# 2、本地charts存档(helm install foo foo-0.1.1.tgz)
# 3、解压后的charts目录(helm install foo path/to/foo)
# 4、完整网址(helm install foo https://example.com/charts/foo-1.2.3.tgz)
# 安装bitnami/wordpress: helm install --generate-name bitnami/wordpress
# 下面部署nginx应用,直接覆盖参数部署为NodePort类型
helm install my-nginx-app --set service.type=NodePort bitnami/nginx

3.9 查看安装列表

# helm ls 
# 或者
# helm list
[root@master ~]# helm  ls
NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
my-nginx-app    default         1               2023-07-11 20:41:00.409971233 +0800 CST deployed        

3.10 查看状态

helm status my-nginx-app
# 当然我们也可以通过kubectl命令查看相关的pod是否创建成功
kubectl get svc,pod -o wide
NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE     SELECTOR
service/kubernetes     ClusterIP   10.96.0.1       <none>        443/TCP        24h     <none>
service/my-nginx-app   NodePort    10.100.84.209   <none>        80:30585/TCP   4m36s   app.kubernetes.io/instance=my-nginx-app,app.kubernetes.io/name=nginx
NAME                                READY   STATUS    RESTARTS   AGE     IP              NODE     NOMINATED NODE   READINESS GATES
pod/my-nginx-app-5f4f995dfd-wk49k   1/1     Running   0          4m36s   10.244.140.85   slave2   
# 浏览器访问
# http://<node-ip>:ndoeport
curl 192.168.226.200:30585
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>

3.11 卸载

# 卸载
helm uninstall my-nginx-app
release "my-nginx-app" uninstalled

4、helm3的安装

4.1 通过二进制方式安装helm3

首先,前提是搭建了一套k8s集群,检查集群状态:

kubectl get node

#下载helm压缩包
wget https://get.helm.sh/helm-v3.5.2-linux-amd64.tar.gz
#解压
tar -zxf helm-v3.5.2-linux-amd64.tar.gz
#移动helm到bin目录下
mv linux-amd64/helm /usr/local/bin/
#查看helm版本
helm version

#helm版本信息
version.BuildInfo{Version:"v3.5.2", GitCommit:"167aac70832d3a384f65f9745335e9fb40169dc2", GitTreeState:"dirty", GoVersion:"go1.15.7"}

4.2 chart的目录结构

#创建一个chart, 指定chart名:mychart 
helm create my chart 
tree mychart/
mychart/                           #chart包的名称
├── charts                         #存放子chart的目录, 目录里存放这个chart依赖的所有子chart Chart.yaml
├── Chart.yaml                     #保存chart的基本信息, 包括名字、描述信息及版本等, 这个变量文件都可以被templates目录下文件所引用
├── templates                      #模板文件目录, 目录里面存放所有yaml模板文件, 包含了所有部署应用的yaml文件
│   ├── deployment.yaml            #创建deployment对象的模板文件 
│   ├── _helpers.tpl               #放置模板助手的文件, 可以在整个chart中重复使用, 是放一些templates目录下这些yaml都有可能会用的一些模板
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── NOTES.txt                  #存放提示信息的文件, 介绍chart帮助信息, helm install部署后展示给用户.如何使用chart等, 是部署chart后给用户的提示信息 
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests     #用于测试的文件, 测试完部署完chart后, 如web, 做一个链接, 看看你是否部署正常
│       └── test-connection.yaml   
└── values.yaml    #用于渲染模板的文件(变量文件,定义变量的值)定义templates目录下的yaml文件可能引用到的变量   #values.yaml用于存储templates目录中模板文件中用到变量的值, 这些变量定义都是为了让templates目录下yaml引用

Chart.yaml文件字段说明

cat Chart.yaml 
apiVersion: v2
name: mychart
description: A Helm chart for Kubernetes
# A chart can be either an 'application' or a 'library' chart.
#
# Application charts are a collection of templates that can be packaged into versioned archives
# to be deployed.
#
# Library charts provide useful utilities or functions for the chart developer. They're included as
# a dependency of application charts to inject those utilities and functions into the rendering
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
type: application
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 0.1.0
# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to
# follow Semantic Versioning. They should reflect the version the application is using.
# It is recommended to use it with quotes.
appVersion: "1.16.0"

5、部署 PolarDB-X Operator

5.1 前置条件

开始之前,请确保满足以下前置要求:

已经准备了一个运行中的 Kubernetes 集群,并确保

  • 集群版本 >= 1.18.0
  • 至少有 2 个可分配的 CPU
  • 至少有 4GB 的可分配内存
  • 至少有 30GB 以上的磁盘空间
  • 已经安装了 kubectl 可以访问 Kubernetes 集群
  • 已经安装了 Helm 3

5.2 开始安装

首先创建一个叫 polardbx-operator-system 的命名空间,

kubectl create namespace polardbx-operator-system

执行以下命令安装 PolarDB-X Operator。

helm install --namespace polardbx-operator-system polardbx-operator polardbx/polardbx-operator

期望看到如下输出:

apiVersion: polardbx.aliyun.com/v1
kind: PolarDBXCluster
metadata:
  name: quick-start
  annotations:
    polardbx/topology-mode-guide: quick-start

查看 PolarDB-X Operator 组件的运行情况,等待它们都进入 Running 状态:

kubectl get pods --namespace polardbx-operator-system

恭喜!PolarDB-X Operator 已经安装完成,现在可以开始部署 PolarDB-X 集群了!

5.3 开始部署 PolarDB-X 集群

PolarDB-X目前包含企业版和标准版两个系列,您可以根据实际的需求创建对应的集群。(二选一)

  1. 部署 PolarDB-X 企业版集群
    PolarDB-X 企业版是分布式架构集群,支持更大数据量,面向具备企业级超高并发、大规模数据复杂查询、加速分析的业务场景。 现在我们来快速部署一个 PolarDB-X 企业版集群,它包含 1 个 GMS 节点、1 个 CN 节点、1 个 DN 节点和 1 个 CDC 节点。

执行以下命令创建一个这样的集群:

echo "apiVersion: polardbx.aliyun.com/v1
kind: PolarDBXCluster
metadata:
  name: quick-start
  annotations:
    polardbx/topology-mode-guide: quick-start" | kubectl apply -f -

你将看到以下输出:

使用如下命令查看创建状态:

kubectl get polardbxcluster -w
NAME          GMS   CN    DN    CDC   PHASE      DISK   AGE
quick-start   0/1   0/1   0/1   0/1   Creating          35s
quick-start   1/1   0/1   1/1   0/1   Creating          93s
quick-start   1/1   0/1   1/1   1/1   Creating          4m43s
quick-start   1/1   1/1   1/1   1/1   Running    2.4 GiB   4m44s

此刻,请耐心等待!!!

此刻,请耐心等待!!!

此刻,请耐心等待!!!

当 PHASE 显示为 Running 时,PolarDB-X 集群已经部署完成!

恭喜你,现在可以开始连接并体验 PolarDB-X 分布式数据库了!

  1. 部署 PolarDB-X 标准版集群
    PolarDB-X 标准版采用一主一备一日志的三节点架构,性价比高,通过多副本同步复制,确保数据的强一致性。面向具备超高并发、复杂查询及轻量分析的在线业务场景。 现在我们来快速部署一个 PolarDB-X 标准版集群,它仅包含 1 个由三副本组成的DN节点。

执行以下命令创建一个这样的集群:

echo "apiVersion: polardbx.aliyun.com/v1
kind: XStore
metadata:
  name: quick-start
spec:
  config:
    controller:
      RPCProtocolVersion: 1
  topology:
    nodeSets:
    - name: cand
      replicas: 2
      role: Candidate
      template:
        spec:
          image: polardbx/polardbx-engine-2.0:latest
          resources:
            limits:
              cpu: "2"
              memory: 4Gi
    - name: log
      replicas: 1
      role: Voter
      template:
        spec:
          image: polardbx/polardbx-engine-2.0:latest
          resources:
            limits:
              cpu: "1"
              memory: 2Gi" | kubectl apply -f -

你将看到以下输出:

xstore.polardbx.aliyun.com/quick-start created

使用如下命令查看创建状态:

kubectl get xstore -w
NAME          LEADER                    READY   PHASE     DISK      VERSION   AGE
quick-start   quick-start-4dbh-cand-0   3/3     Running   3.6 GiB   8.0.18    11m

此刻,请耐心等待!!!

此刻,请耐心等待!!!

此刻,请耐心等待!!!

当 PHASE 显示为 Running 时,PolarDB-X 标准版集群已经部署完成!

恭喜你,现在可以开始连接并体验 PolarDB-X 数据库了!

5.4 连接 PolarDB-X 集群

创建 PolarDB-X 集群时,PolarDB-X Operator 同时会为集群创建用于访问的服务,默认是 ClusterIP 类型。使用下面的命令查看用于访问的服务:

kubectl get svc quick-start

期望输出:

NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
quick-start   ClusterIP   10.96.215.132   <none>        3306/TCP,8081/TCP   25m

这里也可以开一个nodeport对外访问的服务来暴露对外端口进行外网访问。

也可以使用 kubectl 提供的 port-forward 命名将服务的 3306 端口转发到本地,并且保持转发进程存活。

kubectl port-forward svc/quick-start 3306

Operator 将为 PolarDB-X 集群默认创建一个账号,并将密码存放在 secret 中。

使用以下命令查看默认的账号与密码

eval pxc=quick-start;eval user=$(kubectl get secret $pxc -o jsonpath={.data} | jq 'keys[0]'); echo "User: $user"; kubectl get secret $pxc -o jsonpath="{.data['$user']}" | base64 -d - | xargs echo "Password:"
User: polardbx_root
Password: 5486xjjg

此时出现-bash: jq: command not found

解决:

#下载并安装EPEL
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
 
rpm -ivh epel-release-latest-7.noarch.rpm
 
yum repolist      ##检查是否已添加至源列表
yum -y install jq

保持 port-forward 的运行,重新打开一个终端,执行如下命令连接集群:

mysql -h127.0.0.1 -P3306 -upolardbx_root -p5486xjjg

期望输出:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.6.29 Tddl Server (ALIBABA)
Copyright (c) 2000, 2020, 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>

恭喜!你已经成功地部署并连接到了一个 PolarDB-X,现在你可以开始体验分布式数据库的能力了!

6、销毁 PolarDB-X 集群

完成测试后,你可以通过以下命令销毁 PolarDB-X 集群。

kubectl delete polardbxcluster quick-start

再次查看以确保删除完成

kubectl get polardbxcluster quick-start

7、卸载 PolarDB-X Operator

使用如下命令卸载 PolarDB-X Operator。

helm uninstall --namespace polardbx-operator-system polardbx-operator

Helm 卸载并不会删除对应的定制资源 CRD,使用下面的命令查看并删除 PolarDB-X 对应的定制资源:

kubectl get crds | grep polardbx.aliyun.com
polardbxclusters.polardbx.aliyun.com   2021-10-17T07:17:27Z
xstores.polardbx.aliyun.com            2021-10-17T07:17:27Z
kubectl delete crds polardbxclusters.polardbx.aliyun.com xstores.polardbx.aliyun.com


坚持到底,就是胜利,只有坚持到最后的人,才能享受到成功的喜悦。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
6月前
|
弹性计算 运维 关系型数据库
用 Patroni 搭建 PolarDB-PG 高可用集群
本文详细介绍了如何利用开源PolarDB-PG和Patroni搭建高可用集群。实验环境使用了三台ECS,内核版本为PolarDB-PG 15,Patroni版本为4.0.3,etcd版本为3.5.0。文章依次讲解了ETCD的安装与配置、PolarDB-PG 15的安装与初始化,以及Patroni的配置和启动过程。通过Patroni自动创建备库,实现高可用集群的搭建。最后总结指出,用户可根据需求调整配置,或选择线上PolarDB-PG产品以减少运维成本并提升稳定性。
|
5月前
|
Cloud Native 关系型数据库 分布式数据库
客户说|知乎基于阿里云PolarDB,实现最大数据库集群云原生升级
近日,知乎最大的风控业务数据库集群,基于阿里云瑶池数据库完成了云原生技术架构的升级。此次升级不仅显著提升了系统的高可用性和性能上限,还大幅降低了底层资源成本。
|
7月前
|
存储 Kubernetes 异构计算
Qwen3 大模型在阿里云容器服务上的极简部署教程
通义千问 Qwen3 是 Qwen 系列最新推出的首个混合推理模型,其在代码、数学、通用能力等基准测试中,与 DeepSeek-R1、o1、o3-mini、Grok-3 和 Gemini-2.5-Pro 等顶级模型相比,表现出极具竞争力的结果。
|
7月前
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
|
安全 druid Java
Seata 1.8.0 正式发布,支持达梦和 PolarDB-X 数据库
Seata 1.8.0 正式发布,支持达梦和 PolarDB-X 数据库
1222 95
Seata 1.8.0 正式发布,支持达梦和 PolarDB-X 数据库
|
存储 DataWorks 监控
DataWorks,一个 polar db 有上万个数据库,解决方案
DataWorks,一个 polar db 有上万个数据库,解决方案
|
SQL 存储 Web App开发
PolarDB-X 分布式数据库中的外键
外键是关系型数据库中非常便利的一种功能,它通过一个或多个列为两张表建立连接,从而允许跨表交叉引用相关数据。外键通过约束来保持数据的一致性,通过级联来同步数据在多表间的更新和删除。在关系数据库系统中,大多数表都遵循外键的概念。
|
2月前
|
Cloud Native 关系型数据库 MySQL
免费体验!高效实现自建 MySQL 数据库平滑迁移至 PolarDB-X
PolarDB-X 是阿里云推出的云原生分布式数据库,支持PB级存储扩展、高并发访问与数据强一致,助力企业实现MySQL平滑迁移。现已开放免费体验,点击即享高效、稳定的数据库升级方案。
免费体验!高效实现自建 MySQL 数据库平滑迁移至 PolarDB-X
|
缓存 运维 关系型数据库
数据库容灾 | MySQL MGR与阿里云PolarDB-X Paxos的深度对比
经过深入的技术剖析与性能对比,PolarDB-X DN凭借其自研的X-Paxos协议和一系列优化设计,在性能、正确性、可用性及资源开销等方面展现出对MySQL MGR的多项优势,但MGR在MySQL生态体系内也占据重要地位,但需要考虑备库宕机抖动、跨机房容灾性能波动、稳定性等各种情况,因此如果想用好MGR,必须配备专业的技术和运维团队的支持。 在面对大规模、高并发、高可用性需求时,PolarDB-X存储引擎以其独特的技术优势和优异的性能表现,相比于MGR在开箱即用的场景下,PolarDB-X基于DN的集中式(标准版)在功能和性能都做到了很好的平衡,成为了极具竞争力的数据库解决方案。

热门文章

最新文章

推荐镜像

更多