3.2. Operator を使用して Elastic Kubernetes Service (EKS) に Red Hat Developer Hub をデプロイする


Operator Lifecycle Manager (OLM) フレームワーク の有無にかかわらず、Red Hat Developer Hub Operator を使用して EKS に Developer Hub をデプロイできます。その後、EKS への Developer Hub インスタンスのインストールに進むことができます。

3.2.1. OLM フレームワークを使用した Red Hat Developer Hub Operator のインストール

前提条件

手順

  1. ターミナルで次のコマンドを実行して、Operator がインストールされている rhdh-operator namespace を作成します。

    kubectl create namespace rhdh-operator
  2. 次のコマンドを使用してプルシークレットを作成します。

    kubectl -n rhdh-operator create secret docker-registry rhdh-pull-secret \
        --docker-server=registry.redhat.io \
        --docker-username=<user_name> \ 1
        --docker-password=<password> \ 2
        --docker-email=<email> 3
    1
    コマンドにユーザー名を入力します。
    2
    コマンドにパスワードを入力します。
    3
    コマンドにメールアドレスを入力します。

    作成されたプルシークレットは、Red Hat エコシステムから Developer Hub イメージをプルするために使用されます。

  3. Red Hat エコシステムからの Operators を含む CatalogSource リソースを作成します。

    cat <<EOF | kubectl -n rhdh-operator apply -f -
    apiVersion: operators.coreos.com/v1alpha1
    kind: CatalogSource
    metadata:
      name: redhat-catalog
    spec:
      sourceType: grpc
      image: registry.redhat.io/redhat/redhat-operator-index:v4.15
      secrets:
      - "rhdh-pull-secret"
      displayName: Red Hat Operators
    EOF
  4. 次のように OperatorGroup リソースを作成します。

    cat <<EOF | kubectl apply -n rhdh-operator -f -
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: rhdh-operator-group
    EOF
  5. 次のコードを使用して Subscription リソースを作成します。

    cat <<EOF | kubectl apply -n rhdh-operator -f -
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: rhdh
      namespace: rhdh-operator
    spec:
      channel: fast
      installPlanApproval: Automatic
      name: rhdh
      source: redhat-catalog
      sourceNamespace: rhdh-operator
      startingCSV: rhdh-operator.v1.1.2
    EOF
  6. 次のコマンドを実行して、作成した Operator が実行されていることを確認します。

    kubectl -n rhdh-operator get pods -w

    Operator Pod に ImagePullBackOff ステータスが表示される場合は、Operator デプロイメントのマニフェスト内でイメージを直接プルする権限が必要な可能性があります。

    ヒント

    必要なシークレット名を deployment.spec.template.spec.imagePullSecrets リストに含め、kubectl get deployment -n rhdh-operator コマンドを使用してデプロイメント名を確認できます。

    kubectl -n rhdh-operator patch deployment \
        rhdh.fast --patch '{"spec":{"template":{"spec":{"imagePullSecrets":[{"name":"rhdh-pull-secret"}]}}}}' \
        --type=merge
  7. 次の手順を使用して Operator のデフォルト設定を更新して、Developer Hub リソースが EKS で正常に起動できるようにします。

    1. 次のコマンドを使用して、rhdh-operator namespace の backstage-default-config ConfigMap を編集します。

      kubectl -n rhdh-operator edit configmap backstage-default-config
    2. 次の例に示すように、db-statefulset.yaml 文字列を見つけて、その spec.template.spec.securityContextfsGroup を追加します。

        db-statefulset.yaml: |
          apiVersion: apps/v1
          kind: StatefulSet
      --- TRUNCATED ---
          spec:
          --- TRUNCATED ---
            restartPolicy: Always
            securityContext:
            # You can assign any random value as fsGroup
              fsGroup: 2000
            serviceAccount: default
            serviceAccountName: default
      --- TRUNCATED ---
    3. 次の例に示すように、deployment.yaml 文字列を見つけて、その仕様に fsGroup を追加します。

        deployment.yaml: |
          apiVersion: apps/v1
          kind: Deployment
      --- TRUNCATED ---
          spec:
            securityContext:
              # You can assign any random value as fsGroup
              fsGroup: 3000
            automountServiceAccountToken: false
      --- TRUNCATED ---
    4. 次のように、service.yaml 文字列を見つけて、typeNodePort に変更します。

        service.yaml: |
          apiVersion: v1
          kind: Service
          spec:
           # NodePort is required for the ALB to route to the Service
            type: NodePort
      --- TRUNCATED ---
    5. 保存して終了します。

      変更が Operator Pod に自動的に適用されるまで、数分間待ちます。

