IBM Cloud Docs
安装Red Hat OpenShift 4.7用户提供商基础架构

安装Red Hat OpenShift 4.7用户提供商基础架构

Red Hat® OpenShift® 4 介绍了以下概念:

  • 安装程序供应的基础架构 (IPI) - 在支持的平台上使用,目前仅限 AWS。 安装程序将为集群供应底层基础架构,并对集群进行配置。
  • 用户供应的基础架构 (UPI) - 在裸机、vSphere 和其他不支持 IPI 的云上使用。 用户需要配置基础设施;Red Hat OpenShift集群托管的计算、网络和存储。 安装程序仅配置集群。

这些说明使用 UPI 模式下的Red Hat OpenShift安装程序。 Terraform 用于为引导程序、控制平面和计算节点供应七个 VM。 完成的过程如下:

  1. 会创建一个 yaml 文件,由Red Hat OpenShift安装程序处理。
  2. 安装程序运行,并创建包括 Ignition 文件在内的多个文件。 Ignition 文件用于在首次启动时配置引导、控制平面和计算节点。
  3. 引导节点的 Ignition 文件会复制到 bastion 节点上的 NGINX 默认目录,以便引导节点在首次启动时获取。
  4. 使用 DNS 服务器更新 Ignition Terraform 文件。
  5. 创建 terraform.tfvars 文件是为了保存 Terraform 安装的变量。
  6. Terraform 运行以供应 VM。 启动和配置虚拟机,并创建Red Hat OpenShift集群。

有关安装 Red Hat OpenShift 用户提供基础架构的详细信息,请参阅 在 vSphere 上使用用户提供基础架构安装群集

创建Red Hat OpenShift安装程序 yaml 文件

使用下表记录部署所需的参数。 所示示例与本文件中描述的部署相匹配。

  • The SSH key can be copied after it is displayed by using the command: cat /root/.ssh/id_rsa.pub.
  • 从 Red Hat® 中收集的提取秘密。 有关详细信息,请参阅 Red Hat OpenShift 基础设施提供商(需要登录您的 Red Hat 账户)。
install-config.yaml的文件参数
参数 示例 您的部署
基本域 dallas.ibm.local
元数据名称 ocp
vCenter Server IP 地址 10.208.17.2
用户名 administrator@vsphere.local
密码 s3cretPassw0rd
vCenterServer 实例数据中心 datacenter1
vCenter Server 实例数据存储 vsanDatastore
拉取私钥
公用 SSH 密钥

使用图中所示的install-config.yaml文件,使用 上表 中的部署详细信息对其进行更新:

  1. 更新基本域名。
  2. 用Red Hat OpenShift集群名称更新元数据名称。
  3. 提供以下vCenterServer 信息:
    • vCenter IP 地址
    • vCenter用户名和密码
    • 数据中心名称
    • 数据存储器名称
  4. 粘贴拉取私钥。
  5. 粘贴 SSH 密钥。
  6. 下图显示 install-config.yaml 文件。 将文件复制到剪贴板。
apiVersion: v1
baseDomain: acmeskb.net
compute:
- hyperthreading: Enabled
  name: worker
  replicas: 0
controlPlane:
  hyperthreading: Enabled
  name: master
  replicas: 3
metadata:
  name: ocp
platform:
  vsphere:
    vcenter: 10.208.17.2
    username: administrator@vsphere.local
    password: 's3cretPassw0rd'
    datacenter: datacenter1
    defaultDatastore: vsanDatastore
pullSecret: 'COPY PULL SECRET HERE'
sshKey: 'COPY PUBLIC SSH KEY HERE'

在使用 root 用户特权通过 SSH 登录到防御主机节点的会话中,使用以下命令创建 install-config.yaml 文件:

cd /opt/ocpinstall
vi install-config.yaml

输入 i 以进入插入方式,然后粘贴文件内容。 按 Esc 键,然后输入 :wq 以保存该文件并退出 vi 编辑器。

Red Hat OpenShift会删除该文件。安装程序会删除该文件,因此要保留副本,请使用以下命令:

cp install-config.yaml install-config.bak

运行 Red Hat OpenShift 点火命令

现在install-config.yaml已创建并填充,运行Red Hat OpenShift安装程序创建点火文件。

cd /opt/ocpinstall/
openshift-install create ignition-configs --dir=/opt/ocpinstall/

