IBM Cloud Docs
在虚拟私有云 (VPC) 中设置第一个集群

在虚拟私有云 (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。 否则,请通过完成以下步骤来设置本地命令行环境。

  1. 安装 IBM Cloud CLI (ibmcloud)、Kubernetes Service 插件 (ibmcloud oc) 和 IBM Cloud Container Registry 插件 (ibmcloud cr)
  2. 安装 Red Hat OpenShift(oc)和 Kubernetes(kubectl)CLI
  3. 要使用 VPC,请安装 infrastructure-service 插件。 用于运行命令的前缀是 ibmcloud is
    ibmcloud plugin install infrastructure-service
    
  4. 将 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 入门

  1. 登录到要在其中创建 VPC 环境的帐户,资源组和 IBM Cloud 区域。 VPC 必须设置在要创建群集的同一多区都会区中。 在本教程中,将在 us-south 创建 VPC。 有关其他支持的区域,请参阅适用于 VPC 集群的多专区大城市。 如果有联合 ID,请加入 --sso 选项。

    ibmcloud login -r us-south [-g <resource_group>] [--sso]
    
  2. 为集群创建 VPC。 有关更多信息,请参阅有关在控制台CLI 中创建 VPC 的文档。

    1. 创建名为 myvpc 的 VPC,并注意输出中的 ID。 VPC 会为要在公共云中运行的工作负载提供隔离的环境。 可以将同一 VPC 用于多个集群,例如如果计划使不同的集群托管需要相互通信的不同微服务。 如果要分隔集群(例如,针对不同部门的集群),那么可以为每个集群创建一个 VPC。
      ibmcloud is vpc-create myvpc
      
    2. 创建公共网关并在输出中记录 标识。 在下一步中,将公共网关连接到 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
      
    3. 为 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>
        

    如果您有多个区域,请为每个区域重复这些步骤。

  3. 创建标准 IBM Cloud Object Storage 实例以备份集群中的内部注册表。 在输出中,请注意实例 ID

    ibmcloud resource service-instance-create myvpc-cos cloud-object-storage standard global
    
  4. 在子网所在的专区的 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
    
  5. 列出集群详细信息。 查看集群 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
    
  6. 通过设置集群上下文,将自己作为用户添加到 Red Hat OpenShift 集群。

    ibmcloud oc cluster config --cluster myvpc-cluster --admin
    
  7. 在浏览器中,导航至 Master URL 的地址并附加 /console。 例如,https://c0.containers.cloud.ibm.com:23652/console。 如果时间允许,您可以探索 Red Hat OpenShift 网络控制台的各个区域。

  8. 从 Red Hat OpenShift 网络控制台菜单栏,单击您的配置文件 IAM#user.name@email.com > 复制登录命令。 显示 oc login 令牌命令并将其复制到命令行以通过 CLI 进行认证。

    保存群集主服务器 URL,以便以后访问 Red Hat OpenShift 控制台。 在未来的会话中,可以跳过 cluster config 步骤,而改为通过控制台复制登录命令。

  9. 通过检查版本,验证 oc 命令是否针对您的集群正常运行。

    oc version
    

    示例输出

    Client Version: v4.17.0
    Kubernetes Version: v1.32.5.2
    

    如果无法执行需要管理员权限的操作(如列出群集中的所有工作节点或 pod),请运行 ibmcloud oc cluster config --cluster myvpc-cluster --admin 命令为群集管理员下载 TLS 证书和权限文件。

将应用程序部署到群集

快速部署仅可用于来自集群内的请求的新样本应用程序。

  1. 为 Hello World 应用程序创建 Red Hat OpenShift 项目。

    oc new-project hello-world
    
  2. 从源代码中构建示例应用程序。 使用 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"
    
  3. 验证是否已创建样本 Hello World 应用程序组件。

    1. 列出 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
      
    2. 列出 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
      

设置 VPC 负载均衡器以公开应用程序

设置一个 VPC 负载均衡器,让您的应用程序在公共网络上接受外部请求。

在群集中创建 Kubernetes LoadBalancer 服务时,会在群集之外的 VPC 中自动创建一个 VPC 负载平衡器。 VPC 负载均衡器是多专区负载均衡器,通过在工作程序节点上自动打开的专用 NodePort 来路由应用程序的请求。 下图说明了用户如何通过 VPC 负载均衡器访问应用程序的服务,即使您的工作节点只连接到私有子网。

  1. 在集群中创建 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-portport 相同,但您创建的其他应用程序可能使用的是不同端口。
    -n <hello-world> 部署所处的命名空间。
  2. 验证 Kubernetes LoadBalancer 服务是否已在集群中成功创建。 创建 Kubernetes LoadBalancer 服务时,将自动为您创建 VPC 负载均衡器。 VPC 负载均衡器将主机名分配给 Kubernetes LoadBalancer 服务,您可以在 CLI 输出的 LoadBalancer Ingress 字段中看到该服务。 在 VPC 中,会为集群中的服务分配主机名,因为服务的外部 IP 地址不稳定。 VPC 负载均衡器需要几分钟时间才能在 VPC 中进行供应。 在 VPC 负载平衡器准备就绪之前,您无法通过 Kubernetes LoadBalancer 服务的主机名访问该服务。

    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
    
  3. 验证 VPC 负载均衡器是否已在 VPC 中成功创建。 在输出中,验证 VPC 负载均衡器的 供应状态active操作状态online

    VPC 负载平衡器的命名格式为 kube-<cluster_ID>-<kubernetes_lb_service_UID>。 要查看群集 ID,请运行 ibmcloud oc cluster get --cluster <cluster_name>。 要查看 Kubernetes LoadBalancer 服务 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
    
  4. 通过对您在步骤 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!
    
  5. 可选:要清理本课创建的资源,可以使用分配给每个应用程序的标签。

    1. 列出 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
      
    2. 删除创建的所有资源。
      oc delete all -l app=hello-world -n hello-world
      

后续步骤?

既然您已有了 VPC 集群,请了解有关您可以执行的操作的更多信息。

需要帮助、有疑问或要提供有关 VPC 集群的反馈吗? 尝试在 Slack 通道中发布。