Kubernetes - [01] 概述
容器编排工具
一、什么是Kubernetes
K8s,即Kubernetes,是一个开源的容器管理和自动化部署平台,设计用于简化容器化应用程序的部署、扩展和管理过程。它是Google在2014年基于其内部使用的Borg系统开发并开源的项目,已经成为云原生计算基金会(CNCF)的旗舰项目。
(1)虚拟化部署:可以在一台物理机上运行多个虚拟机,每个虚拟机都是独立的一个环境。
优点:程序环境不会相互产生影响,提供了一定程度的安全性。
缺点:增加了操作系统,浪费了部分资源。
(2)容器化部署:与虚拟化类似,但是共享了操作系统。
优点:
① 可以保证每个容器拥有自己的文件系统、CPU、内存、进程空间等。
② 运行应用程序所需的资源都被容器包装,并和底层基础架构解耦。
③ 容器化的应用程序可以跨云服务商、跨Linux操作系统发行版进行部署。
二、Kubernetes的核心功能和特点
- 容器编排:自动部署、调度和管理容器化应用,确保指定数量的容器实例在任何给定时间运行。
- 服务发现与负载均衡:自动发现应用容器并分配网络访问,同时提供负载均衡以优化资源使用和提高应用可用性。
- 自我修复:当容器失败时,Kubernetes能够自动重启容器、替换容器或杀死不响应的容器,确保应用程序持续运行。
- 可扩展性:无论是无状态还是有状态应用,都能实现横向和纵向的扩展,以应对流量变化。
- 存储卷管理:支持多种存储解决方案,为应用提供持久化存储。
- 自动滚动更新:平滑地更新应用,无需停机,支持金丝雀发布等策略。
- 资源监控与管理:通过资源配额和限制,有效地管理计算资源(CPU、内存)。
- 声明式配置:使用YAML或JSON文件来描述期望的集群状态,Kubernetes确保实际状态与期望状态相匹配。
Kubernetes的架构基于主从(Master-Slave)模型,其中Master节点负责集群的管理决策(如调度),而Worker(或称为Node)节点执行这些决策并运行实际的工作负载(容器)。这一设计使得Kubernetes能够跨机器、跨数据中心乃至跨云提供商进行灵活部署,支持云原生应用的微服务架构和持续集成/持续部署(CI/CD)流程。
三、组件说明
Borg系统架构

Kubernets架构

