tencent cloud

文档反馈

使用腾讯云 EKS 部署

最后更新时间:2021-12-27 12:50:53

    弹性容器服务(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
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持