6.4. 使用 OpenShift 设置 Red Hat Quay Builder
6.4.1. OpenShift TLS 组件
tls
组件允许您控制 TLS 配置。
当 TLS 组件由 Operator 管理时,Red Hat Quay 3.7 不支持构建器。
如果将 tls
设置为 unmanaged
,则提供自己的 ssl.cert
和 ssl.key
文件。在本实例中,如果希望集群支持构建器,您必须将 Quay 路由和构建器路由名称添加到证书中的 SAN 列表中,也可以使用通配符。要添加构建器路由,请使用以下格式:
[quayregistry-cr-name]-quay-builder-[ocp-namespace].[ocp-domain-name]
6.4.2. 为 Red Hat Quay 构建准备 OpenShift
OpenShift 集群上需要一些操作,然后才能接受来自 Red Hat Quay 的构建。
创建一个运行构建的项目(如 'builder')
$ oc new-project builder
在此
项目
中创建一个ServiceAccount
,它将用于运行构建。确保它有足够的权限来创建作业和
Pod
。复制ServiceAccount
的令牌以供以后使用。$ oc create sa -n builder quay-builder $ oc policy add-role-to-user -n builder edit system:serviceaccount:builder:quay-builder $ oc sa get-token -n builder quay-builder
- 识别 OpenShift 集群 API 服务器的 URL。这可以从 OpenShift 控制台找到。
-
识别在调度构建作业时要使用的 worker
节点标签
。由于构建 pod 需要在裸机 worker 节点上运行,因此通常使用特定的标签来标识它们。与集群管理员进行检查,以确定应使用哪个节点标签。 如果集群使用自签名证书,请获取 kube apiserver 的 CA 被添加到 Red Hat Quay 的额外证书中。
获取包含 CA 的 secret 名称:
$ oc get sa openshift-apiserver-sa --namespace=openshift-apiserver -o json | jq '.secrets[] | select(.name | contains("openshift-apiserver-sa-token"))'.name
-
从 Openshift 控制台中的 secret 获取
ca.crt
键值。该值应该以 "-----BEGIN CERTIFICATE-----" 开头 -
使用 ConfigTool 在 Red Hat Quay 中导入 CA。确保此文件的名称与
K8S_API_TLS_CA
匹配。
-
为
ServiceAccount
创建所需的安全上下文/角色绑定:
apiVersion: security.openshift.io/v1 kind: SecurityContextConstraints metadata: name: quay-builder priority: null readOnlyRootFilesystem: false requiredDropCapabilities: null runAsUser: type: RunAsAny seLinuxContext: type: RunAsAny seccompProfiles: - '*' supplementalGroups: type: RunAsAny volumes: - '*' allowHostDirVolumePlugin: true allowHostIPC: true allowHostNetwork: true allowHostPID: true allowHostPorts: true allowPrivilegeEscalation: true allowPrivilegedContainer: true allowedCapabilities: - '*' allowedUnsafeSysctls: - '*' defaultAddCapabilities: null fsGroup: type: RunAsAny --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: quay-builder-scc namespace: builder rules: - apiGroups: - security.openshift.io resourceNames: - quay-builder resources: - securitycontextconstraints verbs: - use --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: quay-builder-scc namespace: builder subjects: - kind: ServiceAccount name: quay-builder roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: quay-builder-scc
6.4.3. 启用构建器并在 Red Hat Quay 的配置捆绑包中添加构建配置
- 确保您已在 Red Hat Quay 配置中启用了构建。
FEATURE_BUILD_SUPPORT: True
- 在 Red Hat Quay 配置捆绑包中添加以下内容,将每个值替换为特定于安装的值。
目前,只有构建功能本身可以通过 Red Hat Quay Config Tool 启用。Build Manager 和 Executors 的实际配置必须在 config.yaml 文件中手动完成。
BUILD_MANAGER: - ephemeral - ALLOWED_WORKER_COUNT: 1 ORCHESTRATOR_PREFIX: buildman/production/ ORCHESTRATOR: REDIS_HOST: quay-redis-host REDIS_PASSWORD: quay-redis-password REDIS_SSL: true REDIS_SKIP_KEYSPACE_EVENT_SETUP: false EXECUTORS: - EXECUTOR: kubernetes BUILDER_NAMESPACE: builder K8S_API_SERVER: api.openshift.somehost.org:6443 K8S_API_TLS_CA: /conf/stack/extra_ca_certs/build_cluster.crt VOLUME_SIZE: 8G KUBERNETES_DISTRIBUTION: openshift CONTAINER_MEMORY_LIMITS: 5120Mi CONTAINER_CPU_LIMITS: 1000m CONTAINER_MEMORY_REQUEST: 3968Mi CONTAINER_CPU_REQUEST: 500m NODE_SELECTOR_LABEL_KEY: beta.kubernetes.io/instance-type NODE_SELECTOR_LABEL_VALUE: n1-standard-4 CONTAINER_RUNTIME: podman SERVICE_ACCOUNT_NAME: ***** SERVICE_ACCOUNT_TOKEN: ***** QUAY_USERNAME: quay-username QUAY_PASSWORD: quay-password WORKER_IMAGE: <registry>/quay-quay-builder WORKER_TAG: some_tag BUILDER_VM_CONTAINER_IMAGE: <registry>/quay-quay-builder-qemu-rhcos:v3.4.0 SETUP_TIME: 180 MINIMUM_RETRY_THRESHOLD: 0 SSH_AUTHORIZED_KEYS: - ssh-rsa 12345 someuser@email.com - ssh-rsa 67890 someuser2@email.com
下面解释每个配置字段。
- ALLOWED_WORKER_COUNT
- 定义每个 Red Hat Quay Pod 实例化多少个构建工作程序。通常这是 '1'。
- ORCHESTRATOR_PREFIX
- 定义要添加到所有 Redis 密钥的唯一前缀(用于将 Orchestrator 值与其他 Redis 键隔离)。
- REDIS_HOST
- Redis 服务的主机名。
- REDIS_PASSWORD
- 在 Redis 服务中进行身份验证的密码。
- REDIS_SSL
- 定义 Redis 连接是否使用 SSL。
- REDIS_SKIP_KEYSPACE_EVENT_SETUP
-
默认情况下,Red Hat Quay 不会设置运行时密钥事件所需的键空间事件。为此,请将 REDIS_SKIP_KEYSPACE_EVENT_SETUP 设置为
false
。 - EXECUTOR
- 启动此类型的执行者的定义。有效值为 'kubernetes' 和 'ec2'
- BUILDER_NAMESPACE
- Red Hat Quay 构建要放置的 Kubernetes 命名空间
- K8S_API_SERVER
- 构建将放置的 OpenShift 集群的主机名
- K8S_API_TLS_CA
-
构建集群的 CA 证书的
Quay
容器中文件路径,供 Quay 应用在发出 API 调用时信任。 - KUBERNETES_DISTRIBUTION
- 指明正在使用的 Kubernetes 类型。有效值为 'openshift' 和 'k8s'。
- CONTAINER_*
- 定义每个构建 pod 的资源请求和限值。
- NODE_SELECTOR_*
- 定义应当调度构建 Pod 的节点选择器标签名称/值对。
- CONTAINER_RUNTIME
-
指定构建器是否应该运行
docker
还是podman
。使用红帽的quay-builder
镜像的客户应将其设置为podman
。 - SERVICE_ACCOUNT_NAME/SERVICE_ACCOUNT_TOKEN
- 定义构建 Pod 将要使用的服务帐户名称/令牌。
- QUAY_USERNAME/QUAY_PASSWORD
- 定义拉取 WORKER_IMAGE 字段中指定的 Red Hat Quay 构建 worker 镜像所需的 registry 凭证。客户应提供一个 Red Hat Service Account 凭证,如 https://access.redhat.com/RegistryAuthentication 文章中的针对 registry.redhat.io 的"创建 Registry 服务账户"部分。
- WORKER_IMAGE
- Red Hat Quay 构建器镜像的镜像引用。registry.redhat.io/quay/quay-builder
- WORKER_TAG
- 所需构建器镜像的标签。最新版本为 v3.4.0。
- BUILDER_VM_CONTAINER_IMAGE
-
对包含运行每个 Red Hat Quay 构建(
registry.redhat.io/quay/quay-builder-qemu-rhcos:v3.4.0
)所需的内部虚拟机的完整引用。 - SETUP_TIME
- 指定构建程序(如果构建管理器尚未注册)时构建超时的秒数(默认为 500 秒)。超时的构建将尝试重新启动三次。如果构建在三次尝试后没有注册自己,则被视为失败。
- MINIMUM_RETRY_THRESHOLD
-
此设置用于多个执行者;它指示在选择不同的可执行文件前尝试启动构建的次数。设置为 0 表示构建作业需要多少个尝试。这个值应该保持特小(三个或更少),以确保在基础架构故障时快速进行故障转移。您必须为此设置指定一个值。例如,g Kubernetes 设置为第一个 executor,EC2 作为第二个 executor。如果我们希望最终试图运行的作业总在 EC2 上而不是在 Kubernetes 上运行时,应该将 Kubernetes executor 的
MINIMUM_RETRY_THRESHOLD
设置为 1,EC2 的MINIMUM_RETRY_THRESHOLD
设置为 0 (如果没有设置,默认为 0)。在这种情况下,kubernetes 的MINIMUM_RETRY_THRESHOLD
> retries_remaining (1)将评估为 False,因此回退到配置的第二个 executor - SSH_AUTHORIZED_KEYS
- 在 ignition 配置中引导的 ssh 密钥列表。这允许使用其他密钥 ssh 到 EC2 实例或 QEMU 虚拟机