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 のインストール
前提条件
-
現在の
kubeconfig
で、EKS クラスターにコンテキストが設定されている。詳細は、Creating or updating a kubeconfig file for an Amazon EKS cluster を参照してください。 -
kubectl
がインストールされている。詳細は、Installing or updating kubectl を参照してください。 -
registry.redhat.io
にサブスクライブされている。詳細は、Red Hat コンテナーレジストリーの認証 を参照してください。 - Operator Lifecycle Manager (OLM) がインストールされている。インストールとトラブルシューティングの詳細は、How do I get Operator Lifecycle Manager? を参照してください。
手順
ターミナルで次のコマンドを実行して、Operator がインストールされている
rhdh-operator
namespace を作成します。kubectl create namespace rhdh-operator
次のコマンドを使用してプルシークレットを作成します。
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
作成されたプルシークレットは、Red Hat エコシステムから Developer Hub イメージをプルするために使用されます。
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
次のように
OperatorGroup
リソースを作成します。cat <<EOF | kubectl apply -n rhdh-operator -f - apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: rhdh-operator-group EOF
次のコードを使用して
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
次のコマンドを実行して、作成した 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
次の手順を使用して Operator のデフォルト設定を更新して、Developer Hub リソースが EKS で正常に起動できるようにします。
次のコマンドを使用して、
rhdh-operator
namespace のbackstage-default-config
ConfigMap を編集します。kubectl -n rhdh-operator edit configmap backstage-default-config
次の例に示すように、
db-statefulset.yaml
文字列を見つけて、そのspec.template.spec.securityContext
にfsGroup
を追加します。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 ---
次の例に示すように、
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 ---
次のように、
service.yaml
文字列を見つけて、type
をNodePort
に変更します。service.yaml: | apiVersion: v1 kind: Service spec: # NodePort is required for the ALB to route to the Service type: NodePort --- TRUNCATED ---
保存して終了します。
変更が Operator Pod に自動的に適用されるまで、数分間待ちます。
3.2.2. OLM フレームワークなしで Red Hat Developer Hub Operator をインストールする
前提条件
次のコマンドがインストールされている。
-
git
-
make
-
sed
-
手順
次のコマンドを使用して、Operator リポジトリーのクローンをローカルマシンに作成します。
git clone --depth=1 https://github.com/janus-idp/operator.git rhdh-operator && cd rhdh-operator
次のコマンドを実行して、デプロイメントマニフェストを生成します。
make deployment-manifest
前のコマンドは
rhdh-operator-<VERSION>.yaml
という名前のファイルを生成します。これは手動で更新されます。次のコマンドを実行して、生成したデプロイメントマニフェストに置換を適用します。
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
生成したデプロイメントマニフェストファイルをエディターで開き、次の手順を実行します。
次の例に示すように、
db-statefulset.yaml
文字列を見つけて、そのspec.template.spec.securityContext
にfsGroup
を追加します。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 ---
次の例に示すように、
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 ---
次のように、
service.yaml
文字列を見つけて、type
をNodePort
に変更します。service.yaml: | apiVersion: v1 kind: Service spec: # NodePort is required for the ALB to route to the Service type: NodePort --- TRUNCATED ---
デフォルトのイメージを 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
次のように、イメージプルシークレットを 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 ---
次のコマンドを使用してマニフェストを適用し、Operator をデプロイします。
kubectl apply -f rhdh-operator-VERSION.yaml
以下のコマンドを実行して、Operator が実行されていることを確認します。
kubectl -n rhdh-operator get pods -w
3.2.3. EKS への Developer Hub インスタンスのインストール
Red Hat Developer Hub Operator がインストールされ、実行されたら、EKS で Developer Hub インスタンスを作成できます。
前提条件
- AWS Application Load Balancer (ALB) アドオンがインストールされた EKS クラスターがある。詳細は、Amazon Elastic Kubernetes Service でのアプリケーションの負荷分散 および AWS Load Balancer Controller アドオンのインストール を参照してください。
- Developer Hub インスタンスのドメイン名が設定されている。ドメイン名は、Route 53 上のホストゾーンエントリーにすることも、AWS の外部で管理することもできます。詳細は、Configuring Amazon Route 53 as your DNS service ドキュメントを参照してください。
- AWS Certificate Manager (ACM) に、希望するドメイン名のエントリーがある。証明書 ARN の記録は必ず保管してください。
-
registry.redhat.io
にサブスクライブされている。詳細は、Red Hat コンテナーレジストリーの認証 を参照してください。 -
現在の
kubeconfig
で、EKS クラスターにコンテキストが設定されている。詳細は、Creating or updating a kubeconfig file for an Amazon {eks} cluster を参照してください。 -
kubectl
がインストールされている。詳細は、Installing or updating kubectl を参照してください。
手順
次のテンプレートを使用して、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>
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")'
Red Hat エコシステムカタログから PostgreSQL イメージをプルできるようにするには、Developer Hub インスタンスがデプロイされている namespace 内のデフォルトのサービスアカウントにイメージプルシークレットを追加します。
kubectl patch serviceaccount default \ -p '{"imagePullSecrets": [{"name": "rhdh-pull-secret"}]}' \ -n <your_namespace>
次のテンプレートを使用してカスタムリソースファイルを作成します。
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"
次のテンプレートを使用して 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 インスタンスが使用できる状態になったことを示すまで待ちます。