注意:
- Oracle 提供的免费实验室环境中提供了此教程。
- 它对 Oracle Cloud Infrastructure 身份证明、租户和区间使用示例值。完成实验室后,请用特定于您的云环境的实验室值替换这些值。
使用 Oracle Cloud Native Environment 部署外部负载平衡器
简介
Oracle Cloud Native Environment 是一个完全集成的套件,用于开发和管理云原生应用。Kubernetes 模块是核心模块。它用于部署和管理容器,还用于自动安装和配置 CRI-O、runC 和 Kata 容器。CRI-O 管理 Kubernetes 集群的容器运行时。运行时可以是 runC 或 Kata Containers。
目标
本教程/实验演示了如何:
- 使用 Oracle Cloud Infrastructure 负载平衡器配置 Kubernetes 集群以实现高可用性
- 在 5 节点集群上配置 Oracle Cloud Native Environment
- 验证控制层节点之间的负载平衡器故障转移是否已成功完成
支持说明:使用外部负载平衡器,例如建议用于生产部署的 Oracle Cloud 结构负载平衡器 IS 。
先决条件
本节列出了用于执行本教程中步骤的主机系统。您需要:
-
6 个 Oracle Linux 系统,用作:
- 操作员节点 (ocne-operator)
- 3 个 Kubernetes 控制层节点(ocne-control01 、ocne-control02 、ocne-control03 )
- 2 个 Kubernetes worker 节点(ocne-worker01 、ocne-worker02 )
- 1 个安装了 kubectl 的 Oracle Linux 系统 (sysop01)
注:在生产环境中,建议您具有至少包含五个控制层节点和至少三个 worker 节点的集群。
-
每个系统应至少安装以下项:
- 最新 Oracle Linux 8 (x86_64) 已安装并运行 Unbreakable Enterprise Kernel Release 6 (UEK R6)
-
此环境预配置如下:
- 已创建
oracle
用户帐户(在安装期间使用) - 已授予
oracle
帐户sudo
访问权限 - 在实例之间设置基于密钥的 SSH(也称为无密码 SSH)
- 已安装 Oracle Cloud Native Environment 发行版 1.5(但未创建环境)
- 已创建
设置实验室环境
注:使用空闲实验环境时,有关连接和其他使用说明,请参见Oracle Linux Lab Basics 。
此实验室涉及多个系统,每个系统都需要执行不同的步骤。建议首先打开终端窗口或选项卡并连接到以下节点。这样可以避免重复登录和注销。节点包括:
- 八角运算符
- 任一人员:
- ocne-control01
- ocne-control02
- ocne-control03
- sysop01
-
打开终端并通过 ssh 连接到每个节点。
ssh oracle@<ip_address_of_ol_node>
设置负载平衡器(可选)
注:如果使用免费实验室环境,则不需要本节中介绍的步骤,因为初始实验室部署阶段完成了这些步骤 - 而 Luna lab 用户应直接转到下一页:创建平台 CLI 配置文件并从此处继续。否则,对于希望在自己的 Oracle Cloud Infrastructure 租户上复制这些步骤的用户,将提供如何配置这些步骤的详细信息。
创建 Oracle Cloud Infrastructure 负载平衡器
-
登录到云控制台。
-
单击汉堡菜单(左上角),然后单击网络和负载平衡器。
-
此时将显示负载平衡器页。
-
从下拉列表中找到要使用的区间。
-
单击创建负载平衡器按钮。
-
在弹出对话框中,单击创建负载平衡器按钮以选择默认负载平衡器类型。
更新负载平衡器详细信息
-
找到默认的可见性类型部分,然后单击专用选项。
-
进一步向下滚动页面到选择网络部分。
-
选择可视云网络和子网的下拉列表框中提供的值。
注: 每次启动实验室时,图像中显示的值将有所不同。
-
单击下一步可移到下一步。
设置负载平衡器策略和协议
-
现在设置负载平衡策略和运行状况检查协议。
- 接受默认的负载平衡策略,即加权循环
-
在指定健康检查策略部分中,输入显示的设置。
- 在 Protocol(协议)下,选择 TCP(TCP)
- 将 Port 值从 80 更改为 6443
添加后端节点
-
单击添加后端按钮,将打开一个窗口。
-
选择以下节点,然后单击添加所选后端按钮。
- ocne-control01
- ocne-control02
- ocne-control03
-
将每个新选择的后端服务器的端口列从默认值 80 更新为 6443 。
-
单击下一步按钮以继续进行下一步骤。
配置负载平衡器监听程序
-
选择 TCP 按钮
-
将用于入站通信的端口从 443 更改为 6443
输入的值应如下图所示。
-
单击下一步按钮。
配置负载平衡器日志记录
-
设置过程的最后一步是管理日志记录选项。
由于此方案不需要更改,因此请单击提交按钮以创建负载平衡器。
负载平衡器信息
-
创建后,将显示新创建的负载平衡器的概览页。
注: 总体健康状况和后端集健康状况部分不能作为 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
在实验室部署期间,会自动生成配置文件,并准备好在练习中使用。有关手动创建配置文件的更多信息,请参阅使用配置文件的文档。
更新配置文件
-
(在 ocne-operator 上)查看配置文件内容。
cat ~/myenvironment.yaml
-
(在 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
-
-
(在 ocne-operator 上)确认 load balancer 值已添加到 myenviroment.yaml 文件。
cat ~/myenvironment.yaml
创建环境和 Kubernetes 模块
-
(在 ocne-operator 上)创建环境。
cd ~ olcnectl environment create --config-file myenvironment.yaml
输出示例:
[oracle@ocne-operator ~]$ olcnectl environment create --config-file myenvironment.yaml Environment myenvironment created.
-
(在 ocne-operator 上)创建 Kubernetes 模块。
olcnectl module create --config-file myenvironment.yaml
输出示例:
[oracle@ocne-operator ~]$ olcnectl module create --config-file myenvironment.yaml Modules created successfully.
-
(在 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.
在此免费实验室环境中,没有验证错误。如果存在任何错误,修复节点所需的命令将作为此命令的输出提供。
-
(在 ocne-operator 上)安装 Kubernetes 模块。
olcnectl module install --config-file myenvironment.yaml
注:将 Kubernetes 部署到节点需要几分钟才能完成。
输出示例:
[oracle@ocne-operator ~]$ olcnectl module install --config-file myenvironment.yaml Modules installed successfully.
-
(在 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
-
(在 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
-
(在 sysop01 上)设置
kubectl
命令。-
从控制层节点之一复制配置文件。
mkdir -p $HOME/.kube ssh -o StrictHostKeyChecking=no 10.0.0.150 "sudo cat /etc/kubernetes/admin.conf" > $HOME/.kube/config
-
导出配置以供
kubectl
命令使用。sudo chown $(id -u):$(id -g) $HOME/.kube/config export KUBECONFIG=$HOME/.kube/config echo 'export KUBECONFIG=$HOME/.kube/config' >> $HOME/.bashrc
-
-
(在 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 文档中所示。
访问负载平衡器详细信息
-
如果尚未连接,请登录云控制台。
-
单击汉堡菜单(左上角),然后单击网络和负载平衡器。
-
这将显示负载平衡器页。
-
从下拉列表中找到要使用的区间。
如果需要有关此步骤的说明,请参见 Oracle Linux Lab Basics 以了解详细信息。
-
预创建的负载平衡器概要详细信息应类似于此映像。
-
单击 ocne-load-balancer 链接。
-
向下滚动到后端集链接(在浏览器左侧的资源标题下)。
-
单击后端集链接。
-
此时将显示指向现有后端集的链接。单击链接(在本示例中称为 ocne-lb-backend-set )。
-
单击后端链接(在浏览器左侧的资源标题下)。
-
该屏幕确认存在三个运行状况良好的节点。
停止控制层节点实例之一
-
单击汉堡菜单(左上角),然后依次导航到计算和实例。
-
将显示实例页。
-
单击列出的控制层节点之一(例如:ocne-control01 )。
-
显示实例详细信息。
-
单击 *Stop 按钮。
-
在弹出对话框中,选中通过立即关闭电源来强制停止实例复选框,然后单击强制停止实例按钮。
注意:不要在生产系统上执行此操作,因为这可能会导致数据丢失、损坏或整个系统更糟。
-
等到“实例详细信息”页确认实例已停止。
验证 Oracle Cloud Infrastructure 负载平衡器是否注册了控制层节点故障
-
导航到网络 > 负载平衡器。
-
单击 ocne-load-balancer 链接。
-
在左下部面板上的资源下,单击后端集。
-
然后单击后端集表中显示的名称(示例: ocne-lb-backend-set )。
-
单击后端以显示节点。
此页上的状态应自动更新。显示的状态通常需要 2-3 分钟才能更改。
-
显示的初始报告阶段应为警告状态。
-
几分钟后(~2-3 分钟),状态将更新为严重状态。这意味着 Oracle Cloud Infrastructure 负载平衡器进程已确认该节点不响应,因此负载平衡器将不再将传入请求转发到不可用的后端控制计划节点。
确认 Oracle Cloud Native Environment 集群响应
由于群集中至少剩余两个活动成员,活动控制层节点应响应 kubectl
命令。
-
(在 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 。
重新启动已停止的控制层节点
-
导航到计算 > 实例。
-
单击以前停止的控制层节点。
-
通过单击启动按钮启动实例。
等待“状态”部分变为绿色并确认实例处于正在运行状态。
验证控制层节点是否重新加入 Oracle Cloud Infrastructure 负载平衡器集群
-
导航到网络 > 负载平衡器。
-
单击 ocne-load-balancer 链接。
-
在左下部面板上的资源下,单击后端集。
-
然后单击后端集表中显示的名称(示例: ocne-lb-backend-set )。
-
单击后端以显示节点。
此页上的状态应自动更新。显示的状态通常需要 2-3 分钟才能更改。
-
在检测到重新启动的节点之前,总体运行状况将显示警告状态。
-
检测到后,整体健康状况将报告为正常。
在此阶段,控制节点已重新加入群集,所有三个控制层节点都参与到群集传入通信的循环分配中。
获取控制层节点状态
-
(在 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
命令,直到状态发生更改。这将确认负载平衡器已正确配置并且正在成功接受请求。
详细信息
- Oracle Cloud Native Environment 文档
- Oracle Cloud Native Environment 培训
- Oracle Linux 学习订阅
- Oracle Linux 课程
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或在 Oracle Learning YouTube 频道上访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Deploy an External Load Balancer with Oracle Cloud Native Environment
F61283-03
September 2022
Copyright © 2022, Oracle and/or its affiliates.