跳到主要内容

弹性容器集群中使用对象存储

本教程将师范如何在弹性容器集群中使用对象存储。

前置条件

本教程假定您已经具备以下条件:

操作步骤

镜像准备

本教程使用ubuntu:22.04这个基础镜像

注意: 关于镜像仓库的使用,具体请参考镜像仓库的使用

# pull image
docker pull ubuntu:22.04

#login
docker login {访问地址域名} -u [user] -p [passwd]

# tag
docker tag ubuntu:22.04 {访问地址域名}/{项目名称}/ubuntu:22.04

# push
docker push {访问地址域名}/{项目名称}/ubuntu:22.04

k8s资源部署

创建namespace

kubectl create namespace store

创建secret

kubectl create secret docker-registry harbor-secret \
--docker-server={镜像仓库访问域名}
--docker-username="{镜像仓库用户名}" \
--docker-password="{镜像仓库密码}" \
--docker-email="email" \
--namespace store

创建部署pod

在本示例中,部署信息由pod.yaml文件指定。

  1. 在运行pod的弹性容器集群计算节点上预留GPU、CPU和内存资源。
  2. 指定镜像,由 spec.template.spec.containers.image 键值对定义。
  3. 指定pvc的挂载目录,由 spec.template.spec.containers.volumeMounts 键值对定义。
  4. 指定pvc,具体参考声明存储

创建pod资源文件如下:

apiVersion: v1
kind: Pod
metadata:
name: store-pod
namespace: store
labels:
app: store
spec:
restartPolicy: Never
containers:
- name: sd-cuda-container
image: registry.hd-01.alayanew.com:8443/user/ubuntu2204:1.0.2 # 替换你的镜像
resources:
requests: # Added resource requests
memory: "4Gi"
cpu: "500m"
# nvidia.com/gpu-l40s: 1 # Corrected GPU resource name and added to requests
limits:
memory: "8Gi" # Added memory limit
cpu: "1000m" # Added CPU limit
# nvidia.com/gpu-l40s: 1 # Corrected GPU resource name
ports: # 添加端口映射
- containerPort: 80 # 容器内应用的端口
name: http-port
protocol: TCP
command: ["sh", "-c", "tail -f /dev/null"]
volumeMounts:
- name: workspace
mountPath: "/app/workspace/"
imagePullSecrets:
- name: harbor-secret
volumes:
- name: workspace
persistentVolumeClaim:
claimName: pvc-capacity-userdata
tolerations:
- key: nvidia.com/gpu
operator: Exists
effect: NoSchedule

部署pod:

kubectl create -f pod.yaml

使用对象存储

在pod中安装Rclone

  1. 进入pod

    # 获取pod信息
    kubectl get pod -n store

    # 进入pod
    kubectl exec -it store-pod bash -n store

    image-20241218161640432

  2. 下载rclone

    # 更新包列表
    apt update

    # 安装 Rclone
    apt install rclone

    # 验证安装
    rclone --version

    image-20241218162226099

  3. 配置rclone
    参考对象存储的使用

使用Rclone

  • 列出对象存储“store”中所有目录/容器/桶:

    rclone lsd store:

    image-20241218164514369

  • 列出“models002”中对象的大小和路径:

    rclone ls store:/models002

    image-20241218164739173

  • 将文件从对象存储拷贝到本地:

    rclone copy store:tools002/test/rclone.sh /app/workspace/

    image-20241218165915018

  • 将文件从本地拷贝到对象存储:

    rclone copy  /app/workspace/hello.py store:tools002/test

    image-20241218170316132

  • 将文件从本地移动到对象存储:

    # 新建demo.py文件
    vi demo.py

    # 列出本地文件,可以看到demo.py
    ls

    # 将文件移动到对象存储
    rclone move /app/workspace/demo.py store:tools002/test

    # 列出本地文件,可以看到demo.py不存在了
    ls

    # 列出远程存储的文件,可以看到刚刚移动的文件
    rclone ls store:tools002/test

    image-20241218170940197

  • 将文件从本地移动到对象存储:

    # 将文件移动到本地
    rclone move store:tools002/test/demo.py /app/workspace

    # 列出远程存储的文件,可以看到demo.py不存在了
    rclone ls store:tools002/test

    # 列出本地文件,可以看到demo.py
    ls

    image-20241218173523873