K8S有状态服务-静态云盘使用最佳实践-阿里云开发者社区

开发者社区> 阚俊宝> 正文

K8S有状态服务-静态云盘使用最佳实践

简介: 云盘为阿里云存储团队提供的非共享存储,只能同时被一个 pod 挂载。集群中只有与云盘在同一个可用区(Zone)的节点才可以挂载云盘。
+关注继续查看

Kubernetes最新的版本对有状态服务做了较多的增强,包括添加了CSI Plugin、Local Volume、PVC保护、Volume Resize等。本系列文章着重介绍K8S有状态服务的各种应用实践,并结合阿里云存储系列产品底座,为您使用K8S有状态服务拓展业务提供参考。

K8S有状态服务-静态云盘使用最佳实践

K8S有状态服务-动态云盘使用最佳实践

K8S有状态服务-共享存储使用最佳实践

K8S有状态服务-StatefulSet使用最佳实践

K8S有状态服务-云盘扩容解决方案

K8S有状态服务-LocalVolume使用最佳实践

介绍

云盘为阿里云存储团队提供的非共享存储,只能同时被一个 pod 挂载。集群中只有与云盘在同一个可用区(Zone)的节点才可以挂载云盘。

使用场景

某些对磁盘IO要求高的应用,且没有共享数据的需求,如Mysql、Redis等数据存储服务;
高速写日志的场景;
对存储数据需要持久化,不会因pod挂掉而消失;

两种使用云盘方案

静态方式:

手动创建PV、PVC资源对象;
这种方式适合于已经购买了云盘实例的情况下;

动态方式:

手动创建PVC,在PVC中声明StorageClass;
通过storageclass自动创建PV资源对象;
这种方式适合于没有购买云盘,在应用部署时自动购买的情况;

创建云盘PV

创建PV前要确保在ECS控制台创建了待用云盘,并获取云盘ID;

PV名字需要和云盘ID保持一致,如下:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: d-bp1j17ifxfasvts3tf40
  labels:
    alicloud-pvname: d-bp1j17ifxfasvts3tf40
    failure-domain.beta.kubernetes.io/zone: cn-hangzhou-b
    failure-domain.beta.kubernetes.io/region: cn-hangzhou
spec:
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  flexVolume:
    driver: "alicloud/disk"
    fsType: "ext4"
    options:
      volumeId: "d-bp1j17ifxfasvts3tf40"

其中,zone、region两个labels在多个zone环境下是必须的,此label会保证pod调度到云盘所在的zone;

failure-domain.beta.kubernetes.io/zone: cn-hangzhou-b
failure-domain.beta.kubernetes.io/region: cn-hangzhou

alicloud-pvname为一个标签,标明唯一pv,可以为pvc筛选pv配置中使用;

alicloud-pvname: d-bp1j17ifxfasvts3tf40

使用云盘卷创建应用

创建云盘存储声明PVC,使用selector进行pv筛选,这样可以精确配置PVC、PV的绑定关系;

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc-disk
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
  selector:
    matchLabels:
      alicloud-pvname: d-bp1j17ifxfasvts3tf40
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-static
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
          - name: disk-pvc
            mountPath: "/data"
      volumes:
        - name: disk-pvc
          persistentVolumeClaim:
            claimName: pvc-disk

高可用验证

创建应用

# kubectl create -f static.yaml

# kubectl get pod | grep static
nginx-static-85f99b4448-clnb2   1/1       Running   0          1m

# kubectl exec nginx-static-85f99b4448-clnb2 df | grep data
/dev/vdc        20511312   45080  19401272   1% /data

在云盘中创建文件:

# kubectl exec nginx-static-85f99b4448-clnb2 ls /data
lost+found

# kubectl exec nginx-static-85f99b4448-clnb2 touch /data/hello

# kubectl exec nginx-static-85f99b4448-clnb2 ls /data
hello
lost+found

删除Pod,验证文件持久化:

# kubectl delete pod nginx-static-85f99b4448-clnb2
pod "nginx-static-85f99b4448-clnb2" deleted

# kubectl get pod
NAME                            READY     STATUS              RESTARTS   AGE
nginx-static-85f99b4448-clnb2   0/1       Terminating         0          4m
nginx-static-85f99b4448-x5b28   0/1       ContainerCreating   0          4s

# kubectl exec nginx-static-85f99b4448-x5b28 ls /data
hello
lost+found

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
EMR使用OSS还是云盘HDFS存储的选择讨论
使用EMR如何选择数据存储方案,这里分别列举各种场景下两种方案的优缺点,各位可以根据实际情况,选择最合适自己业务的一种方式。
5833 0
云服务器ECS 云盘缩容教程步骤来啦!
由于目前云服务器ECS不支持系统盘或者数据盘缩容,如果您有云盘缩容的需求,可用通过阿里云迁云工具达成目的。
1331 0
如何配置阿里云容器服务K8S Ingress Controller使用私网SLB
本文主要讲述如何配置阿里云容器服务K8S Ingress Controller使用私网SLB。
11485 0
codeblocks创建和使用静态库(C语言)
静态库  (扩展名为 .a 或 .lib) 是包含函数的文件,用于在link阶段整合执行程序,动态链接库(扩展名  .dll)是不在link阶段整合进执行程序中的。 DLL文件在执行阶段动态调用 下面我们将用免费的开发工具CodeBocks开发静态库 创建静态库 启动Codeblocks并创建一个类型为 "Static Library" (File/New/Project/Static Library/Go)的项目。
943 0
盘点:阿里云云服务器的优势表现在哪些方面
阿里云:云服务器的优势 1.安全稳定,数据可靠 在无地震等重大自然灾害下,云服务器数据可靠性可达99.999%,让您的数据安全无忧
1827 0
【视频点播最佳实践】视频点播播放异常排查
阿里云视频点播是集音视频采集、编辑、上传、自动化转码处理、媒体资源管理、分发加速、视频播放于一体的一站式音视频点播解决方案。但是对于使用者来说经常遇到的问题即是视频点播中的视频如何对外提供服务,并且当播放出现异常时如何进行排查呢?本文主要从该方面为大家介绍视频点播的播放方式和异常排查。
6418 0
+关注
阚俊宝
阿里云容器服务开发,专注Kubernetes、Docker、云存储;
57
文章
37
问答
来源圈子
更多
容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级 Kubernetes 容器化应用的全生命周期管理。容器服务 Kubernetes 版简化集群的搭建和扩容等工作,整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳的 Kubernetes 容器化应用运行环境。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载