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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 控制器列表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搭建和管理企业级网站应用
相关文章
|
8天前
|
存储 Kubernetes 负载均衡
CentOS 7.9二进制部署K8S 1.28.3+集群实战
本文详细介绍了在CentOS 7.9上通过二进制方式部署Kubernetes 1.28.3+集群的全过程,包括环境准备、组件安装、证书生成、高可用配置以及网络插件部署等关键步骤。
72 3
CentOS 7.9二进制部署K8S 1.28.3+集群实战
|
8天前
|
Kubernetes 负载均衡 前端开发
二进制部署Kubernetes 1.23.15版本高可用集群实战
使用二进制文件部署Kubernetes 1.23.15版本高可用集群的详细教程,涵盖了从环境准备到网络插件部署的完整流程。
17 2
二进制部署Kubernetes 1.23.15版本高可用集群实战
|
8天前
|
存储 Kubernetes 测试技术
k8s使用pvc,pv,sc关联ceph集群
文章介绍了如何在Kubernetes中使用PersistentVolumeClaim (PVC)、PersistentVolume (PV) 和StorageClass (SC) 来关联Ceph集群,包括创建Ceph镜像、配置访问密钥、删除默认存储类、编写和应用资源清单、创建资源以及进行访问测试的步骤。同时,还提供了如何使用RBD动态存储类来关联Ceph集群的指南。
24 7
|
8天前
|
存储 Kubernetes 数据安全/隐私保护
k8s对接ceph集群的分布式文件系统CephFS
文章介绍了如何在Kubernetes集群中使用CephFS作为持久化存储,包括通过secretFile和secretRef两种方式进行认证和配置。
19 5
|
8天前
|
Kubernetes 负载均衡 应用服务中间件
kubeadm快速构建K8S1.28.1高可用集群
关于如何使用kubeadm快速构建Kubernetes 1.28.1高可用集群的详细教程。
25 2
|
9天前
|
Kubernetes Linux API
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇
该博客文章详细介绍了在CentOS 7.6操作系统上使用kubeadm工具部署kubernetes 1.17.2版本的测试集群的过程,包括主机环境准备、安装Docker、配置kubelet、初始化集群、添加节点、部署网络插件以及配置k8s node节点管理api server服务器。
37 0
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇
|
11天前
|
API UED 开发者
超实用技巧大放送:彻底革新你的WinForms应用,从流畅动画到丝滑交互设计,全面解析如何在保证性能的同时大幅提升用户体验,让软件操作变得赏心悦目不再是梦!
【8月更文挑战第31天】在Windows平台上,使用WinForms框架开发应用程序时,如何在保持性能的同时提升用户界面的吸引力和响应性是一个常见挑战。本文探讨了在不牺牲性能的前提下实现流畅动画与交互设计的最佳实践,包括使用BackgroundWorker处理耗时任务、利用Timer控件创建简单动画,以及使用Graphics类绘制自定义图形。通过具体示例代码展示了这些技术的应用,帮助开发者显著改善用户体验,使应用程序更加吸引人和易于使用。
29 0
|
4天前
|
运维 Cloud Native 云计算
云原生之旅:从容器化到微服务架构的演进之路
在数字化浪潮中,云原生技术如同星辰大海中的灯塔,为航船指引方向。本文将带你穿梭于云计算的世界,探索从容器化技术到微服务架构的变革旅程。我们将一窥云原生如何助力企业灵活应对快速变化的市场需求,以及在这一过程中,开发者和运维人员是如何成为时代变革的弄潮儿。让我们一同启航,驶向云原生的广阔天地。
|
1天前
|
运维 Cloud Native 云计算
云原生之旅:从容器化到微服务架构
【9月更文挑战第9天】在数字化转型的浪潮中,云原生技术成为推动企业IT革新的关键力量。本文将通过浅显易懂的语言和生动的比喻,带领读者探索云原生的核心概念、关键技术及实践路径,揭示如何在云计算时代构建灵活、高效、可靠的应用系统。你将了解到,正如甘地所言“你必须成为你希望在世界上看到的改变”,在云原生的世界里,每一位开发者和技术决策者都扮演着塑造未来的角色。
|
1天前
|
资源调度 Cloud Native 安全
云原生时代的微服务架构演进之路
【9月更文挑战第9天】在云计算技术不断演进的今天,云原生成为了推动现代软件开发的关键力量。本文将通过浅显易懂的语言和生动的比喻,带领读者一探云原生时代下微服务架构的发展脉络,揭示如何在云平台上构建、部署和管理微服务应用。我们将从微服务的诞生谈起,逐步深入到容器化、服务网格等高级话题,并以代码示例为引导,展示云原生微服务的实践之道。