第 2 章 部署应用程序研讨会
2.1. 研讨会概述 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
在成功置备集群后,请按照本研讨会部署应用程序以了解部署和操作基于容器的应用程序的概念。
2.1.1. 研讨会目标 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
以下详细介绍了此集群创建研讨会的目的。
- 使用 Source-to-Image (S2I)和 Kubernetes 部署对象部署基于 Node.js 的应用
- 设置持续交付(CD)管道,以自动推送源代码更改
- 体验自我修复应用程序
- 通过 ConfigMap、secret 和环境变量探索配置管理
- 使用持久性存储在 pod 重启后共享数据
- 探索 Kubernetes 和应用程序中的网络
- 熟悉 Red Hat OpenShift Service on AWS 和 Kubernetes 功能
- 根据来自 Horizontal Pod Autoscaler (HPA)的负载自动缩放 pod
2.1.1.1. 先决条件 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
- 在 AWS 集群上置备的 Red Hat OpenShift Service
- OpenShift 命令行界面(CLI)
- GitHub 帐户
2.1.2. 关于 OSToy 应用程序 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
OSToy 是一个 Node.js 应用程序,它部署到 Red Hat OpenShift Service on AWS 集群,以帮助探索 Kubernetes 的功能。
这个应用程序有一个用户界面,您可以:
- 将消息写入日志(stdout / stderr)
- 有意使应用程序崩溃以查看自我修复
- 切换存活度探测并监控 OpenShift 行为
- 读取 ConfigMap、secret 和环境变量
- 连接到共享存储时读取和写入文件
- 使用 included 微服务检查网络连接、集群内 DNS 和内部通信
- 使用 HPA 增加负载以查看 pod 的自动扩展
2.1.2.1. 了解 OSToy UI 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
- Pod 名称
- Home: 应用程序主页
- 持久性存储:将数据写入绑定到应用程序的持久性卷
- Config Maps: 显示应用程序可用的 ConfigMap 和 key:value 对
- Secrets : 显示应用程序和 key:value 对可用的 secret
- ENV 变量: 显示应用程序可用的环境变量
- 网络: 网络工具
- Pod 自动扩展: 增加 pod 的负载并测试 Horizontal Pod Autoscaler (HPA)
- ACK S3: Integrate with AWS S3 to read and write objects to a bucket
- 关于: 应用程序信息
2.1.2.2. 实验资源 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
- OSToy 应用源代码
- OSToy 前端容器镜像
- OSToy 微服务容器镜像
部署定义 YAML 文件:
ostoy-frontend-deployment.yamlapiVersion: 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: Opaqueostoy-microservice-deployment.yamlapiVersion: 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-microserviceACK S3 的 S3 存储桶清单
s3-bucket.yamlapiVersion: s3.services.k8s.aws/v1alpha1 kind: Bucket metadata: name: ostoy-bucket namespace: ostoy spec: name: ostoy-bucket
注意
为简化 OSToy 应用程序的部署,以上部署清单所需的所有对象都分组在一起。对于典型的企业部署,建议为每个 Kubernetes 对象有一个单独的清单文件。