(1)api server:所有服务访问统一入口
(2)ControllerManager:维持副本期望数目(建议集群副本数 >= 3基数)
(3)Scheduler:负责介绍任务,选择合适的节点进行分配任务
(4)etcd:分布式键值对数据库,存储K8s集群所有重要的信息(持久化)
(5)Kubelet:直接跟容器引擎交互实现容器的生命周期管理
(6)Kube-proxy:负责写入规则至iptables、ipvs实现服务映射访问的
(7)CoreDNS:可以为集群中的svc创建一个域名IP的对应关系解析
(8)Dashboard:给k8s集群提供一个B/S结构的访问体系
(9)Ingress Controller:官方只能实现四层代理,Ingress可以实现七层代理
(10)Federation:提供一个可以跨集群中心多k8s统一管理功能
(11)Prometheus:提供一个k8s集群的监控能力
(12)ELK:提供k8s集群日志统一分析接入平台
四、Pod概念
4.1、自主式Pod
自主式Pod(Ad-Hoc Pod)由用户直接创建,不受到任何控制器的管理。创建方式通常是通过kubectl run命令或者直接向Kubernetes API Server提交包含Pod定义的YAML或JSON配置文件。这类Pod一旦被创建,除非手动删除,否则不会自动消失或重建。这意味着,如果Pod因某种原因(如节点故障、容器崩溃等)退出,它不会自动恢复到运行状态。
自主式Pod适用于一次性任务或者测试场景,不适合需要确保服务高可用性的场景。
4.2、控制器管理的Pod
控制器管理的Pod则是通过各种控制器(如ReplicationController, ReplicaSet, Deployment, StatefulSet, DaemonSet等)来创建和管理的。控制器的主要职责是确保集群中的Pod数量和状态符合预期的配置,即维持Pod的副本数量,处理Pod的扩展、收缩、更新和故障恢复等。当控制器管理的Pod因故终止时,控制器会自动创建新的Pod来替换它,从而保证应用的高可用性和期望的状态。控制器管理的Pod适合长期运行的服务、需要自动扩缩容的应用或者有特定部署需求(如有序部署、持久化存储绑定)的场景。
自主式Pod vs 控制器管理的Pod ?
管理方式:自主式Pod缺乏自动管理机制,而控制器管理的Pod则具备自动化的生命周期管理。
高可用性:控制器管理的Pod能够自动恢复,提供高可用性,自主式Pod则不具备这一特性。
使用场景:自主式Pod适用于临时任务或测试,控制器管理的Pod适用于生产环境中的稳定服务。
运维复杂度:自主式Pod操作简单,但需人工干预维护,控制器管理的Pod虽然配置相对复杂,但能显著减少日常运维工作。
4.3、ReplicationController
ReplicationController用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的Pod来替代;而如果异常多出来的容器也会自动回收。在新版本的Kubernetes中建议使用ReplicaSet来取代ReplicationController
4.4、ReplicaSet
ReplicaSet跟ReplicationController没有本质的不同,只是名字不一样,并且ReplicaSet支持集合式的selector。
4.5、Deployment
虽然ReplicaSet可以独立使用,但一般还是建议使用Deployment来自动管理ReplicaSet,这样就无需担心跟其他机制的不兼容问题(比如ReplicaSet不支持rolling-update但Deployment支持)
4.6、HPA
K8s的HPA全称为Horizontal Pod Autoscaler,即水平Pod自动扩缩放。它是Kubernetes中一个核心功能组件,用于自动调整应用的Pod副本数量,以应对工作负载的变化。HPA通过监控预定义的性能指标(主要是CPU利用率,也可以配置为内存利用率或自定义指标),根据这些指标的实时状况动态地增加或减少Pod的数量,从而保证服务的性能和资源使用的高效性。
Horizontal Pod Autoscaler仅适用于Deployment和ReplicaSet,在V1版本中仅支持根据Pod的CPU利用率扩缩容,在vlalpha版本中,支持根据内存和用户自定义的metric扩缩容。
HPA的工作原理概要如下:
(1)配置指标与阈值:用户通过YAML配置文件或命令行工具(如kubectl)设置HPA策略,包括目标CPU(或内存)利用率、最小与最大Pod副本数等。
(2)监控与评估:HPA控制器周期性地从Metrics API(通常依赖于Metrics Server)收集目标Deployment、StatefulSet、ReplicaSet、ReplicationController中Pod的资源使用情况。
(3)自动调整:当实际指标超过或低于设定的阈值时,HPA将自动调整Pod的副本数量。例如,如果CPU使用率持续高于设定的目标,HPA会增加Pod副本以分担负载;反之,如果CPU使用率低于某个阈值,且存在多余的Pod,则会减少副本数以节省资源。
(4)约束与限制:HPA的操作会在用户定义的最小与最大Pod副本数之间进行,确保扩缩容操作不会超出预设边界。
4.7、StatefulSet
StatefulSet是为了解决有状态服务的问题(对应Deployments和ReplicaSets是为无状态服务而设计),其应用场景包括:
- 稳定的持久化存储,即pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现。
- 稳定的网络标志,即Pod重新调度后其PodName和HostName不变,基于Headless Service(即没有Cluster IP的Service)来实现。
- 有序部署,有序扩展,即pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次依次进行(即从0到N-1,在下一个pod运行之前所有之前的pod必须都是Running和Ready状态),基于init containers来实现。
- 有序收缩,有序删除(即从N-1到0)
OS:感觉星环的TCOS管理Kundb的pod就是用的StatefulSet
4.7、DaemonSet
DaemonSet确保全部(或者一些)Node上运行一个Pod的副本。当有Node加入集群时,也会为他们新增一个Pod。当有Node从集群移除时,这些Pod也会被回收。删除DaemonSet将会删除它创建的所有Pod
使用DaemonSet的一些典型用法:
- 运行集群存储daemon,例如在每个Node上运行glusterd、ceph
- 在每个Node上运行日志手机daemon,例如fluentd、logstash
- 在每个Node上运行监控daemon,例如Prometheus Node Exporter
疑问:给Pod打污点是什么意思?
kubectl taint nodes my-node special=true:NoSchedule具体操作参考 Kubernetes - [06] k8s的"Sao"操作
五、Job & CronJob
Job负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束
Cron Job管理基于时间的Job,即:
* 在给定时间点只运行一次
* 周期性地在给定时间点运行
六、集群类型
Kubernetes 集群大体上分为两类:一主多从和多主多从
(1)一主多从:一台Master节点和多台Node节点,搭建简单,但是有单机故障风险,适合用于测试环境。
(2)多主多从:多台Master节点和多台Node节点,搭建麻烦,安全性高,适合用于生产环境。

