前提条件
- 创建一个CCE集群。具体请参见快速创建Kubernetes集群。
- 您已创建本例中涉及的资源对象,例如存储卷、配置项、密钥、节点标签等。
背景信息
在云容器引擎中,您需要自己定义一个工作负载运行所需的资源对象,通过标签选择器等机制,将资源对象组合成一个完整的工作负载。
本例主要演示如何通过YAML方式进行Tomcat工作负载的创建。主要涉及到的资源对象有:
- 存储卷
- 配置项
- 密钥
- 指定节点部署
- 健康检查
- 服务/负载均衡
操作步骤
- 登录云容器引擎管理控制台。
- 单击左侧导航栏中的“工作负载 > 有状态( StatefulSet )”,进入有状态(StatefulSet)页面。
- 单击页面右上角的“创建有状态工作负载”,在创建有状态工作负载页面中单击页面右侧的“YAML创建”。图1 YAML创建
- 在打开的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
- 首先创建一个Tomcat基础模板,本例中,将在该编排模板的基础上,展示在yaml文件中配置各个资源对象。
- 根据工作负载需求完成配置后,单击“创建”。图2 完成配置
- 部署成功后,单击左侧导航栏中的“工作负载 > 有状态( StatefulSet )”,tomcat-statefulset已处于“运行中”状态,单击复制外部访问地址。图3 部署成功
- 您可以在浏览器中访问Tomcat工作负载欢迎页面。图4 访问成功
下一步
根据您的编排模板情况,您可以探索该Tomcat工作负载在存储卷、密钥、配置项、节点调度和健康检查方面的特性。