云容器引擎 CCE云容器引擎 CCE

文档首页> 云容器引擎 CCE> 快速入门> Yaml创建有状态工作负载(Tomcat)
更新时间:2021/07/27 GMT+08:00
分享

Yaml创建有状态工作负载(Tomcat)

前提条件

  • 创建一个CCE集群。具体请参见快速创建Kubernetes集群
  • 您已创建本例中涉及的资源对象,例如存储卷、配置项、密钥、节点标签等。

背景信息

在云容器引擎中,您需要自己定义一个工作负载运行所需的资源对象,通过标签选择器等机制,将资源对象组合成一个完整的工作负载。

本例主要演示如何通过YAML方式进行Tomcat工作负载的创建。主要涉及到的资源对象有:

  • 存储卷
  • 配置项
  • 密钥
  • 指定节点部署
  • 健康检查
  • 服务/负载均衡

操作步骤

  1. 登录云容器引擎管理控制台。
  2. 单击左侧导航栏中的“工作负载 > 有状态( StatefulSet )”,进入有状态(StatefulSet)页面。
  3. 单击页面右上角的“创建有状态工作负载”,在创建有状态工作负载页面中单击页面右侧的“YAML创建”

    图1 YAML创建

  4. 在打开的YAML编辑窗口中,对模板进行相关配置,下面我们以Tomcat工作负载的创建为例。

    • 首先创建一个Tomcat基础模板,本例中,将在该编排模板的基础上,展示在yaml文件中配置各个资源对象。
      apiVersion: apps/v1
      kind: StatefulSet
      metadata:
        name: tomcat-statefulset
        labels:
          app: tomcat
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: tomcat
        template:
          metadata:
            labels:
              app: tomcat
          spec:
            containers:
            - name: tomcat
              image: tomcat       # replace it with your exactly <image_name:tags>
              ports:
              - containerPort: 8080
    • 在基础模板的基础上添加存储卷。

      在添加数据卷之前我们需要先进行存储卷的申请和声明;存储卷的申请有三种类型可以选择,分别为:使用华为云云硬盘(EVS)存储卷华为云文件存储(SFS)存储卷华为云对象存储(OBS)存储卷;具体申请方式请参考各自的链接。

      完成存储申请后,您需要存储卷的声明,在这里我们使用华为云云硬盘(EVS)存储卷;在示例中我们选择PV/PVC的方式进行存储卷挂载,PVC名称为cce-evs-test。

      apiVersion: apps/v1
      kind: StatefulSet
      metadata:
        name: tomcat-statefulset
        labels:
          app: tomcat
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: tomcat
        template:
          metadata:
            labels:
              app: tomcat
          spec:
            containers:
            - name: tomcat
              image: tomcat       # replace it with your exactly <image_name:tags>
              ports:
              - containerPort: 8080
              volumeMounts:                 #add volume
              - name: cce-evs-test
                mountPath: /data
            volumes:                        #add volume
            - name: cce-evs-test
              persistentVolumeClaim:
                claimName: cce-evs-test
    • 增加配置项。

      在使用配置项前,我们需要在配置项管理进行配置项的创建,使用方法请参考使用配置项

      在这本例中,我们使用示例中的配置项名称和内容,配置项名称为special-config,配置项分别为SPECIAL_LEVEL:very和SPECIAL_TYPE:charm;通过环境变量的方式进行配置项的使用。

      apiVersion: apps/v1
      kind: StatefulSet
      metadata:
        name: tomcat-statefulset
        labels:
          app: tomcat
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: tomcat
        template:
          metadata:
            labels:
              app: tomcat
          spec:
            containers:
            - name: tomcat
              image: tomcat         # replace it with your exactly <image_name:tags>
              ports:
              - containerPort: 8080
              volumeMounts:
              - name: cce-evs-test
                mountPath: /data
              env:
              - name: SPECIAL_LEVEL_KEY       #add configmap
                valueFrom:
                  configMapKeyRef:
                    name: special-config
                    key: SPECIAL_LEVEL
              - name: SPECIAL_TYPE_KEY      #add configmap
                valueFrom:
                  configMapKeyRef:
                    name: special-config
                    key: SPECIAL_TYPE
            volumes:
            - name: cce-evs-test
              persistentVolumeClaim:
                claimName: cce-evs-test
    • 增加密钥(secret)的使用。

      在使用secret前,您需要先将需要加密的secret在密钥列表中进行创建,创建过程请参考创建密钥

      apiVersion: apps/v1
      kind: StatefulSet
      metadata:
        name: tomcat-statefulset
        labels:
          app: tomcat
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: tomcat
        template:
          metadata:
            labels:
              app: tomcat
          spec:
            containers:
            - name: tomcat
              image: tomcat         # replace it with your exactly <image_name:tags>
              ports:
              - containerPort: 8080
              volumeMounts:
              - name: cce-evs-test
                mountPath: /data
              env:
              - name: SPECIAL_LEVEL_KEY
                valueFrom:
                  configMapKeyRef:
                    name: special-config
                    key: SPECIAL_LEVEL
              - name: SPECIAL_TYPE_KEY
                valueFrom:
                  configMapKeyRef:
                    name: special-config
                    key: SPECIAL_TYPE
              - name: SECRET_USERNAME         #add secret
                valueFrom:
                  secretKeyRef:
                    name: account
                    key: username
              - name: SECRET_PASSWORD        #add secret
                valueFrom:
                  secretKeyRef:
                    name: account
                    key: password
            volumes:
            - name: cce-evs-test
              persistentVolumeClaim:
                claimName: cce-evs-test
    • 增加节点选择。

      在部署工作负载的时候,您可以将工作负载部署在有特定标签的节点上面;

      在本例中先给一个节点打上group:worker的标签,当部署工作负载成功后,该工作负载会部署在有该标签的节点上。

      apiVersion: apps/v1
      kind: StatefulSet
      metadata:
        name: tomcat-statefulset
        labels:
          app: tomcat
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: tomcat
        template:
          metadata:
            labels:
              app: tomcat
          spec:
            containers:
            - name: tomcat
              image: tomcat
              ports:
              - containerPort: 8080
              volumeMounts:
              - name: cce-evs-test
                mountPath: /data
              env:
              - name: SPECIAL_LEVEL_KEY
                valueFrom:
                  configMapKeyRef:
                    name: special-config
                    key: SPECIAL_LEVEL
              - name: SPECIAL_TYPE_KEY
                valueFrom:
                  configMapKeyRef:
                    name: special-config
                    key: SPECIAL_TYPE
              - name: SECRET_USERNAME
                valueFrom:
                  secretKeyRef:
                    name: account
                    key: username
              - name: SECRET_PASSWORD
                valueFrom:
                  secretKeyRef:
                    name: account
                    key: password
            volumes:
            - name: cce-evs-test
              persistentVolumeClaim:
                claimName: cce-evs-test
            nodeSelector:           #add node selector
              group: worker
    • 增加健康检查。

      在云容器引擎上,我们可以为工作负载添加健康检查来检查工作负载的健康状态。在云容器引擎上我们通过livenessProbe和readinessProbe来检测工作负载中某个容器的健康状态。

      apiVersion: apps/v1
      kind: StatefulSet
      metadata:
        name: tomcat-statefulset
        labels:
          app: tomcat
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: tomcat
        template:
          metadata:
            labels:
              app: tomcat
          spec:
            containers:
            - name: tomcat
              image: tomcat
              ports:
              - containerPort: 8080
              livenessProbe:        #add health check
                httpGet:
                  path: /
                  port: 8080
                initialDelaySeconds: 30
                timeoutSeconds: 5
                periodSeconds: 5
              readinessProbe:       #add health check
                httpGet:
                  path: /
                  port: 8080
                initialDelaySeconds: 5
                timeoutSeconds: 1
                periodSeconds: 5
              volumeMounts:
              - name: cce-evs-test
                mountPath: /data
              env:
              - name: SPECIAL_LEVEL_KEY
                valueFrom:
                  configMapKeyRef:
                    name: special-config
                    key: SPECIAL_LEVEL
              - name: SPECIAL_TYPE_KEY
                valueFrom:
                  configMapKeyRef:
                    name: special-config
                    key: SPECIAL_TYPE
              - name: SECRET_USERNAME
                valueFrom:
                  secretKeyRef:
                    name: account
                    key: username
              - name: SECRET_PASSWORD
                valueFrom:
                  secretKeyRef:
                    name: account
                    key: password
            volumes:
            - name: cce-evs-test
              persistentVolumeClaim:
                claimName: cce-evs-test
            nodeSelector:
              group: worker
    • 为Tomcat StatefulSet创建LoadBalancer类型的service。

      为了可以通过外部如公网访问部署在云容器引擎上的工作负载,您可以通过创建LoadBalancer类型的service将该工作负载暴露出去。LoadBalancer类型的service会创建华为云上的负载均衡,您可以通过负载均衡的IP地址进行工作负载的访问。

      创建service的步骤请参考创建服务

      本例中,编排模板如下:

      apiVersion: v1
      kind: Service
      metadata:
        name: tomcat-svc
        labels:
          app: tomcat-svc
      spec:
        selector:
          app: tomcat
        ports:
        - protocol: TCP
          port: 8080
          targetPort: 8080
        type: LoadBalancer

  5. 根据工作负载需求完成配置后,单击“创建”

    图2 完成配置

  6. 部署成功后,单击左侧导航栏中的“工作负载 > 有状态( StatefulSet )”,tomcat-statefulset已处于“运行中”状态,单击复制外部访问地址。

    图3 部署成功

  7. 您可以在浏览器中访问Tomcat工作负载欢迎页面。

    图4 访问成功

下一步

根据您的编排模板情况,您可以探索该Tomcat工作负载在存储卷、密钥、配置项、节点调度和健康检查方面的特性。

分享:

    相关文档

    相关产品