Azure Kubernetes Fleet Manager 可用于为跨成员群集部署的面向公众的工作负荷创建和管理基于 DNS 的多群集负载均衡。
重要
Azure Kubernetes 舰队管理器预览功能可以通过自助服务方式选择性启用。 预览版按“现状”和“视供应情况”提供,它们不包括在服务级别协议和有限保证范围内。 客户支持部门会尽力为 Azure Kubernetes 舰队管理器预览功能提供部分支持。 因此,这些功能并不适合用于生产。
我们的数据平面网络预览版通过 networking.fleet.azure.cn/v1beta1
API 发布。 如果未看到预览对象,请检查是否在与 Fleet Manager 中心群集交互时请求 networking.fleet.azure.com/v1beta1
API。
为了通过 DNS 提供多群集公共负载均衡,Fleet Manager 使用具有加权路由配置文件的 Azure 流量管理器充当从成员群集导出的Services
前端。 可以将此功能用于第 4 层和第 7 层负载均衡。
机队管理员使用kubectl
在 Fleet Manager 中心群集上创建和配置TrafficManagerProfile
和TrafficManagerBackend
资源。
TrafficManagerProfile
定义一个包含终结点运行状况监视配置的 Azure 流量管理器配置文件,关联的 TrafficManagerBackend
定义要进行负载均衡的 Service
。
成员群集上的服务可以通过在群集上创建 ServiceExport
并配置唯一的 Service
DNS 主机名来添加到负载均衡中。 可以定义可选权重,以配置群集之间的流量路由行为。 如果使用舰队管理器的群集资源放置部署工作负荷,则可使用 ResourceOverride
在放置上配置 DNS 主机名。
关联的流量管理器的创建和配置由 Fleet Manager 管理,车队管理员能够使用 Kubernetes API 推动端到端体验。
TrafficManagerProfile 属性
该 TrafficManagerProfile
资源提供标准 Azure 流量管理器配置文件的 Kubernetes 对象表示形式。
apiVersion: networking.fleet.azure.com/v1beta1
kind: TrafficManagerProfile
metadata:
name: myatm
namespace: work
spec:
monitorConfig:
protocol: HTTP
path: /api
port: 8080
intervalInSeconds: 30
timeoutInSeconds: 10
toleratedNumberOfFailures: 3
要了解的重要属性包括:
-
name
:用作trafficmanager.cn
DNS 名称的 DNS 前缀。 它必须唯一。 如果名称已在使用中,部署将失败。 -
namespace
:必须与相应的TrafficManagerBackend
Service
资源相同。 -
monitorCOnfig
:映射到标准 Azure 流量管理器监视配置。 不支持的 Azure 流量管理器终结点监视选项包括:自定义标头设置;预期状态代码。
TrafficManagerBackend 属性
该 TrafficManagerBackend
资源提供一个 Kubernetes 对象,用于存储流量管理器可以考虑接收流量的后端终结点。 在将流量路由到终结点之前,必须创建一个ServiceExport
。
apiVersion: networking.fleet.azure.com/v1beta1
kind: TrafficManagerBackend
metadata:
name: app
namespace: work
spec:
profile:
name: myatm
backend:
name: app
weight: 100
要了解的重要属性包括:
-
spec/profile/name
必须与对应的TrafficManagerProfile
匹配。 -
spec/backend/name
:必须与导出的服务名称匹配才能进行负载均衡。 -
spec/weight
:适用于此后端的可选的权重(优先级)。 介于 0 和 1,000 之间的整数值。 如果省略,流量管理器使用默认权重“1”。 设置为“0”可禁用流量路由,而无需删除关联的流量管理器配置文件资源。 有关详细信息,请参阅 Azure 流量管理器加权路由方法。
ServiceExport 属性
若要为流量管理器添加 Service
终结点,请在成员群集中创建包含服务的 ServiceExport
资源。 必须在与要导出的 ServiceExport
相同的命名空间中创建 Service
资源。
apiVersion: networking.fleet.azure.com/v1alpha1
kind: ServiceExport
metadata:
name: kuard-export
namespace: kuard-demo
annotations:
networking.fleet.azure.com/weight: "50"
要了解的重要属性包括:
-
metadata/namespace
:必须与要导出的Service
命名空间匹配。 -
metadata/annotations/networking.fleet.azure.com/weight
:应用于此服务导出时可选的权重或优先级。 介于 0 和 1,000 之间的整数值。 如果省略,流量管理器使用默认权重“1”。 设置为“0”可禁用流量路由,而无需删除关联的服务终结点。 有关详细信息,请参阅 Azure 流量管理器加权路由方法。
通过服务标注获取唯一的 DNS 主机名
若要向流量管理器添加 a Service
,它必须具有唯一的 DNS 主机名。 可以按照 AKS 推荐的方法使用如图所示的 service.beta.kubernetes.io/azure-dns-label-name
注释来设置 DNS 主机名。
apiVersion: v1
kind: Service
metadata:
name: kuard-svc
namespace: kuard-demo
labels:
app: kuard
annotations:
service.beta.kubernetes.io/azure-dns-label-name: kuard-demo-cluster-01
spec:
selector:
app: kuard
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
可以使用 Fleet Manager 功能中的 ResourceOverride
来重写 DNS 标签注释,从而能够在多个群集上部署唯一的主机名。 有关详细信息,请参阅 DNS 负载均衡作指南。
控制流量路由
在本部分中,我们将介绍控制群集之间的流量路由的常见方案。
在群集之间分配流量
若要允许流量管理器考虑接收流量的任何群集,请使用所示的定义。
创建
TrafficManagerBackend
资源并省略weight
属性。apiVersion: networking.fleet.azure.com/v1beta1 kind: TrafficManagerBackend metadata: name: app namespace: work spec: profile: name: myatm backend: name: app
在每个群集上,创建
ServiceExport
并省略weight
属性。apiVersion: networking.fleet.azure.com/v1alpha1 kind: ServiceExport metadata: name: kuard-export namespace: kuard-demo
部署后,流量管理器会随机选取一个群集,考虑到权重相等的所有群集。
在不同权重的群集之间分配流量
若要在选择群集时向流量管理器提供偏好提示,请在 weight
和 TrafficManagerBackend
对象上设置 ServiceExport
属性。
创建
TrafficManagerBackend
资源并将属性设置为weight
100
.apiVersion: networking.fleet.azure.com/v1beta1 kind: TrafficManagerBackend metadata: name: app namespace: work spec: profile: name: myatm backend: name: app weight: 100
创建一个
ServiceExport
并将weight
属性设置为一个值,该值代表流量管理器在考虑群集接受流量时应使用的优先级。apiVersion: networking.fleet.azure.com/v1alpha1 kind: ServiceExport metadata: name: kuard-export namespace: kuard-demo annotations: networking.fleet.azure.com/weight: "40"
部署后,流量管理器将优先选择权重较高的群集。 无需在每个群集上设置权重值。 如果在多个群集上设置权重值相同,流量管理器将同样考虑这些群集。
从流量路由中排除集群
若要从流量路由中排除群集,请在weight
资源上将0
属性设置为ServiceExport
。 此权重会将端点从流量管理器配置中删除。
apiVersion: networking.fleet.azure.com/v1alpha1
kind: ServiceExport
metadata:
name: kuard-export
namespace: kuard-demo
annotations:
networking.fleet.azure.com/weight: "0"
TrafficManagerProfile 删除行为
TrafficManagerProfile
删除 Kubernetes 资源时,也会删除关联的 Azure 流量管理器及其终结点,并且不再将请求路由到群集。
如果想要停止流量路由,但保留 Azure 流量管理器及其终结点,请在weight
资源上将0
属性设置为TrafficManagerBackend
。