云原生数据基础设施之kubeblocks
一、kubeblocks简介
参考文档:https://kubeblocks.io/docs/release-0.9/user_docs/overview/introduction
1.KubeBlocks 是什么?
KubeBlocks 是基于 Kubernetes 的云原生数据基础设施,将顶级云服务提供商的大规模生产经验与增强的可用性和稳定性改进相结合,帮助用户轻松构建容器化、声明式的关系型、NoSQL、流计算和向量型数据库服务。
KubeBlocks 的名字源自 Kubernetes(K8s)和乐高积木,致力于让 K8s 上的数据基础设施管理就像搭乐高积木一样,既高效又有趣。
2.为什么需要 KubeBlocks?
Kubernetes 已经成为容器编排的事实标准。它利用 ReplicaSet 提供的可扩展性和可用性以及 Deployment 提供的推出和回滚功能来管理日益增加的无状态工作负载。然而,管理有状态工作负载给 Kubernetes 带来了巨大的挑战。
尽管 StatefulSet 提供了稳定的持久存储和唯一的网络标识符,但这些功能对于复杂的有状态工作负载来说远远不够。
为了应对这些挑战,并解决复杂性问题,KubeBlocks 引入了 ReplicationSet 和 ConsensusSet,具备以下能力:
1.基于角色的更新顺序可减少因升级版本、缩放和重新启动而导致的停机时间。
2.维护数据复制的状态,并自动修复复制错误或延迟。
3.主要功能
支持多云,与 AWS、GCP、Azure、阿里云等云平台兼容。
支持 MySQL、PostgreSQL、Redis、MongoDB、Kafka 等 32 个主流数据库和流计算引擎。
提供生产级性能、弹性、可扩展性和可观察性。
简化 day-2 操作,例如升级、扩展、监控、备份和恢复。
包含强大且直观的命令行工具。
仅需几分钟,即可建立一个适用于生产环境的完整数据基础设施。
二、安装 KubeBlocks
版本要求 1.22,具体根据官方文档
1.安装kbcli
curl -fsSL https://kubeblocks.io/installer/install_cli.sh | bash
kbcli version
echo "source <(kbcli completion bash)" >> ~/.bashrc
. ~/.bashrc
2.安装KubeBlocks
需要等待几分钟
#查看可用的版本
kbcli kubeblocks list-versions
#使用 --version 指定版本,如果不指定则是最新版本
kbcli kubeblocks install --version=x.x.x
#验证 KubeBlocks 安装
kbcli kubeblocks status
KubeBlocks is deployed in namespace: kb-system,version: 0.9.0
KubeBlocks Workloads:
NAMESPACE KIND NAME READY PODS CPU(CORES) MEMORY(BYTES) CREATED-AT
kb-system Deployment kb-addon-snapshot-controller 1/1 N/A N/A Aug 05,2024 13:40 UTC+0800
kb-system Deployment kubeblocks 1/1 N/A N/A Aug 05,2024 13:38 UTC+0800
kb-system Deployment kubeblocks-dataprotection 1/1 N/A N/A Aug 05,2024 13:38 UTC+0800
KubeBlocks Addons:
NAME STATUS TYPE PROVIDER
alertmanager-webhook-adaptor Disabled Helm N/A
apecloud-mysql Enabled Helm N/A
apecloud-otel-collector Disabled Helm N/A
aws-load-balancer-controller Disabled Helm N/A
csi-driver-nfs Disabled Helm N/A
csi-hostpath-driver Disabled Helm N/A
csi-s3 Disabled Helm N/A
external-dns Disabled Helm N/A
fault-chaos-mesh Disabled Helm N/A
grafana Disabled Helm N/A
kafka Enabled Helm N/A
kubebench Disabled Helm N/A
kubeblocks-csi-driver Disabled Helm N/A
llm Disabled Helm N/A
loki Disabled Helm N/A
migration Disabled Helm N/A
minio Disabled Helm N/A
mongodb Enabled Helm N/A
mysql Enabled Helm N/A
nvidia-gpu-exporter Disabled Helm N/A
nyancat Disabled Helm N/A
postgresql Enabled Helm N/A
prometheus Disabled Helm N/A
pulsar Enabled Helm N/A
pyroscope-server Disabled Helm N/A
qdrant Disabled Helm N/A
redis Enabled Helm N/A
snapshot-controller Enabled Helm N/A
victoria-metrics-agent Disabled Helm N/A
3.插件启用/禁用
#查看支持的插件
kbcli addon list
#启用插件
kbcli addon enable plugin-name
#禁用插件
kbcli addon disable plugin-name
三、安装MySQL验证kubeblocks
1.安装MySQL
kubectl create namespace mysql-demo
kbcli cluster create mysql mysql-demo -n mysql-demo #集群名称mysql-demo,我这里由于演示只创建一个节点,如果创建集群,参考官方文档
kubectl get pods -n mysql-demo
NAME READY STATUS RESTARTS AGE
mysql-demo-mysql-0 4/4 Running 0 6m41s
2.连接MySQL
#kbcli 方式
kbcli cluster connect mysql-demo -n mysql-demo #会自动登录MySQL
#kubectl方式
kubectl get secrets -n mysql-demo |grep credential
mysql-demo-conn-credential Opaque 5 28m
kubectl get secrets -n mysql-demo mysql-demo-conn-credential -o jsonpath='{.data.\username}' | base64 -d
root
kubectl get secrets -n mysql-demo mysql-demo-conn-credential -o jsonpat.data.\password}' | base64 -d
rtbc8zdd
kubectl exec -ti -n mysql-demo mysql-demo-mysql-0 -- bash
mysql -uroot -p
"一劳永逸" 的话,有是有的,而 "一劳永逸" 的事却极少