Ignition 文件的有效期为 24 小时,您的Red Hat OpenShift部署必须在这段时间内完成。 否则,必须重新生成 Ignition 文件。 有关详细信息,请参阅 疑难解答 Red Hat OpenShift 问题

以下文件由Red Hat OpenShift生成安装程序生成的文件:

.
├── auth
│   ├── kubeadmin-password
│   └── kubeconfig
├── bootstrap.ign
├── master.ign
├── metadata.json
└── worker.ign

将引导程序 Ignition 文件复制到 Web 服务器

bootstrap.ign 文件需要复制到 NGINX 的文档根目录。 引导点火文件必须托管在网络服务器上,这样引导节点才能在首次启动时找到它。 Ignition 文件由于太大而无法装入到 vApp 属性中。

bootstrap.ign 文件复制到 NGINX 的文档根目录。

cp bootstrap.ign /usr/share/nginx/html

Terraform 文件

您必须更新以下 Terraform 文件。

  • ignition.tf- This file needs to be updated so that the DNS entry matches the deployment.
  • terraform.tfvars- This file needs to be created and holds the variables that are used by the main.tf file
  • main.tf- This file needs to be updated to remove the DNS section.

ignition.tf - 更新模板中的 DNS 条目

DNS IP 详细信息在 Terraform 模板中进行硬编码。 必须将此 IP 更改为 vCenter Server 实例 AD DNS 服务器。

ignition.tf的文件参数
参数 示例 您的部署
DNS1 10.187.214.66
  1. 以根用户权限在 SSH 会话中访问堡垒节点,使用以下命令打开文件: vi /opt/ocpinstall/installer/upi/vsphere/machine/ignition.tf
  2. 输入 i 以进入插入方式,然后向下滚动到 DNS1 条目。
  3. 更新原先的 IP 地址 8.8.8.8,以与部署相匹配。
  4. 按 Esc 键,然后输入 :wq 以保存该文件并退出 vi 编辑器。

文件类似于下面的示例:

locals {
  mask = "${element(split("/", var.machine_cidr), 1)}"
  gw   = "${cidrhost(var.machine_cidr,1)}"

  ignition_encoded = "data:text/plain;charset=utf-8;base64,${base64encode(var.ignition)}"
}

data "ignition_file" "hostname" {
  count = "${var.instance_count}"

  filesystem = "root"
  path       = "/etc/hostname"
  mode       = "420"

  content {
    content = "${var.name}-${count.index}"
  }
}

data "ignition_file" "static_ip" {
  count = "${var.instance_count}"

  filesystem = "root"
  path       = "/etc/sysconfig/network-scripts/ifcfg-ens192"
  mode       = "420"

  content {
    content = <<EOF
TYPE=Ethernet
BOOTPROTO=none
NAME=ens192
DEVICE=ens192
ONBOOT=yes
IPADDR=${local.ip_addresses[count.index]}
PREFIX=${local.mask}
GATEWAY=${local.gw}
DOMAIN=${var.cluster_domain}
DNS1=10.187.214.66
EOF
  }
}

data "ignition_systemd_unit" "restart" {
  count = "${var.instance_count}"

  name = "restart.service"

  content = <<EOF
[Unit]
ConditionFirstBoot=yes
[Service]
Type=idle
ExecStart=/sbin/reboot
[Install]
WantedBy=multi-user.target
EOF
}

data "ignition_config" "ign" {
  count = "${var.instance_count}"

  append {
    source = "${var.ignition_url != "" ? var.ignition_url : local.ignition_encoded}"
  }

  systemd = [
    "${data.ignition_systemd_unit.restart.*.id[count.index]}",
  ]

  files = [
    "${data.ignition_file.hostname.*.id[count.index]}",
    "${data.ignition_file.static_ip.*.id[count.index]}",
  ]
}

terraform.tfvars - 编辑 Terraform 输入变量

在 Terraform 中,main.tf 文件采用 terraform.tfvars 中的输入变量。 对于该文件中未描述的变量,将采用 variable.tf 文件中的缺省值。

使用下表来记录部署所需的参数,显示的示例与本文档描述的部署相匹配。

使用以下命令显示文件后,就可以复制点火文件了:

cat /opt/ocpinstall/master.ign

cat /opt/ocpinstall/worker.ign

