弹性容器集群中使用对象存储
本教程将师范如何在弹性容器集群中使用对象存储。
前置条件
本教程假定您已经具备以下条件:
- 开通了AlayaNeW弹性容器集群,具体步骤参考:开通弹性容器集群
- 开通了对象存储,具体步骤参考:对象存储开通及管理
- Docker环境 Docker环境安装请参考: 安装Docker
- 安装kubectl,并连接弹性容器集群 请参考:快速开始
操作步骤
镜像准备
本教程使用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文件指定。
- 在运行pod的弹性容器集群计算节点上预留GPU、CPU和内存资源。
- 指定镜像,由 spec.template.spec.containers.image 键值对定义。
- 指定pvc的挂载目录,由 spec.template.spec.containers.volumeMounts 键值对定义。
- 指定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
-
进入pod
# 获取pod信息
kubectl get pod -n store
# 进入pod
kubectl exec -it store-pod bash -n store -
下载rclone
# 更新包列表
apt update
# 安装 Rclone
apt install rclone
# 验证安装
rclone --version -
配置rclone
参考对象存储的使用
使用Rclone
-
列出对象存储“store”中所有目录/容器/桶:
rclone lsd store:
-
列出“models002”中对象的大小和路径:
rclone ls store:/models002
-
将文件从对象存储拷贝到本地:
rclone copy store:tools002/test/rclone.sh /app/workspace/
-
将文件从本地拷贝到对象存储:
rclone copy /app/workspace/hello.py store:tools002/test
-
将文件从本地移动到对象存储:
# 新建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 -
将文件从本地移动到对象存储:
# 将文件移动到本地
rclone move store:tools002/test/demo.py /app/workspace
# 列出远程存储的文件,可以看到demo.py不存在了
rclone ls store:tools002/test
# 列出本地文件,可以看到demo.py
ls