— 要养成终生学习的习惯 —
Kubernetes - [01] 概述的更多相关文章
- kafka详解(01) - 概述
kafka详解(01) - 概述 定义:Kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域. 消息队列 MQ传统应用场景之异步处理 使用消 ...
- Zookeeper详解(01) -概述
Zookeeper详解(01) -概述 概念 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目. Zookeeper从设计模式角度来理解,是一个基于观察者模式设计的分 ...
- 【大数据面试】Flink 01 概述:包含内容、层次架构、运行组件、部署模式、任务提交流程、任务调度概念、编程模型组成
一.概述 1.介绍 对无界和有界数据流进行有状态计算的分布式引擎和框架,并可以使用高层API编写分布式任务,主要包括: DataSet API(批处理):静态数据抽象为分布式数据集,方便使用操作符进行 ...
- 01 - 概述 VTK 6.0 迁移
摘要 对vtk版本4和5的管道机制重新架架构的主要目的是:迁移数据对象和算法对象中的管道执行逻辑到一个新集合的类中,我们称这个集合类叫executives.分离数据和执行模型的代码后,可以双双简化修改 ...
- Redis数据库 01概述| 五大数据类型
1.NoSQL数据库简介 解决应用服务器的CPU和内存压力:解决数据库服务的IO压力: ----->>> ① session存在缓存数据库(完全在内存里),速度快且数据结构简单: 打 ...
- Hive 01 概述、安装配置
概述 数据仓库:是一个面向主题的.集成的.不可更新的.随时间不变化的数据集合,它用于支持企业或组织的决策分析处理. 数据仓库的结构和建立过程: 数据源 数据存储及管理 ETL Extract 提取 T ...
- Kubernetes Pod概述
Pod简介 Pod是Kubernetes创建或部署的最小/最简单的基本单位,一个Pod代表集群上正在运行的一个进程. 一个Pod封装一个应用容器,Pod代表部署的一个单位. Pods提供两种共享资源: ...
- 1-2、kubernetes架构概述和kubernetes基础概念
kubernetes https://draveness.me/understanding-kubernetes http://kubernetes.kansea.com/docs/ master/n ...
- 【OracleDB】 01 概述和基本操作
实例概念: Oracle有一个特殊的概念 Oracle数据库 = 数据库 + Oracle文件系统 + Oracle实例 实例处理Oracle的请求,调用文件系统 然后返回结果响应给客户端 单实例和多 ...
- Headfirst JSP 01 (概述)
HTTP 协议 http 是tcp/ip上层协议, 如果你对这些网络协议还不是太熟悉, 下面提供一个非常简单的解释, tcp负责确保从一个网络节点向另一个网络节点发送文件能作为一个完整的文件到达目的地 ...
随机推荐
- 智能存储 | 超质感 HDR 生产,激活你的视神经
视频平台尊贵的会员可以享受 4K HDR 超清视界,各类新型旗舰机都具备拍摄 HDR 视频的能力,3C 产品发布会必提 HDR 超清显示.想必各位看官感受到视觉逐渐被 HDR 浪潮侵袭了,那 HDR ...
- 加速人民币国际化,CIPS迎来三大变化
何谓CIPS? 人民币跨境支付系统(Cross-border Interbank Payment System,简称CIPS)是由中国人民银行组织开发的独立支付系统,为境内外金融机构人民币跨境和离岸业 ...
- 一个.NET开源、易于使用的屏幕录制工具
前言 一款高效.易用的屏幕录制工具能够极大地提升我们的工作效率和用户体验,今天大姚给大家分享一个.NET开源.免费.易于使用的屏幕录制工具:Captura. 工具介绍 Captura是一款基于.NET ...
- 【转载】FISCO BCOS 区块链浏览器的部署
https://www.cnblogs.com/linbin524/p/11101801.html 前提 前面我们已经通过底层部署.sdk调测.自定义智能合约编写与部署.联合单元测试调测,已经初步对F ...
- Qt编写的项目作品7-视频监控系统
一.功能特点 (一)软件模块 视频监控模块,各种停靠小窗体子模块,包括设备列表.图文警情.窗口信息.云台控制.预置位.巡航设置.设备控制.悬浮地图.网页浏览等. 视频回放模块,包括本地回放.远程回放. ...
- Qt音视频开发18-海康sdk回调
一.前言 海康sdk显示实时视频流除了支持句柄方式以外,也支持回调的方式拿到每一张图片自己绘制处理,当然回调除了拿到视频数据,其实音频数据也一块拿到了,自行调用音频设备播放就行,关于海康sdk回调这块 ...
- C#中Newtonsoft.Json(Json.NET)的使用
C#中Newtonsoft.Json(Json.NET)的使用. 添加引用: using Newtonsoft.Json; 调用代码: //获取图书列表 List<BookInfo> bo ...
- OpenGL ES 3.x游戏开发(上+下卷)书籍的电子版+源程序
直接附上电子书以及源代码下载链接:https://pan.baidu.com/s/1G10hw5aIi-Bc2LyktwKrdg
- 基于高德地图API在Python中实现地图功能的方法
本文介绍在高德开放平台中,申请.获取地图API的Key的方法:同时通过简单的Python代码,调取API信息,对所得Key的可用性加以验证. 首先,我们进入高德开放平台的官方网站.如果大家是第 ...
- 高通MSM8909 Mutil-HAL Sensor 调试
Mutil-HAL的介绍: Sensors Multi-HAL 是一个框架,允许传感器 HAL 与其他传感器 HAL 一起运行. Sensors Multi-HAL 动态加载作为动态库存储在供应商分区 ...