首页 > 其他分享 >云原生技术分享 (二)

云原生技术分享 (二)

时间:2023-12-03 10:03:18浏览次数:32  
标签:原生 容器 控制器 ReplicaSet 技术 集群 Pod 分享 节点

三、Kubernetes

   Kubernetes源于希腊语,意为“舵手”。k8s 缩写是因为 k 和 s 之间有八个字符的原因。它是google在2015开源的容器调度编排的平台。它是建立在Google大规模运行生产工作负载(Borg系统)十几年经验的基础上, 结合了社区中最优秀的想法和实践,已经成为了目前容器编排的事实标准。

   看到Docker和Kubernetes的Logo,就可以很快明白Kubernetes的作用。Docker的Logo是一条鲸鱼船,运载着许多封装好的集装箱(container),代表着一次打包到处运行的意图。而Kubernetes的Logo就是这条船的方向舵!

云原生技术分享 (二)_Pod

Kubernetes主要功能:

自我修复:一旦某一个容器崩溃,能够在1秒中左右迅速启动新的容器

弹性伸缩:可以根据需要,自动对集群中正在运行的容器数量进行调整

服务发现:服务可以通过自动发现的形式找到它所依赖的服务

负载均衡:如果一个服务起动了多个容器,能够自动实现请求的负载均衡

版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本

存储编排:可以根据容器自身的需求自动创建存储卷


Kubernetes组件

云原生技术分享 (二)_API_02

控制平面 Master

集群的控制平面,负责集群的决策

ApiServer : 资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制。可以理解成 API Server 是 K8S 的所有服务的请求入口。API Server 负责接收 K8S 所有请求(来自 UI 界面或者 CLI 命令行工具), 然后根据用户的具体请求,去通知其他组件干活。可以说 API Server 是 K8S 集群架构的大脑。

Scheduler : 负责集群资源调度,按照预定的调度策略将Pod调度到相应的node节点上。可以理解成 K8S 所有 Node 节点的调度器。当用户要部署服务时,Scheduler 会根据调度算法选择最合适的 Node 节点来部署 Pod。

ControllerManager : 负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新等。由一系列控制器组成,通过 API Server 监控整个集群的状态,并确保集群处于预期的工作状态,比如当某个 Node 意外宕机时,Controller Manager 会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。

Etcd :负责存储集群中各种资源对象的信息,k/v方式存储,所有的 k8s 集群数据存放在此。

Kubectl: 命令行配置工具。通过命令行执行各种对k8s集群的操作。

数据平面Node

Kubelet : 安装在node上的代理服务,负责维护容器的生命周期,即通过控制docker,来创建、更新、销毁容器,会按固定频率检查节点健康状态并上报给 APIServer,该状态会记录在 Node 对象的 status 中。

Kube-Proxy:安装在Node上的网络代理服务,提供网络代理以及负载均衡,实现与Service通讯。

Docker : 负责节点上容器的各种操作。

Kubernetes其他常用组件

  • kube-dns负责为整个集群提供DNS服务
  • Ingress Controller为服务提供外网入口
  • Heapster提供资源监控
  • Dashboard提供GUI
  • Federation提供跨可用区的集群
  • Fluentd-elasticsearch提供集群日志采集、存储与查询


Pod

云原生技术分享 (二)_Deployment_03

Pod是kubernetes集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中。Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器。同一个Pod中的容器共享 IP 地址,进程间的通讯,主机名以及其他资源。

pod的生命周期

运行初始化容器(init container)

运行主容器(main container)

容器启动后钩子(post start)、容器终止前钩子(pre stop)

容器的存活性探测(liveness probe)、就绪性探测(readiness probe)

pod终止

云原生技术分享 (二)_Pod_04

Pod的状态:
  • 挂起(Pending):Pod 已被 Kubernetes 系统接受,但有一个或者多个容器镜像尚未创建。等待时间包括调度 Pod 的时间和通过网络下载镜像的时间,这可能需要花点时间。
  • 运行中(Running):该 Pod 已经绑定到了一个节点上,Pod 中所有的容器都已被创建。至少有一个容器正在运行,或者正处于启动或重启状态。
  • 成功(Succeeded):Pod 中的所有容器都被成功终止,并且不会再重启。
  • 失败(Failed):Pod 中的所有容器都已终止了,并且至少有一个容器是因为失败终止。也就是说,容器以非0状态退出或者被系统终止。
  • 未知(Unknown):因为某些原因无法取得 Pod 的状态,通常是因为与 Pod 所在主机通信失败。
pod中的容器

云原生技术分享 (二)_Deployment_05

pod内多个容器之间共享的部分

  • 网络命名空间: IP地址、端口范围、路由表…,同一Pod下容器不能绑定相同端口
  • UTS命名空间: 主机名,同一Pod下容器拥有相同hostname
  • IPC命名空间:UNIX域socket

pod内多个容器之间不共享的部分:

容器的文件系统(Mount Namespace)与其他容器完全隔离,但我们可以使用名为volume的Kubernetes资源来共享文件目录

