在虚拟私有云 (VPC) 中设置第一个集群
虚拟私有云
在虚拟专用云(VPC)中创建 Red Hat® OpenShift® on IBM Cloud® 集群。
- Red Hat OpenShift on IBM Cloud 为您提供了集群基础架构环境的所有 受管产品的优点,同时将在 Red Hat Enterprise Linux 上运行的 Red Hat OpenShift 工具和目录 用于应用程序部署。
- VPC 提供了私有云环境的安全性以及公共云的动态可伸缩性。 VPC 使用的是下一个版本的 Red Hat OpenShift on IBM Cloud 基础架构提供者,包含一组精选的 v2 API、CLI 和控制台功能。
受众
本教程适用于首次在 Red Hat OpenShift on IBM Cloud 的 VPC 计算中创建群集的管理员。
目标
在教程课程中,您将在虚拟私有云(VPC)中创建 Red Hat OpenShift on IBM Cloud 集群。 然后,访问内置 Red Hat OpenShift 组件,在 Red Hat OpenShift 项目中部署应用程序,并使用 VPC 负载均衡器公开该应用程序,以便外部用户可以访问该服务。
你会得到什么
在本教程中,您将创建以下资源。 如果您不想在完成教程后保留这些资源,那么可以选择执行一些步骤来删除这些资源。
- VPC 集群
- 部署到集群的简单 Hello World 应用程序
- 用于公开应用程序的 VPC 负载均衡器
先决条件
完成以下先决条件步骤以设置许可权和命令行环境。
许可权: 如果您是帐户所有者,那么您已具有创建集群所需的许可权,并且可以继续执行下一步。 否则,请求帐户所有者 设置 API 密钥,并在 IBM Cloud IAM 中为您分配最低用户许可权。
命令行工具: 要从命令行快速访问资源,请尝试 IBM Cloud Shell。 否则,请通过完成以下步骤来设置本地命令行环境。
- 安装 IBM Cloud CLI (
ibmcloud
)、Kubernetes Service 插件 (ibmcloud oc
) 和 IBM Cloud Container Registry 插件 (ibmcloud cr
)。 - 安装 Red Hat OpenShift(
oc
)和 Kubernetes(kubectl
)CLI。 - 要使用 VPC,请安装
infrastructure-service
插件。 用于运行命令的前缀是ibmcloud is
。ibmcloud plugin install infrastructure-service
- 将 Kubernetes Service 插件更新到最新版本。
ibmcloud plugin update kubernetes-service
在 VPC 中创建集群
创建 IBM Cloud Virtual Private Cloud (VPC) 环境。 然后,在 VPC 基础结构上创建 Red Hat OpenShift on IBM Cloud 集群。 有关 VPC 的更多信息,请参阅 Virtual Private Cloud 入门。
-
登录到要在其中创建 VPC 环境的帐户,资源组和 IBM Cloud 区域。 VPC 必须设置在要创建群集的同一多区都会区中。 在本教程中,将在
us-south
创建 VPC。 有关其他支持的区域,请参阅适用于 VPC 集群的多专区大城市。 如果有联合 ID,请加入--sso
选项。ibmcloud login -r us-south [-g <resource_group>] [--sso]
-
为集群创建 VPC。 有关更多信息,请参阅有关在控制台或 CLI 中创建 VPC 的文档。
- 创建名为
myvpc
的 VPC,并注意输出中的 ID。 VPC 会为要在公共云中运行的工作负载提供隔离的环境。 可以将同一 VPC 用于多个集群,例如如果计划使不同的集群托管需要相互通信的不同微服务。 如果要分隔集群(例如,针对不同部门的集群),那么可以为每个集群创建一个 VPC。ibmcloud is vpc-create myvpc
- 创建公共网关并在输出中记录 标识。 在下一步中,将公共网关连接到 VPC 子网,以便工作程序节点可以在公用网络上进行通信。 默认Red Hat OpenShift组件,如网络控制台和OperatorHub,需要公共网络访问。 如果跳过此步骤,那么必须改为连接到 VPC 专用网络 (例如,通过 VPN 连接) 以访问 Red Hat OpenShift Web 控制台或使用
kubectl
命令访问集群。ibmcloud is public-gateway-create gateway-us-south-1 <vpc_ID> us-south-1
- 为 VPC 创建子网,并记下其 ID。 创建 VPC 子网时,请考虑以下信息:
-
专区:集群中每个专区必须有一个 VPC 子网。 可用区域取决于您创建 VPC 的区域。 要列出区域内可用的区段,请运行
ibmcloud is zones
。 -
IP 地址:VPC 子网为集群中的工作节点和负载平衡器服务提供私有 IP 地址,因此请确保 创建的子网有足够的 IP 地址,如 256 个。 以后不能更改 VPC 子网的 IP 地址数。
-
公共网关: 包括先前创建的公共网关。 群集中的每个区都必须有一个公共网关。
ibmcloud is subnet-create mysubnet1 <vpc_ID> --zone us-south-1 --ipv4-address-count 256 --pgw <gateway_ID>
-
如果您有多个区域,请为每个区域重复这些步骤。
- 创建名为
-
创建标准 IBM Cloud Object Storage 实例以备份集群中的内部注册表。 在输出中,请注意实例 ID。
ibmcloud resource service-instance-create myvpc-cos cloud-object-storage standard global
-
在子网所在的专区的 VPC 中创建集群。 以下命令在达拉斯创建一个版本 4.17 集群,该集群的最低配置为2个工作节点,每个节点至少具有4个内核和16 GB内存,以便部署默认的 Red Hat OpenShift 组件。 有关命令选项的更多信息,请参阅
cluster create vpc-gen2
CLI 参考文档。ibmcloud oc cluster create vpc-gen2 --name myvpc-cluster --zone us-south-1 --version 4.17_openshift --flavor bx2.4x16 --workers 2 [--operating-system REDHAT_8_64] --vpc-id <vpc_ID> --subnet-id <vpc_subnet_ID> --cos-instance <cos_crn> --disable-outbound-traffic-protection
-
列出集群详细信息。 查看集群 State,检查 Ingress Subdomain,并记下 Master URL。 创建集群可能需要一些时间才能完成。 群集状态显示 “正常” 后,群集网络和 Ingress 组件需要大约 10 分钟来部署和更新群集域,该域将用于 Red Hat OpenShift 网络控制台和其他路由。 继续之前,请通过检查 Ingress 子域 是否遵循
<cluster_name>.<globally_unique_account_HASH>-0001.<region>.containers.appdomain.cloud
模式来等待集群就绪。ibmcloud oc cluster get --cluster myvpc-cluster
-
通过设置集群上下文,将自己作为用户添加到 Red Hat OpenShift 集群。
ibmcloud oc cluster config --cluster myvpc-cluster --admin
-
在浏览器中,导航至 Master URL 的地址并附加
/console
。 例如,https://c0.containers.cloud.ibm.com:23652/console
。 如果时间允许,您可以探索 Red Hat OpenShift 网络控制台的各个区域。 -
从 Red Hat OpenShift 网络控制台菜单栏,单击您的配置文件 IAM#user.name@email.com > 复制登录命令。 显示
oc login
令牌命令并将其复制到命令行以通过 CLI 进行认证。保存群集主服务器 URL,以便以后访问 Red Hat OpenShift 控制台。 在未来的会话中,可以跳过
cluster config
步骤,而改为通过控制台复制登录命令。 -
通过检查版本,验证
oc
命令是否针对您的集群正常运行。oc version
示例输出
Client Version: v4.17.0 Kubernetes Version: v1.32.5.2
如果无法执行需要管理员权限的操作(如列出群集中的所有工作节点或 pod),请运行
ibmcloud oc cluster config --cluster myvpc-cluster --admin
命令为群集管理员下载 TLS 证书和权限文件。
将应用程序部署到群集
快速部署仅可用于来自集群内的请求的新样本应用程序。
-
为 Hello World 应用程序创建 Red Hat OpenShift 项目。
oc new-project hello-world
-
从源代码中构建示例应用程序。 使用 Red Hat OpenShift
new-app
命令,你可以引用远程资源库中包含 Dockerfile 和应用程序代码的目录来构建镜像。 此命令将构建映像,将映像存储在本地 Docker 注册表中,并创建应用程序部署配置 (dc
) 和服务 (svc
)。有关创建新应用程序的更多信息,请参阅 Red Hat OpenShift 文档。oc new-app --name hello-world https://github.com/IBM/container-service-getting-started-wt --context-dir="Lab 1"
-
验证是否已创建样本 Hello World 应用程序组件。
- 列出 hello-world 服务并记下服务名称。 到目前为止,应用程序仅侦听这些内部集群 IP 地址上的流量。 在下一课中,您将为服务创建负载均衡器,以便负载均衡器可以将外部流量请求转发到应用程序。
示例输出oc get svc -n hello-world
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-world ClusterIP 172.21.xxx.xxx <none> 8080/TCP 31m
- 列出 pod。 名称中带有
build
的 pod 是在新应用程序构建过程中已完成的作业。 确保 hello-world pod 的状态为 Running。
示例输出oc get pods -n hello-world
NAME READY STATUS RESTARTS AGE hello-world-1-9cv7d 1/1 Running 0 30m hello-world-1-build 0/1 Completed 0 31m hello-world-1-deploy 0/1 Completed 0 31m
- 列出 hello-world 服务并记下服务名称。 到目前为止,应用程序仅侦听这些内部集群 IP 地址上的流量。 在下一课中,您将为服务创建负载均衡器,以便负载均衡器可以将外部流量请求转发到应用程序。
设置 VPC 负载均衡器以公开应用程序
设置一个 VPC 负载均衡器,让您的应用程序在公共网络上接受外部请求。
在群集中创建 Kubernetes LoadBalancer
服务时,会在群集之外的 VPC 中自动创建一个 VPC 负载平衡器。 VPC 负载均衡器是多专区负载均衡器,通过在工作程序节点上自动打开的专用 NodePort 来路由应用程序的请求。 下图说明了用户如何通过 VPC 负载均衡器访问应用程序的服务,即使您的工作节点只连接到私有子网。
-
在集群中创建 Kubernetes
LoadBalancer
服务以公共方式公开 Hello World 应用程序。oc expose deployment/hello-world --type=LoadBalancer --name=hw-lb-svc --port=8080 --target-port=8080 -n hello-world
示例输出
service "hw-lb-svc" exposed
关于 expose 参数的更多信息 参数 描述 expose
将 Kubernetes 资源(如部署)作为服务公开,以便用户使用 VPC 负载平衡器主机名访问资源。 dc/<hello-world-deployment>
要使用此服务公开的资源的资源类型和名称。 --name=<hello-world-service>
服务的名称。 --type=LoadBalancer
要创建的服务类型。 在本课中,将创建 LoadBalancer
服务。--port=<8080>
服务用于侦听外部网络流量的端口。 --target-port=<8080>
应用程序侦听且服务将入局网络流量定向到的端口。 在此示例中, target-port
与port
相同,但您创建的其他应用程序可能使用的是不同端口。-n <hello-world>
部署所处的命名空间。 -
验证 Kubernetes
LoadBalancer
服务是否已在集群中成功创建。 创建 KubernetesLoadBalancer
服务时,将自动为您创建 VPC 负载均衡器。 VPC 负载均衡器将主机名分配给 KubernetesLoadBalancer
服务,您可以在 CLI 输出的 LoadBalancer Ingress 字段中看到该服务。 在 VPC 中,会为集群中的服务分配主机名,因为服务的外部 IP 地址不稳定。 VPC 负载均衡器需要几分钟时间才能在 VPC 中进行供应。 在 VPC 负载平衡器准备就绪之前,您无法通过 KubernetesLoadBalancer
服务的主机名访问该服务。oc describe service hw-lb-svc -n hello-world
CLI 输出示例:
NAME: hw-lb-svc Namespace: default Labels: app=hello-world-deployment Annotations: <none> Selector: app=hello-world-deployment Type: LoadBalancer IP: 172.21.xxx.xxx LoadBalancer Ingress: 1234abcd-us-south.lb.appdomain.cloud Port: <unset> 8080/TCP TargetPort: 8080/TCP NodePort: <unset> 32040/TCP Endpoints: Session Affinity: None External Traffic Policy: Cluster Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal EnsuringLoadBalancer 1m service-controller Ensuring load balancer Normal EnsuredLoadBalancer 1m service-controller Ensured load balancer
-
验证 VPC 负载均衡器是否已在 VPC 中成功创建。 在输出中,验证 VPC 负载均衡器的 供应状态 为
active
,操作状态 为online
。VPC 负载平衡器的命名格式为
kube-<cluster_ID>-<kubernetes_lb_service_UID>
。 要查看群集 ID,请运行ibmcloud oc cluster get --cluster <cluster_name>
。 要查看 KubernetesLoadBalancer
服务 UID,请运行kubectl get svc hw-lb-svc -o yaml
,并在输出中查找 metadata.uid 字段。ibmcloud is load-balancers
在以下 CLI 输出示例中,为 Kubernetes
LoadBalancer
服务创建了名为kube-bsaucubd07dhl66e4tgg-1f4f408ce6d2485499bcbdec0fa2d306
的 VPC 负载平衡器:ID Name Family Subnets Is public Provision status Operating status Resource group r006-d044af9b-92bf-4047-8f77-a7b86efcb923 kube-bsaucubd07dhl66e4tgg-1f4f408ce6d2485499bcbdec0fa2d306 Application mysubnet-us-south-3 true active online default
-
通过对您在步骤 2 中找到的 VPC 负载均衡器分配的 Kubernetes
LoadBalancer
服务的主机名和端口进行整理,向应用程序发送请求。 示例:curl 1234abcd-us-south.lb.appdomain.cloud:8080
示例输出
Hello world from hello-world-deployment-5fd7787c79-sl9hn! Your app is up and running in a cluster!
-
可选:要清理本课创建的资源,可以使用分配给每个应用程序的标签。
- 列出
hello-world
项目中每个应用程序的所有资源。
示例输出oc get all -l app=hello-world -o name -n hello-world
pod/hello-world-1-dh2ff replicationcontroller/hello-world-1 service/hello-world deploymentconfig.apps.openshift.io/hello-world buildconfig.build.openshift.io/hello-world build.build.openshift.io/hello-world-1 imagestream.image.openshift.io/hello-world imagestream.image.openshift.io/node
- 删除创建的所有资源。
oc delete all -l app=hello-world -n hello-world
- 列出
后续步骤?
既然您已有了 VPC 集群,请了解有关您可以执行的操作的更多信息。
需要帮助、有疑问或要提供有关 VPC 集群的反馈吗? 尝试在 Slack 通道中发布。