This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.1.8.17. 在 GCP 中创建额外的 worker 机器
您可以通过分散启动各个实例或利用集群外自动化流程(如自动缩放组),在 Google Cloud Platform (GCP) 中为您的集群创建 worker 机器。您还可以利用 OpenShift Container Platform 中的内置集群扩展机制和机器 API。
在本例中,您要使用 Deployment Manager 模板来手动启动一个实例。通过在文件中添加类型为 06_worker.py
的其他资源,即可启动其他实例。
如果不使用提供的 Deployment Manager 模板来创建 worker 机器,您必须检查提供的信息并手动创建基础架构。如果集群没有正确初始化,您可能需要联系红帽支持并提供您的安装日志。
先决条件
- 配置 GCP 帐户。
- 为集群生成 Ignition 配置文件。
- 在 GCP 中创建和配置 VPC 及相关子网。
- 在 GCP 中创建和配置联网及负载均衡器。
- 创建 control plane 和计算角色。
- 创建 bootstrap 机器。
- 创建 control plane 机器。
流程
-
复制本主题的 worker 机器的 Deployment Manager 模板部分中的模板,并将它以
06_worker.py
形式保存到计算机中。此模板描述了集群所需的 worker 机器。 导出资源定义使用的变量。
导出托管计算机器的子网:
export COMPUTE_SUBNET=(`gcloud compute networks subnets describe ${INFRA_ID}-worker-subnet --region=${REGION} --format json | jq -r .selfLink`)
$ export COMPUTE_SUBNET=(`gcloud compute networks subnets describe ${INFRA_ID}-worker-subnet --region=${REGION} --format json | jq -r .selfLink`)
Copy to Clipboard Copied! 为您的服务帐户导出电子邮件地址:
export WORKER_SERVICE_ACCOUNT=(`gcloud iam service-accounts list --filter "email~^${INFRA_ID}-w@${PROJECT_NAME}." --format json | jq -r '.[0].email'`)
$ export WORKER_SERVICE_ACCOUNT=(`gcloud iam service-accounts list --filter "email~^${INFRA_ID}-w@${PROJECT_NAME}." --format json | jq -r '.[0].email'`)
Copy to Clipboard Copied! 导出计算机器 Ignition 配置文件的位置:
export WORKER_IGNITION=`cat <installation_directory>/worker.ign`
$ export WORKER_IGNITION=`cat <installation_directory>/worker.ign`
Copy to Clipboard Copied!
创建
06_worker.yaml
资源定义文件:cat <<EOF >06_worker.yaml imports: - path: 06_worker.py resources: - name: 'worker-0' type: 06_worker.py properties: infra_id: '${INFRA_ID}' zone: '${ZONE_0}' compute_subnet: '${COMPUTE_SUBNET}' image: '${CLUSTER_IMAGE}' machine_type: 'n1-standard-4' root_volume_size: '128' service_account_email: '${WORKER_SERVICE_ACCOUNT}' ignition: '${WORKER_IGNITION}' - name: 'worker-1' type: 06_worker.py properties: infra_id: '${INFRA_ID}' zone: '${ZONE_1}' compute_subnet: '${COMPUTE_SUBNET}' image: '${CLUSTER_IMAGE}' machine_type: 'n1-standard-4' root_volume_size: '128' service_account_email: '${WORKER_SERVICE_ACCOUNT}' ignition: '${WORKER_IGNITION}' EOF
$ cat <<EOF >06_worker.yaml imports: - path: 06_worker.py resources: - name: 'worker-0'
1 type: 06_worker.py properties: infra_id: '${INFRA_ID}'
2 zone: '${ZONE_0}'
3 compute_subnet: '${COMPUTE_SUBNET}'
4 image: '${CLUSTER_IMAGE}'
5 machine_type: 'n1-standard-4'
6 root_volume_size: '128' service_account_email: '${WORKER_SERVICE_ACCOUNT}'
7 ignition: '${WORKER_IGNITION}'
8 - name: 'worker-1' type: 06_worker.py properties: infra_id: '${INFRA_ID}'
9 zone: '${ZONE_1}'
10 compute_subnet: '${COMPUTE_SUBNET}'
11 image: '${CLUSTER_IMAGE}'
12 machine_type: 'n1-standard-4'
13 root_volume_size: '128' service_account_email: '${WORKER_SERVICE_ACCOUNT}'
14 ignition: '${WORKER_IGNITION}'
15 EOF
Copy to Clipboard Copied! - 1
name
是 worker 机器的名称,如worker-0
。- 2 9
infra_id
是来自于提取步骤的INFRA_ID
基础架构名称。- 3 10
zone
是 worker 机器要部署到的区域,如us-central1-a
。- 4 11
compute_subnet
是计算子网的selfLink
。- 5 12
image
是 RHCOS 镜像的selfLink
URL。- 6 13
machine_type
是实例的机器类型,如n1-standard-4
。- 7 14
service_account_email
是创建的 worker 服务帐户的电子邮件地址。- 8 15
ignition
是worker.ign
文件的内容。
-
可选:如果要启动更多实例,请在
06_worker.yaml
资源定义文件中包含类型为06_worker.py
的其他资源。 使用
gcloud
CLI 创建部署:gcloud deployment-manager deployments create ${INFRA_ID}-worker --config 06_worker.yaml
$ gcloud deployment-manager deployments create ${INFRA_ID}-worker --config 06_worker.yaml
Copy to Clipboard Copied!
1.8.17.1. worker 机器的 Deloyment Manager 模板
您可以使用以下 Deployment Manager 模板来部署 OpenShift Container Platform 集群所需的 worker 机器:
例 1.9. 06_worker.py
Deployment Manager 模板
def GenerateConfig(context): resources = [{ 'name': context.properties['infra_id'] + '-' + context.env['name'], 'type': 'compute.v1.instance', 'properties': { 'disks': [{ 'autoDelete': True, 'boot': True, 'initializeParams': { 'diskSizeGb': context.properties['root_volume_size'], 'sourceImage': context.properties['image'] } }], 'machineType': 'zones/' + context.properties['zone'] + '/machineTypes/' + context.properties['machine_type'], 'metadata': { 'items': [{ 'key': 'user-data', 'value': context.properties['ignition'] }] }, 'networkInterfaces': [{ 'subnetwork': context.properties['compute_subnet'] }], 'serviceAccounts': [{ 'email': context.properties['service_account_email'], 'scopes': ['https://www.googleapis.com/auth/cloud-platform'] }], 'tags': { 'items': [ context.properties['infra_id'] + '-worker', ] }, 'zone': context.properties['zone'] } }] return {'resources': resources}
def GenerateConfig(context):
resources = [{
'name': context.properties['infra_id'] + '-' + context.env['name'],
'type': 'compute.v1.instance',
'properties': {
'disks': [{
'autoDelete': True,
'boot': True,
'initializeParams': {
'diskSizeGb': context.properties['root_volume_size'],
'sourceImage': context.properties['image']
}
}],
'machineType': 'zones/' + context.properties['zone'] + '/machineTypes/' + context.properties['machine_type'],
'metadata': {
'items': [{
'key': 'user-data',
'value': context.properties['ignition']
}]
},
'networkInterfaces': [{
'subnetwork': context.properties['compute_subnet']
}],
'serviceAccounts': [{
'email': context.properties['service_account_email'],
'scopes': ['https://www.googleapis.com/auth/cloud-platform']
}],
'tags': {
'items': [
context.properties['infra_id'] + '-worker',
]
},
'zone': context.properties['zone']
}
}]
return {'resources': resources}