容器的进程空间(PID Namespace)默认与其他容器完全隔离,不过可以设置POD的shareProcessNamespace这个值为true来进行共享

Pod控制器

ReplicaSet(RS)

 Kubernetes 中的一个重要组件,它用于确保指定数量的 Pod 副本正在运行

重要特性

Pod 副本数的控制:通过 ReplicaSet,用户可以指定想要的 Pod 副本数目,ReplicaSet 会自动创建或删除 Pod 副本来达到该数量。

根据标签选择器筛选 Pod:ReplicaSet 会基于一组标签选择器来选择匹配的 Pod,以便创建或删除相应的 Pod 副本。标签选择器可以指定某个应用的所有 Pod,也可以根据不同的部署环境来选择特定的 Pod。

确保 Pod 的健康状态:ReplicaSet 会监控所有的 Pod 副本的运行状态,并确保在有 Pod 发生故障时进行恢复。如果某个 Pod 副本意外退出,ReplicaSet 会自动创建一个新的 Pod 副本来代替它,以维持指定的副本数。

滚动更新和回滚:ReplicaSet 还支持滚动更新和回滚操作,用户可以通过指定更新的策略和版本号,对应用程序进行更新和回滚操作。

与其他控制器的协作:ReplicaSet 可以与其他 Kubernetes 控制器对象(如 Deployment)协同工作,来完成应用程序的部署和管理任务。

ReplicaSet 控制器的控制循环过程如下

ReplicaSet 控制器监视 Pod 的状态,确保其与当前 ReplicaSet 配置文件中定义的副本数一致。

数量小于情况:如果当前 Pod 的数量小于 ReplicaSet 配置文件中定义的数量,则 ReplicaSet 控制器会启动新的 Pod 副本来替换当前缺少的 Pod。

数量大于情况:如果当前 Pod 的数量大于 ReplicaSet 配置文件中定义的数量,则 ReplicaSet 控制器会停止一些 Pod 副本,以保持与定义的数量一致

Deployment 

Deployment是kubernetes中最常用的资源对象,为ReplicaSet和Pod的创建提供了一种声明式的定义方法,在Deployment对象中描述一个期望的状态,Deployment控制器就会按照一定的控制速率把实际状态改成期望状态,通过定义一个Deployment控制器会创建一个新的ReplicaSet控制器,通过ReplicaSet创建pod,删除Deployment控制器,也会删除Deployment控制器下对应的ReplicaSet控制器和pod资源。

使用Deployment而不直接创建ReplicaSet是因为Deployment对象拥有许多ReplicaSet没有的特性,例如滚动升级和回滚。


云原生技术分享 (二)_Pod_06

编辑yaml,在spec节点下添加滚动更新策略

strategy:
  type: RollingUpdate #滚动更新策略
  rollingUpdate:
    maxUnavailable: 25%
    maxSurge: 25%

云原生技术分享 (二)_API_07


金丝雀发布

Deployment支持更新过程中的控制,如"暂停(pause)"或"继续(resume)"更新操作。

     比如有一批新的pod资源创建完成后立即暂停更新过程,此时,仅存在一部分新版本的应用,主体部分还是旧的版本。然后,再筛选一小部分的用户请求路由到新的pod应用,继续观察能否稳定地按期望的方式运行。确定没问题之后再继续完成余下的pod资源滚动更新,否则立即回滚更新操作。这就是所谓的金丝雀发布。

DaemonSet

DaemonSet类型的控制器可以保证在集群中的每一台(或指定)节点上都运行一个副本。一般适用于日志收集、节点监控等场景。如果一个Pod提供的功能是节点级别的(每个节点都需要且只需要一个),那么这类Pod就适合使用DaemonSet类型的控制器创建。

云原生技术分享 (二)_Deployment_08

DaemonSet控制器的特点:

  • 每当向集群中添加一个节点时,指定的 Pod 副本也将添加到该节点上
  • 当节点从集群中移除时,Pod 也就被垃圾回收了

使用举例:

各种网络插件的 Agent 组件,都必须运行在每一个节点上,用来处理这个节点上的容器网络。

各种存储插件的 Agent 组件,也必须运行在每一个节点上,用来在这个节点上挂载远程存储目录,操作容器的 Volume 目录。

各种监控组件和日志组件,也必须运行在每一个节点上,负责这个节点上的监控信息和日志搜集。

DaemonSet 又是如何保证每个 Node 上有且只有一个被管理的 Pod 呢?

DaemonSet Controller,首先从 Etcd 里获取所有的 Node 列表,然后遍历所有的 Node。这时,它就可以很容易地去检查,当前这个 Node 上是不是有一个携带了 name=fluentd-xxxx 标签的 Pod 在运行

而检查的结果,可能有这么三种情况:

没有这种 Pod,那么就意味着要在这个 Node 上创建这样一个 Pod;

有这种 Pod,但是数量大于 1,那就说明要把多余的 Pod 从这个 Node 上删除掉;

