赞
踩
Operator ,kubernetes,部署 KingbaseES,人大金仓
前置条件
KingbaseES Operator 部署前,请确认以下软件需求:
KingbaseES Operator 使用Custom Resource Definition (CRD) 和控制器扩展Kubernetes。使用 KingbaseES Operator 必须先创建 CRD 和控制器 。这些CRD 和控制器只需要在 kubernetes 集群上部署一次:
kubectl apply -f crd.yaml
kubectl apply -f kingbase_operator_install.yaml -n kingbase-operator-system
查看CRDs 在集群中是否创建
kubectl get crds | grep kingbase
预期输出:
# 查看到 两个 CRD 已经正确创建
backups.install.kingbase.com 2024-04-24T03:15:23Z
deploys.install.kingbase.com 2024-04-24T03:15:23Z
查看控制器部署状态,控制器默认部署的命名空间为 kingbase-operator-system
kubectl get pods -n kingbase-operator-system
预期输出:
# Pod 已经正确运行
NAME READY STATUS RESTARTS AGE
kingbase-operator-controller-manager-dfd8998d-ct5s2 1/1 Running 0 23h
在标准 kubernetes 集群上通过Kingbase Operator 部署KingbaseES 集群和 kmonitor 之前,需要配置集群参数。
使用约束:
KingbaseES 和 kmonitor 的配置文件为 install_v1_deploy.yaml,以下是最小参数的配置示例与说明:
metadata:
name: kingbase-cluster # KingbaseES 集群名称
labels:
app.kubernetes.io/instance: kingbase-cluster # 控制器设置的资源标签
spec:
kingbase:
database:
relName: "kingbase-cluster" #集群内生成 statefulset ,service 资源等的命名前缀
spec:
kingbase:
database:
replicaCount: 1
spec:
kingbase:
images:
repository: 10.10.12.227:9080/library/ kingbase_v008r006c008b0014_x86_64_single_cluster_monitor:v36
spec:
addtional:
kmonitor:
repository: 10.10.12.227:9080/library/kmonitor:v2.4.6
spec:
addtional:
kmonitor:
enable: true
spec:
kingbase:
database:
persistence:
enabled: true # 默认开启持久化存储卷挂载
## # 存储卷挂载时的必要配置
storageclass: 存储卷类型,根据实际情况进行填写
mountPath: /var/lib/kingbase # 数据库 data 持久化路径
etcPath: /etc/cron.d # 定时任务 持久化路径。
size: 20Gi # 数据库 data 路径的持久化卷容量。
etcsize: 100Mi # etc 路径的持久化卷容量。
spec:
addtional:
kmonitor:
persistence:
enabled: true # 默认开启持久化存储卷挂载
## # 存储卷挂载时的必要配置
storageclass: managed-nfs-storage # 存储卷类型,根据实际情况进行填写
mountPath: /var/lib/kingbase # 数据库 data 持久化路径
etcPath: /etc/cron.d # 定时任务 持久化路径。
size: 20Gi # 数据库 data 路径的持久化卷容量。
etcsize: 100Mi # etc 路径的持久化卷容量。
spec:
kingbase:
database:
trust_ip: 10.68.0.1 # 对应docker容器的网卡ip地址
db_user: system # 数据库 用户名
db_port: 54321 # 数据库 端口号
db_password: "12345678ab" #数据库 密码
esrep_password: Kingbaseha110 # 数据库 esrep 用户的密码
db_mode: oracle # 数据库模式 pg mysql oracle 可选
db_encoding: utf8 # 数据库 字符集编码 utf8 gbk gb2312 可选
db_case_sensitive: "true" # 大小写敏感, true 为大小写不敏感
db_file_name: "db.conf" #数据库配置文件名
配置中 spec.kingbase.database. trust_ip 可以通过如下方式进行查询:
kubectl get svc kubernetes
预期输出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.68.0.1 <none> 443/TCP 56d
trust_ip 的设置成10.68.0.1 (CLUSTER_IP)即可,此IP 是kubernetes默认网关IP地址。
配置KingbaseES 集群与 kmonitor 组件后,开始进行部署步骤:
kubectl create namespace kingbase-cluster
预期输出:
namespace/kingbase-cluster created
2. 部署KingbaseES 集群和 kmonitor 组件
kubectl apply -f install_v1_deploy.yaml -n kingbase-cluster
预期输出:
deploy.install.kingbase.com/kingbase-cluster created
3. 部署后查看 KingbaseES 集群和 kmonitor 组件 Pod 状态
kubectl get pods -n kingbase-cluster
预期输出:
NAME READY STATUS RESTARTS AGE
kingbase-kingbase-0 1/1 Running 0 5m37s
kingbase-kingbase-1 1/1 Running 0 5m21s
kingbase-monitor-kingbase-0 1/1 Running 0 5m37s
当前配置中为KingbaseES集群副本数为2, Pod(kingbase-kingbase-0)部署时默认为主节点,Pod(kingbase-kingbase-1) 及其他数据库Pod默认为备节点, Pod(kingbase-monitor-kingbase-0)是 kmonitor 组件Pod。
不同的KingbaseES 集群可以部署在相同的 namespace, 也可以是不同的namespace,集群CR 的命名空间就是KingbaseES集群的命名空间,随实际情况进行选择。
KingbaseES Pod 容器中默认带有 ksql 数据库连接工具,可以通过容器内的 ksql 访问数据库集群。
使用 kubectl 命令 进入KingbaseES容器:
kubectl exec -it -n kingbase-cluster kingbase-cluster-kingbase-0 -- bash
容器内进入数据库软件安装目录并使用 ksql 访问数据库集群,默认当提示输入密码时,根据 $ DB_PASSWORD 环境变量的值输入即可。
# 进入kingbase 软件安装步骤
[root@kingbase-cluster-kingbase-0 /]# cd ${MOUNT_PATH}/bin
# 容器内可以输出 数据库密码的环境变量
[root@kingbase-cluster-kingbase-0 bin]# echo ${DB_PASSWORD}
12345678ab
[root@kingbase-cluster-kingbase-0 bin]# ./ksql -U ${DB_USER} -p ${DB_PORT} -d test -W
Password:
Type "help" for help.
test=#
Kmonitor 可以通过Operator 创建的 nodeport 类型的 service 对外暴露端口
使用kubectl 命令查看kmonitor service 基础信息
kubectl get service -n kingbase-cluster --selector app=kingbase-cluster-monitor-kingbase
预期输出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kingbase-cluster-monitor-service-0 NodePort 10.68.57.218 <none> 54321:31716/TCP,3000:31303/TCP,9090:31375/TCP,8500:31782/TCP
26m
通过对应NodePort 类型service kingbase-cluster-monitor-service-0的 PORT(s) 可以查看到 Pod 内端口与宿主机端口映射情况,不同kubernetes集群宿主机端口映射情况随机生成,请根据实际宿主机端口进行访问。
Pod内端口映射 | kubernetes宿主机端口映射 (随机生成,以实际集群端口为准) | 端口说明 |
54321 | 31716 | 数据库默认端口 |
3000 | 31303 | Kmonitor 面板端口 |
9090 | 31375 | Kmonitor Prometheus组件端口 |
8500 | 31782 | Kmonitor consul 组件端口 |
当前集群随机生成的 kmonitor面板组件宿主机端口号为 31303
kmonitor 面板通过kubernetes node上通过http://${宿主机IP}:31303访问。默认用户名/密码 admin K1ngb@se
宿主机IP 通过kubectl 命令获取:
kubectl get nodes -o wide
预期输出:
NAME STATUS ROLES AGE VERSION INTERNAL-IP …
10.10.12.214 Ready master 56d v1.23.1 10.10.12.214 …
10.10.12.215 Ready node 56d v1.23.1 10.10.12.215 …
10.10.12.216 Ready node 56d v1.23.1 10.10.12.216 …
在列表中选取一个节点的 INTERNAL-IP 作为当前要访问的宿主机IP 即可,如列表中的 10.10.12.214 作为宿主机IP。
当前示例集群 kmonitor 登录页面面板展示:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。