1 - 使用 kubectl apply
安装
Clusterpedia 的安装分为两个部分:
用户如果使用已有的存储组件(MySQL 或者 PostgreSQL),则直接跳过安装存储组件。
拉取项目:
git clone https://github.com/clusterpedia-io/clusterpedia.git
cd clusterpedia
git checkout v0.7.0
安装存储组件
Clusterpedia 安装时提供了 MySQL 8.0 和 PostgreSQL 12 两种存储组件以供选择。
用户如果使用已有的存储组件(MySQL 或者 PostgreSQL),则直接跳过存储组件安装。
进入所选存储组件的安装目录
cd ./deploy/internalstorage/postgres
进入所选存储组件的安装目录
cd ./deploy/internalstorage/mysql
存储组件使用 Local PV 的方式存储数据,部署时需要指定 Local PV 所在节点
用户可以选择自己提供 PV
export STORAGE_NODE_NAME=<节点名称>
sed "s|__NODE_NAME__|$STORAGE_NODE_NAME|g" `grep __NODE_NAME__ -rl ./templates` > clusterpedia_internalstorage_pv.yaml
部署存储组件
kubectl apply -f .
# 跳回 Clusterpedia 项目根目录
cd ../../../
安装 Clusterpedia
存储组件部署完成后,便可安装 Clusterpedia。
如果选择使用已存在的存储组件,则需要参考 配置存储层 来将存储组件对接到默认存储层
中。
在 clusterpedia 项目根目录下进行操作。
# 部署 Clusterpedia CRD 与组件
kubectl apply -f ./deploy
安装完成
检查组件 Pods 运行是否正常。
kubectl -n clusterpedia-system get pods
部署集群自动接入策略 —— ClusterImportPolicy
0.4.0 后,Clusterpedia 提供了更加友好的接入多云平台的方式。
用户通过创建 ClusterImportPolicy
来自动发现多云平台中纳管的集群,并将这些集群自动同步为 PediaCluster
,用户不需要根据纳管的集群来手动去维护 PediaCluster
了。
我们在 Clusterpedia 仓库 中维护了各个多云平台的 ClusterImportPolicy
。
大家也提交用于对接其他多云平台的 ClusterImportPolicy
。
用户在安装 Clusterpedia 后,创建合适的 ClusterImportPolicy
即可,用户也可以根据自己的需求来创建新的 ClusterImportPolicy
具体可以参考 接入多云平台
kubectl get clusterimportpolicy
卸载
删除 ClusterImportPolicy
如果用户部署了 ClusterImportPolicy 那么需要先清理 ClusterImportPolicy 资源
kubectl get clusterimportpolicy
清理 PediaCluster
在卸载 Clusterpedia 前,需要查看环境中是否还存在 PediaCluster 资源,如果存在那么需要删除这些资源。
kubectl get pediacluster
卸载 Clusterpedia
PediaCluster 资源清理完成后,卸载 Clusterpedia 相关组件。
# delete compontents
kubectl delete -f ./deploy/clusterpedia_apiserver_apiservice.yaml
kubectl delete -f ./deploy/clusterpedia_apiserver_deployment.yaml
kubectl delete -f ./deploy/clusterpedia_clustersynchro_manager_deployment.yaml
kubectl delete -f ./deploy/clusterpedia_controller_manager_deployment.yaml
kubectl delete -f ./deploy/clusterpedia_apiserver_rbac.yaml
# delete crds
kubectl delete -f ./deploy/cluster.clusterpedia.io_clustersyncresources.yaml
kubectl delete -f ./deploy/cluster.clusterpedia.io_pediaclusers.yaml
kubectl delete -f ./deploy/policy.clusterpedia.io_clusterimportpolicies.yaml
kubectl delete -f ./deploy/policy.clusterpedia.io_pediaclusterlifecycles.yaml
卸载存储组件
根据选择的存储组件类型,来移除相关的资源。
kubectl delete -f ./deploy/internalstorage/<storage type>
清理 Local PV 以及数据
存储组件卸载后,PV 和相应的数据会依然遗留在节点中,我们需要手动清理。
通过 Local PV 资源详情,来查看挂载的节点。
kubectl get pv clusterpedia-internalstorage-<storage type>
得知数据保存的节点后,删除 Local PV。
kubectl delete pv clusterpedia-internalstorage-<storage type>
登录数据所在节点,清理数据。
# 遗留数据所在节点
rm -rf /var/local/clusterpedia/internalstorage/<storage type>
2 - 使用 Helm
3 - 配置
3.1 - 配置存储层
Clusterpedia 的默认存储层
支持 MySQL 和 PostgreSQL 两种存储组件。
用户在安装 Clusterpedia 时,可以使用已存在的存储组件,
不过需要创建相应的默认存储层
配置(ConfigMap)和存储组件密码 Secret。
默认存储层配置
用户需要在 clusterpedia-system
命名空间下创建 clusterpedia-internalstorage
ConfigMap。
# internalstorage configmap example
apiVersion: v1
kind: ConfigMap
metadata:
name: clusterpedia-internalstorage
namespace: clusterpedia-system
data:
internalstorage-config.yaml: |
type: "mysql"
host: "clusterpedia-internalstorage-mysql"
port: 3306
user: root
database: "clusterpedia"
connPool:
maxIdleConns: 10
maxOpenConns: 100
connMaxLifetime: 1h
log:
slowThreshold: "100ms"
logger:
filename: /var/log/clusterpedia/internalstorage.log
maxbackups: 3
internalstorage config 支持以下基本字段:
field | description |
---|---|
type |
存储组件的类型,支持 “postgres” 和 “mysql” |
host |
存储组件地址,可以使用 IP 或者 Service Name |
port |
存储组件端口 |
user |
存储组件用户 |
password |
存储组件密码 |
database |
Clusterpedia 所使用的 database |
存储组件的访问密码,最好存放在 Secret,参考 配置存储组件密码 Secret
数据库连接池配置
field | description |
---|---|
connPool.maxIdleConns |
空闲连接池中的最大数量,默认为 10 |
connPool.maxOpenConns |
打开的数据库连接的最大数量,默认为 100 |
connPool.connMaxLifetime |
连接可以复用的最大时间,默认为 1h |
根据用户的当前环境,合理设置数据库连接池
日志配置
支持配置存储层日志,通过 log
字段来开启日志打印慢 SQL 和错误
field | description |
---|---|
log.stdout |
打印日志到标准输出 |
log.colorful |
是否开启彩色打印 |
log.slowThreshold |
设置慢 SQL 阀值,例如 “100ms” |
log.level |
设置日志级别,支持 Slient, Error, Warn, Info |
log.logger |
日志轮滚配置 |
开启日志打印后,如果 log.stdout
不为 true,则将日志输出到 /var/log/clusterpedia/internalstorage.log 文件中
日志轮滚配置
将存储层的日志保存到文件中,并且可以配置日志文件的轮滚
field | description |
---|---|
log.logger.filename |
日志文件路径, 默认为 /var/log/clusterpedia/internalstorage.log |
log.logger.maxsize |
触发日志轮滚的最大文件大小,单位为 MB |
log.logger.maxage |
轮滚的旧日志的最大存活时间 |
log.logger.maxbackups |
轮滚的旧日志的最大数量 |
log.logger.localtime |
是否为本地时间,默认为 UTC |
log.logger.compress |
是否将轮滚的日志文件进行压缩,默认不进行压缩 |
关闭日志打印
在 internalstorage config 不填写 log
字段,便会忽略日志打印,例如:
type: "mysql"
host: "clusterpedia-internalstorage-mysql"
port: 3306
user: root
database: "clusterpedia"
更多配置
默认存储层还提供了有关 MySQL 和 PostgreSQL 的更多配置,可以参考 internalstorage/config.go
配置存储组件密码 Secret
Clusterpedia 的安装 yaml 会从 internalstorage-password
的 Secret 中获取密码。
将存储组件的密码配置到 Secret 中
kubectl -n clusterpedia-system create secret generic \
internalstorage-password --from-literal=password=<存储组件访问密码>