容器编排工具

一、什么是Kubernetes

  K8s,即Kubernetes,是一个开源的容器管理和自动化部署平台,设计用于简化容器化应用程序的部署、扩展和管理过程。它是Google在2014年基于其内部使用的Borg系统开发并开源的项目,已经成为云原生计算基金会(CNCF)的旗舰项目。

(1)虚拟化部署:可以在一台物理机上运行多个虚拟机,每个虚拟机都是独立的一个环境。

优点:程序环境不会相互产生影响,提供了一定程度的安全性。

缺点:增加了操作系统,浪费了部分资源。

(2)容器化部署:与虚拟化类似,但是共享了操作系统。

优点:

① 可以保证每个容器拥有自己的文件系统、CPU、内存、进程空间等。

② 运行应用程序所需的资源都被容器包装,并和底层基础架构解耦。

③ 容器化的应用程序可以跨云服务商、跨Linux操作系统发行版进行部署。

二、Kubernetes的核心功能和特点

  1. 容器编排:自动部署、调度和管理容器化应用,确保指定数量的容器实例在任何给定时间运行。
  2. 服务发现与负载均衡:自动发现应用容器并分配网络访问,同时提供负载均衡以优化资源使用和提高应用可用性。
  3. 自我修复:当容器失败时,Kubernetes能够自动重启容器、替换容器或杀死不响应的容器,确保应用程序持续运行。
  4. 可扩展性:无论是无状态还是有状态应用,都能实现横向和纵向的扩展,以应对流量变化。
  5. 存储卷管理:支持多种存储解决方案,为应用提供持久化存储。
  6. 自动滚动更新:平滑地更新应用,无需停机,支持金丝雀发布等策略。
  7. 资源监控与管理:通过资源配额和限制,有效地管理计算资源(CPU、内存)。
  8. 声明式配置:使用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

  ReplicaSetReplicationController没有本质的不同,只是名字不一样,并且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仅适用于DeploymentReplicaSet,在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] 概述的更多相关文章

  1. kafka详解(01) - 概述

    kafka详解(01) - 概述 定义:Kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域. 消息队列 MQ传统应用场景之异步处理 使用消 ...

  2. Zookeeper详解(01) -概述

    Zookeeper详解(01) -概述 概念 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目. Zookeeper从设计模式角度来理解,是一个基于观察者模式设计的分 ...

  3. 【大数据面试】Flink 01 概述:包含内容、层次架构、运行组件、部署模式、任务提交流程、任务调度概念、编程模型组成

    一.概述 1.介绍 对无界和有界数据流进行有状态计算的分布式引擎和框架,并可以使用高层API编写分布式任务,主要包括: DataSet API(批处理):静态数据抽象为分布式数据集,方便使用操作符进行 ...

  4. 01 - 概述 VTK 6.0 迁移

    摘要 对vtk版本4和5的管道机制重新架架构的主要目的是:迁移数据对象和算法对象中的管道执行逻辑到一个新集合的类中,我们称这个集合类叫executives.分离数据和执行模型的代码后,可以双双简化修改 ...

  5. Redis数据库 01概述| 五大数据类型

    1.NoSQL数据库简介 解决应用服务器的CPU和内存压力:解决数据库服务的IO压力: ----->>> ① session存在缓存数据库(完全在内存里),速度快且数据结构简单: 打 ...

  6. Hive 01 概述、安装配置

    概述 数据仓库:是一个面向主题的.集成的.不可更新的.随时间不变化的数据集合,它用于支持企业或组织的决策分析处理. 数据仓库的结构和建立过程: 数据源 数据存储及管理 ETL Extract 提取 T ...

  7. Kubernetes Pod概述

    Pod简介 Pod是Kubernetes创建或部署的最小/最简单的基本单位,一个Pod代表集群上正在运行的一个进程. 一个Pod封装一个应用容器,Pod代表部署的一个单位. Pods提供两种共享资源: ...

  8. 1-2、kubernetes架构概述和kubernetes基础概念

    kubernetes https://draveness.me/understanding-kubernetes http://kubernetes.kansea.com/docs/ master/n ...

  9. 【OracleDB】 01 概述和基本操作

    实例概念: Oracle有一个特殊的概念 Oracle数据库 = 数据库 + Oracle文件系统 + Oracle实例 实例处理Oracle的请求,调用文件系统 然后返回结果响应给客户端 单实例和多 ...

  10. Headfirst JSP 01 (概述)

    HTTP 协议 http 是tcp/ip上层协议, 如果你对这些网络协议还不是太熟悉, 下面提供一个非常简单的解释, tcp负责确保从一个网络节点向另一个网络节点发送文件能作为一个完整的文件到达目的地 ...

随机推荐

  1. 谈谈Python中的接口与抽象基类

    接触Python比较早的朋友可能都有这样的体会,Python语言虽然也支持面向对象的编程方式, 但是,不像那些纯面向对象的语言(比如Java和.NET)那样严格和规范. 随着项目的规模逐步扩大之后,想 ...

  2. orangepi zero3开启指定频段WiFi热点的指令

    步骤 通过 -c 命令即可指定wifi频段,避免和其他wifi的频段撞在一起. 例如下面这条命令创建了一个频段为40,WiFi名为zero3,网段为192.168.12.0/24的WiFi热点 sud ...

  3. Centos中keytool不起作用的解决方法

    ​keytool是Java开发中用于管理密钥和证书的工具,可以用于生成密钥.创建证书请求.导入和导出证书等操作.你可以在Oracle官网上下载和安装JDK,然后在JDK的 bin目录下找到 keyto ...

  4. 【Amadeus原创】Docker容器的备份与还原

    主要作用: 就是让配置好的容器,可以得到复用,后面用到得的时候就不需要重新配置. 其中涉及到的命令有: docker commit 将容器保存为镜像 docker save -o 将镜像备份为tar文 ...

  5. 云数据备份 | CDN 日志备份最佳实践

    前言 ​ 内容分发网络(Content Delivery Network,CDN),是在现有 Internet 中增加的一层新的网络架构,可以有效降低用户访问延迟,提升可用性. CDN 按照小时粒度对 ...

  6. Microsoft Build 2022 专家对话

    Microsoft Build 2022 专家对话 Build 2022 专家对话地址:https://mybuild.microsoft.com/en-US/sessions/81056450-6f ...

  7. Http2服务调用排坑记

    原文作者:陈友行原文链接:https://www.nginx.org.cn/article/detail/89转载来源:NGINX开源社区著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  8. IDEA跳转到上一个下一个方法的快捷键

    假如一个方法很不规范,写了好几百行,你想去下一个方法,如果用鼠标往下滑,会挺崩溃的.或者有的时候,就是需要一个一个方法往下看,那么IDEA有没有这样方便的快捷键呢?是有的:按住Alt键,再按上/下方向 ...

  9. Qt编写的项目作品19-图片及视频TCP/UDP网络传输

    一.功能特点 多线程收发图片数据和解析图片数据,不卡主界面. 同时支持TCP和UDP两种模式,封装了TCP模式以及UDP模式的客户端类和服务端类. 图片传输客户端同时支持发送到多个服务端,可以作为一个 ...

  10. Qt编写地图综合应用25-echart动态交互

    一.前言 之前用echart组件做过各种效果,随着各种现场应用现场项目的增多,各种需求也都慢慢增加起来,为了满足各种不同类型的需求,近期又抽空重新整理和封装了echart类,主要就是增加了不少的js函 ...