安装Red Hat OpenShift 4.7用户提供商基础架构
Red Hat® OpenShift® 4 介绍了以下概念:
- 安装程序供应的基础架构 (IPI) - 在支持的平台上使用,目前仅限 AWS。 安装程序将为集群供应底层基础架构,并对集群进行配置。
- 用户供应的基础架构 (UPI) - 在裸机、vSphere 和其他不支持 IPI 的云上使用。 用户需要配置基础设施;Red Hat OpenShift集群托管的计算、网络和存储。 安装程序仅配置集群。
这些说明使用 UPI 模式下的Red Hat OpenShift安装程序。 Terraform 用于为引导程序、控制平面和计算节点供应七个 VM。 完成的过程如下:
- 会创建一个
yaml
文件,由Red Hat OpenShift安装程序处理。 - 安装程序运行,并创建包括 Ignition 文件在内的多个文件。 Ignition 文件用于在首次启动时配置引导、控制平面和计算节点。
- 引导节点的 Ignition 文件会复制到 bastion 节点上的 NGINX 默认目录,以便引导节点在首次启动时获取。
- 使用 DNS 服务器更新 Ignition Terraform 文件。
- 创建
terraform.tfvars
文件是为了保存 Terraform 安装的变量。 - 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 账户)。
参数 | 示例 | 您的部署 |
---|---|---|
基本域 | dallas.ibm.local |
|
元数据名称 | ocp |
|
vCenter Server IP 地址 | 10.208.17.2 | |
用户名 | administrator@vsphere.local |
|
密码 | s3cretPassw0rd |
|
vCenterServer 实例数据中心 | datacenter1 |
|
vCenter Server 实例数据存储 | vsanDatastore |
|
拉取私钥 | ||
公用 SSH 密钥 |
使用图中所示的install-config.yaml文件,使用 上表 中的部署详细信息对其进行更新:
- 更新基本域名。
- 用Red Hat OpenShift集群名称更新元数据名称。
- 提供以下vCenterServer 信息:
- vCenter IP 地址
- vCenter用户名和密码
- 数据中心名称
- 数据存储器名称
- 粘贴拉取私钥。
- 粘贴 SSH 密钥。
- 下图显示 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 filemain.tf
- This file needs to be updated to remove the DNS section.
ignition.tf - 更新模板中的 DNS 条目
DNS IP 详细信息在 Terraform 模板中进行硬编码。 必须将此 IP 更改为 vCenter Server 实例 AD DNS 服务器。
参数 | 示例 | 您的部署 |
---|---|---|
DNS1 | 10.187.214.66 |
- 以根用户权限在 SSH 会话中访问堡垒节点,使用以下命令打开文件:
vi /opt/ocpinstall/installer/upi/vsphere/machine/ignition.tf
- 输入
i
以进入插入方式,然后向下滚动到 DNS1 条目。 - 更新原先的 IP 地址 8.8.8.8,以与部署相匹配。
- 按 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
参数 | 示例 | 您的部署 |
---|---|---|
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
已创建。
- 以根用户权限在 SSH 会话中访问堡垒节点,使用以下命令打开文件;
vi /opt/ocpinstall/installer/upi/vsphere/terraform.tfvars
. - 输入
i
以进入插入方式,然后粘贴文件内容。 - 按 Esc 键,然后输入
:wq
以保存该文件并退出 vi 编辑器。
main.tf - 除去 DNS 部分
除去 DNS 模块部分,因为该文件应该使用 AWS 路由 53 代替 DNS。 main.tf 文件已更新。
- 以根用户权限在 SSH 会话中访问堡垒节点,使用以下命令打开文件:
vi /opt/ocpinstall/installer/upi/vsphere/main.tf
- 输入
i
以进入插入方式。 - 向下滚动文件,直至到达 DNS 模块部分。
- 删除文件 3:待删除部分中的整个部分。
- 按 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集群会自行启动。
- 引导节点启动并开始托管控制平面启动所需的远程资源。
- 控制平面节点从引导节点获取远程资源并完成启动。
- 控制平面节点使用引导节点组建etcd集群。
- 引导程序节点使用新的 etcd 集群启动临时 Kubernetes 控制平面。
- 临时控制平面将生产控制平面调度到控制平面节点。
- 临时控制平面关闭,并将控制传递给生产控制平面。
- 引导节点会将Red Hat OpenShift容器平台组件注入生产控制平面。
- 控制平面设置计算节点。
- 控制平面以一组操作员的形式安装更多服务。
- 引导过程的结果是一个完全运行的Red Hat OpenShift集群。 然后,集群会下载并配置日常操作所需的剩余组件。
在连接堡垒节点的 SSH 会话中,以根用户权限运行以下命令,确保每条命令都无差错完成后再输入下一条命令。
cd /opt/ocpinstall/installer/upi/vsphere/
terraform init
terraform plan
terraform apply -auto-approve
部署后
-
虚拟机启动后,运行以下命令监控安装过程:
cd /opt/ocpinstall openshift-install --dir=. wait-for bootstrap-complete --log-level debug
-
请等待显示以下信息:
INFO It is now safe to remove the bootstrap resources
-
在 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":{}}}}'
安装完成后,将映像注册表更改为合适的位置。
-
运行以下命令来监视安装:
openshift-install --dir=. wait-for install-complete
-
请等待显示以下消息。 安装完成后,系统会提供登录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>
。 -
在
/opt/ocpinstall
目录下运行以下命令:watch -n5 oc get clusteroperators
-
监视集群是否完成。 输出结果见下例。 将 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