Amazon Elastic Kubernetes Service への Red Hat Developer Hub のインストール
概要
第1章 Elastic Kubernetes Service (EKS) への Red Hat Developer Hub のインストール リンクのコピーリンクがクリップボードにコピーされました!
次のいずれかの方法を使用して、Amazon Elastic Kubernetes Service (EKS) に Red Hat Developer Hub をインストールできます。
- Red Hat Developer Hub Operator
- Red Hat Developer Hub Helm チャート
1.1. Operator を使用した EKS への Developer Hub のインストール リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Developer Hub Operator のインストールには、Operator Lifecycle Manager (OLM) フレームワークが必要です。
関連情報
- OLM の詳細は、Operator Lifecycle Manager (OLM) のドキュメントを参照してください。
1.1.1. OLM フレームワークを使用した Developer Hub Operator のインストール リンクのコピーリンクがクリップボードにコピーされました!
Operator Lifecycle Manager (OLM) フレームワーク を使用して、EKS に Developer Hub Operator をインストールできます。その後、EKS に Developer Hub インスタンスをデプロイできます。
前提条件
-
現在の
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) がインストールされている。インストールとトラブルシューティングの詳細は、OLM クイックスタート または Operator Lifecycle Manager の入手方法 を参照してください。
手順
ターミナルで次のコマンドを実行して、Operator がインストールされている
rhdh-operatornamespace を作成します。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 Ecosystem から Developer Hub イメージをプルするために使用されます。
Red Hat Ecosystem からの Operator を含む
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.2.6 EOF次のコマンドを実行して、作成した Operator が実行されていることを確認します。
kubectl -n rhdh-operator get pods -wOperator 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-operatornamespace のbackstage-default-configConfigMap を編集します。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 に自動的に適用されるまで、数分間待ちます。
1.1.2. Operator を使用した EKS への Developer Hub インスタンスのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- クラスター管理者が Red Hat Developer Hub Operator をインストールしている。
- 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 インスタンスが使用できる状態になったことを示すまで待ちます。
1.2. Helm チャートを使用した EKS への Developer Hub のインストール リンクのコピーリンクがクリップボードにコピーされました!
Elastic Kubernetes Service (EKS) に Developer Hub Helm チャートをインストールすると、Developer Hub インスタンスのデプロイがオーケストレーションされます。これにより、AWS エコシステム内で堅牢な開発者プラットフォームが実現します。
前提条件
- AWS Application Load Balancer (ALB) アドオンがインストールされた EKS クラスターがある。詳細は、Application load balancing on Amazon Developer Hub および Installing the AWS Load Balancer Controller add-on を参照してください。
- 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 を参照してください。 - Helm 3 以降がインストールされている。詳細は、Using Helm with Amazon EKS を参照してください。
手順
ターミナルに移動し、次のコマンドを実行して、Developer Hub チャートを含む Helm チャートリポジトリーを、ローカルの Helm レジストリーに追加します。
helm repo add openshift-helm-charts https://charts.openshift.io/次のコマンドを使用してプルシークレットを作成します。
kubectl 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 Ecosystem から Developer Hub イメージをプルするために使用されます。
次のテンプレートを使用して、
values.yamlという名前のファイルを作成します。global: # TODO: Set your application domain name. host: <your Developer Hub domain name> route: enabled: false upstream: service: # NodePort is required for the ALB to route to the Service type: NodePort ingress: enabled: true annotations: kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/scheme: internet-facing # 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: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: <your rhdh domain name> backstage: image: pullSecrets: - rhdh-pull-secret podSecurityContext: # you can assign any random value as fsGroup fsGroup: 2000 postgresql: image: pullSecrets: - rhdh-pull-secret primary: podSecurityContext: enabled: true # you can assign any random value as fsGroup fsGroup: 3000 volumePermissions: enabled: trueターミナルで次のコマンドを実行し、最新バージョンの Helm Chart と前の手順で作成した value.yaml ファイルを使用して Developer Hub をデプロイします。
helm install rhdh \ openshift-helm-charts/redhat-developer-hub \ [--version 1.2.6] \ --values /path/to/values.yaml
最新のチャートバージョンは、https://github.com/openshift-helm-charts/charts/tree/main/charts/redhat/redhat/redhat-developer-hub を参照してください。
検証
DNS 名が応答し、Developer Hub インスタンスが使用できる状態になったことを示すまで待ちます。