5.6. 为 Azure Stack Hub 创建安装文件
要使用用户置备的基础架构在 Microsoft Azure Stack Hub 上安装 OpenShift Container Platform,您必须生成安装程序部署集群所需的文件,并进行修改,以便集群只创建要使用的机器。您可以手动创建 install-config.yaml
文件,然后生成并自定义 Kubernetes 清单和 Ignition 配置文件。您也可以选择在安装准备阶段首先设置独立的 var
分区。
5.6.1. 手动创建安装配置文件
安装集群要求您手动创建安装配置文件。
先决条件
- 您在本地机器上有一个 SSH 公钥来提供给安装程序。该密钥将用于在集群节点上进行 SSH 身份验证,以进行调试和灾难恢复。
- 已获取 OpenShift Container Platform 安装程序和集群的 pull secret。
流程
创建一个安装目录来存储所需的安装资产:
$ mkdir <installation_directory>
重要您必须创建一个目录。有些安装资产,如 bootstrap X.509 证书的过期间隔较短,因此不得重复使用安装目录。如果要重复使用另一个集群安装中的单个文件,您可以将它们复制到您的目录中。但是,安装资产的文件名可能会在发行版本间有所变化。从以前的 OpenShift Container Platform 版本中复制安装文件时请小心。
自定义提供的
install-config.yaml
文件模板示例,并将其保存在<installation_directory>
中。注意此配置文件必须命名为
install-config.yaml
。对 Azure Stack Hub 进行以下修改:
将
compute
池的replicas
参数设置为0
:compute: - hyperthreading: Enabled name: worker platform: {} replicas: 0 1
- 1
- 设置为
0
。
计算机器将在以后手动调配。
更新
install-config.yaml
文件的platform.azure
部分,以配置 Azure Stack Hub 配置:platform: azure: armEndpoint: <azurestack_arm_endpoint> 1 baseDomainResourceGroupName: <resource_group> 2 cloudName: AzureStackCloud 3 region: <azurestack_region> 4
备份
install-config.yaml
文件,以便用于安装多个集群。重要install-config.yaml
文件会在安装过程的下一步中使用。现在必须备份它。
5.6.2. Azure Stack Hub 的自定义 install-config.yaml 文件示例
您可以自定义 install-config.yaml
文件,以指定有关 OpenShift Container Platform 集群平台的更多详情,或修改所需参数的值。
此示例 YAML 文件仅供参考。使用它作为资源,在您手动创建的安装配置文件中输入参数值。
apiVersion: v1 baseDomain: example.com controlPlane: 1 name: master platform: azure: osDisk: diskSizeGB: 1024 2 diskType: premium_LRS replicas: 3 compute: 3 - name: worker platform: azure: osDisk: diskSizeGB: 512 4 diskType: premium_LRS replicas: 0 metadata: name: test-cluster 5 networking: clusterNetwork: - cidr: 10.128.0.0/14 hostPrefix: 23 machineNetwork: - cidr: 10.0.0.0/16 networkType: OVNKubernetes 6 serviceNetwork: - 172.30.0.0/16 platform: azure: armEndpoint: azurestack_arm_endpoint 7 baseDomainResourceGroupName: resource_group 8 region: azure_stack_local_region 9 resourceGroupName: existing_resource_group 10 outboundType: Loadbalancer cloudName: AzureStackCloud 11 pullSecret: '{"auths": ...}' 12 fips: false 13 additionalTrustBundle: | 14 -----BEGIN CERTIFICATE----- <MY_TRUSTED_CA_CERT> -----END CERTIFICATE----- sshKey: ssh-ed25519 AAAA... 15
- 1 3
controlPlane
部分是一个单个映射,但compute
部分是一系列映射。为满足不同数据结构的要求,compute
部分的第一行必须以连字符-
开头,controlPlane部分
的第一行则不以连字符开头。仅使用一个 control plane 池。- 2 4
- 您可以指定要使用的磁盘大小(以 GB 为单位)。control plane 节点的最低推荐值为 1024 GB。
- 5
- 指定集群的名称。
- 6
- 要安装的集群网络插件。支持的值有
OVNKubernetes
和OpenShiftSDN
。默认值为OVNKubernetes
。 - 7
- 指定 Azure Stack Hub operator 提供的 Azure Resource Manager 端点。
- 8
- 指定包含基域的 DNS 区的资源组的名称。
- 9
- 指定 Azure Stack Hub 本地区域的名称。
- 10
- 指定要安装集群的现有资源组的名称。如果未定义,则会为集群创建新的资源组。
- 11
- 将 Azure Stack Hub 环境指定为目标平台。
- 12
- 指定验证集群所需的 pull secret。
- 13
- 是否启用或禁用 FIPS 模式。默认情况下不启用 FIPS 模式。重要
OpenShift Container Platform 4.13 基于 Red Hat Enterprise Linux (RHEL) 9.2。RHEL 9.2 加密模块尚未经过 FIPS 验证。如需更多信息,请参阅 4.13 OpenShift Container Platform 发行注记 中的 "About this release"。
- 14
- 如果您的 Azure Stack Hub 环境使用内部证书颁发机构(CA),以
.pem
格式添加所需的证书捆绑包。 - 15
- 您可以选择提供您用来访问集群中机器的
sshKey
值。注意对于您要在其上执行安装调试或灾难恢复的生产环境 OpenShift Container Platform 集群,请指定
ssh-agent
进程使用的 SSH 密钥。
5.6.3. 在安装过程中配置集群范围的代理
生产环境可能会拒绝直接访问互联网,而是提供 HTTP 或 HTTPS 代理。您可以通过在 install-config.yaml
文件中配置代理设置,将新的 OpenShift Container Platform 集群配置为使用代理。
先决条件
-
您有一个现有的
install-config.yaml
文件。 您检查了集群需要访问的站点,并确定它们中的任何站点是否需要绕过代理。默认情况下,所有集群出口流量都经过代理,包括对托管云供应商 API 的调用。如果需要,您将在
Proxy 对象的
spec.noProxy
字段中添加站点来绕过代理。注意Proxy
对象status.noProxy
字段使用安装配置中的networking.machineNetwork[].cidr
、networking.clusterNetwork[].cidr
和networking.serviceNetwork[]
字段的值填充。对于在 Amazon Web Services(AWS)、Google Cloud Platform(GCP)、Microsoft Azure 和 Red Hat OpenStack Platform(RHOSP)上安装,
Proxy
对象status.noProxy
字段也会使用实例元数据端点填充(169.254.169.254
)。
流程
编辑
install-config.yaml
文件并添加代理设置。例如:apiVersion: v1 baseDomain: my.domain.com proxy: httpProxy: http://<username>:<pswd>@<ip>:<port> 1 httpsProxy: https://<username>:<pswd>@<ip>:<port> 2 noProxy: example.com 3 additionalTrustBundle: | 4 -----BEGIN CERTIFICATE----- <MY_TRUSTED_CA_CERT> -----END CERTIFICATE----- additionalTrustBundlePolicy: <policy_to_add_additionalTrustBundle> 5
- 1
- 用于创建集群外 HTTP 连接的代理 URL。URL 方案必须是
http
。 - 2
- 用于创建集群外 HTTPS 连接的代理 URL。
- 3
- 要从代理中排除的目标域名、IP 地址或其他网络 CIDR 的逗号分隔列表。在域前面加上
.
以仅匹配子域。例如,.y.com
匹配x.y.com
,但不匹配y.com
。使用*
绕过所有目的地的代理。 - 4
- 如果提供,安装程序会在
openshift-config
命名空间中生成名为user-ca-bundle
的配置映射,其包含代理 HTTPS 连接所需的一个或多个额外 CA 证书。然后,Cluster Network Operator 会创建trusted-ca-bundle
配置映射,将这些内容与 Red Hat Enterprise Linux CoreOS(RHCOS)信任捆绑包合并,Proxy
对象的trustedCA
字段中也会引用此配置映射。additionalTrustBundle
字段是必需的,除非代理的身份证书由来自 RHCOS 信任捆绑包的颁发机构签名。 - 5
- 可选:决定
Proxy
对象的配置以引用trustedCA
字段中user-ca-bundle
配置映射的策略。允许的值是Proxyonly
和Always
。仅在配置了http/https
代理时,使用Proxyonly
引用user-ca-bundle
配置映射。使用Always
始终引用user-ca-bundle
配置映射。默认值为Proxyonly
。
注意安装程序不支持代理的
readinessEndpoints
字段。注意如果安装程序超时,重启并使用安装程序的
wait-for
命令完成部署。例如:$ ./openshift-install wait-for install-complete --log-level debug
- 保存该文件并在安装 OpenShift Container Platform 时引用。
安装程序会创建一个名为 cluster 的集群范围代理,该代理 使用
提供的 install-config.yaml
文件中的代理设置。如果没有提供代理设置,仍然会创建一个 cluster
Proxy
对象,但它会有一个空 spec
。
只支持名为 cluster
的 Proxy
对象,且无法创建额外的代理。
5.6.4. 为 ARM 模板导出常用变量
您必须导出与提供的 Azure Resource Manager (ARM) 模板搭配使用的一组常用变量,它们有助于在 Microsoft Azure Stack Hub 上完成用户提供的基础架构安装。
特定的 ARM 模板可能还需要其他导出变量,这些变量在相关的程序中详细介绍。
先决条件
- 获取 OpenShift Container Platform 安装程序和集群的 pull secret。
流程
导出
install-config.yaml
中由提供的 ARM 模板使用的通用变量:$ export CLUSTER_NAME=<cluster_name>1 $ export AZURE_REGION=<azure_region>2 $ export SSH_KEY=<ssh_key>3 $ export BASE_DOMAIN=<base_domain>4 $ export BASE_DOMAIN_RESOURCE_GROUP=<base_domain_resource_group>5
- 1
install-config.yaml
文件中的.metadata.name
属性的值。- 2
- 集群要部署到的区域。这是来自
install-config.yaml
文件中的.platform.azure.region
属性的值。 - 3
- 作为字符串的 SSH RSA 公钥文件。您必须使用引号包括 SSH 密钥,因为它包含空格。这是来自
install-config.yaml
文件中的.sshKey
属性的值。 - 4
- 集群要部署到的基域。基域与您为集群创建的 DNS 区域对应。这是来自
install-config.yaml
文件中的.baseDomain
属性的值。 - 5
- 存在 DNS 区的资源组。这是来自
install-config.yaml
文件中的.platform.azure.baseDomainResourceGroupName
属性的值。
例如:
$ export CLUSTER_NAME=test-cluster $ export AZURE_REGION=centralus $ export SSH_KEY="ssh-rsa xxx/xxx/xxx= user@email.com" $ export BASE_DOMAIN=example.com $ export BASE_DOMAIN_RESOURCE_GROUP=ocp-cluster
导出 kubeadmin 凭证:
$ export KUBECONFIG=<installation_directory>/auth/kubeconfig 1
- 1
- 对于
<installation_directory>
,请指定安装文件保存到的目录的路径。
5.6.5. 创建 Kubernetes 清单和 Ignition 配置文件
由于您必须修改一些集群定义文件并手动启动集群机器,因此您必须生成 Kubernetes 清单和 Ignition 配置文件来配置机器。
安装配置文件转换为 Kubernetes 清单。清单嵌套到 Ignition 配置文件中,稍后用于配置集群机器。
-
OpenShift Container Platform 安装程序生成的 Ignition 配置文件包含 24 小时后过期的证书,然后在该时进行续订。如果在更新证书前关闭集群,且集群在 24 小时后重启,集群会自动恢复过期的证书。一个例外是,您必须手动批准待处理的
node-bootstrapper
证书签名请求(CSR)来恢复 kubelet 证书。如需更多信息,请参阅从过期的 control plane 证书 中恢复的文档。 - 建议您在 Ignition 配置文件生成后的 12 小时内使用它们,因为 24 小时的证书会在集群安装后的 16 小时到 22 小时间进行轮转。通过在 12 小时内使用 Ignition 配置文件,您可以避免在安装过程中因为执行了证书更新而导致安装失败的问题。
先决条件
- 已获得 OpenShift Container Platform 安装程序。
-
已创建
install-config.yaml
安装配置文件。
流程
进入包含 OpenShift Container Platform 安装程序的目录,并为集群生成 Kubernetes 清单:
$ ./openshift-install create manifests --dir <installation_directory> 1
- 1
- 对于
<installation_directory>
,请指定包含您创建的install-config.yaml
文件的安装目录。
删除定义 control plane 机器的 Kubernetes 清单文件:
$ rm -f <installation_directory>/openshift/99_openshift-cluster-api_master-machines-*.yaml
通过删除这些文件,您可以防止集群自动生成 control plane 机器。
删除定义 control plane 机器集的 Kubernetes 清单文件:
$ rm -f <installation_directory>/openshift/99_openshift-machine-api_master-control-plane-machine-set.yaml
删除定义 worker 机器的 Kubernetes 清单文件:
$ rm -f <installation_directory>/openshift/99_openshift-cluster-api_worker-machineset-*.yaml
由于您要自行创建和管理 worker 机器,因此不需要初始化这些机器。
检查
<installation_directory>/manifests/cluster-scheduler-02-config.yml Kubernetes 清单文件中的
mastersSchedulable
参数是否已设置为false
。此设置可防止在 control plane 机器上调度 pod:-
打开
<installation_directory>/manifests/cluster-scheduler-02-config.yml
文件。 -
找到
mastersSchedulable
参数,并确保它被设置为false
。 - 保存并退出 文件。
-
打开
可选:如果您不希望 Ingress Operator 代表您创建 DNS 记录,请删除
<installation_directory>/manifests/cluster-dns-02-config.yml
DNS 配置文件中的privateZone
和 publicZone
部分:apiVersion: config.openshift.io/v1 kind: DNS metadata: creationTimestamp: null name: cluster spec: baseDomain: example.openshift.com privateZone: 1 id: mycluster-100419-private-zone publicZone: 2 id: example.openshift.com status: {}
如果您这样做,后续步骤中必须手动添加入口 DNS 记录。
可选: 如果您的 Azure Stack Hub 环境使用内部证书颁发机构(CA),您必须更新
<installation_directory>/manifests/cluster-proxy-01-config.yaml
文件中的.spec.trustedCA.name
字段来使用user-ca-bundle
:... spec: trustedCA: name: user-ca-bundle ...
之后,您必须更新 bootstrap ignition 使其包含 CA。
在用户置备的基础架构上配置 Azure 时,您必须导出清单文件中定义的一些常见变量,以备稍后在 Azure Resource Manager(ARM)模板中使用:
使用以下命令导出基础架构 ID:
$ export INFRA_ID=<infra_id> 1
- 1
- OpenShift Container Platform 集群被分配了一个标识符(
INFRA_ID
),其格式为<cluster_name>-<random_string>
。这将作为使用提供的 ARM 模板创建的大部分资源的基本名称。这是来自manifests/cluster-infrastructure-02-config.yml
文件中的.status.infrastructureName
属性的值。
使用以下命令导出资源组:
$ export RESOURCE_GROUP=<resource_group> 1
手动创建云凭证。
从包含安装程序的目录中,获取
openshift-install
二进制文件要使用的 OpenShift Container Platform 发行镜像详情:$ openshift-install version
输出示例
release image quay.io/openshift-release-dev/ocp-release:4.y.z-x86_64
针对您要部署到的云,找到此发行版本镜像中的所有
CredentialsRequest
对象:$ oc adm release extract quay.io/openshift-release-dev/ocp-release:4.y.z-x86_64 --credentials-requests --cloud=azure
此命令为每个
CredentialsRequest
对象创建一个 YAML 文件。CredentialsRequest
对象示例apiVersion: cloudcredential.openshift.io/v1 kind: CredentialsRequest metadata: labels: controller-tools.k8s.io: "1.0" name: openshift-image-registry-azure namespace: openshift-cloud-credential-operator spec: secretRef: name: installer-cloud-credentials namespace: openshift-image-registry providerSpec: apiVersion: cloudcredential.openshift.io/v1 kind: AzureProviderSpec roleBindings: - role: Contributor
在之前生成的
openshift-install
清单目录中为 secret 创建 YAML 文件。secret 必须使用在spec.secretRef
中为每个CredentialsRequest
定义的命名空间和 secret 名称存储。secret 数据的格式因云供应商而异。secrets.yaml
文件示例:apiVersion: v1 kind: Secret metadata: name: ${secret_name} namespace: ${secret_namespace} stringData: azure_subscription_id: ${subscription_id} azure_client_id: ${app_id} azure_client_secret: ${client_secret} azure_tenant_id: ${tenant_id} azure_resource_prefix: ${cluster_name} azure_resourcegroup: ${resource_group} azure_region: ${azure_region}
可选: 如果手动创建云身份和访问管理(IAM)角色,请运行以下命令在发行镜像中找到带有
TechPreviewNoUpgrade
注解的任何CredentialsRequest
对象:$ oc adm release extract quay.io/openshift-release-dev/ocp-release:4.y.z-x86_64 --credentials-requests --cloud=<platform_name>
输出示例
0000_30_capi-operator_00_credentials-request.yaml: release.openshift.io/feature-set: TechPreviewNoUpgrade
重要发行镜像包含通过
TechPreviewNoUpgrade
功能集启用的技术预览功能的CredentialsRequest
对象。您可以使用release.openshift.io/feature-set: TechPreviewNoUpgrade
注解来识别这些对象。- 如果不使用这些功能,请不要为这些对象创建 secret。为不使用的技术预览功能创建 secret 可能会导致安装失败。
- 如果使用这些功能,必须为对应的对象创建 secret。
-
删除具有
TechPreviewNoUpgrade
注解的所有CredentialsRequest
对象。
在 manifests 目录中创建一个
cco-configmap.yaml
文件,并禁用 Cloud Credential Operator (CCO):ConfigMap
对象示例apiVersion: v1 kind: ConfigMap metadata: name: cloud-credential-operator-config namespace: openshift-cloud-credential-operator annotations: release.openshift.io/create-only: "true" data: disabled: "true"
要创建 Ignition 配置文件,从包含安装程序的目录运行以下命令:
$ ./openshift-install create ignition-configs --dir <installation_directory> 1
- 1
- 对于
<installation_directory>
,请指定相同的安装目录。
为安装目录中的 bootstrap、control plane 和计算节点创建 Ignition 配置文件。
kubeadmin-password
和kubeconfig
文件在./<installation_directory>/auth
目录中创建:. ├── auth │ ├── kubeadmin-password │ └── kubeconfig ├── bootstrap.ign ├── master.ign ├── metadata.json └── worker.ign
其他资源
5.6.6. 可选:创建独立 /var
分区
建议安装程序将 OpenShift Container Platform 的磁盘分区保留给安装程序。然而,在有些情况下您可能需要在文件系统的一部分中创建独立分区。
OpenShift Container Platform 支持添加单个分区来将存储附加到 /var
分区或 /var
的子目录中。例如:
-
/var/lib/containers
:保存随着系统中添加更多镜像和容器而增长的容器相关内容。 -
/var/lib/etcd
:保存您可能希望独立保留的数据,比如 etcd 存储的性能优化。 -
/var
:保存您可能希望独立保留的数据,以满足审计等目的。
通过单独存储 /var
目录的内容,可以更轻松地根据需要为区域扩展存储,并在以后重新安装 OpenShift Container Platform,并保持该数据的完整性。使用这个方法,您不必再次拉取所有容器,在更新系统时也不必复制大量日志文件。
因为 /var
在进行一个全新的 Red Hat Enterprise Linux CoreOS(RHCOS)安装前必需存在,所以这个流程会在 OpenShift Container Platform 安装过程的 openshift-install
准备阶段插入一个创建的机器配置清单的机器配置来设置独立的 /var
分区。
如果按照以下步骤在此流程中创建独立 /var
分区,则不需要再次创建 Kubernetes 清单和 Ignition 配置文件,如本节所述。
流程
创建存放 OpenShift Container Platform 安装文件的目录:
$ mkdir $HOME/clusterconfig
运行
openshift-install
,以在manifest
和openshift
子目录中创建一组文件。在系统提示时回答系统问题:$ openshift-install create manifests --dir $HOME/clusterconfig
输出示例
? SSH Public Key ... INFO Credentials loaded from the "myprofile" profile in file "/home/myuser/.aws/credentials" INFO Consuming Install Config from target directory INFO Manifests created in: $HOME/clusterconfig/manifests and $HOME/clusterconfig/openshift
可选:确认安装程序在
clusterconfig/openshift
目录中创建了清单:$ ls $HOME/clusterconfig/openshift/
输出示例
99_kubeadmin-password-secret.yaml 99_openshift-cluster-api_master-machines-0.yaml 99_openshift-cluster-api_master-machines-1.yaml 99_openshift-cluster-api_master-machines-2.yaml ...
创建用于配置额外分区的 Butane 配置。例如,将文件命名为
$HOME/clusterconfig/98-var-partition.bu
,将磁盘设备名称改为worker
系统上存储设备的名称,并根据情况设置存储大小。这个示例将/var
目录放在一个单独的分区中:variant: openshift version: 4.13.0 metadata: labels: machineconfiguration.openshift.io/role: worker name: 98-var-partition storage: disks: - device: /dev/disk/by-id/<device_name> 1 partitions: - label: var start_mib: <partition_start_offset> 2 size_mib: <partition_size> 3 number: 5 filesystems: - device: /dev/disk/by-partlabel/var path: /var format: xfs mount_options: [defaults, prjquota] 4 with_mount_unit: true
注意当创建单独的
/var
分区时,如果不同的实例类型没有相同的设备名称,则无法为 worker 节点使用不同的实例类型。从 Butane 配置创建一个清单,并将它保存到
clusterconfig/openshift
目录中。例如,运行以下命令:$ butane $HOME/clusterconfig/98-var-partition.bu -o $HOME/clusterconfig/openshift/98-var-partition.yaml
再次运行
openshift-install
,从manifest
和openshift
子目录中的一组文件创建 Ignition 配置:$ openshift-install create ignition-configs --dir $HOME/clusterconfig $ ls $HOME/clusterconfig/ auth bootstrap.ign master.ign metadata.json worker.ign
现在,您可以使用 Ignition 配置文件作为安装程序的输入来安装 Red Hat Enterprise Linux CoreOS(RHCOS)系统。