正好只有一个这种 Pod,那说明这个节点是正常的。其中,删除节点(Node)上多余的 Pod 非常简单,直接调用 Kubernetes API 就可以了。

DaemonSet 其实是一个非常简单的控制器。在它的控制循环中,只需要遍历所有节点,然后根据节点上是否有被管理 Pod 的情况,来决定是否要创建或者删除一个 Pod。

标签:原生,容器,控制器,ReplicaSet,技术,集群,Pod,分享,节点
From: https://blog.51cto.com/u_6478076/8664466

相关文章

  • 关于企业级 Web 应用搜索引擎优化(Search Engine Optimization)的一些工作经验分享
    笔者之前的社区文章,分享了自己在日常工作中从事企业级Web应用开发的一些工作体会:企业级Web应用里使用CSS调整应用外观的一些例子谈谈企业级Angular应用的二次开发-基于AngularComponent替换的Extensibility支持案例介绍所谓企业级前端应用,是指为大型企业或组......
  • 探索 Web API:SpeechSynthesis 与文本语言转换技术
    一、引言随着科技的不断发展,人机交互的方式也在不断演变。语音识别和合成技术在人工智能领域中具有重要地位,它们为残障人士和日常生活中的各种场景提供了便利。WebAPI是Web应用程序接口的一种,允许开发者构建与浏览器和操作系统集成的应用程序。本文将探讨WebAPI中的Spe......
  • SAP ABAP 各种增强技术(Enhancement)概述 - 所谓第一代,第二代,第三代增强技术的出处试
    本文回答笔者这篇教程:如何通过增强(Enhancement)的方式给SAPABAP标准程序增添新功能评论区的读者留言:这个和第一二三四代以及badi增强有什么联系呢?笔者从2007年一月就在SAP中国使用ABAP进行SAP产品开发了,说实话SAP内部不会把ABAP各种增强技术简单得冠之以第一......
  • SAP ABAP 显式增强技术之 New BAdI 的技术原理介绍试读版
    本教程之前的文章,对SAPABAP各种增强技术做了一个概述:122.SAPABAP各种增强技术(Enhancement)概述-所谓第一代,第二代,第三代增强技术的出处是?然后第62篇文章,针对下图红色区域的基于EnhancementFramework增强技术中的隐式增强之ABAP报表增强,做了详细介绍:62.如何......
  • Web 应用显示 Icon 的几种技术盘点
    在Web前端应用开发中,渲染图标是一个常见的需求,可以通过多种技术来实现。图标在用户界面中扮演着重要的角色,提供直观的视觉反馈和更好的用户体验。以下是一些常见的前端图标渲染技术,以及它们的一些优缺点。**1.字体图标(IconFonts)字体图标是将图标作为字体文件(通常是.ttf或.o......
  • 【涨薪技术】0到1学会性能测试 —— 分类及应用领域
     【涨薪技术】0到1学会性能测试——分类及应用领域上一次推文我们分享了性能测试相关的专业术语,今天我们来看下性能测试的分类及应用领域!后续文章都会系统分享干货,带大家从0到1学会性能测试~性能测试划分01、负载测试负载测试是指服务器最大负载能力;02、压力测试压......
  • 拓数派荣获“2023年杭州市企业高新技术研究开发中心”认定
    近日,拓数派上榜由杭州市科学技术局公布的“2023年杭州市企业高新技术研究开发中心名单”,通过专业的技术研发、成果转化和高新技术产业化成绩,获得“杭州市拓数派数据计算企业高新技术研究开发中心”认定。图为:“杭州市拓数派数据计算企业高新技术研究开发中心”认定证书拓数派数据计......
  • 数仓虚拟化技术:PieCloudDB Database 通过中国信通院 2023 「可信数据库」性能评测的强
    “可信数据库”是国内首个数据库的评测体系,被业界广泛认可为产品能力重要的衡量标准之一。PieCloudDBDatabase在该评测中展现出卓越的数据处理速度、稳定性和可扩展性,为用户提供了强大的数据分析和查询能力。6月15~16日,中国信通院2023上半年“可信数据库”评测专家评审会......
  • PostgreSQL 16 正式登场,拓数派代码贡献揭示中国顶尖技术实力
    得益于全球的开发者贡献,PostgreSQL已成长为一款拥有众多全球用户和贡献者、成熟稳定的开源数据库。2023年9月14日,PostgreSQL全球开发小组正式发布16版本。本次新版本带来了众多惊喜。值得一提的是,本次发布中的贡献者中共有33名来自中国,而拓数派占其中1/6。作为开源数据库领......
  • 【PostgreSQL 数据库线下沙龙(武汉站)】PieCloudDB Database :云原生分布式虚拟数仓的诞
    2023年6月3日,开源软件联盟PostgreSQL中文社区在武汉举办了技术沙龙活动。本次活动主题围绕未来数据库展开讨论和分享。通过探讨未来数据库的概念和特点,为智能化时代的发展提供更多的支持和服务。同时,通过探讨数据库和AI技术的共生共荣,推动数字经济的发展和创新,开创未来数据库的新......