弹性容器服务(Elastic Kubernetes Service,EKS) 是腾讯云容器服务推出的无须用户购买节点即可部署工作负载的容器服务模式。EKS 完全兼容原生 Kubernetes,支持使用原生方式购买及管理资源,按照容器真实使用的资源量计费。EKS 还扩展支持腾讯云的存储及网络等产品,同时确保用户容器的安全隔离、开箱即用。使用腾讯云 EKS 部署 GooseFS 可以充分利用 EKS 的弹性计算资源,构建按需按秒付费的对象存储(Cloud Object Storage,COS)存储访问加速服务。
架构说明
下图展示了使用腾讯云 EKS 部署 GooseFS 的通用架构。
如图中所示,整个架构由 EKS 托管组件、用户资源池和 COS 存储三大部分组成。其中用户资源池主要用于部署 GooseFS 集群,COS 存储作为远端存储系统,也支持替换为云 HDFS 这一公有云存储服务。具体构架过程中:GooseFS Master 和 Worker 都以 Kubernetes Statefulset 类型进行资源部署使用 Fluid 拉起 GooseFS 集群Fuse Client 集成在用户 Pod 的沙箱(Sandbox)中使用方式上保持与在标准 Kubernetes 一致
操作步骤
环境准备
1. 创建 EKS 集群,具体操作请参见 创建集群。2. 开启集群访问,按实际情况选择内网或者外网,具体说明请参见 连接集群。3. 执行 kubectl get ns
指令,确认集群可以使用:
-> goosefs kubectl get ns NAME STATUS AGE default Active 7h31m kube-node-lease Active 7h31m kube-public Active 7h31m kube-system Active 7h31m
4. 获取 helm
,可参考 Helm 官方文档 进行操作。
安装 GooseFS
1. 输入 helm install
指令安装 chart 包,安装 fluid:
-> goosefs helm install fluid ./charts/fluid-on-tke NAME: fluid LAST DEPLOYED: Tue Jul 6 17:41:20 2021 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None
2. 查看 fluid
相关的 pod 状态:
-> goosefs kubectl -n fluid-system get pod NAME READY STATUS RESTARTS AGE alluxioruntime-controller-78877d9d47-p2pv6 1/1 Running 0 59s dataset-controller-5f565988cc-wnp7l 1/1 Running 0 59s goosefsruntime-controller-6c55b57cd6-hr78j 1/1 Running 0 59s
3. 创建 dataset
,按实际需要修改相关变量,并执行 kubectl apply -f dataset.yaml
指令应用 dataset
:
apiVersion: data.fluid.io/v1alpha1 kind: Dataset metadata: name: ${dataset-name} spec: mounts: - mountPoint: cosn://${bucket-name} name: ${dataset-name} options: fs.cosn.userinfo.secretKey: XXXXXXX fs.cosn.userinfo.secretId: XXXXXXX fs.cosn.bucket.region: ap-${region} fs.cosn.impl: org.apache.hadoop.fs.CosFileSystem fs.AbstractFileSystem.cosn.impl: org.apache.hadoop.fs.CosN fs.cos.app.id: ${user-app-id}
4. 创建 GooseFS
集群,使用以下 yaml,并执行 kubectl apply -f runtime.yaml
:
apiVersion: data.fluid.io/v1alpha1 kind: GooseFSRuntime metadata: name: slice1 annotations: master.goosefs.eks.tencent.com/model: c6 worker.goosefs.eks.tencent.com/model: c6 spec: replicas: 6 # worker 数量,虽然控制器支持扩容,但是goosefs当前不支持数据的自动re-balance data: replicas: 1 # goosefs 数据副本数 goosefsVersion: imagePullPolicy: Always image: ccr.ccs.tencentyun.com/cosdev/goosefs # goosefs 集群使用的镜像以及版本 imageTag: v1.0.1 tieredstore: levels: - mediumtype: MEM # 支持MEM,HDD,SSD 分别对应 内存,高效云盘,SSD云盘 path: /data quota: 5G # 无论内存还是云盘都会生效,云盘最低为10G high: "0.95" low: "0.7" properties: goosefs.user.streaming.data.timeout: 5s goosefs.job.worker.threadpool.size: "22" goosefs.master.journal.type: UFS # UFS或者EMBEDDED,单master时使用UFS # goosefs.worker.network.reader.buffer.size: 128MB goosefs.user.block.size.bytes.default: 128MB # goosefs.user.streaming.reader.chunk.size.bytes: 32MB # goosefs.user.local.reader.chunk.size.bytes: 32MB goosefs.user.metrics.collection.enabled: "false" goosefs.user.metadata.cache.enabled: "true" goosefs.user.metadata.cache.expiration.time: "2day" master: # 设定POD对应的虚拟机的规格,必填参数,不填写默认 1c1g resources: requests: cpu: 8 memory: "16Gi" limits: cpu: 8 memory: "16Gi" replicas: 1 # journal: # volumeType: pvc # storageClass: goosefs-hdd jvmOptions: - "-Xmx12G" - "-XX:+UnlockExperimentalVMOptions" - "-XX:ActiveProcessorCount=8" - "-Xms10G" worker: jvmOptions: - "-Xmx28G" - "-Xms28G" - "-XX:+UnlockExperimentalVMOptions" - "-XX:MaxDirectMemorySize=28g" - "-XX:ActiveProcessorCount=8" resources: requests: cpu: 16 memory: "32Gi" limits: cpu: 16 memory: "32Gi" fuse: jvmOptions: - "-Xmx4G" - "-Xms4G" - "-XX:+UseG1GC" - "-XX:MaxDirectMemorySize=4g" - "-XX:+UnlockExperimentalVMOptions" - "-XX:ActiveProcessorCount=24"
5. 检查集群状态以及 PVC 状态:
-> goosefs kubectl get pod NAME READY STATUS RESTARTS AGE slice1-master-0 2/2 Running 0 8m8s slice1-worker-0 2/2 Running 0 8m8s slice1-worker-1 2/2 Running 0 8m8s slice1-worker-2 2/2 Running 0 8m8s slice1-worker-3 2/2 Running 0 8m8s slice1-worker-4 2/2 Running 0 8m8s slice1-worker-5 2/2 Running 0 8m8s -> goosefs kubectl get pvc slice1 Bound default-slice1 100Gi ROX fluid 7m37s # PVC名称与dataset名称一致,100Gi是一个虚拟值用作占位
数据加载
预加载数据只需要使用如下的 yaml 创建一个 resource 即可,yaml 示例如 kubectl apply -f dataload.yaml
,执行后对应的响应示例如下:
apiVersion: data.fluid.io/v1alpha1 kind: DataLoad metadata: name: slice1-dataload spec: # 配置需要执行数据加载的 dataset信息 dataset: name: slice1 namespace: default
创建后,可以通过 kubectl get dataload slice1-dataload
观察状态。
业务 Pod 挂载 PVC
用户业务容器按照 k8s 标准用法使用,具体请参见 Kubernetes 官方文档。
销毁 GooseFS 集群
销毁 GooseFS 集群可以通过 delete
指令进行删除,可以指定删除 master 和 worker 节点。该操作属高危操作,请确保业务 pod 中没有对 Goosefs 的 IO 操作之后执行。
-> goosefs kubectl get sts NAME READY AGE slice1-master 1/1 14m slice1-worker 6/6 14m -> goosefs kubectl delete sts slice1-master slice1-worker statefulset.apps "slice1-master" deleted statefulset.apps "slice1-worker" deleted
对象存储官网1折活动,限时活动,即将结束,速速收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠
转转请注明出处:http://www.yunxiaoer.com/144885.html