ignition.tf文件参数
参数 示例 您的部署
bootstrap_ip 192.168.133.9
control_plane_ips 192.168.133.10
192.168.133.11
192.168.133.12
compute_ips 192.168.133.13
192.168.133.14
192.168.133.15
machine_cidr 192.168.133.0/24
cluster_id ocp
cluster_domain ocp.dallas.ibm.local
base_domain dallas.ibm.local
vsphere_server 10.208.17.2
vsphere_user administrator@vsphere.local
vsphere_password s3cretPassw0rd
vsphere_cluster cluster1
vsphere_datacenter datacenter1
vsphere_datastore vsanDatastore
vm_template rhcos-latest
vm_network vxw-dvs-22-virtualwire-24-sid-6011-OpenShift-LS
bootstrap_ignition_url http://192.168.133.08/bootstrap.ign
control_plane_ignition
compute_ignition

使用以下 terraform-tvars 示例文件后,请使用 上一表格 中的部署详细信息更新文件。 将文件复制到剪贴板。

bootstrap_ip = "192.168.133.9"
control_plane_ips = ["192.168.133.10","192.168.133.11","192.168.133.12"]
compute_ips = ["192.168.133.13","192.168.133.14","192.168.133.15"]
machine_cidr = "192.168.133.0/24"
cluster_id = "ocp"
cluster_domain = "ocp.dallas.ibm.local"
base_domain = "dallas.ibm.local"
vsphere_server = "10.208.17.2"
vsphere_user = "administrator@vsphere.local"
vsphere_password = "s3cretPassw0rd"
vsphere_cluster = "cluster1"
vsphere_datacenter = "datacenter1"
vsphere_datastore = "vsanDatastore"
vm_template = "rhcos-latest"
vm_network = "vxw-dvs-22-virtualwire-24-sid-6011-OpenShift-LS"

bootstrap_ignition_url = "http://192.168.133.51/bootstrap.ign"

control_plane_ignition = <<END_OF_MASTER_IGNITION
COPY IN CONTENTS OF MASTER.IGN HERE
END_OF_MASTER_IGNITION

compute_ignition = <<END_OF_WORKER_IGNITION
COPY IN CONTENTS OF WORKER.IGN HERE
END_OF_WORKER_IGNITION

文件 terraform.tfvars 已创建。

  1. 以根用户权限在 SSH 会话中访问堡垒节点,使用以下命令打开文件;vi /opt/ocpinstall/installer/upi/vsphere/terraform.tfvars.
  2. 输入 i 以进入插入方式,然后粘贴文件内容。
  3. 按 Esc 键,然后输入 :wq 以保存该文件并退出 vi 编辑器。

main.tf - 除去 DNS 部分

除去 DNS 模块部分,因为该文件应该使用 AWS 路由 53 代替 DNS。 main.tf 文件已更新。

  1. 以根用户权限在 SSH 会话中访问堡垒节点,使用以下命令打开文件: vi /opt/ocpinstall/installer/upi/vsphere/main.tf
  2. 输入 i 以进入插入方式。
  3. 向下滚动文件,直至到达 DNS 模块部分。
  4. 删除文件 3:待删除部分中的整个部分。
  5. 按 Esc 键,然后输入 :wq 以保存该文件并退出 vi 编辑器。
module "dns" {
  source = "./route53"

  base_domain         = "${var.base_domain}"
  cluster_domain      = "${var.cluster_domain}"
  bootstrap_count     = "${var.bootstrap_complete ? 0 : 1}"
  bootstrap_ips       = ["${module.bootstrap.ip_addresses}"]
  control_plane_count = "${var.control_plane_count}"
  control_plane_ips   = ["${module.control_plane.ip_addresses}"]
  compute_count       = "${var.compute_count}"
  compute_ips         = ["${module.compute.ip_addresses}"]
}

运行 Terraform

Terraform 用于为引导、控制面节点和计算节点部署虚拟机。 Terraform 的运行方式如下:

  • terraform init- initializes the Terraform plug-ins and modules.
  • terraform plan- completes a dry run on the templates, ensuring it can connect to the vCenter.
  • terraform apply- runs the templates. 可以添加 auto-approve 开关,这样就无需确认每个部署。

