K8S的高级特性

简介: K8S的高级特性

自动扩缩容


需求背景

为了处理突发而不可预测的流量增长
Kubernetes 可以监控你的 pod
并在检测到 CPU 使用率或其他度量增长时自动对它们扩容


k8s提供的解决方案

image.png

1、每个节点上的cAdvisor组件收集每pod上的监控数据
2、Heapster聚集每个cAdvisor收集到的监控数据
3、Autoscaler从Heapster得到监控数据 
   根据计算结果调整副本数量
4、计算出最新的 pod 数量后
   它会去更新 Scale 资源的 replicas 字段
   剩下的工作就由 Replication 控制器、调度器、kublet 来完成


如何计算副本数

image.png


集群扩容-增加新节点

HPA 在需要的时候会创建更多的 pod 实例
但万一所有的节点都满了,放不下更多 pod 了
则集群需要扩容了即往集群中增加新的节点



image.png

  • 发现未被调度的pod
  • 找可用节点
  • 在该节点上调度该pod


autoscaler减少节点数目

如果某个节点上所有 pod 请求的CPU、内存都不到 50%,
该节点即被认定为不再需要

什么情况下该节点不可被回收

如果节点上有系统 pod 在运行、
对非托管 pod,、以及有本地存储的 pod 
该节点不可被归还
否则就会造成这些 pod 提供的服务中断
即只有当 Cluster Autoscaler 知道节点上运行的 pod 能够重新调度到其他节点
该节点才会被归还

节点被选中下线的流程

image.png

当一个节点被选中下线
它首先会被标记为不可调度
ReplicaSet或者其他控制器
创建替代pod并调度到其他剩下的节点


污点和容忍机制


节点声明一个NoSchedule类型的污点

image.png

类似于 男女朋友要结婚之前
男朋友身上有很多缺点
女朋友要考虑下我是否能够容忍男朋友上的缺点
如果容忍则结婚
不能容忍则分手


节点声明一个PreferNoSchedule类型的污点

表示尽量阻止 pod 被调度到这个节点上
但是如果没有其他节点可以调度
pod 依然会被调度到这个节点上

image.png

pod1: 和节点2说 我可以调度该这个节点嘛?
节点2: 我这边没有房间了 都住满了
pod1: 和节点1说 没有其他节点"收留"我了 
      您就行行好吧
节点1: 勉为其难的说那好吧

也类比

大学生刚出校门 
能不给家里要钱就不要钱
实际挣不到钱 没办法生存了
再向家里要钱


节点声明一个NoExecute类型的污点

image.png

节点运行期间
如果在一个节点上添加了 NoExecute 污点
那些在该节点上运行着的 pod,
如果没有容忍这个 NoExecute 污点
将会从这个节点去除

类比

一位将军有几个心腹
某一次打了败仗 
将军性情大变
这些心腹中如果能容忍将军的这一变化 
就继续跟着将军
如果忍受不了 
则会离开将军
另谋高就


亲缘性机制


nodeSelector

image.png

类比:
你对象有很多备胎
但她就一心一意想嫁给你

亲缘性机制


image.png

类比:
你对象有很多备胎
她有80%嫁给你的概率
有20%嫁给备胎的概率

补充

1、还有非亲缘性机制让pod调度在不同的节点上
2、可以给节点设置机架标签 让所有pod调度在同一个机架上


联合集群


需求背景

为确保你不受数据中心级别故障的影响
应用程序应同时部署在多个数据中心或云可用区域中
当其中一个数据中心或可用区域变得不可用时
可将客户端请求路由到运行在其余健康数据中心或区域中的应用程序

image.png

1、数据中心1中有一个k8s集群
数据中心2中有一个k8s集群(目的做数据灾备使用)
2、通过公共的控制面板来管理超级集群中的2个节点(每个节点代表一个k8s集群)
3、超级集群的唯一的访问入口是ingress


两种数据处理模式

数据同步

image.png

控制面板在集群1上做资源操作
集群1将数据同步到集群2

统一分配

image.png

通过控制面板发出创建10个pod的指令
每个集群分别创建5个



相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
Kubernetes 监控 调度
在K8S中,DaemonSet类型资源特性?
在K8S中,DaemonSet类型资源特性?
|
Kubernetes 安全 容器
Kubernetes-Init容器的6个特性
本文主要从以下4个方面介绍Init容器:Init容器作用、Init容器特性、Init容器与应用容器的区别、Init容器实战。
|
存储 Kubernetes Linux
深入剖析Kubernetes:容器编排与 Kubernetes 核心特性剖析
深入剖析Kubernetes:容器编排与 Kubernetes 核心特性剖析
深入剖析Kubernetes:容器编排与 Kubernetes 核心特性剖析
|
Prometheus Kubernetes 监控
在K8S中,DaemonSet类型的资源特性有哪些?
在K8S中,DaemonSet类型的资源特性有哪些?
|
Kubernetes 负载均衡 网络协议
在K8S中,DNS组件有什么特性?
在K8S中,DNS组件有什么特性?
|
Prometheus Kubernetes 监控
在k8S中,DaemonSet类型的资源特性有哪些?
在k8S中,DaemonSet类型的资源特性有哪些?
|
存储 Kubernetes 网络协议
在K8s中,提供的DNS组件是什么?有什么特性?
在K8s中,提供的DNS组件是什么?有什么特性?
|
存储 Kubernetes 监控
容器服务 Kubernetes 版 ACK功能特性
分布式云容器平台ACK One(Distributed Cloud Container Platform for Kubernetes)是阿里云面向混合云、多集群、分布式计算、容灾等场景推出的企业级云原生平台。ACK One可以连接并管理您任何地域、任何基础设施上的Kubernetes集群,并提供一致的管理和社区兼容的API,支持对计算、网络、存储、安全、监控、日志、作业、应用、流量等进行统一运维
419 1
EMQ
|
Kubernetes Cloud Native 物联网
在 Kubernetes 上体验 EMQX 5.0 的 MQTT over QUIC 特性
本文将介绍如何在 Kubernetes 上部署 EMQX 集群并开启 MQTT over QUIC 功能。
EMQ
390 0
在 Kubernetes 上体验 EMQX 5.0 的 MQTT over QUIC 特性
|
Kubernetes API 索引
k8s 1.28重磅发布,Sidecar Containers等45个特性来了!
k8s 1.28重磅发布,Sidecar Containers等45个特性来了!
1119 1