资讯专栏INFORMATION COLUMN

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

Tecode / 2243人阅读

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

创建Service

创建一个类型为LoadBalancer的Service,将MYSECRET换成自定义的SecretName即可。


apiVersion: v1
kind: Service
metadata: 
  name: ucloud-nginx
  labels:
    app: ucloud-nginx
spec: 
  type: LoadBalancer
  ports: 
    - protocol: TCP
      port: 80
  selector:
    app: ucloud-nginx
---
apiVersion: v1
kind: Pod
metadata:
  name: test-nginx
  labels:
    app: ucloud-nginx
spec:
  containers:
  - name: nginx
    image: uhub.service.ucloud.cn/ucloud/nginx:1.9.2
    ports:
    - containerPort: 80
  imagePullSecrets:
    - name: MYSECRET

系统会自动生成一个ULB,UK8S同时还支持配置ULB的各种参数,详见service

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。

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

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

  1. 使用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。

  1. 声明自定义的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://docs.ucloud.cn/uk8s/manageviakubectl/createservice

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

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

相关文章

  • 容器 UK8S】日志监控方案:使用ELK自建UK8S日志解决方案

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

    Tecode 评论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使用kubectl操作集群kubectl语法一些常见命令示例

    摘要:是一个用于操作集群的命令行工具,本文将简要介绍下的语法,并提供一些常见命令示例,如果你想了解深入了解的用法,请查阅官方文档,或使用命令查看详细帮助。常见命令使用一个文件或者标准输入创建资源。kubectl命令行简介由于查看集群凭证可以直接登录集群,所以查看集群凭证的操作已归为用户角色权限中的增权限,如需查看集群凭证,请确保所在角色已开启UK8S增权限。kubectl是一个用于操作kubern...

    Tecode 评论0 收藏0
  • 容器UK8S】新手指导

    摘要:详细请见产品价格产品概念使用须知名词解释漏洞修复记录集群节点配置推荐模式选择产品价格操作指南集群创建需要注意的几点分别是使用必读讲解使用需要赋予的权限模式切换的切换等。UK8S概览UK8S是一项基于Kubernetes的容器管理服务,你可以在UK8S上部署、管理、扩展你的容器化应用,而无需关心Kubernetes集群自身的搭建及维护等运维类工作。了解使用UK8S为了让您更快上手使用,享受UK...

    Tecode 评论0 收藏0

发表评论

0条评论

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