企业级运维之云原生与Kubernetes实战课程 第三章第4讲 阿里云ACK集群控制器

本文涉及的产品
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 控制器列表kube-controller-managercloud-controller-managerkube-proxy最佳实践

企业级运维之云原生与Kubernetes实战课程

第三章第4讲 阿里云ACK集群控制器

 

 

视频地址:https://developer.aliyun.com/learning/course/913/detail/14605

 

目录

 

  • 控制器列表
  • kube-controller-manager
  • cloud-controller-manager
  • kube-proxy
  • 最佳实践

 

 

一、控制器列表

 

控制平面的组件对集群做出全局决策(比如调度),以及检测和响应集群事件(例如:当不满足部署的replicas字段时,启动新的Pod)

 

1. 控制器列表

 image.png

 

2. 控制器分类

 image.png

 

3. Kube-scheduler

 

Kube-scheduler是比较常用的控制器组件,负责监听Kube API server,比如新创建的、未指定运行节点(Node) Pods,并基于其约束和可用资源为这些Pods选择适合的节点。

 

调度决策需要考虑的因素:

 

  • 如何保障每个节点都会被分配,使资源得以高效利用;
  • 调度性能高,可尽快完成大批量调度工作;
  • 允许用户根据自身需求设定调度策略。

 

二、Kube Controller ManagerKCM

 

Kube Controller ManagerKubernetes集群内部资源的管理器,通过API服务器监控集群的状态,确保集群处于预期的工作状态。

 

Kube Controller Manager由负责不同资源的多个控制器构成,包含:Node ControllerReplicaSetEndpoints ControllerDeployment ControllerServiceAccount&TokenController等。

 

1.  Node Controller

 

Node Controller负责在节点出现故障时进行通知和响应。

 

2.  ReplicaSet Controller

 

ReplicaSet Controller负责为系统中的每个副本控制器对象维护正确数量的Pod

 

3.  Endpoints Controller

 

Endpoints Controller负责填充端点(Endpoints)对象(即加入ServicePod),比如:如果监测到Pod事件(新建或更新),则更新它对应的Service Endpoints对象。

 

4.  Deployment Controller

 

Deployment Controller负责管理Deployment资源。

 

5.  ServiceAccount&TokenController

 

ServiceAccount&TokenController负责为新的命名空间创建默认账户和API访问令牌。

 

三、Cloud Controller ManagerCCM

 

Cloud Controller Manager提供Kubernetes与阿里云基础产品的对接能力,例如CLB(SLB)VPC等。

 

1. CCM主要功能

 

CCM主要提供以下两方面功能:

 

  • 管理负载均衡

 

Service的类型设置为Type=LoadBalancer时,CCM组件会为该Service创建或配置阿里云负载均衡CLB,包括含CLB、监听、后端服务器组等资源。当Service对应的后端Endpoint或者集群节点发生变化时,CCM会自动更新CLB的后端虚拟服务器组;

 

  • 实现跨节点通信

 

当集群网络组件为Flannel时,CCM组件负责打通容器与节点间网络,实现容器跨节点通信。CCM会将节点的Pod网段信息写入VPC的路由表中,从而实现跨节点的容器通信。该功能无需配置,安装即可使用。

 

2. CCM组件

 

a.  Node Controller

 

Node Controller用于在节点发生变化时自动更新CLB的后端。

 

b.  Route Controller

 

Route Controller用于在底层云基础架构中设置路由。

 

c.  Service Controller

 

Service Controller用于创建、更新和删除云提供商负载均衡器。

 

四、kube-proxy

 

kube-proxyNode上的网络代理组件,以DamonSet的形式工作在每一个节点,是实现Service负载均衡的控制器。

 image.png

 

kube-proxy支持iptablesipvs两种模式,Kube-proxy的作用是管理Serviceendpoint,更新endpointiptablesipvs中。

 

ipvs模式和iptables模式之间的差异如下:

 

  • ipvs为大型集群提供了更好的可扩展性和性能,当服务大于1000时,ipvs的性能明显优于iptables
  • ipvs支持比iptables更复杂的负载平衡算法(最小负载,最少连接,位置,加权等);
  • ipvs支持服务器健康检查和连接重试等;

 

因此,目前更推荐使用ipvs模式。

 

五、最佳实践

 

1. 实践场景描述

 

