有状态服务-OSS存储使用最佳实践
本文为您介绍有状态服务-OSS的常见使用场景及方法。
背景信息
阿里云对象存储服务(OSS)提供海量、安全、低成本、高可靠的云存储服务。OSS支持同时被多个Pod挂载。
OSS使用场景:
- 对磁盘I/O要求低。
- 配置文件、图片、小视频等共享业务。
OSS使用方式:
- 手动创建Bucket。
- 获取AccessKey ID和AccessKey Secret。
- 手动创建PV及PVC。
前提条件
- 您已成功创建一个Kubernetes集群,参见创建Kubernetes集群。
- 您可以通过kubectl连接到Kubernetes集群,参见通过 kubectl 连接 Kubernetes 集群。
- 您已在OSS管理控制台创建Bucket,参见创建存储空间。
注意事项
- 容器服务Kubernetes集群升级会重启kubelet,OSSFS驱动跟随一起重启,导致OSS目录不可用。这时使用OSS的Pod需要重建,可在yaml文件中增加健康检查的配置,在容器内OSS目录不可用时自动重启Pod,重新挂载OSS。
- 通过最新版本挂载的OSS已经解决了此问题。
创建PV
- 创建pv-oss.yaml文件。
apiVersion: v1 kind: PersistentVolume metadata: name: pv-oss labels: alicloud-pvname: pv-oss spec: capacity: storage: 5Gi accessModes: - ReadWriteMany storageClassName: oss flexVolume: driver: "alicloud/oss" options: bucket: "docker" ////请替换为您的Bucket名称 url: "oss-cn-hangzhou.aliyuncs.com" ////请替换为您的URL akId: "***" ////请替换为您的akId akSecret: "***" ////请替换为您的akSecret otherOpts: "-o max_stat_cache_size=0 -o allow_other" ////请替换为您的otherOpts
参数解释
alicloud-pvname
:PV的名称,与PVC中的selector
配合使用。bucket
:Bucket名称,目前只支持挂载 Bucket,不支持挂载 Bucket 下面的子目录或文件。url
:OSS Bucket的访问域名(Endpoint),可参见访问域名和数据中心。也可以在OSS 管理控制台查询:登录OSS 管理控制台,在左侧导航栏选择目标Bucket,在访问域名区域,查看Endpoint(地域节点)。akId
:用户的AccessKey ID。在容器服务管理控制台,单击右上角,主账号选择accesskeys,子账号选择AccessKey管理,设置AccessKey ID和AccessKey Secret。
akSecret
:用户的AccessKey Secret。获取方法同akId
。otherOpts
:挂载OSS时支持定制化参数,格式为:-o *** -o ***
,可参见FAQ。
- 执行以下命令,创建PV。
$ kubectl create -f pv-oss.yaml
预期结果
在 Kubernetes 菜单下,单击左侧导航栏的
,进入
存储卷列表页面,选择目标集群,可以看到刚刚创建的PV。

,进入
存储卷列表页面,选择目标集群,可以看到刚刚创建的PV。

创建PVC
创建OSS存储声明PVC,使用selector
筛选PV,精确配置PVC和PV的绑定关系。使用storageClassName
,表示PVC只与OSS类型的PV绑定。
- 创建pvc-oss.yaml文件。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-oss spec: accessModes: - ReadWriteMany storageClassName: oss resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: pv-oss
- 执行以下命令,创建PVC。
$ kubectl create -f pvc-oss.yaml
预期结果
在 Kubernetes 菜单下,单击左侧导航栏的
,进入
存储声明列表页面,选择目标集群和命名空间,可以看到刚刚创建的PVC。

,进入
存储声明列表页面,选择目标集群和命名空间,可以看到刚刚创建的PVC。

创建应用
- 创建oss-static.yaml文件。
apiVersion: apps/v1 kind: Deployment metadata: name: oss-static labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80 volumeMounts: - name: pvc-oss mountPath: "/data" - name: pvc-oss mountPath: "/data1" livenessProbe: exec: command: - sh - -c - cd /data initialDelaySeconds: 30 periodSeconds: 30 volumes: - name: pvc-oss persistentVolumeClaim: claimName: pvc-oss
说明 健康检查
livenessProbe
的详细内容及解释,请参见使用阿里云 OSS。 - 执行以下命令,创建Deployment。
$ kubectl create -f oss-static.yaml d
预期结果
在 Kubernetes 菜单下,单击左侧导航栏的
,进入
部署列表页面,选择目标集群和命名空间,可以看到刚刚创建的deployment。

,进入
部署列表页面,选择目标集群和命名空间,可以看到刚刚创建的deployment。

OSS的持久化存储
- 执行以下命令,查看部署的deployment所在Pod的名称。
$ kubectl get pod NAME READY STATUS RESTARTS AGE oss-static-66fbb85b67-dqbl2 1/1 Running 0 1h
- 执行以下命令,查看/data路径下的文件。
$ kubectl exec oss-static-66fbb85b67-dqbl2 ls /data | grep tmpfile
说明
/data路径下为空,没有文件。 - 执行以下命令,在/data路径下创建文件tmpfile。
$ kubectl exec oss-static-66fbb85b67-dqbl2 touch /data/tmpfile
- 执行以下命令,查看/data路径下的文件。
$ kubectl exec oss-static-66fbb85b67-dqbl2 ls /data | grep tmpfile tmpfile
- 执行以下命令,删除名称为oss-static-66fbb85b67-dqbl2的Pod。
$ kubectl delete pod oss-static-66fbb85b67-dqbl2 pod "oss-static-66fbb85b67-dqbl2" deleted
- 同时在另一个窗口中,执行以下命令,查看Pod删除及Kubernetes重建Pod的过程。
$ kubectl get pod -w -l app=nginx NAME READY STATUS RESTARTS AGE oss-static-66fbb85b67-dqbl2 1/1 Running 0 78m oss-static-66fbb85b67-dqbl2 1/1 Terminating 0 78m oss-static-66fbb85b67-zlvmw 0/1 Pending 0 <invalid> oss-static-66fbb85b67-zlvmw 0/1 Pending 0 <invalid> oss-static-66fbb85b67-zlvmw 0/1 ContainerCreating 0 <invalid> oss-static-66fbb85b67-dqbl2 0/1 Terminating 0 78m oss-static-66fbb85b67-dqbl2 0/1 Terminating 0 78m oss-static-66fbb85b67-dqbl2 0/1 Terminating 0 78m oss-static-66fbb85b67-zlvmw 1/1 Running 0 <invalid>
- 执行以下命令,查看Kubernetes重建的Pod名称。
$ kubectl get pod NAME READY STATUS RESTARTS AGE oss-static-66fbb85b67-zlvmw 1/1 Running 0 40s
- 执行以下命令,查看/data路径下的文件,刚刚创建的文件tmpfile并没有被删除,说明OSS上的数据可持久保存。
$ kubectl exec oss-static-66fbb85b67-zlvmw ls /data | grep tmpfile tmpfile
发布者:佚, 佚名,转转请注明出处:https://www.cms2.cn/aliyun/csk/5181.html