3.2.2. OLM フレームワークなしで Red Hat Developer Hub Operator をインストールする

前提条件

  • 次のコマンドがインストールされている。

    • git
    • make
    • sed

手順

  1. 次のコマンドを使用して、Operator リポジトリーのクローンをローカルマシンに作成します。

    git clone --depth=1 https://github.com/janus-idp/operator.git rhdh-operator && cd rhdh-operator
  2. 次のコマンドを実行して、デプロイメントマニフェストを生成します。

    make deployment-manifest

    前のコマンドは rhdh-operator-<VERSION>.yaml という名前のファイルを生成します。これは手動で更新されます。

  3. 次のコマンドを実行して、生成したデプロイメントマニフェストに置換を適用します。

    sed -i "s/backstage-operator/rhdh-operator/g" rhdh-operator-*.yaml
    sed -i "s/backstage-system/rhdh-operator/g" rhdh-operator-*.yaml
    sed -i "s/backstage-controller-manager/rhdh-controller-manager/g" rhdh-operator-*.yaml
  4. 生成したデプロイメントマニフェストファイルをエディターで開き、次の手順を実行します。

    1. 次の例に示すように、db-statefulset.yaml 文字列を見つけて、その spec.template.spec.securityContextfsGroup を追加します。

         db-statefulset.yaml: |
          apiVersion: apps/v1
          kind: StatefulSet
      --- TRUNCATED ---
          spec:
          --- TRUNCATED ---
            restartPolicy: Always
            securityContext:
              # You can assign any random value as fsGroup
              fsGroup: 2000
            serviceAccount: default
            serviceAccountName: default
      --- TRUNCATED ---
    2. 次の例に示すように、deployment.yaml 文字列を見つけて、その仕様に fsGroup を追加します。

        deployment.yaml: |
          apiVersion: apps/v1
          kind: Deployment
      --- TRUNCATED ---
          spec:
            securityContext:
              # You can assign any random value as fsGroup
              fsGroup: 3000
            automountServiceAccountToken: false
      --- TRUNCATED ---
    3. 次のように、service.yaml 文字列を見つけて、typeNodePort に変更します。

        service.yaml: |
          apiVersion: v1
          kind: Service
          spec:
            # NodePort is required for the ALB to route to the Service
            type: NodePort
      --- TRUNCATED ---
    4. デフォルトのイメージを Red Hat エコシステムからプルしたイメージに置き換えます。

      sed -i "s#gcr.io/kubebuilder/kube-rbac-proxy:.*#registry.redhat.io/openshift4/ose-kube-rbac-proxy:v4.15#g" rhdh-operator-*.yaml
      
      sed -i "s#quay.io/janus-idp/operator:.*#registry.redhat.io/rhdh/rhdh-rhel9-operator:1.1#g" rhdh-operator-*.yaml
      
      sed -i "s#quay.io/janus-idp/backstage-showcase:.*#registry.redhat.io/rhdh/rhdh-hub-rhel9:1.1#g" rhdh-operator-*.yaml
      
      sed -i "s#quay.io/fedora/postgresql-15:.*#registry.redhat.io/rhel9/postgresql-15:latest#g" rhdh-operator-*.yaml
  5. 次のように、イメージプルシークレットを Deployment リソースのマニフェストに追加します。

    --- TRUNCATED ---
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app.kubernetes.io/component: manager
        app.kubernetes.io/created-by: rhdh-operator
        app.kubernetes.io/instance: controller-manager
        app.kubernetes.io/managed-by: kustomize
        app.kubernetes.io/name: deployment
        app.kubernetes.io/part-of: rhdh-operator
        control-plane: controller-manager
      name: rhdh-controller-manager
      namespace: rhdh-operator
    spec:
      replicas: 1
      selector:
        matchLabels:
          control-plane: controller-manager
      template:
        metadata:
          annotations:
            kubectl.kubernetes.io/default-container: manager
          labels:
            control-plane: controller-manager
        spec:
          imagePullSecrets:
            - name: rhdh-pull-secret
    --- TRUNCATED ---
  6. 次のコマンドを使用してマニフェストを適用し、Operator をデプロイします。

    kubectl apply -f rhdh-operator-VERSION.yaml
  7. 以下のコマンドを実行して、Operator が実行されていることを確認します。

    kubectl -n rhdh-operator get pods -w

