linux cpu占用率如何看
260
2022-09-11
【kubernetes 】Helm 部署 MetalLB(LoadBalancer)
基本介绍
MetalLB是使用标准路由协议的裸机Kubernetes集群的负载均衡器实现。
Kubernetes没有为裸机集群提供网络负载平衡器的实现(服务类型为LoadBalancer)。Kubernetes附带的Network LB的实现都是调用各种IaaS平台(GCP,AWS,Azure等)的粘合代码。如果您不在支持的IaaS平台(GCP,AWS,Azure等)上运行,则LoadBalancers在创建时将无限期保持“待处理”状态。
裸机集群运营商只剩下两个较小的工具,即“ NodePort”和“ externalIPs”服务,可将用户流量引入其集群。这两个选项在生产用途上都有很大的缺点,这使裸金属集群成为Kubernetes生态系统中的二等公民。
MetalLB旨在通过提供与标准网络设备集成的Network LB实现来解决这种不平衡问题,从而使裸机群集上的外部服务也尽可能“正常运行”。
条件
MetalLB需要以下功能才能运行:
1、一个Kubernetes集群,运行Kubernetes 1.13.0或更高版本,还没有网络负载平衡功能。
2、群集的网络配置可以与MetalLB共存。
3、MetalLB目前只支持IPv4地址。
根据操作模式,您可能需要一个或多个能够说BGP的路由器 。
Metallb基本原理
Metallb 会在 Kubernetes 内运行,监控服务对象的变化,一旦察觉有新的LoadBalancer 服务运行,并且没有可申请的负载均衡器之后,
就会完成两部分的工作: 1.地址分配 用户需要在配置中提供一个地址池,Metallb 将会在其中选取地址分配给服务。 2.地址广播 根据不同配置,Metallb 会以二层(ARP/NDP)或者 BGP 的方式进行地址的广播。
基本原理图
部署
使用helm 进行部署 metallb
helm repo add metallb install metallb metallb/metallb
编辑配置文件指定地址段
vim values.yaml
configInline: # The address-pools section lists the IP addresses that MetalLB is # allowed to allocate, along with settings for how to advertise # those addresses over BGP once assigned. You can have as many # address pools as you want. address-pools: - # A name for the address pool. Services can request allocation # from a specific address pool using this name, by listing this # name under the 'metallb.universe.tf/address-pool' annotation. name: default # Protocol can be used to select how the announcement is done. # Supported values are bgp and layer2. protocol: layer2 # A list of IP address ranges over which MetalLB has # authority. You can list multiple ranges in a single pool, they # will all share the same settings. Each range can be either a # CIDR prefix, or an explicit start-end range of IPs. addresses: - 10.0.32.71-10.0.32.90
helm install metallb metallb/metallb -f values.yaml
service的yaml配置示例
配置自动生成地址
[centos@k8s-master ~]$ vim tutorial-2.yamlapiVersion: apps/v1beta2kind: Deploymentmetadata: name: nginxspec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - name: containerPort: 80---apiVersion: v1kind: Servicemetadata: name: nginxspec: ports: - name: port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: LoadBalancer
配置指定IP地址:
apiVersion: v1kind: Servicemetadata: name: nginx annotations: #metallb.universe.tf/address-pool: production-public-ips #指定地址池 metallb.universe.tf/loadBalancerIPs: 10.0.32.75 #指定IP地址spec: ports: - port: 80 targetPort: 80 selector: app: nginx type: LoadBalancer
配置共享IP地址:
apiVersion: v1kind: Servicemetadata: name: dns-service-tcp namespace: default annotations: metallb.universe.tf/allow-shared-ip: "key-to-share-1.2.3.4"spec: type: LoadBalancer loadBalancerIP: 1.2.3.4 ports: - name: dnstcp protocol: TCP port: 53 targetPort: 53 selector: app: dns---apiVersion: v1kind: Servicemetadata: name: dns-service-udp namespace: default annotations: metallb.universe.tf/allow-shared-ip: "key-to-share-1.2.3.4"spec: type: LoadBalancer loadBalancerIP: 1.2.3.4 ports: - name: dnsudp protocol: UDP port: 53 targetPort: 53 selector: app: dns
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~