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 集群。如需更多信息,请参阅为 Amazon EKS 集群创建或更新 kubeconfig 文件。 -
已安装
kubectl。如需更多信息,请参阅 安装或更新 kubectl。 -
您已订阅了
registry.redhat.io。如需更多信息,请参阅 Red Hat Container Registry 身份验证。 - 已安装 Operator Lifecycle Manager (OLM)。有关安装和故障排除的更多信息,请参阅 如何获取 Operator Lifecycle Manager?
流程
在终端中运行以下命令,以创建安装 Operator 的
rhdh-operator命名空间:kubectl create namespace rhdh-operator使用以下命令创建 pull secret:
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 创建的 pull secret 用于从红帽生态系统中拉取 Developer Hub 镜像。
创建一个
CatalogSource资源,其中包含来自红帽生态系统的 Operator: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列表中包含所需的 secret 名称,并使用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命名空间中的backstage-default-configConfigMap:kubectl -n rhdh-operator edit configmap backstage-default-config找到
db-statefulset.yaml字符串,并将fsGroup添加到其spec.template.spec.securityContext中,如下例所示: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字符串,并将类型改为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字符串,并将fsGroup添加到其spec.template.spec.securityContext中,如下例所示: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字符串,并将类型改为NodePort,如下所示:service.yaml: | apiVersion: v1 kind: Service spec: # NodePort is required for the ALB to route to the Service type: NodePort --- TRUNCATED ---将默认镜像替换为红帽生态系统中拉取的镜像:
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
将镜像 pull secret 添加到 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 外部管理的托管区条目。如需更多信息,请参阅配置 Amazon Route 53 作为您的 DNS 服务 文档。
- 在 AWS 证书管理器(ACM)中有一个您的首选域名的条目。确保保留您的证书 ARN 的记录。
-
您已订阅了
registry.redhat.io。如需更多信息,请参阅 Red Hat Container Registry 身份验证。 -
您已在当前
kubeconfig中将上下文设置为 EKS 集群。如需更多信息,请参阅为 Amazon {eks} 集群创建或更新 kubeconfig 文件。 -
已安装
kubectl。如需更多信息,请参阅 安装或更新 kubectl。
流程
使用以下模板,创建一个名为
app-config-rhdh的 ConfigMap,其中包含 Developer Hub 配置: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,并添加名为BACKEND_SECRET的键,其值为 Base64 编码的字符串: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")'要启用从红帽生态系统目录中拉取 PostgreSQL 镜像,请在部署 Developer Hub 实例的命名空间中将镜像 pull secret 添加到 default 服务帐户中:
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 实例已准备就绪。