1.有个向量搜索相关需求,选择使用ES8版本,并且在k8s环境中容器化部署;
2.考虑核心程度以及成本问题,不需要准备多数据中心的备份集群,为了保证数据可靠性,预期使用snapshot备份能力;
选型ES支持将snapshot存储到各种存储产品,例如 fs(本地)、S3(或者ceph)、hdfs等。
1.OSS,考虑到已经和阿里云OSS有合作,且支持S3接口 -----> 测试
2.ceph,私有云部署,不好控制容量,成本偏高 --------> 暂不考虑
3.hdfs,私有云部署,不好控制容量,成本偏高,需要安装插件 -----> 暂不考虑
4.fs,本地,由于团队还在做juicefs产品,可以juicefs挂载到本地目录,ES snapshot 存到本地目录即可完成上传到公有云OSS ------> 测试
snapshot直接从ES传到OSS 1.创建账号、bucket,获取ak/sk;略
2.ES容器实例如何加载密钥库通过官方文档可知需要执行如下命令:将密钥设置到ES密钥库
S3 repository | Elasticsearch Guide [8.2] | Elastic
bin/elasticsearch-keystore add s3.client.default.access_key
bin/elasticsearch-keystore add s3.client.default.secret_key
考虑到容器环境不允许直接进入pod执行命令,secret也不允许直接写死到镜像中,则需要在entrypoint.sh中设置完成该命令。
最终方案如下:
1.在k8s环境中创建secret,记录ak/sk信息
2.pod创建时候mount到指定目录
3.container(ES)启动的时候读取指定目录信息,并执行elasticsearch-keystore命令
3.具体操作0.安装 repository-s3 插件
略(ES8版本内置了该插件,无需安装)
1.创建secret
kubectl apply -f secret.yml # cat secret.yml apiVersion: v1 kind: Secret metadata: namespace: uat-es name: es-snapshot-oss-secret type: Opaque data: access_key: xxx(注意base64编码) secret_key: xxx(注意base64编码)
2.修改crd的yaml,将该secret mount到指定目录
# 定义secret volumes: - name: "oss-secret" secret: secretName: "es-snapshot-oss-secret" # 指定容器挂载选项 containers: ... volumeMounts: - mountPath: "/mnt/secret/oss" name: "oss-secret" readOnly: true
3.镜像修改
注:Dockerfile中最后是通过docker-entrypoint.sh完成ES实例的启动
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
# docker-entrypoint.sh 增加如下内容 /usr/share/elasticsearch/bin/elasticsearch-keystore create chown root:root /usr/share/elasticsearch/config/elasticsearch.keystore echo "$(关注打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?