2장. 애플리케이션 워크샵 배포


2.1. 워크샵 개요

클러스터를 프로비저닝한 후 이 워크샵에 따라 애플리케이션을 배포하여 컨테이너 기반 애플리케이션 배포 및 운영의 개념을 파악합니다.

2.1.1. 워크샵 목표

다음은 이 클러스터 생성 워크샵의 목적을 자세히 설명합니다.

  • S2I(Source-to-Image) 및 Kubernetes 배포 오브젝트를 사용하여 Node.js 기반 애플리케이션 배포
  • 소스 코드 변경 사항을 자동으로 푸시하도록 CD(Continuous Delivery) 파이프라인 설정
  • 자동 복구 애플리케이션 경험
  • ConfigMaps, 보안 및 환경 변수를 통해 구성 관리 살펴보기
  • 영구 스토리지를 사용하여 Pod를 다시 시작할 때마다 데이터 공유
  • Kubernetes 및 애플리케이션의 네트워킹 살펴보기
  • AWS 및 Kubernetes 기능에서 Red Hat OpenShift Service에 대해 숙지
  • Horizontal Pod Autoscaler(HPA)에서 로드를 기반으로 Pod 자동 스케일링

2.1.1.1. 사전 요구 사항

2.1.2. OSToy 애플리케이션 정보

OSToy는 Kubernetes의 기능을 탐색할 수 있도록 AWS 클러스터의 Red Hat OpenShift Service에 배포하는 Node.js 애플리케이션입니다.

이 애플리케이션에는 다음을 수행할 수 있는 사용자 인터페이스가 있습니다.

  • 로그에 메시지 쓰기 (stdout / stderr)
  • 자동 복구 보기를 위해 의도적으로 애플리케이션 충돌
  • 활성 상태 프로브 전환 및 OpenShift 동작 모니터링
  • ConfigMaps, 보안 및 환경 변수 읽기
  • 공유 스토리지에 연결된 경우 파일 읽기 및 쓰기
  • 포함된 마이크로 서비스를 사용하여 네트워크 연결, 클러스터 내 DNS 및 intra-communication 확인
  • HPA를 사용하여 Pod 자동 스케일링을 보려면 로드를 늘립니다.
OSToy 아키텍처 다이어그램

2.1.2.1. OSToy UI 이해

OSToy 홈페이지의 프리뷰
  1. Pod 이름
  2. 홈: 애플리케이션 홈 페이지
  3. 영구 스토리지: 애플리케이션에 바인딩된 영구 볼륨에 데이터를 씁니다.
  4. 구성 맵: 애플리케이션 및 키:값 쌍에서 사용할 수 있는 ConfigMap을 표시합니다.
  5. 보안: 애플리케이션과 키:값 쌍에서 사용할 수 있는 시크릿을 표시합니다.
  6. ENV 변수: 애플리케이션에서 사용할 수 있는 환경 변수를 표시합니다.
  7. 네트워킹: 네트워킹 툴
  8. Pod 자동 확장: Pod 로드를 늘리고 HPA(horizontal Pod Autoscaler) 테스트
  9. ACK S3: 버킷에 오브젝트를 읽고 쓰기 위해 AWS S3와 통합
  10. 정보: 애플리케이션 정보

2.1.2.2. 랩 리소스

  • 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

    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

  • ACK S3용 S3 버킷 매니페스트

    s3-bucket.yaml

    apiVersion: s3.services.k8s.aws/v1alpha1
    kind: Bucket
    metadata:
      name: ostoy-bucket
      namespace: ostoy
    spec:
      name: ostoy-bucket

참고

OSToy 애플리케이션의 배포를 단순화하기 위해 위의 배포 매니페스트에 필요한 모든 오브젝트가 함께 그룹화됩니다. 일반적인 엔터프라이즈 배포에는 각 Kubernetes 오브젝트에 대한 별도의 매니페스트 파일이 권장됩니다.

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 문서 정보

Legal Notice

Theme

© 2026 Red Hat
맨 위로 이동