3.2.3. EKS への Developer Hub インスタンスのインストール

Red Hat Developer Hub Operator がインストールされ、実行されたら、EKS で Developer Hub インスタンスを作成できます。

前提条件

手順

  1. 次のテンプレートを使用して、Developer Hub 設定を含む app-config-rhdh という名前の ConfigMap を作成します。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: app-config-rhdh
    data:
      "app-config-rhdh.yaml": |
        app:
          title: Red Hat Developer Hub
          baseUrl: https://<rhdh_dns_name>
        backend:
          auth:
            keys:
              - secret: "${BACKEND_SECRET}"
          baseUrl: https://<rhdh_dns_name>
          cors:
            origin: https://<rhdh_dns_name>
  2. secrets-rhdh という名前の Secret を作成し、値として Base64-encoded 文字列を持つ BACKEND_SECRET という名前のキーを追加します。

    apiVersion: v1
    kind: Secret
    metadata:
      name: secrets-rhdh
    stringData:
      # TODO: See https://backstage.io/docs/auth/service-to-service-auth/#setup
      BACKEND_SECRET: "xxx"
    重要

    各 Developer Hub インスタンスには、必ず一意の値の BACKEND_SECRET を使用してください。

    次のコマンドを使用してキーを生成できます。

    node-p'require("crypto").randomBytes(24).toString("base64")'
  3. Red Hat エコシステムカタログから PostgreSQL イメージをプルできるようにするには、Developer Hub インスタンスがデプロイされている namespace 内のデフォルトのサービスアカウントにイメージプルシークレットを追加します。

    kubectl patch serviceaccount default \
        -p '{"imagePullSecrets": [{"name": "rhdh-pull-secret"}]}' \
        -n <your_namespace>
  4. 次のテンプレートを使用してカスタムリソースファイルを作成します。

    apiVersion: rhdh.redhat.com/v1alpha1
    kind: Backstage
    metadata:
     # TODO: this the name of your Developer Hub instance
      name: my-rhdh
    spec:
      application:
        imagePullSecrets:
        - "rhdh-pull-secret"
        route:
          enabled: false
        appConfig:
          configMaps:
            - name: "app-config-rhdh"
        extraEnvs:
          secrets:
            - name: "secrets-rhdh"
  5. 次のテンプレートを使用して Ingress リソースを作成し、必要に応じて名前をカスタマイズします。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      # TODO: this the name of your Developer Hub Ingress
      name: my-rhdh
      annotations:
        alb.ingress.kubernetes.io/scheme: internet-facing
    
        alb.ingress.kubernetes.io/target-type: ip
    
        # TODO: Using an ALB HTTPS Listener requires a certificate for your own domain. Fill in the ARN of your certificate, e.g.:
        alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-xxx:xxxx:certificate/xxxxxx
    
         alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
    
        alb.ingress.kubernetes.io/ssl-redirect: '443'
    
        # TODO: Set your application domain name.
        external-dns.alpha.kubernetes.io/hostname: <rhdh_dns_name>
    
    spec:
      ingressClassName: alb
      rules:
        # TODO: Set your application domain name.
        - host: <rhdh_dns_name>
          http:
            paths:
            - path: /
              pathType: Prefix
              backend:
                service:
                  # TODO: my-rhdh is the name of your Backstage Custom Resource.
                  # Adjust if you changed it!
                  name: backstage-my-rhdh
                  port:
                    name: http-backend

    前のテンプレートで、` <rhdh_dns_name>` を Developer Hub ドメイン名に置き換え、alb.ingress.kubernetes.io/certificate-arn の値を証明書 ARN で更新します。

検証

DNS 名が応答し、Developer Hub インスタンスが使用できる状態になったことを示すまで待ちます。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.