资讯专栏INFORMATION COLUMN

StatefulSet部署示例 容器云 UK8S

ernest.wang / 963人阅读

摘要:部署示例部署示例部署示例在部署一些有状态的服务如等时,我们需要使用到这个控制器,下面介绍下如果在中使用来部署服务。调度要求同一个区域的快杰型云主机,区域范围小于可用区,主机目前不支持指定区域创建机器。

StatefulSet部署示例

在部署一些有状态的服务如 Redis、MySQL 等时,我们需要使用到 StatefulSet 这个控制器,下面介绍下如果在 UK8S 中使用 UDisk 来部署 StatefulSet 服务。

了解StatefulSet
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
  namespace: db
spec:
  selector:
    matchLabels:
      app: mysql
  replicas: 5
  serviceName: mysql
  template:
    PodTemplateSpec..... # 有大量省略,与Deployment一样,是关于要控制的Pod的描述
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: ${YOUR_STORAGECLASS_NAME}
      resources:
        requests:
          storage: 10Gi

如果我们熟悉 Deployment 的结构体,则会发现其与 StatefulSet 最大的区别在于volumeClaimTemplates,其他地方则基本一致。

我们细看下volumeClaimTemplates,发现其结构体与“PersistentVolumeClaim”完全一致,没错,volumeClaimTemplates其实就是PVC的模板,用来生成多个访问模式为单点读写的PVC,供 StatefulSet 管理的 Pod 使用。

像上面的示例,StatefulSet 不仅会创建出5个 Pod,同时也还会创建出5个 PVC,供对应的Pod使用,以实现每个 Pod 都具有独立的存储状态。

PVC 示例

对于有状态服务,我们推荐使用SSD UDisk、RSSD UDisk作为存储介质,当然,我们也可以使用LocalPV,但由于目前大多数云主机的数据盘也都是云盘,直接使用 LocalPV 还有各种限制,因此强烈推荐使用 UDisk 作为存储介质

UK8S 集群在初始化的时候,已经内置了三个与 UDisk 相关的存储类,我们只需要直接引用存储类创建 PVC 供 Pod 消费即可。下面介绍下如何创建对应的PVC。

⚠️ RSSD UDisk调度要求同一个RDMA区域的快杰型云主机,RDMA区域范围小于可用区,主机目前不支持指定RDMA区域创建机器。因此使用RSSD UDisk,在Pod漂移的情况下,有可能出现Pod无法调度的问题。请您使用前务必确认可以接受该风险。

使用RSSD UDisk
volumeClaimTemplates:
  - metadata:
      name: ${YOUR_NAME} # 需要与VolumeMount的名称保持一致;
    spec:
      storageClassName: csi-udisk-rssd #这是集群内置的StorageClass
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 100Gi

上面我们使用的是集群内置的 StorageClass,我们也可以根据创建新的 SC,详见使用RSSD UDisk

使用SSD UDisk
volumeClaimTemplates:
  - metadata:
      name: ${YOUR_NAME} 
      labels:
        name: redis-cluster
    spec:
      storageClassName: ssd-csi-udisk #这是自行创建的存储介质为SSD UDisk的StorageClass
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi

我们看到,需要使用不同的存储介质,只需要在创建PVC时声明不同的storageClassName即可。下面我们介绍下如果创建自定义StorageClass。

声明自定义的StorageClass(UDisk 类型)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: udisk-ssd-test
provisioner: udisk.csi.ucloud.cn #存储供应方,此处不可更改。
parameters:
  type: "ssd"   # 存储介质,支持ssd和sata、rssd,必填
  fsType: "ext4"    # 文件系统,必填
  udataArkMode: "no"   # 是否开启方舟模式,默认不开启,非必填
  chargeType: "month" # 付费类型,支持dynamic、month、year,非必填
  quantity: "1" # 购买时长,dynamic无需填写,可购买1-9个月,或1-10年
reclaimPolicy: Retain  # PV回收策略,支持Delete和Retain,默认为Delete,非必填
mountOptions:   
  - debug
  - rw

上面的示例涵盖了 UDisk 的StorageClass的全部参数,我们可以根据业务需要来自定义 SC。

