第 2 章 部署应用程序研讨会


2.1. 研讨会概述

2.1.1. 简介

在成功置备集群后,请按照本研讨会部署应用程序以了解部署和操作基于容器的应用程序的概念。

研讨会目标

  • 使用 Source-to-Image (S2I)和 Kubernetes 部署对象部署基于 Node.js 的应用
  • 设置持续交付(CD)管道,以自动推送源代码更改
  • 体验自我修复应用程序
  • 通过 ConfigMap、secret 和环境变量探索配置管理
  • 使用持久性存储在 pod 重启后共享数据
  • 探索 Kubernetes 和应用程序中的网络
  • 熟悉 ROSA 和 Kubernetes 功能
  • 根据来自 Horizontal Pod Autoscaler (HPA)的负载自动缩放 pod

先决条件

2.1.2. 关于 OSToy 应用程序

OSToy 是一个 Node.js 应用程序,它部署到 ROSA 集群,以帮助探索 Kubernetes 的功能。

这个应用程序有一个用户界面,您可以:

  • 将消息写入日志(stdout / stderr)
  • 有意使应用程序崩溃以查看自我修复
  • 切换存活度探测并监控 OpenShift 行为
  • 读取 ConfigMap、secret 和环境变量
  • 连接到共享存储时读取和写入文件
  • 使用 included 微服务检查网络连接、集群内 DNS 和内部通信
  • 使用 HPA 增加负载以查看 pod 的自动扩展

2.1.2.1. OSToy 应用程序图

2.1.2.2. 了解 OSToy UI

  1. Pod 名称
  2. Home: 应用程序主页
  3. 持久性存储:将数据写入绑定到应用程序的持久性卷
  4. Config Maps: 显示应用程序可用的 ConfigMap 和 key:value 对
  5. Secrets : 显示应用程序和 key:value 对可用的 secret
  6. ENV 变量: 显示应用程序可用的环境变量
  7. 网络: 网络工具
  8. Pod 自动扩展: 增加 pod 的负载并测试 Horizontal Pod Autoscaler (HPA)
  9. ACK S3: Integrate with AWS S3 to read and write objects to a bucket
  10. 关于: 应用程序信息

2.1.2.3. 实验资源

  • OSToy 应用源代码
  • OSToy 前端容器镜像
  • OSToy 微服务容器镜像
  • 部署定义 YAML 文件:

    ostoy-frontend-deployment.yaml

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ostoy-pvc
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ostoy-frontend
      labels:
        app: ostoy
    spec:
      selector:
        matchLabels:
          app: ostoy-frontend
      strategy:
        type: Recreate
      replicas: 1
      template:
        metadata:
          labels:
            app: ostoy-frontend
        spec:
          # Uncomment to use with ACK portion of the workshop
          # If you chose a different service account name please replace it.
          # serviceAccount: ostoy-sa
          containers:
          - name: ostoy-frontend
            securityContext:
              allowPrivilegeEscalation: false
              runAsNonRoot: true
              seccompProfile:
                type: RuntimeDefault
              capabilities:
                drop:
                - ALL
            image: quay.io/ostoylab/ostoy-frontend:1.6.0
            imagePullPolicy: IfNotPresent
            ports:
            - name: ostoy-port
              containerPort: 8080
            resources:
              requests:
                memory: "256Mi"
                cpu: "100m"
              limits:
                memory: "512Mi"
                cpu: "200m"
            volumeMounts:
            - name: configvol
              mountPath: /var/config
            - name: secretvol
              mountPath: /var/secret
            - name: datavol
              mountPath: /var/demo_files
            livenessProbe:
              httpGet:
                path: /health
                port: 8080
              initialDelaySeconds: 10
              periodSeconds: 5
            env:
            - name: ENV_TOY_SECRET
              valueFrom:
                secretKeyRef:
                  name: ostoy-secret-env
                  key: ENV_TOY_SECRET
            - name: MICROSERVICE_NAME
              value: OSTOY_MICROSERVICE_SVC
            - name: NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
          volumes:
            - name: configvol
              configMap:
                name: ostoy-configmap-files
            - name: secretvol
              secret:
                defaultMode: 420
                secretName: ostoy-secret
            - name: datavol
              persistentVolumeClaim:
                claimName: ostoy-pvc
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: ostoy-frontend-svc
      labels:
        app: ostoy-frontend
    spec:
      type: ClusterIP
      ports:
        - port: 8080
          targetPort: ostoy-port
          protocol: TCP
          name: ostoy
      selector:
        app: ostoy-frontend
    ---
    apiVersion: route.openshift.io/v1
    kind: Route
    metadata:
      name: ostoy-route
    spec:
      to:
        kind: Service
        name: ostoy-frontend-svc
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: ostoy-secret-env
    type: Opaque
    data:
      ENV_TOY_SECRET: VGhpcyBpcyBhIHRlc3Q=
    ---
    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: ostoy-configmap-files
    data:
      config.json:  '{ "default": "123" }'
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: ostoy-secret
    data:
      secret.txt: VVNFUk5BTUU9bXlfdXNlcgpQQVNTV09SRD1AT3RCbCVYQXAhIzYzMlk1RndDQE1UUWsKU01UUD1sb2NhbGhvc3QKU01UUF9QT1JUPTI1
    type: Opaque
    Copy to Clipboard Toggle word wrap

    ostoy-microservice-deployment.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ostoy-microservice
      labels:
        app: ostoy
    spec:
      selector:
        matchLabels:
          app: ostoy-microservice
      replicas: 1
      template:
        metadata:
          labels:
            app: ostoy-microservice
        spec:
          containers:
          - name: ostoy-microservice
            securityContext:
              allowPrivilegeEscalation: false
              runAsNonRoot: true
              seccompProfile:
                type: RuntimeDefault
              capabilities:
                drop:
                - ALL
            image: quay.io/ostoylab/ostoy-microservice:1.5.0
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 8080
              protocol: TCP
            resources:
              requests:
                memory: "128Mi"
                cpu: "50m"
              limits:
                memory: "256Mi"
                cpu: "100m"
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: ostoy-microservice-svc
      labels:
        app: ostoy-microservice
    spec:
      type: ClusterIP
      ports:
        - port: 8080
          targetPort: 8080
          protocol: TCP
      selector:
        app: ostoy-microservice
    Copy to Clipboard Toggle word wrap

  • ACK S3 的 S3 存储桶清单

    s3-bucket.yaml

    apiVersion: s3.services.k8s.aws/v1alpha1
    kind: Bucket
    metadata:
      name: ostoy-bucket
      namespace: ostoy
    spec:
      name: ostoy-bucket
    Copy to Clipboard Toggle word wrap

注意

为简化 OSToy 应用程序的部署,以上部署清单所需的所有对象都分组在一起。对于典型的企业部署,建议为每个 Kubernetes 对象有一个单独的清单文件。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat