注意:

使用 Oracle Cloud Native Environment 部署外部负载平衡器

简介

Oracle Cloud Native Environment 是一个完全集成的套件,用于开发和管理云原生应用。Kubernetes 模块是核心模块。它用于部署和管理容器,还用于自动安装和配置 CRI-O、runC 和 Kata 容器。CRI-O 管理 Kubernetes 集群的容器运行时。运行时可以是 runC 或 Kata Containers。

目标

本教程/实验演示了如何:

支持说明:使用外部负载平衡器,例如建议用于生产部署的 Oracle Cloud 结构负载平衡器 IS

先决条件

本节列出了用于执行本教程中步骤的主机系统。您需要:

设置实验室环境

注:使用空闲实验环境时,有关连接和其他使用说明,请参见Oracle Linux Lab Basics

此实验室涉及多个系统,每个系统都需要执行不同的步骤。建议首先打开终端窗口或选项卡并连接到以下节点。这样可以避免重复登录和注销。节点包括:

  1. 打开终端并通过 ssh 连接到每个节点。

    ssh oracle@<ip_address_of_ol_node>
    

设置负载平衡器(可选)

注:如果使用免费实验室环境,则不需要本节中介绍的步骤,因为初始实验室部署阶段完成了这些步骤 - 而 Luna lab 用户应直接转到下一页:创建平台 CLI 配置文件并从此处继续。否则,对于希望在自己的 Oracle Cloud Infrastructure 租户上复制这些步骤的用户,将提供如何配置这些步骤的详细信息。

创建 Oracle Cloud Infrastructure 负载平衡器

  1. 登录到云控制台。

    public_ip_address

  2. 单击汉堡菜单(左上角),然后单击网络负载平衡器

    public_ip_address

  3. 此时将显示负载平衡器页。

    public_ip_address

  4. 从下拉列表中找到要使用的区间

    public_ip_address

  5. 单击创建负载平衡器按钮。

    public_ip_address

  6. 在弹出对话框中,单击创建负载平衡器按钮以选择默认负载平衡器类型。

    public_ip_address

更新负载平衡器详细信息

  1. 找到默认的可见性类型部分,然后单击专用选项。

    public_ip_address

  2. 进一步向下滚动页面到选择网络部分。

  3. 选择可视云网络子网的下拉列表框中提供的值。

    注: 每次启动实验室时,图像中显示的值将有所不同

    public_ip_address

  4. 单击下一步可移到下一步。

设置负载平衡器策略和协议

  1. 现在设置负载平衡策略和运行状况检查协议。

    • 接受默认的负载平衡策略,即加权循环
  2. 指定健康检查策略部分中,输入显示的设置。

    • Protocol(协议)下,选择 TCP(TCP)
    • Port 值从 80 更改为 6443

    public_ip_address

添加后端节点

  1. 单击添加后端按钮,将打开一个窗口。

    public_ip_address

  2. 选择以下节点,然后单击添加所选后端按钮。

    • ocne-control01
    • ocne-control02
    • ocne-control03
  3. 将每个新选择的后端服务器端口列从默认值 80 更新为 6443

    public_ip_address

  4. 单击下一步按钮以继续进行下一步骤。

配置负载平衡器监听程序

  1. 选择 TCP 按钮

  2. 将用于入站通信端口443 更改为 6443

    输入的值应如下图所示。

    public_ip_address

  3. 单击下一步按钮。

配置负载平衡器日志记录

  1. 设置过程的最后一步是管理日志记录选项。

    public_ip_address

    由于此方案不需要更改,因此请单击提交按钮以创建负载平衡器

负载平衡器信息

  1. 创建后,将显示新创建的负载平衡器的概览页。

    public_ip_address

    注: 总体健康状况后端集健康状况部分不能作为 OK (绿色)闪烁。这是因为尚未在 Kubernetes 控制层和 worker 节点上创建 Oracle Cloud Native Environment。后续步骤将解决此问题。

创建平台 CLI 配置文件

管理员可以使用配置文件简化环境和模块的创建和管理。以有效的 YAML 语法编写的配置文件包括有关要创建的环境和模块的所有信息。使用配置文件可保存平台 CLI 命令选项的重复条目。

注:如果在用于配置 Oracle Cloud Native Environment 的 myenvironment.yaml 中输入了多个控制层节点,则 olcnectl 要求在 myenvironment.yaml 文件中输入负载平衡器(在本例中为 Oracle Cloud Infrastructure 负载平衡器)的详细信息。通过在 myenvironment.yaml 中输入新参数 (load-balancer: <enter-your-OCI-LB-ip-here>) 来实现此目的。

示例配置文件:

environments:
  - environment-name: myenvironment
    globals:
      api-server: 127.0.0.1:8091
      secret-manager-type: file
      olcne-ca-path: /etc/olcne/configs/certificates/production/ca.cert
      olcne-node-cert-path: /etc/olcne/configs/certificates/production/node.cert
      olcne-node-key-path:  /etc/olcne/configs/certificates/production/node.key
    modules:
      - module: kubernetes
        name: mycluster
        args:
          container-registry: container-registry.oracle.com/olcne
          load-balancer: 10.0.0.<XXX>:6443
          master-nodes: ocne-control01:8090,ocne-control02:8090,ocne-control03:8090
          worker-nodes: ocne-worker01:8090,ocne-worker02:8090
          selinux: enforcing
          restrict-service-externalip: true
          restrict-service-externalip-ca-cert: /etc/olcne/configs/certificates/restrict_external_ip/production/ca.cert
          restrict-service-externalip-tls-cert: /etc/olcne/configs/certificates/restrict_external_ip/production/node.cert
          restrict-service-externalip-tls-key: /etc/olcne/configs/certificates/restrict_external_ip/production/node.key

在实验室部署期间,会自动生成配置文件,并准备好在练习中使用。有关手动创建配置文件的更多信息,请参阅使用配置文件的文档。

更新配置文件

  1. (在 ocne-operator 上)查看配置文件内容。

    cat ~/myenvironment.yaml
    
  2. (在 ocne-operator 上)将 load balancer IPv4 地址值添加到 myenvironment.yaml 文件。

    LB_IP=$(oci lb load-balancer list --auth instance_principal --compartment-id $COMPARTMENT_OCID | jq -r '.data[]."ip-addresses"[]."ip-address"')
    sed -i "14i\          load-balancer: $LB_IP:6443" ~/myenvironment.yaml
    

    要使上述命令成功,必须在操作节点上执行以下准备步骤。这些步骤是在免费实验室部署过程中为您完成的。

    • 已安装 Oracle Cloud Infrastructure CLI。

    • 查找部署 Oracle Cloud Native Environment 的区间的 OCID。

    • 已将这些环境变量添加到用户 ~/.bashrc 文件中。

      • COMPARTMENT_OCID=<compartment_ocid>
      • LC_ALL=C.UTF-8
      • LANG=C.UTF-8
  3. (在 ocne-operator 上)确认 load balancer 值已添加到 myenviroment.yaml 文件。

    cat ~/myenvironment.yaml
    

创建环境和 Kubernetes 模块

  1. (在 ocne-operator 上)创建环境。

    cd ~
    olcnectl environment create --config-file myenvironment.yaml
    

    输出示例:

    [oracle@ocne-operator ~]$ olcnectl environment create --config-file myenvironment.yaml
    Environment myenvironment created.
    
  2. (在 ocne-operator 上)创建 Kubernetes 模块。

    olcnectl module create --config-file myenvironment.yaml
    

    输出示例:

    [oracle@ocne-operator ~]$ olcnectl module create --config-file myenvironment.yaml
    Modules created successfully.
    
  3. (在 ocne-operator 上)验证 Kubernetes 模块。

    olcnectl module validate --config-file myenvironment.yaml
    

    输出示例:

    [oracle@ocne-operator ~]$ olcnectl module validate --config-file myenvironment.yaml
    Validation of module mycluster succeeded.
    

    在此免费实验室环境中,没有验证错误。如果存在任何错误,修复节点所需的命令将作为此命令的输出提供。

  4. (在 ocne-operator 上)安装 Kubernetes 模块。

    olcnectl module install --config-file myenvironment.yaml
    

    注:将 Kubernetes 部署到节点需要几分钟才能完成。

    输出示例:

    [oracle@ocne-operator ~]$ olcnectl module install --config-file myenvironment.yaml
    Modules installed successfully.
    
  5. (在 ocne-operator 上)验证 Kubernetes 模块的部署。

    olcnectl module instances --config-file myenvironment.yaml
    

    输出示例:

    [oracle@ocne-operator ~]$ olcnectl module instances --config-file myenvironment.yaml
    INSTANCE           	MODULE    	STATE    
    mycluster          	kubernetes	installed
    ocne-control01:8090	node      	installed
    ocne-control02:8090	node      	installed
    ocne-control03:8090	node      	installed
    ocne-worker01:8090 	node      	installed
    ocne-worker02:8090 	node      	installed
    [oracle@ocne-operator ~]$
    

设置 kubectl

  1. (在 ocne-controlxx 节点上)设置 kubectl 命令。

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    export KUBECONFIG=$HOME/.kube/config
    echo 'export KUBECONFIG=$HOME/.kube/config' >> $HOME/.bashrc
    
  2. (在 sysop01 上)设置 kubectl 命令。

    1. 从控制层节点之一复制配置文件。

      mkdir -p $HOME/.kube
      ssh -o StrictHostKeyChecking=no 10.0.0.150 "sudo cat /etc/kubernetes/admin.conf" > $HOME/.kube/config
      
    2. 导出配置以供 kubectl 命令使用。

      sudo chown $(id -u):$(id -g) $HOME/.kube/config
      export KUBECONFIG=$HOME/.kube/config
      echo 'export KUBECONFIG=$HOME/.kube/config' >> $HOME/.bashrc
      
  3. (在 sysop01 上)验证 kubectl 是否正常工作。

    kubectl get nodes
    

    输出示例:

    [oracle@sysop01 ~]$ kubectl get nodes
    NAME             STATUS   ROLES                  AGE     VERSION
    ocne-control01   Ready    control-plane,master   5m10s   v1.23.7+1.el8
    ocne-control02   Ready    control-plane,master   3m33s   v1.23.7+1.el8
    ocne-control03   Ready    control-plane,master   4m29s   v1.23.7+1.el8
    ocne-worker01    Ready    <none>                 3m15s   v1.23.7+1.el8
    ocne-worker02    Ready    <none>                 3m8s    v1.23.7+1.el8
    [oracle@sysop01 ~]$
    

确认负载平衡器管理控制层节点中断

已在外部负载平衡器后安装了具有三个控制层节点的 Oracle Cloud Native Environment。

下一节确认外部负载平衡器将检测控制层节点发生故障的时间,并将其从 Round Robin 流量分配策略中删除。最终测试步骤表明,当“缺失”节点恢复时,它将自动重新加入群集并再次可用于处理基于群集的通信。

确认负载平衡器处于活动状态

如果使用免费实验室环境,请登录 Cloud Console,如 Oracle Linux Lab Basics 文档中所示。

访问负载平衡器详细信息

  1. 如果尚未连接,请登录云控制台。

    public_ip_address

  2. 单击汉堡菜单(左上角),然后单击网络负载平衡器

    public_ip_address

  3. 这将显示负载平衡器页。

    public_ip_address

  4. 从下拉列表中找到要使用的区间。

    public_ip_address

    如果需要有关此步骤的说明,请参见 Oracle Linux Lab Basics 以了解详细信息。

  5. 预创建的负载平衡器概要详细信息应类似于此映像。

    public_ip_address

  6. 单击 ocne-load-balancer 链接。

  7. 向下滚动到后端集链接(在浏览器左侧的资源标题下)。

  8. 单击后端集链接。

    public_ip_address

  9. 此时将显示指向现有后端集的链接。单击链接(在本示例中称为 ocne-lb-backend-set )。

    public_ip_address

  10. 单击后端链接(在浏览器左侧的资源标题下)。

    public_ip_address

  11. 该屏幕确认存在三个运行状况良好的节点。

    public_ip_address

停止控制层节点实例之一

  1. 单击汉堡菜单(左上角),然后依次导航到计算实例

    public_ip_address

  2. 将显示实例页。

    public_ip_address

  3. 单击列出的控制层节点之一(例如:ocne-control01 )。

  4. 显示实例详细信息。

    public_ip_address

  5. 单击 *Stop 按钮。

  6. 在弹出对话框中,选中通过立即关闭电源来强制停止实例复选框,然后单击强制停止实例按钮。

    注意:不要在生产系统上执行此操作,因为这可能会导致数据丢失、损坏或整个系统更糟。

    public_ip_address

  7. 等到“实例详细信息”页确认实例已停止

    public_ip_address

验证 Oracle Cloud Infrastructure 负载平衡器是否注册了控制层节点故障

  1. 导航到网络 > 负载平衡器

  2. 单击 ocne-load-balancer 链接。

  3. 在左下部面板上的资源下,单击后端集

  4. 然后单击后端集表中显示的名称(示例: ocne-lb-backend-set )。

  5. 单击后端以显示节点。

    此页上的状态应自动更新。显示的状态通常需要 2-3 分钟才能更改。

  6. 显示的初始报告阶段应为警告状态。

    public_ip_address

  7. 几分钟后(~2-3 分钟),状态将更新为严重状态。这意味着 Oracle Cloud Infrastructure 负载平衡器进程已确认该节点不响应,因此负载平衡器将不再将传入请求转发到不可用的后端控制计划节点。

    public_ip_address

确认 Oracle Cloud Native Environment 集群响应

由于群集中至少剩余两个活动成员,活动控制层节点应响应 kubectl 命令。

  1. (在 sysop01 上)验证 kubectl 是否响应并报告刚刚作为 NotReady(不可用)停止的控制层节点。

    kubectl get nodes
    

    输出示例:

    [oracle@sysop01 ~]$ kubectl get nodes
    NAME             STATUS     ROLES                  AGE   VERSION
    ocne-control01   NotReady   control-plane,master   26m   v1.23.7+1.el8
    ocne-control02   Ready      control-plane,master   25m   v1.23.7+1.el8
    ocne-control03   Ready      control-plane,master   24m   v1.23.7+1.el8
    ocne-worker01    Ready      <none>                 24m   v1.23.7+1.el8
    ocne-worker02    Ready      <none>                 26m   v1.23.7+1.el8
    [oracle@sysop01 ~]$
    

    注意:* 在显示 **NotReady 状态之前可能需要 2-3 分钟。请定期重复 kubectl get nodes 命令,直到状态从 Ready 更改为 NotReady

重新启动已停止的控制层节点

  1. 导航到计算 > 实例

  2. 单击以前停止的控制层节点。

  3. 通过单击启动按钮启动实例。

    等待“状态”部分变为绿色并确认实例处于正在运行状态。

    public_ip_address

验证控制层节点是否重新加入 Oracle Cloud Infrastructure 负载平衡器集群

  1. 导航到网络 > 负载平衡器

  2. 单击 ocne-load-balancer 链接。

  3. 在左下部面板上的资源下,单击后端集

  4. 然后单击后端集表中显示的名称(示例: ocne-lb-backend-set )。

  5. 单击后端以显示节点。

    此页上的状态应自动更新。显示的状态通常需要 2-3 分钟才能更改。

  6. 在检测到重新启动的节点之前,总体运行状况将显示警告状态。

    public_ip_address

  7. 检测到后,整体健康状况将报告为正常

    public_ip_address

在此阶段,控制节点已重新加入群集,所有三个控制层节点都参与到群集传入通信的循环分配中。

获取控制层节点状态

  1. (在 sysop01 上)验证 kubectl 是否响应并报告重新启动的控制层节点的状态为 Ready(可用)。

    kubectl get nodes
    

    输出示例:

    [oracle@sysop01 ~]$ kubectl get nodes
    NAME             STATUS     ROLES                  AGE   VERSION
    ocne-control01   Ready      control-plane,master   26m   v1.23.7+1.el8
    ocne-control02   Ready      control-plane,master   25m   v1.23.7+1.el8
    ocne-control03   Ready      control-plane,master   24m   v1.23.7+1.el8
    ocne-worker01    Ready      <none>                 24m   v1.23.7+1.el8
    ocne-worker02    Ready      <none>                 26m   v1.23.7+1.el8
    [oracle@sysop01 ~]$
    

    * 注:状态更改可能需要 2-3 分钟才能显示更新的状态。请定期重复执行 kubectl get nodes 命令,直到状态发生更改。

    这将确认负载平衡器已正确配置并且正在成功接受请求。

详细信息

更多学习资源

浏览 docs.oracle.com/learn 上的其他实验室,或在 Oracle Learning YouTube 频道上访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心