SLB设置了externalTrafficPolicy:Local类型,这种类型的SLB地址只有在Node中部署了对应的后端Pod,才能被访问。因为 SLB的地址是集群外使用,如果集群节点和Pod不能直接访问,请求不会到SLB,会被当作Service的扩展IP地址,被kube-proxyiptablesipvs转发。

 

2. 解决方案

 

方案一:

Kubernetes集群内通过ClusterIP或者服务名访问。

 

方案二:

LoadBalancerService中的externalTrafficPolicy修改为cluster,但是在应用中会丢失源IPIngress的服务修改命令如下:

 

kubectl edit svc nginx-ingress-b-nkube-system

 

  • 如果要保留原IPPod需要用hostnetwork方式,在Podspec里加上: dnspolicy: ClusterFirstWithHostNet

hostNetwork: true

servicemetadata里加上:

annotations:

servicebeta.kubenetes.io/bACKend-type: eni

 

  • 如果是terway集群,除了将LoadBalancerService中的externalTrafficPolicy修改为Cluster之外,还要直挂eni:添加service.beta.kubernetes.io/bACKend-type: eni

 

 

本讲小结

 

1.  集群中核心控制器的基本作用。

2.  Kube-proxy负载均衡的原理。

image.png

 

思考:

 

1.  为什么集群内无法访问serviceexternalIP,该怎么解决?

2.  添加新的节点,Pod网络不通,该怎么排查?

3.  service的几种类型,kube-proxy如何实现负载均衡的?

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第26天】Prometheus与Grafana是智能运维中的强大组合,前者是开源的系统监控和警报工具,后者是数据可视化平台。Prometheus具备时间序列数据库、多维数据模型、PromQL查询语言等特性,而Grafana支持多数据源、丰富的可视化选项和告警功能。两者结合可实现实时监控、灵活告警和高度定制化的仪表板,广泛应用于服务器、应用和数据库的监控。
295 3
|
27天前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。
|
2月前
|
运维 Cloud Native 云计算
云原生之旅:Docker容器化实战
本文将带你走进云原生的世界,深入理解Docker技术如何改变应用部署与运维。我们将通过实际案例,展示如何利用Docker简化开发流程,提升应用的可移植性和伸缩性。文章不仅介绍基础概念,还提供操作指南和最佳实践,帮助你快速上手Docker,开启云原生的第一步。
|
2月前
|
运维 监控 应用服务中间件
自动化运维的利器:Ansible实战应用
【10月更文挑战第41天】在现代IT运维领域,自动化已成为提高效率、减少错误的关键。Ansible作为一种简单而强大的自动化工具,正被越来越多的企业采纳。本文将通过实际案例,展示如何使用Ansible简化日常运维任务,包括配置管理和批量部署等,旨在为读者提供一种清晰、易懂的自动化解决方案。
32 1
|
2月前
|
运维 Ubuntu 应用服务中间件
自动化运维工具Ansible的实战应用
【10月更文挑战第36天】在现代IT基础设施管理中,自动化运维已成为提升效率、减少人为错误的关键手段。本文通过介绍Ansible这一流行的自动化工具,旨在揭示其在简化日常运维任务中的实际应用价值。文章将围绕Ansible的核心概念、安装配置以及具体使用案例展开,帮助读者构建起自动化运维的初步认识,并激发对更深入内容的学习兴趣。
74 4
|
2月前
|
消息中间件 运维 UED
消息队列运维实战:攻克消息丢失、重复与积压难题
消息队列(MQ)作为分布式系统中的核心组件,承担着解耦、异步处理和流量削峰等功能。然而,在实际应用中,消息丢失、重复和积压等问题时有发生,严重影响系统的稳定性和数据的一致性。本文将深入探讨这些问题的成因及其解决方案,帮助您在运维过程中有效应对这些挑战。
43 1
|
2月前
|
Kubernetes 监控 安全
容器化技术:Docker与Kubernetes的实战应用
容器化技术:Docker与Kubernetes的实战应用
|
2月前
|
存储 Kubernetes Devops
Kubernetes集群管理和服务部署实战
Kubernetes集群管理和服务部署实战
67 0
|
2月前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第27天】在智能运维中,Prometheus和Grafana的组合已成为监控和告警体系的事实标准。Prometheus负责数据收集和存储,支持灵活的查询语言PromQL;Grafana提供数据的可视化展示和告警功能。本文介绍如何配置Prometheus监控目标、Grafana数据源及告警规则,帮助运维团队实时监控系统状态,确保稳定性和可靠性。
266 0
|
1月前
|
运维 Cloud Native 持续交付
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。