Terraform 配置虚拟机后,Red Hat OpenShift集群会自行启动。

  1. 引导节点启动并开始托管控制平面启动所需的远程资源。
  2. 控制平面节点从引导节点获取远程资源并完成启动。
  3. 控制平面节点使用引导节点组建etcd集群。
  4. 引导程序节点使用新的 etcd 集群启动临时 Kubernetes 控制平面。
  5. 临时控制平面将生产控制平面调度到控制平面节点。
  6. 临时控制平面关闭,并将控制传递给生产控制平面。
  7. 引导节点会将Red Hat OpenShift容器平台组件注入生产控制平面。
  8. 控制平面设置计算节点。
  9. 控制平面以一组操作员的形式安装更多服务。
  10. 引导过程的结果是一个完全运行的Red Hat OpenShift集群。 然后,集群会下载并配置日常操作所需的剩余组件。

在连接堡垒节点的 SSH 会话中,以根用户权限运行以下命令,确保每条命令都无差错完成后再输入下一条命令。

cd /opt/ocpinstall/installer/upi/vsphere/
terraform init
terraform plan
terraform apply -auto-approve

部署后

  1. 虚拟机启动后,运行以下命令监控安装过程:

    cd /opt/ocpinstall
    openshift-install --dir=. wait-for bootstrap-complete --log-level debug
    
  2. 请等待显示以下信息:

    INFO It is now safe to remove the bootstrap resources
    
  3. 在 UPI 方式下,集群映像注册表不会选择存储后端。 因此,群集操作员需要不断等待管理员配置存储后端。 变通方法是将映像注册表指向空目录,以允许通过运行以下命令完成安装:

    mkdir /root/.kube/
    cp /opt/ocpinstall/auth/kubeconfig ~/.kube/config
    oc patch configs.imageregistry.operator.openshift.io cluster --type merge --patch '{"spec":{"storage":{"emptyDir":{}}}}'
    

    安装完成后,将映像注册表更改为合适的位置。

  4. 运行以下命令来监视安装:

    openshift-install --dir=. wait-for install-complete
    
  5. 请等待显示以下消息。 安装完成后,系统会提供登录Red Hat OpenShift控制台的 URL 和凭据。控制台。 您的 URL 和密码不同:

    INFO Install complete!
    INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/root/go/src/github.com/openshift/installer/bin/auth/kubeconfig'
    INFO Access the OpenShift web-console here: https://console-openshift-console.opc.dallas.ibm.local
    INFO Login to the console with user: kubeadmin, password: my-kube-password
    

    安装时创建的用户密码也可以在 install-dir 的 auth 子目录中找到。 您可以通过 oc 登录并访问网络控制台。 控制台的 URL 为 https://console-openshift-console.<cluster>.<base_domain>

  6. /opt/ocpinstall 目录下运行以下命令:

    watch -n5 oc get clusteroperators
    
  7. 监视集群是否完成。 输出结果见下例。 将 4.x.5 替换为当前的 Red Hat OpenShift 版本,例如 4.7.5。

    Every 5.0s: oc get clusteroperators
    
    NAME                                 VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE
    authentication                       4.x.5    True        False         False      20m
    cloud-credential                     4.x.5    True        False         False      38m
    cluster-autoscaler                   4.x.5    True        False         False      38m
    console                              4.x.5    True        False         False      27m
    dns                                  4.x.5    True        False         False      35m
    image-registry                       4.x.5    True        False         False      14m
    ingress                              4.x.5    True        False         False      30m
    kube-apiserver                       4.x.5    True        False         False      33m
    kube-controller-manager              4.x.5    True        False         False      33m
    kube-scheduler                       4.x.5    True        False         False      32m
    machine-api                          4.x.5    True        False         False      38m
    machine-config                       4.x.5    True        False         False      33m
    marketplace                          4.x.5    True        False         False      30m
    monitoring                           4.x.5    True        False         False      28m
    network                              4.x.5    True        False         False      37m
    node-tuning                          4.x.5    True        False         False      32m
    openshift-apiserver                  4.x.5    True        False         False      31m
    openshift-controller-manager         4.x.5    True        False         False      33m
    openshift-samples                    4.x.5    True        False         False      24m
    operator-lifecycle-manager           4.x.5    True        False         False      35m
    operator-lifecycle-manager-catalog   4.x.5    True        False         False      35m
    service-ca                           4.x.5    True        False         False      38m
    service-catalog-apiserver            4.x.5    True        False         False      32m
    service-catalog-controller-manager   4.x.5    True        False         False      32m
    storage                              4.x.5    True        False         False      30m