StatefulSet 示例
apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx # has to match .spec.template.metadata.labels
  serviceName: "nginx"
  replicas: 3 # by default is 1
  template:
    metadata:
      labels:
        app: nginx # has to match .spec.selector.matchLabels
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: nginx
        image: uhub.service.ucloud.cn/ucloud/nginx:latest
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "csi-udisk-rssd"  # has to match a storageClassname existed in  your cluster
      resources:
        requests:
          storage: 100Gi

在上面的示例中,我们声明的名称为 Web 的 StatefulSet 控制器,将创建一个3个nginx Pod,并且为每个Pod分别挂载一个RSSD UDisk,以供其存储数据。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/126663.html

相关文章

  • 容器 UK8S】使用kubectl操作集群:创建Service及StatefulSet部署示例

    摘要:创建创建一个类型为的,将换成自定义的即可。下面介绍下如何创建对应的。示例在上面的示例中,我们声明的名称为的控制器,将创建一个个,并且为每个分别挂载一个,以供其存储数据。创建Service创建一个类型为LoadBalancer的Service,将MYSECRET换成自定义的SecretName即可。 apiVersion: v1 kind: Service metadata: name:...

    Tecode 评论0 收藏0
  • 容器 UK8S】日志监控方案:使用ELK自建UK8S日志解决方案

    摘要:使用自建日志解决方案下面我们介绍下如何使用来搭建日志解决方案。根据配置文件创建一个名为的,如下在集群部署。配置在之前部署时,由于我们已经将加入到中,已经可以对的日志实现监控采集。使用ELK自建UK8S日志解决方案下面我们介绍下如何使用Elasticsearch+Filebeat+Kibana来搭建UK8S日志解决方案。一、部署Elasticsearch1. 关于ElasticsearchEl...

    Tecode 评论0 收藏0
  • 拉勾网基于 UK8S平台的容器化改造实践

    摘要:宋体本文从拉勾网的业务架构日志采集监控服务暴露调用等方面介绍了其基于的容器化改造实践。宋体此外,拉勾网还有一套自研的环境的业务发布系统,不过这套发布系统未适配容器环境。写在前面 拉勾网于 2019 年 3 月份开始尝试将生产环境的业务从 UHost 迁移到 UK8S,截至 2019 年 9 月份,QA 环境的大部分业务模块已经完成容器化改造,生产环境中,后台管理服务已全部迁移到 UK8...

    CoorChice 评论0 收藏0
  • UK8S 集群常见问题 容器 UK8S

    摘要:为什么在节点直接起容器网络不通为什么在节点直接起容器网络不通为什么在节点直接起容器网络不通使用自己的插件,而直接用起的容器并不能使用该插件,因此网络不通。 UK8S 集群常见问题本篇目录1. UK8S 完全兼容原生 Kubernetes API吗?2. UK8S 人工支持3. UK8S对Node上发布的容器有限制吗?如何修改?4. 为什么我的容器一起来就退出了?5. Docker 如何调整日...

    ernest.wang 评论0 收藏1762
  • 容器 UK8S】镜像制作与容器常见问题:为什么节点已经异常了,但是 Pod 还处在 Runnin

    摘要:对于节点已经登陆不了的情况,如果希望快速恢复可以在控制台找到对应主机断电重启。与绑定完成,插件完成后续的挂载和等工作。UK8S 人工支持对于使用 UK8S 遇到的本文档未涉及的问题,如果需要人工支持,请添加下面公钥信任,并提供主机的 uhost-idssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGIFVUtrp+jAnIu1fBvyLx/4L4GNsX+6v8...

    Tecode 评论0 收藏0
  • 容器 UK8S】常见问题及排障指南:入门必读之Pod 常见命令,Controller 常见命令和

    摘要:入门必读提供了一系列的命令行工具来辅助我们调试和定位问题,本指南列举一些常见的命令来帮助应用管理者快速定位和解决问题。这里以为例,介绍的常用命令其他的命令类型与其一致。入门必读Kubernetes 提供了一系列的命令行工具来辅助我们调试和定位问题,本指南列举一些常见的命令来帮助应用管理者快速定位和解决问题。定位问题在开始处理问题之前,我们需要确认问题的类型,是 Pod ,Service ,或...

    Tecode 评论0 收藏0

发表评论

0条评论

ernest.wang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<