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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介:

介绍

阿里云Kubernetes集群目前支持NAS、OSS、CPFS等阿里云共享存储服务,并通过flexvolume进行挂载;

共享存储支持一个存储卷被多个Pod同时挂载,多个Pod可能同时修改相同数据,这时需要应用自行实现数据的同步功能;

NAS:适合于IO较高的应用,读写性能相对OSS高,可实现跨主机文件共享;如文件服务器;

OSS:适用于低IO服务,配置文件、图片、小视频等共享业务;

使用NAS卷创建应用

创建NAS存储盘

  1. 在NAS控制台创建一个NAS文件系统盘;
  2. 创建NAS挂载点,挂载点配置成集群所在的VPC网络;
  3. 可以在集群中一个节点挂载NAS卷测试是否可行;

创建PV

通过NAS卷创建PV资源类型,配置PV唯一性标签alicloud-pvname: pv-nas;

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nas
  labels:
    alicloud-pvname: pv-nas
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  flexVolume:
    driver: "alicloud/nas"
    options:
      server: "***-**.cn-beijing.nas.aliyuncs.com"
      path: "/k8s1"
      vers: "4.0"

options支持的参数:

server:NAS的挂载点;

path:所想挂载NAS文件系统的目录,如果目录不存在会自动创建;

vers:使用NFS的版本,支持3.0、4.0;

mode:挂载目录后配置目录的访问权限,如果挂载的目录文件量很大,此操作会很慢,不建议配置;

options:挂载NAS时,附加的参数,可选;

创建应用

PVC中通过selector来显式指定所要绑定的pv;

NAS为共享存储,可以在Deployment中配置replicas为2;

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc-nas
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi
  selector:
    matchLabels:
      alicloud-pvname: pv-nas
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nas-static
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
        volumeMounts:
          - name: pvc-nas
            mountPath: "/data"
      volumes:
        - name: pvc-nas
          persistentVolumeClaim:
            claimName: pvc-nas

共享存储验证

创建服务:

# kubectl create -f nas.yaml

# kubectl get pod
NAME                          READY     STATUS    RESTARTS   AGE
nas-static-6bcf7895dd-ddf7t   1/1       Running   0          15m
nas-static-6bcf7895dd-mhv5w   1/1       Running   0          15m

NAS盘上创建临时文件:

# kubectl exec nas-static-6bcf7895dd-ddf7t ls /data
# kubectl exec nas-static-6bcf7895dd-mhv5w ls /data

# kubectl exec nas-static-6bcf7895dd-ddf7t touch /data/nas1

# kubectl exec nas-static-6bcf7895dd-ddf7t ls /data
nas1    
# kubectl exec nas-static-6bcf7895dd-mhv5w ls /data
nas1

高可用验证

删除所有Pod:

# kubectl delete pod nas-static-6bcf7895dd-ddf7t nas-static-6bcf7895dd-mhv5w
pod "nas-static-6bcf7895dd-ddf7t" deleted
pod "nas-static-6bcf7895dd-mhv5w" deleted

# kubectl get pod
NAME                          READY     STATUS              RESTARTS   AGE
nas-static-6bcf7895dd-5zgxz   0/1       ContainerCreating   0          3s
nas-static-6bcf7895dd-99ppg   0/1       ContainerCreating   0          3s
nas-static-6bcf7895dd-ddf7t   0/1       Terminating         0          18m
nas-static-6bcf7895dd-mhv5w   0/1       Terminating         0          18m

查看新创建Pod数据:

# kubectl exec nas-static-6bcf7895dd-5zgxz ls /data
nas1
# kubectl exec nas-static-6bcf7895dd-99ppg ls /data
nas1
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
1月前
|
Kubernetes 监控 开发者
掌握容器化:Docker与Kubernetes的最佳实践
【10月更文挑战第26天】本文深入探讨了Docker和Kubernetes的最佳实践,涵盖Dockerfile优化、数据卷管理、网络配置、Pod设计、服务发现与负载均衡、声明式更新等内容。同时介绍了容器化现有应用、自动化部署、监控与日志等开发技巧,以及Docker Compose和Helm等实用工具。旨在帮助开发者提高开发效率和系统稳定性,构建现代、高效、可扩展的应用。
|
13天前
|
Kubernetes 算法 调度
阿里云 ACK FinOps成本优化最佳实践
本文源自2024云栖大会梁成昊演讲,讨论了成本优化策略的选择与实施。文章首先介绍了成本优化的基本思路,包括优化购买方式、调整资源配置等基础策略,以及使用弹性、资源混部等高级策略。接着,文章详细探讨了集群优化和应用优化的具体方法,如使用抢占式实例降低成本、通过资源画像识别并优化资源配置,以及利用智能应用弹性策略提高资源利用效率。
|
13天前
|
Kubernetes 容灾 调度
阿里云 ACK 高可用稳定性最佳实践
本文整理自2024云栖大会刘佳旭的演讲,主题为《ACK高可用稳定性最佳实践》。文章探讨了云原生高可用架构的重要性,通过Kubernetes的高可用案例分析,介绍了ACK在单集群高可用架构设计、产品能力和最佳实践方面的方法,包括控制面和数据面的高可用策略、工作负载高可用配置、企业版容器镜像服务高可用配置等内容,旨在帮助企业构建更加可靠和高效的应用运行环境。
|
2月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
137 60
|
1月前
|
存储 运维 Kubernetes
K8s业务迁移最佳实践: 灵活管理资源备份与调整策略,实现高效简便的应用恢复
在当今快速变化的云原生领域,Kubernetes(K8s)集群的运维面临着诸多挑战,其中灾备与业务迁移尤为关键。ACK备份中心支持丰富的资源调整策略,在数据恢复阶段即可自动适配目标集群环境,确保业务无缝重启。
|
1月前
|
Kubernetes 监控 API
深入解析Kubernetes及其在生产环境中的最佳实践
深入解析Kubernetes及其在生产环境中的最佳实践
48 1
|
1月前
|
存储 Kubernetes 网络协议
k8s的无头服务
Headless Service 是一种特殊的 Kubernetes 服务,其 `spec:clusterIP` 设置为 `None`,不会分配 ClusterIP,通过 DNS 解析提供服务发现。与普通服务不同,Headless Service 不提供负载均衡功能,每个 Pod 都有唯一的 DNS 记录,直接映射到其 IP 地址,适用于有状态应用的场景,如与 StatefulSet 一起部署数据库。示例中通过创建 Nginx 的 StatefulSet 和 Headless Service,展示了如何直接访问单个 Pod 并进行内容修改。
52 3
|
1月前
|
存储 Kubernetes Devops
Kubernetes集群管理和服务部署实战
Kubernetes集群管理和服务部署实战
52 0
|
2月前
|
NoSQL 关系型数据库 Redis
高可用和性能:基于ACK部署Dify的最佳实践
本文介绍了基于阿里云容器服务ACK,部署高可用、可伸缩且具备高SLA的生产可用的Dify服务的详细解决方案。
|
1天前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
14 2

相关产品

  • 容器服务Kubernetes版