4.2. 使用 ARM 模板在 Azure Stack Hub 上安装集群
在 OpenShift Container Platform 版本 4.17 中,您可以使用您提供的基础架构在 Microsoft Azure Stack Hub 上安装集群。
提供的几个 Azure Resource Manager(ARM) 模板可协助完成这些步骤,也可帮助您自行建模。
进行用户置备的基础架构安装的步骤仅作为示例。使用您提供的基础架构安装集群需要了解云供应商和 OpenShift Container Platform 安装过程。提供的几个 ARM 模板可帮助完成这些步骤,或帮助您自行建模。您也可以自由选择通过其他方法创建所需的资源;模板仅作示例之用。
4.2.1. 先决条件
- 您可以参阅有关 OpenShift Container Platform 安装和更新 流程的详细信息。
- 您可以阅读选择集群安装方法并为用户准备它的文档。
- 已将 Azure Stack Hub 帐户配置为托管集群。
-
您下载了 Azure CLI 并安装到您的计算机上。请参阅 Azure 文档中的安装 Azure CLI。以下文档使用 Azure CLI 的版本
2.28.0
测试。Azure CLI 命令可能会根据您使用的版本的不同而不同。 如果使用防火墙并计划使用 Telemetry 服务,需要将防火墙配置为允许集群需要访问的站点。
注意如果要配置代理,请务必查看此站点列表。
4.2.2. 配置 Azure Stack Hub 项目
在安装 OpenShift Container Platform 之前,您必须配置 Azure 项目来托管它。
所有通过公共端点提供的 Azure Stack Hub 资源都受到资源名称的限制,您无法创建使用某些术语的资源。如需 Azure Stack Hub 限制词语列表,请参阅 Azure 文档中的解决保留资源名称错误。
4.2.2.1. Azure Stack Hub 帐户限制
OpenShift Container Platform 集群使用多个 Microsoft Azure Stack Hub 组件,Azure Stack Hub 中的默认配额类型会影响您安装 OpenShift Container Platform 集群的能力。
下表总结了 Azure Stack Hub 组件,它们的限值会影响您安装和运行 OpenShift Container Platform 集群的能力。
组件 | 默认所需的组件数 | 描述 | ||||||
---|---|---|---|---|---|---|---|---|
vCPU | 56 | 默认集群需要 56 个 vCPU,因此您必须提高帐户限值。 默认情况下,每个集群创建以下实例:
因为 bootstrap、control plane 和 worker 机器使用 若要部署更多 worker 节点、启用自动扩展、部署大型工作负载或使用不同的实例类型,您必须进一步提高帐户的 vCPU 限值,以确保集群可以部署您需要的机器。 | ||||||
VNet | 1 | 每个默认集群都需要一个虚拟网络 (VNet),此网络包括两个子网。 | ||||||
网络接口 | 7 | 每个默认集群都需要 7 个网络接口。如果您要创建更多机器或者您部署的工作负载要创建负载均衡器,则集群会使用更多的网络接口。 | ||||||
网络安全组 | 2 | 每个集群为 VNet 中的每个子网创建网络安全组。默认集群为 control plane 和计算节点子网创建网络安全组:
| ||||||
网络负载均衡器 | 3 | 每个集群都会创建以下负载均衡器:
如果您的应用程序创建了更多的 Kubernetes | ||||||
公共 IP 地址 | 2 | 公共负载均衡器使用一个公共 IP 地址。bootstrap 机器也使用一个公共 IP 地址,以便您可以在安装期间通过 SSH 连接到该机器来进行故障排除。bootstrap 节点的 IP 地址仅在安装过程中使用。 | ||||||
专用 IP 地址 | 7 | 内部负载均衡器、三台 control plane 机器中的每一台以及三台 worker 机器中的每一台各自使用一个专用 IP 地址。 |
其他资源
4.2.2.2. 在 Azure Stack Hub 中配置 DNS 区域
要在 Azure Stack Hub 上成功安装 OpenShift Container Platform,您必须在 Azure Stack Hub DNS 区域中创建 DNS 记录。DNS 区域必须对域具有权威。要将注册商的 DNS 区域委派给 Azure Stack Hub,请参阅 Microsoft 有关 Azure Stack Hub 数据中心 DNS 集成的文档。
您可以通过访问此创建 DNS 区域示例来查看 Azure 的 DNS 解决方案。
4.2.2.3. 证书签名请求管理
在使用您置备的基础架构时,集群只能有限地访问自动机器管理,因此您必须提供一种在安装后批准集群证书签名请求 (CSR) 的机制。kube-controller-manager
只能批准 kubelet 客户端 CSR。machine-approver
无法保证使用 kubelet 凭证请求的提供证书的有效性,因为它不能确认是正确的机器发出了该请求。您必须决定并实施一种方法,以验证 kubelet 提供证书请求的有效性并进行批准。
4.2.2.4. 所需的 Azure Stack Hub 角色
Microsoft Azure Stack Hub 帐户必须具有您使用的订阅的以下角色:
-
所有者
要在 Azure 门户上设置角色,请参阅 Microsoft 文档中的通过基于角色的访问控制管理对 Azure Stack Hub 中资源的管理访问权限。
4.2.2.5. 创建服务主体
由于 OpenShift Container Platform 及其安装程序使用 Azure Resource Manager 创建 Microsoft Azure 资源,因此您必须创建一个服务主体来代表它。
先决条件
- 安装或更新 Azure CLI。
- 您的 Azure 帐户具有您所用订阅所需的角色。
流程
注册您的环境:
$ az cloud register -n AzureStackCloud --endpoint-resource-manager <endpoint> 1
- 1
- 指定 Azure Resource Manager 端点 'https://management.<region>.<fqdn>/'。
详情请查看 Microsoft 文档。
设置活跃环境:
$ az cloud set -n AzureStackCloud
更新您的环境配置,以使用 Azure Stack Hub 的特定 API 版本:
$ az cloud update --profile 2019-03-01-hybrid
登录 Azure CLI:
$ az login
如果您在多租户环境中,还必须提供租户 ID。
如果您的 Azure 帐户使用订阅,请确定您使用正确的订阅:
查看可用帐户列表并记录您要用于集群的订阅的
tenantId
值:$ az account list --refresh
输出示例
[ { "cloudName": AzureStackCloud", "id": "9bab1460-96d5-40b3-a78e-17b15e978a80", "isDefault": true, "name": "Subscription Name", "state": "Enabled", "tenantId": "6057c7e9-b3ae-489d-a54e-de3f6bf6a8ee", "user": { "name": "you@example.com", "type": "user" } } ]
查看您的活跃帐户详情,确认
tenantId
值与您要使用的订阅匹配:$ az account show
输出示例
{ "environmentName": AzureStackCloud", "id": "9bab1460-96d5-40b3-a78e-17b15e978a80", "isDefault": true, "name": "Subscription Name", "state": "Enabled", "tenantId": "6057c7e9-b3ae-489d-a54e-de3f6bf6a8ee", 1 "user": { "name": "you@example.com", "type": "user" } }
- 1
- 确保
tenantId
参数的值是正确的订阅 ID。
如果您使用的订阅不正确,请更改活跃的订阅:
$ az account set -s <subscription_id> 1
- 1
- 指定订阅 ID。
验证订阅 ID 更新:
$ az account show
输出示例
{ "environmentName": AzureStackCloud", "id": "33212d16-bdf6-45cb-b038-f6565b61edda", "isDefault": true, "name": "Subscription Name", "state": "Enabled", "tenantId": "8049c7e9-c3de-762d-a54e-dc3f6be6a7ee", "user": { "name": "you@example.com", "type": "user" } }
-
记录输出中的
tenantId
和id
参数值。OpenShift Container Platform 安装过程中需要这些值。 为您的帐户创建服务主体:
$ az ad sp create-for-rbac --role Contributor --name <service_principal> \ 1 --scopes /subscriptions/<subscription_id> 2 --years <years> 3
输出示例
Creating 'Contributor' role assignment under scope '/subscriptions/<subscription_id>' The output includes credentials that you must protect. Be sure that you do not include these credentials in your code or check the credentials into your source control. For more information, see https://aka.ms/azadsp-cli { "appId": "ac461d78-bf4b-4387-ad16-7e32e328aec6", "displayName": <service_principal>", "password": "00000000-0000-0000-0000-000000000000", "tenantId": "8049c7e9-c3de-762d-a54e-dc3f6be6a7ee" }
-
记录前面输出中
appId
和password
参数的值。OpenShift Container Platform 安装过程中需要这些值。
4.2.3. 为 Azure Stack Hub 创建安装文件
要使用用户置备的基础架构在 Microsoft Azure Stack Hub 上安装 OpenShift Container Platform,您必须生成安装程序部署集群所需的文件,并进行修改,以便集群只创建要使用的机器。您可以手动创建 install-config.yaml
文件,然后生成并自定义 Kubernetes 清单和 Ignition 配置文件。您也可以选择在安装准备阶段首先设置独立的 var
分区。
4.2.3.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
文件会在安装过程的下一步中使用。现在必须备份它。
4.2.3.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
是唯一支持的值。 - 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 模式。如果启用了 FIPS 模式,运行 OpenShift Container Platform 的 Red Hat Enterprise Linux CoreOS(RHCOS)机器会绕过默认的 Kubernetes 加密套件,并使用由 RHCOS 提供的加密模块。重要
要为集群启用 FIPS 模式,您必须从配置为以 FIPS 模式操作的 Red Hat Enterprise Linux (RHEL) 计算机运行安装程序。有关在 RHEL 中配置 FIPS 模式的更多信息,请参阅在 FIPS 模式中安装该系统。
当以 FIPS 模式运行 Red Hat Enterprise Linux (RHEL) 或 Red Hat Enterprise Linux CoreOS (RHCOS)时,OpenShift Container Platform 核心组件使用 RHEL 加密库,在 x86_64、ppc64le 和 s390x 架构上提交到 NIST FIPS 140-2/140-3 Validation。
- 14
- 如果您的 Azure Stack Hub 环境使用内部证书颁发机构(CA),以
.pem
格式添加所需的证书捆绑包。 - 15
- 您可以选择提供您用来访问集群中机器的
sshKey
值。注意对于您要在其上执行安装调试或灾难恢复的生产环境 OpenShift Container Platform 集群,请指定
ssh-agent
进程使用的 SSH 密钥。
4.2.3.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
对象,且无法创建额外的代理。
4.2.3.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>
,请指定安装文件保存到的目录的路径。
4.2.3.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
重要如果在用户置备的基础架构上安装集群时禁用了
MachineAPI
功能,则必须删除定义 worker 机器的 Kubernetes 清单文件。否则,集群将无法安装。由于您要自行创建和管理 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
运行以下命令,使用安装文件中的发行镜像设置
$RELEASE_IMAGE
变量:$ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
运行以下命令,从 OpenShift Container Platform 发行镜像中提取
CredentialsRequest
自定义资源 (CR) 列表:$ oc adm release extract \ --from=$RELEASE_IMAGE \ --credentials-requests \ --included \1 --install-config=<path_to_directory_with_installation_configuration>/install-config.yaml \2 --to=<path_to_directory_for_credentials_requests> 3
此命令为每个
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}
在 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
其他资源
4.2.3.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.17.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)系统。
4.2.4. 创建 Azure 资源组
您必须创建一个 Microsoft Azure 资源组。这用于在 Azure Stack Hub 上安装 OpenShift Container Platform 集群。
流程
在受支持的 Azure 区域中创建资源组:
$ az group create --name ${RESOURCE_GROUP} --location ${AZURE_REGION}
4.2.5. 上传 RHCOS 集群镜像和 bootstrap Ignition 配置文件
Azure 客户端不支持基于本地现有文件进行部署。您必须复制 RHCOS 虚拟硬盘(VHD)集群镜像,并将 bootstrap Ignition 配置文件存储在存储容器中,以便在部署过程中访问它们。
先决条件
- 为集群生成 Ignition 配置文件。
流程
创建 Azure 存储帐户以存储 VHD 集群镜像:
$ az storage account create -g ${RESOURCE_GROUP} --location ${AZURE_REGION} --name ${CLUSTER_NAME}sa --kind Storage --sku Standard_LRS
警告Azure 存储帐户名称的长度必须在 3 到 24 个字符之,且只使用数字和小写字母。如果您的
CLUSTER_NAME
变量没有遵循这些限制,您必须手动定义 Azure 存储帐户名称。如需有关 Azure 存储帐户名称限制的更多信息,请参阅 Azure 文档中的解决存储帐户名称的错误。将存储帐户密钥导出为环境变量:
$ export ACCOUNT_KEY=`az storage account keys list -g ${RESOURCE_GROUP} --account-name ${CLUSTER_NAME}sa --query "[0].value" -o tsv`
将 RHCOS VHD 的 URL 导出为环境变量:
$ export COMPRESSED_VHD_URL=$(openshift-install coreos print-stream-json | jq -r '.architectures.x86_64.artifacts.azurestack.formats."vhd.gz".disk.location')
重要RHCOS 镜像可能不会随着 OpenShift Container Platform 的每个发行版本而改变。您必须指定一个最高版本的镜像,其版本号应小于或等于您安装的 OpenShift Container Platform 版本。如果可用,请使用与 OpenShift Container Platform 版本匹配的镜像版本。
为 VHD 创建存储容器:
$ az storage container create --name vhd --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY}
在本地下载压缩的 RHCOS VHD 文件:
$ curl -O -L ${COMPRESSED_VHD_URL}
解压缩 VHD 文件。
注意解压缩的 VHD 文件大约为 16 GB,因此请确保您的主机系统有 16 GB 的可用空间。您可以在上传 VHD 文件后删除该文件。
将本地 VHD 复制为一个 blob:
$ az storage blob upload --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY} -c vhd -n "rhcos.vhd" -f rhcos-<rhcos_version>-azurestack.x86_64.vhd
创建 blob 存储容器并上传生成的
bootstrap.ign
文件:$ az storage container create --name files --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY}
$ az storage blob upload --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY} -c "files" -f "<installation_directory>/bootstrap.ign" -n "bootstrap.ign"
4.2.6. 创建 DNS 区示例
使用用户置备的基础架构的集群需要 DNS 记录。您应该选择适合您的场景的 DNS 策略。
本例中使用了 Azure Stack Hub 的数据中心 DNS 集成,因此您将创建一个 DNS 区。
DNS 区域不需要与集群部署位于同一个资源组中,且可能已在您的机构中为所需基域存在。如果情况如此,您可以跳过创建 DNS 区域 ; 请确定您之前生成的安装配置反映了这种情况。
流程
在
BASE_DOMAIN_RESOURCE_GROUP
环境变量中导出的资源组中创建新的 DNS 区域:$ az network dns zone create -g ${BASE_DOMAIN_RESOURCE_GROUP} -n ${CLUSTER_NAME}.${BASE_DOMAIN}
如果您使用的是已存在的 DNS 区域,您可以跳过这一步。
您可以访问该部分来了解更多有关 在 Azure Stack Hub 中配置 DNS 区 的信息。
4.2.7. 在 Azure Stack Hub 中创建 VNet
您必须在 Microsoft Azure Stack Hub 中创建虚拟网络 (VNet),供您的 OpenShift Container Platform 集群使用。您可以对 VNet 进行定制来满足您的要求。创建 VNet 的一种方法是修改提供的 Azure Resource Manager(ARM)模板。
如果不使用提供的 ARM 模板来创建 Azure Stack Hub 基础架构,您必须检查提供的信息并手动创建基础架构。如果集群没有正确初始化,您可能需要联系红帽支持并提供您的安装日志。
流程
-
复制 VNet 的 ARM 模板 一节中的模板,并将它以
01_vnet.json
保存到集群的安装目录中。此模板描述了集群所需的 VNet。 使用
az
CLI 创建部署:$ az deployment group create -g ${RESOURCE_GROUP} \ --template-file "<installation_directory>/01_vnet.json" \ --parameters baseName="${INFRA_ID}"1
- 1
- 资源名称使用的基本名称 ; 这通常是集群的基础架构 ID。
4.2.7.1. VNet 的 ARM 模板
您可以使用以下 Azure Resource Manager(ARM)模板来部署 OpenShift Container Platform 集群所需的 VPC:
例 4.1. 01_vnet.json
ARM 模板
link:https://raw.githubusercontent.com/openshift/installer/release-4.17/upi/azurestack/01_vnet.json[]
4.2.8. 为 Azure Stack Hub 基础架构部署 RHCOS 集群镜像
您必须对 OpenShift Container Platform 节点的 Microsoft Azure Stack Hub 使用有效的 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像。
先决条件
- 将 RHCOS 虚拟硬盘(VHD)集群镜像存储在 Azure 存储容器中。
- 在 Azure 存储容器中存储 bootstrap Ignition 配置文件。
流程
-
复制镜像存储的 ARM 模板 部分中的模板,并将它以
02_storage.json
保存到集群的安装目录中。此模板描述了集群所需的镜像存储。 以一个变量的形式将 RHCOS VHD blob URL 导出:
$ export VHD_BLOB_URL=`az storage blob url --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY} -c vhd -n "rhcos.vhd" -o tsv`
部署集群镜像
$ az deployment group create -g ${RESOURCE_GROUP} \ --template-file "<installation_directory>/02_storage.json" \ --parameters vhdBlobURL="${VHD_BLOB_URL}" \ 1 --parameters baseName="${INFRA_ID}" \ 2 --parameters storageAccount="${CLUSTER_NAME}sa" \ 3 --parameters architecture="<architecture>" 4
4.2.8.1. 镜像存储的 ARM 模板
您可以使用以下 Azure Resource Manager(ARM)模板来部署 OpenShift Container Platform 集群所需的存储的 Red Hat Enterprise Linux CoreOS(RHCOS)镜像:
例 4.2. 02_storage.json
ARM 模板
link:https://raw.githubusercontent.com/openshift/installer/release-4.17/upi/azurestack/02_storage.json[]
4.2.9. 用户置备的基础架构对网络的要求
所有 Red Hat Enterprise Linux CoreOS(RHCOS)机器需要在启动过程中在 initramfs
中配置网络,以获取其 Ignition 配置文件。
4.2.9.1. 网络连接要求
您必须配置机器之间的网络连接,以允许 OpenShift Container Platform 集群组件进行通信。每台机器都必须能够解析集群中所有其他机器的主机名。
本节详细介绍了所需的端口。
在连接的 OpenShift Container Platform 环境中,所有节点都需要访问互联网才能为平台容器拉取镜像,并向红帽提供遥测数据。
协议 | port | 描述 |
---|---|---|
ICMP | N/A | 网络可访问性测试 |
TCP |
| 指标 |
|
主机级别的服务,包括端口 9 | |
| Kubernetes 保留的默认端口 | |
UDP |
| VXLAN |
| Geneve | |
|
主机级别的服务,包括端口 | |
| IPsec IKE 数据包 | |
| IPsec NAT-T 数据包 | |
|
UDP 端口
如果配置了外部 NTP 时间服务器,需要打开 UDP 端口 | |
TCP/UDP |
| Kubernetes 节点端口 |
ESP | N/A | IPsec Encapsulating Security Payload(ESP) |
协议 | port | 描述 |
---|---|---|
TCP |
| Kubernetes API |
协议 | port | 描述 |
---|---|---|
TCP |
| etcd 服务器和对等端口 |
4.2.10. 在 Azure Stack Hub 中创建网络和负载均衡组件
您必须在 Microsoft Azure Stack Hub 中配置网络和负载均衡,供您的 OpenShift Container Platform 集群使用。创建这些组件的一种方法是修改提供的 Azure Resource Manager(ARM)模板。
负载平衡需要以下 DNS 记录:
-
DNS 区域中的 API 公共负载均衡器的
api
DNS 记录。 -
DNS 区域中 API 内部负载均衡器的
api-int
DNS 记录。
如果不使用提供的 ARM 模板来创建 Azure Stack Hub 基础架构,您必须检查提供的信息并手动创建基础架构。如果集群没有正确初始化,您可能需要联系红帽支持并提供您的安装日志。
先决条件
- 在 Azure Stack Hub 中创建和配置 VNet 及相关子网。
流程
-
复制 网络和负载均衡器的 ARM 模板 一节中的模板,并将它以
03_infra.json
保存到集群的安装目录中。此模板描述了集群所需的网络和负载均衡对象。 使用
az
CLI 创建部署:$ az deployment group create -g ${RESOURCE_GROUP} \ --template-file "<installation_directory>/03_infra.json" \ --parameters baseName="${INFRA_ID}"1
- 1
- 资源名称使用的基本名称 ; 这通常是集群的基础架构 ID。
创建
api
DNS 记录和api-int
DNS 记录。在创建 API DNS 记录时,${BASE_DOMAIN_RESOURCE_GROUP}
变量必须指向 DNS 区域存在的资源组。导出以下变量:
$ export PUBLIC_IP=`az network public-ip list -g ${RESOURCE_GROUP} --query "[?name=='${INFRA_ID}-master-pip'] | [0].ipAddress" -o tsv`
导出以下变量:
$ export PRIVATE_IP=`az network lb frontend-ip show -g "$RESOURCE_GROUP" --lb-name "${INFRA_ID}-internal" -n internal-lb-ip --query "privateIpAddress" -o tsv`
在新的 DNS 区域中创建
api
DNS 记录:$ az network dns record-set a add-record -g ${BASE_DOMAIN_RESOURCE_GROUP} -z ${CLUSTER_NAME}.${BASE_DOMAIN} -n api -a ${PUBLIC_IP} --ttl 60
如果要将集群添加到现有 DNS 区域中,您可以在其中创建
api
DNS 记录:$ az network dns record-set a add-record -g ${BASE_DOMAIN_RESOURCE_GROUP} -z ${BASE_DOMAIN} -n api.${CLUSTER_NAME} -a ${PUBLIC_IP} --ttl 60
在新的 DNS 区域中创建
api-int
DNS 记录:$ az network dns record-set a add-record -g ${BASE_DOMAIN_RESOURCE_GROUP} -z "${CLUSTER_NAME}.${BASE_DOMAIN}" -n api-int -a ${PRIVATE_IP} --ttl 60
如果要将集群添加到现有 DNS 区域中,您可以在其中创建
api-int
DNS 记录:$ az network dns record-set a add-record -g ${BASE_DOMAIN_RESOURCE_GROUP} -z ${BASE_DOMAIN} -n api-int.${CLUSTER_NAME} -a ${PRIVATE_IP} --ttl 60
4.2.10.1. 网络和负载均衡器的 ARM 模板
您可以使用以下 Azure Resource Manager(ARM)模板来部署 OpenShift Container Platform 集群所需的网络对象和负载均衡器:
例 4.3. 03_infra.json
ARM template
link:https://raw.githubusercontent.com/openshift/installer/release-4.17/upi/azurestack/03_infra.json[]
4.2.11. 在 Azure Stack Hub 中创建 bootstrap 机器
您必须在 Microsoft Azure Stack Hub 中创建 bootstrap 机器,以便在 OpenShift Container Platform 集群初始化过程中使用。创建此机器的一种方法是修改提供的 Azure Resource Manager(ARM)模板。
如果不使用提供的 ARM 模板来创建 bootstrap 机器,您必须检查提供的信息并手动创建基础架构。如果集群没有正确初始化,您可能需要联系红帽支持并提供您的安装日志。
先决条件
- 在 Azure Stack Hub 中创建和配置联网与负载均衡器。
流程
-
复制 bootstrap 机器的 ARM 模板一节中的模板,并将它以
04_bootstrap.json
保存到集群的安装目录中。此模板描述了集群所需的 bootstrap 机器。 导出 bootstrap URL 变量:
$ bootstrap_url_expiry=`date -u -d "10 hours" '+%Y-%m-%dT%H:%MZ'`
$ export BOOTSTRAP_URL=`az storage blob generate-sas -c 'files' -n 'bootstrap.ign' --https-only --full-uri --permissions r --expiry $bootstrap_url_expiry --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY} -o tsv`
导出 bootstrap ignition 变量:
如果您的环境使用公共证书颁发机构(CA),请运行以下命令:
$ export BOOTSTRAP_IGNITION=`jq -rcnM --arg v "3.2.0" --arg url ${BOOTSTRAP_URL} '{ignition:{version:$v,config:{replace:{source:$url}}}}' | base64 | tr -d '\n'`
如果您的环境使用内部 CA,您必须将 PEM 编码捆绑包添加到 bootstrap ignition stub 中,以便 bootstrap 虚拟机可以从存储帐户中提取 bootstrap ignition。运行以下命令,这假设您的 CA 位于名为
CA.pem
的文件中:$ export CA="data:text/plain;charset=utf-8;base64,$(cat CA.pem |base64 |tr -d '\n')"
$ export BOOTSTRAP_IGNITION=`jq -rcnM --arg v "3.2.0" --arg url "$BOOTSTRAP_URL" --arg cert "$CA" '{ignition:{version:$v,security:{tls:{certificateAuthorities:[{source:$cert}]}},config:{replace:{source:$url}}}}' | base64 | tr -d '\n'`
使用
az
CLI 创建部署:$ az deployment group create --verbose -g ${RESOURCE_GROUP} \ --template-file "<installation_directory>/04_bootstrap.json" \ --parameters bootstrapIgnition="${BOOTSTRAP_IGNITION}" \ 1 --parameters baseName="${INFRA_ID}" \ 2 --parameters diagnosticsStorageAccountName="${CLUSTER_NAME}sa" 3
4.2.11.1. bootstrap 机器的 ARM 模板
您可以使用以下 Azure Resource Manager(ARM)模板来部署 OpenShift Container Platform 集群所需的 bootstrap 机器:
例 4.4. 04_bootstrap.json
ARM template
link:https://raw.githubusercontent.com/openshift/installer/release-4.17/upi/azurestack/04_bootstrap.json[]
4.2.12. 在 Azure Stack Hub 中创建 control plane 机器
您必须在 Microsoft Azure Stack Hub 中创建 control plane 机器,供您的集群使用。创建这些机器的一种方法是修改提供的 Azure Resource Manager(ARM)模板。
如果不使用提供的 ARM 模板来创建 control plane 机器,您必须检查提供的信息并手动创建基础架构。如果您的集群没有正确初始化,请考虑与安装日志联系红帽支持。
先决条件
- 创建 bootstrap 机器。
流程
-
复制 control plane 机器的 ARM 模板 一节中的模板,并将它以
05_masters.json
保存到集群的安装目录中。此模板描述了集群所需的 control plane 机器。 导出 control plane 机器部署所需的以下变量:
$ export MASTER_IGNITION=`cat <installation_directory>/master.ign | base64 | tr -d '\n'`
使用
az
CLI 创建部署:$ az deployment group create -g ${RESOURCE_GROUP} \ --template-file "<installation_directory>/05_masters.json" \ --parameters masterIgnition="${MASTER_IGNITION}" \ 1 --parameters baseName="${INFRA_ID}" \ 2 --parameters diagnosticsStorageAccountName="${CLUSTER_NAME}sa" 3
4.2.12.1. control plane 机器的 ARM 模板
您可以使用以下 Azure Resource Manager(ARM)模板来部署 OpenShift Container Platform 集群所需的 control plane 机器:
例 4.5. 05_masters.json
ARM template
link:https://raw.githubusercontent.com/openshift/installer/release-4.17/upi/azurestack/05_masters.json[]
4.2.13. 等待 bootstrap 完成并删除 Azure Stack Hub 中的 bootstrap 资源
在 Microsoft Azure Stack Hub 中创建所有所需的基础架构后,请等待您通过安装程序生成的 Ignition 配置文件所置备的机器上完成 bootstrap 过程。
先决条件
- 创建 control plane 机器。
流程
进入包含安装程序的目录并运行以下命令:
$ ./openshift-install wait-for bootstrap-complete --dir <installation_directory> \ 1 --log-level info 2
如果命令退出时没有
FATAL
警告,则您的生产环境 control plane 已被初始化。删除 bootstrap 资源:
$ az network nsg rule delete -g ${RESOURCE_GROUP} --nsg-name ${INFRA_ID}-nsg --name bootstrap_ssh_in $ az vm stop -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap $ az vm deallocate -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap $ az vm delete -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap --yes $ az disk delete -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap_OSDisk --no-wait --yes $ az network nic delete -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap-nic --no-wait $ az storage blob delete --account-key ${ACCOUNT_KEY} --account-name ${CLUSTER_NAME}sa --container-name files --name bootstrap.ign $ az network public-ip delete -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap-ssh-pip
如果没有删除 bootstrap 服务器,因为 API 流量会路由到 bootstrap 服务器,所以安装可能无法成功。
4.2.14. 在 Azure Stack Hub 中创建额外的 worker 机器
您可以通过分散启动各个实例或利用集群外自动化流程(如自动缩放组),在 Microsoft Azure Stack Hub 中为您的集群创建 worker 机器。您还可以利用 OpenShift Container Platform 中的内置集群扩展机制和机器 API。
在本例中,您要使用 Azure Resource Manager(ARM)模板手动启动一个实例。通过在 文件中包括类型为 06_workers.json
的其他资源,即可启动其他实例。
如果不使用提供的 ARM 模板来创建 control plane 机器,您必须检查提供的信息并手动创建基础架构。如果您的集群没有正确初始化,请考虑与安装日志联系红帽支持。
流程
-
复制 worker 机器的 ARM 模板一节中的模板,并将它以
06_workers.json
保存到集群的安装目录中。此模板描述了集群所需的 worker 机器。 导出 worker 机器部署所需的以下变量:
$ export WORKER_IGNITION=`cat <installation_directory>/worker.ign | base64 | tr -d '\n'`
使用
az
CLI 创建部署:$ az deployment group create -g ${RESOURCE_GROUP} \ --template-file "<installation_directory>/06_workers.json" \ --parameters workerIgnition="${WORKER_IGNITION}" \ 1 --parameters baseName="${INFRA_ID}" 2 --parameters diagnosticsStorageAccountName="${CLUSTER_NAME}sa" 3
4.2.14.1. worker 机器的 ARM 模板
您可以使用以下 Azure Resource Manager(ARM)模板来部署 OpenShift Container Platform 集群所需的 worker 机器:
例 4.6. 06_workers.json
ARM template
link:https://raw.githubusercontent.com/openshift/installer/release-4.17/upi/azurestack/06_workers.json[]
4.2.15. 使用 CLI 登录到集群
您可以通过导出集群 kubeconfig
文件,以默认系统用户身份登录集群。kubeconfig
文件包含有关集群的信息,供 CLI 用于将客户端连接到正确的集群和 API 服务器。该文件特定于集群,在 OpenShift Container Platform 安装过程中创建。
先决条件
- 已部署 OpenShift Container Platform 集群。
-
已安装
oc
CLI。
流程
导出
kubeadmin
凭证:$ export KUBECONFIG=<installation_directory>/auth/kubeconfig 1
- 1
- 对于
<installation_directory>
,请指定安装文件保存到的目录的路径。
验证您可以使用导出的配置成功运行
oc
命令:$ oc whoami
输出示例
system:admin
4.2.16. 批准机器的证书签名请求
当您将机器添加到集群时,会为您添加的每台机器生成两个待处理证书签名请求(CSR)。您必须确认这些 CSR 已获得批准,或根据需要自行批准。必须首先批准客户端请求,然后批准服务器请求。
先决条件
- 您已将机器添加到集群中。
流程
确认集群可以识别这些机器:
$ oc get nodes
输出示例
NAME STATUS ROLES AGE VERSION master-0 Ready master 63m v1.30.3 master-1 Ready master 63m v1.30.3 master-2 Ready master 64m v1.30.3
输出中列出了您创建的所有机器。
注意在有些 CSR 被批准前,前面的输出可能不包括计算节点(也称为 worker 节点)。
检查待处理的 CSR,并确保添加到集群中的每台机器都有
Pending
或Approved
状态的客户端请求:$ oc get csr
输出示例
NAME AGE REQUESTOR CONDITION csr-8b2br 15m system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Pending csr-8vnps 15m system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Pending ...
在本例中,两台机器加入集群。您可能会在列表中看到更多已批准的 CSR。
如果 CSR 没有获得批准,在您添加的机器的所有待处理 CSR 都处于
Pending 状态
后,请批准集群机器的 CSR:注意由于 CSR 会自动轮转,因此请在将机器添加到集群后一小时内批准您的 CSR。如果没有在一小时内批准它们,证书将会轮转,每个节点会存在多个证书。您必须批准所有这些证书。批准客户端 CSR 后,Kubelet 为服务证书创建一个二级 CSR,这需要手动批准。然后,如果 Kubelet 请求具有相同参数的新证书,则后续提供证书续订请求由
machine-approver
自动批准。注意对于在未启用机器 API 的平台上运行的集群,如裸机和其他用户置备的基础架构,您必须实施一种方法来自动批准 kubelet 提供证书请求(CSR)。如果没有批准请求,则
oc exec
、ocrsh
和oc logs
命令将无法成功,因为 API 服务器连接到 kubelet 时需要服务证书。与 Kubelet 端点联系的任何操作都需要此证书批准。该方法必须监视新的 CSR,确认 CSR 由 system:node
或system:admin
组中的node-bootstrapper
服务帐户提交,并确认节点的身份。要单独批准,请对每个有效的 CSR 运行以下命令:
$ oc adm certificate approve <csr_name> 1
- 1
<csr_name>
是当前 CSR 列表中 CSR 的名称。
要批准所有待处理的 CSR,请运行以下命令:
$ oc get csr -o go-template='{{range .items}}{{if not .status}}{{.metadata.name}}{{"\n"}}{{end}}{{end}}' | xargs --no-run-if-empty oc adm certificate approve
注意在有些 CSR 被批准前,一些 Operator 可能无法使用。
现在,您的客户端请求已被批准,您必须查看添加到集群中的每台机器的服务器请求:
$ oc get csr
输出示例
NAME AGE REQUESTOR CONDITION csr-bfd72 5m26s system:node:ip-10-0-50-126.us-east-2.compute.internal Pending csr-c57lv 5m26s system:node:ip-10-0-95-157.us-east-2.compute.internal Pending ...
如果剩余的 CSR 没有被批准,且处于
Pending
状态,请批准集群机器的 CSR:要单独批准,请对每个有效的 CSR 运行以下命令:
$ oc adm certificate approve <csr_name> 1
- 1
<csr_name>
是当前 CSR 列表中 CSR 的名称。
要批准所有待处理的 CSR,请运行以下命令:
$ oc get csr -o go-template='{{range .items}}{{if not .status}}{{.metadata.name}}{{"\n"}}{{end}}{{end}}' | xargs oc adm certificate approve
批准所有客户端和服务器 CSR 后,机器将
处于 Ready 状态
。运行以下命令验证:$ oc get nodes
输出示例
NAME STATUS ROLES AGE VERSION master-0 Ready master 73m v1.30.3 master-1 Ready master 73m v1.30.3 master-2 Ready master 74m v1.30.3 worker-0 Ready worker 11m v1.30.3 worker-1 Ready worker 11m v1.30.3
注意批准服务器 CSR 后可能需要几分钟时间让机器过渡到
Ready 状态
。
附加信息
4.2.17. 添加 Ingress DNS 记录
如果在创建 Kubernetes 清单并生成 Ignition 配置时删除了 DNS 区配置,您必须手动创建指向 Ingress 负载均衡器的 DNS 记录。您可以创建一个通配符 *.apps.{baseDomain}.
或特定的记录。您可以根据要求使用 A、CNAME 和其他记录。
先决条件
- 已使用您置备的基础架构在 Microsoft Azure Stack Hub 上部署了 OpenShift Container Platform 集群。
-
安装 OpenShift CLI(
oc
)。 - 安装或更新 Azure CLI。
流程
确认 Ingress 路由器已创建了负载均衡器并填充
EXTERNAL-IP
字段:$ oc -n openshift-ingress get service router-default
输出示例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE router-default LoadBalancer 172.30.20.10 35.130.120.110 80:32288/TCP,443:31215/TCP 20
将 Ingress 路由器 IP 导出为变量:
$ export PUBLIC_IP_ROUTER=`oc -n openshift-ingress get service router-default --no-headers | awk '{print $4}'`
在 DNS 区域中添加
*.apps
记录。如果您要将此集群添加到新的 DNS 区,请运行:
$ az network dns record-set a add-record -g ${BASE_DOMAIN_RESOURCE_GROUP} -z ${CLUSTER_NAME}.${BASE_DOMAIN} -n *.apps -a ${PUBLIC_IP_ROUTER} --ttl 300
如果您要将此集群添加到已存在的 DNS 区中,请运行:
$ az network dns record-set a add-record -g ${BASE_DOMAIN_RESOURCE_GROUP} -z ${BASE_DOMAIN} -n *.apps.${CLUSTER_NAME} -a ${PUBLIC_IP_ROUTER} --ttl 300
如果您更喜欢添加特定域而不是使用通配符,可以为集群的每个当前路由创建条目:
$ oc get --all-namespaces -o jsonpath='{range .items[*]}{range .status.ingress[*]}{.host}{"\n"}{end}{end}' routes
输出示例
oauth-openshift.apps.cluster.basedomain.com console-openshift-console.apps.cluster.basedomain.com downloads-openshift-console.apps.cluster.basedomain.com alertmanager-main-openshift-monitoring.apps.cluster.basedomain.com prometheus-k8s-openshift-monitoring.apps.cluster.basedomain.com
4.2.18. 在用户置备的基础架构上完成 Azure Stack Hub 安装
在 Microsoft Azure Stack Hub 用户置备的基础架构上启动 OpenShift Container Platform 安装后,您可以监控集群事件,直到集群就绪。
先决条件
- 在用户置备的 Azure Stack Hub 基础架构上为 OpenShift Container Platform 集群部署 bootstrap 机器。
-
安装
oc
CLI 并登录。
流程
完成集群安装:
$ ./openshift-install --dir <installation_directory> wait-for install-complete 1
输出示例
INFO Waiting up to 30m0s for the cluster to initialize...
- 1
- 对于
<installation_directory>
,请指定安装文件保存到的目录的路径。
重要-
安装程序生成的 Ignition 配置文件包含 24 小时后过期的证书,然后在该时进行续订。如果在更新证书前关闭集群,且集群在 24 小时后重启,集群会自动恢复过期的证书。一个例外是,您必须手动批准待处理的
node-bootstrapper
证书签名请求(CSR)来恢复 kubelet 证书。如需更多信息,请参阅从过期的 control plane 证书 中恢复的文档。 - 建议您在 Ignition 配置文件生成后的 12 小时内使用它们,因为 24 小时的证书会在集群安装后的 16 小时到 22 小时间进行轮转。通过在 12 小时内使用 Ignition 配置文件,您可以避免在安装过程中因为执行了证书更新而导致安装失败的问题。
其他资源