Kubernetes(K8S)简介

2023-11-02

目录

一、使用容器原因

二、容器与虚拟机区别

虚拟机

Docker

三、使用K8s原因

四、常用概念

Master

Node

Pod

    为什么提出Pod的概念?

Labels

Namespace

Replication Controller(RC)

Deployment

Service

    服务发现机制

    kube-proxy

    外部系统访问Service

Ingress

Volume

ConfigMap

五、Pod调度

调度说明

Affinity:亲和性调度

Taint(污点)和 Toleration(容忍)


一、使用容器原因

  1. 降低硬件成本,充分利用服务器资源,省钱(不是一星半点);
  2. 更快速的部署开发(性能更好、启动更快)
  3. 易维护(大大节省运维成本)
  4. 更易实现微服务、云原生

二、容器与虚拟机区别

虚拟机

以某种技术将物理资源虚拟成资源池。

通过Hypevisor层(虚拟机管理系统)抽象底层基础设施资源,提供相互隔离的虚拟机。

每一个隔离的虚拟机都建立在GuestOS(客户机操作系统)之上,因此每一个VM不仅需要运行操作系统的完整副本,还要同时运行操作系统运行所需要的所有硬件的虚拟副本,增加RAM、ROM和CPU成本;且由于中间增加的虚拟技术,导致计算、IO、网络性能损失,造成资源浪费。

其完全隔离,安全性更高,擅长于彻底的环境隔离、用户隔离

启动时间在分钟级

Docker

容器技术没有GuestOS(客户机操作系统),用Docker守护进程(一个后台进程)取代虚拟机技术的Hypevisor,直接运行于宿主机操作系统上,负责管理Docker容器;其将容器与宿主机操作系统分离,并将各个容器互相隔离;

所有的容器共享宿主机操作系统内核,减少重复的操作系统代码副本;因此启动更快,消耗资源更低,节省大量的ROM,增加硬件资源利用率;

进程级隔离,更擅长隔离不同的应用,但安全性有所降低

启动时间在毫秒级

三、使用K8s原因

K8s,全称kubernetes,因为首字母是k,结尾字母是s,中间8个字母,因此简称K8s。是Google一个开源容器编排引擎,是容器集群管理系统。

  • 持续开发、集成和部署(自动化)
  • 大规模弹性伸缩
  • 应用容器化

特点

  • 服务发现与负载均衡
  • 存储系统挂载
  • 应用健康检查
  • 滚动更新
  • 资源监控
  • 故障迁移

四、常用概念

Master

集群控制节点,每个Kubernetes集群需要一个Master节点来对集群进行管理和控制,Kubernetes所有控制命令均发送给Master,负责具体执行过程。

Master节点通常会占据一个独立的服务器(物理机或虚机),因为太重要,宕机或不可用,整个控制命令都将失效。

Node

Kubernetes集群中,Master以外的节点均被称为Node节点,Node节点也会占据一个独立的服务器;是Kubernetes集群中的工作负载节点

当某个Node宕机时,其上的工作负载会被Master自动转移至其他Node节点

Pod

Pod是Kubernetes最重要也最基本的概念,是Kubernetes创建、管理、部署的最小单位。一个Pod内部可以封装一个或多个容器,每一个Pod都由Pause容器和用户业务容器组成;Pause容器为Pod的”根容器“,属于Kubrenetes平台的一部分。

Kubernetes直接管理的是Pod而不是容器;在Pod中,所有容器会被统一安排和调度;当Pod中某个容器停止,Kubernetes自动监测并重启该Pod(Pod中所有容器会被一起重启);若Pod所在的Node宕机,则该Node上所有Pod会被调度到其他节点上。

        

    为什么提出Pod的概念?

  • 更容易定义一组容器的状态

假设一个业务需要使用一组容器来跑,当其中一个或多个出现问题,如何定义业务整体是否完好?因此当引入Pod概念,只要其中一个容器出问题,则整个Pod内所有容器将会被重启。

  • 利于容器间共享文件、方便通信

Kubernetes为每个Pod的Pause容器都分配了唯一的IP地址(Pod IP)和一个存储券,Pod中所有业务容器共享Pause的网络和存储,解决了业务容器之间的通信问题及文件共享问题。【Pod IP+containerPort组成Pod的Endpoint,表示Pod的对外通信地址】

Labels

标签,key / value键值对(key和value均由用户指定),Lavel可以附加到各种资源对象上,比如Node、Pod、Service等,一个资源对象可以拥有任意数量的Label,可以通过Label来实现多维度的资源分组管理。

Namespace

用于逻辑隔离不同用户,通过Namespace可以限制不同用户可占用的资源,比如CPU、RAM等,便于不同的分组在共享使用整个Kubernetes集群资源的同时还能被分别管理。

Replication Controller(RC)

  • 控制某Pod副本在任意时刻都符合期望值,若某个副本挂了,则Kubernetes根据RC的定义自动创建并启动一个新的Pod副本(少了新建,多了杀死)【就像一个监控】
  • 滚动升级,通过RC可实现平滑的过度方式,每次停止N个进行升级,旧的N个仍然继续跑,此消彼长,直至全部升级成功,不会全员宕机,产生不可用时间差。

Deployment

ReplicaSet是Replication Controller的升级版,Deployments管理ReplicaSets(不应该手动管理由Desplyoment创建的Replica Set,而是使用Deployment替代管理),引入其是为了更好的解决Pod编排问题,可随时知道当前Pod部署进度。

  • RC的标签选择器只能选择一个标签;ReplicaSet可以控制多个不同标签的Pod副本,支持滚动升级

Service

由于Pod会被动态的销毁或创建(虽然Pod意外死亡会被重建,但已经不是原来的Pod,只是内容上看起来一样),所以其Pod IP是在不断变化的,因此Pod集群需要一个固定的入口进行通信,即Service。

Kubernetes中每个Service就是一个”微服务“,Service定义了一个服务的访问入口,其他服务可通过这个入口地址访问其背后的一组Pod副本组成的集群,Service与Pod集群通过Label Selector(部署服务时的标签)实现”无缝对接“,而RC保证Service的服务能力始终处于预期标准。

主要提供负载均衡与服务自动发现

每个Service都被分配了一个全局的虚拟IP(Cluster IP),在Service的整个生命周期,Cluster IP都不会发生变化,因此具备唯一的IP通信能力(需要配合端口,单独的IP不具备TCP/IP通信基础)。但该IP因为是虚拟的,无法在集群外部ping通,只能在内部使用。

    服务发现机制

在Kubernetes集群内部,Service使用Name和Cluster IP作为映射唯一标识,其他Pod访问该Service,使用Name即可在集群中自动匹配到对应的Service。最初Kubernetes将该配置写维护在Linux环境变量中,后来修改到DNS系统中。

    kube-proxy

kube-proxy部署在每个Node节点上,是实现Service通信与负载均衡机制的重要组件,负责为Pod创建代理服务,维护网络规则和四层负载均衡工作。

在Kubernetes集群中,负载均衡是由kube-proxy实现的,是集群内部的负载均衡,也是一个分布式代理服务器,在每个节点上都存在,具备伸缩性,需要访问服务的节点越多,提供负载均衡能力的kube-proxy就越多,高可用节点也随之增多。

默认情况下,Kubernetes集群采用RoundRobin轮询模式对客户端请求进行负载分发;也可通过设置启用SessionAffinity策略,将同一个客户端IP的请求转发到固定的Pod。

    外部系统访问Service

Cluster IP只能在集群内部使用,采用NodePort可开放外部通信(nodePort指定外部端口),此种方式在Kubernetes集群中每个Node上都开放一个对应的TCP监听端口,使用任意一个NodeIP+nodePort均可访问服务,但由于是NodeIP访问,失去了service的负载均衡能力。

因此需要在多个Node与客户端之间增加LB功能。

    Service配置端口定义

  • port:当在Kubernetes集群内部访问时,通过Cluster IP+port进行TCP/IP通信
  • nodePort:外部系统访问Service的对外端口
  • targetPort:Pod中具体业务容器的端口,比如启动了一个java进程,端口是8080,若该参数不写,默认与port相同。

Ingress

Service的表现形式为IP:Port,工作在四层,而对于HTTP请求来说,不同的URL地址经常对应不同的后盾服务,因此使用Ingress可以实现一个完整的负载均衡器。

Volume

是Pod中能被多个容器访问的共享目录。在Pod上声明Volume,并与容器的目录挂载即可。

  • emptyDir:初始内容为空,无需指定挂载目录,作为临时空间使用,随同Pod一起存在消亡
  • hostPath:在Pod上挂载宿主机的文件或目录
  • 其他:使用网络文件系统或云存储等

ConfigMap

配置信息集合,使镜像和配置信息解耦,实现镜像的可移植性和可复用性

五、Pod调度

调度说明

    Deployment或RC

全自动调度。自动部署一个容器应用的多份副本,并持续监控副本数量,在集群内始终维持用户指定副本数。

但这N个副本最终运行在哪个节点,是Master经过一系列算法得出的最优解,用户无法干预,即部署结果无法预期(主要依据内存和CPU使用率)。

    NodeSelector

定向调度。指定Pod部署节点(Node的标签与Pod的nodeSelector匹配)

若定义的Node标签数量超过Pod副本数,则在这些Node中自动计算出最优解;若定义的Node标签与nodeSelector没有匹配结果,则不会进行Pod部署

    DeamonSet

每个Node仅运行一份Pod副本。调度策略与RC类似,也可指定节点调度,但保证每个节点只运行一个Pod

    Job

批处理调度。启动多个进程去处理一批工作项,处理完成后,整个任务结束

    CronJob

定时任务。

    自定义调度器

schedulerName

Affinity:亲和性调度

  • NodeAffinity:Node亲和性
  • PodAffinity:Pod亲和性

亲和性调度,是pod的一种属性(偏好或者硬性要求),使pod被吸引到一类特定的节点。用于替换NodeSelector的下一代调度策略。由于NodeSelector通过Node的Label进行精确匹配,所以Affinity增加了In、NotIn、Exists、DoesNotExist、Gt、Lt等操作符来选择,使调度策略更加灵活。

  • In:label的值在某个列表中
  • NotIn:label的值不在某个列表中
  • Gt:label的值大于某个值
  • Lt:label的值小于某个值
  • Exists:某个label存在
  • DoesNotExist:某个label不存在

    调度策略

  1. RequiredDuringSchedulingRequiredDuringExecution:硬策略。不满足的就不去,严格按照条件执行;且当Node不满足条件时,同时移除该Node之前运行的Pod
  2. RequiredDuringSchedulingIgnoredDuringExecution:硬策略。作用同1;但当Node不满足条件时,该Node之前运行的Pod不一定被移除
  3. PreferredDuringSchedulingIngnoredDuringExecution:软策略。满足条件的Node中,更优先的调度(尽量保证);且当Node不满足条件时,该Node之前运行的Pod不一定被移除

Taint(污点)和 Toleration(容忍)

Taint与Affinity相反,使Node能够排斥一类特定的Pod;但如果将Toleration应用于Pod上,则这些Pod可以(但不一定)被调度到具有匹配Taint的Node上。Taint和Toleration相互配合,可以用来避免pd被分配到不合适的节点上。

    taint effect

  • NoSchedule:绝不会将Pod调度到具有该污点的Node上
  • PreferNoSchedule:尽量避免把Pod调度到具有该污点的Node上
  • NoExecute:绝不会将Pod调度到具有该污点的Node上,并且把Node上已经存在的Pod移除
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kubernetes(K8S)简介 的相关文章

随机推荐

  • 认识区块链,认知区块链— —区块链开发

    区块链应用形态不同 对应的开发技术也会略有不同 比如中心化的钱包 交易所 APP应用等等 可以认为跟区块链关系不大 完全可以采用互联网技术完成 只有做一些真正贴合区块链概念特征的才会使用到对应的技术 当然区块链中本身也没有新的技术 都是些老
  • 时序预测

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 matlab项目合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 内容介绍 一种基于LSTM模型的股票预测方法和系统 属于股票预测技术领域 本发明技术方法通过搭
  • python笔记

    1 函数的多个返回值 2 交换两个变量 使用中间变量 c a a b b c 不用中间变量 a a b b a b a a b python专用 用元组 a b b a 3 函数内部使用赋值语句修改参数 不会修改外部的实参 4 函数内部调用
  • 怎么通过通过 p 名称空间配置 bean以及怎么去引用/注入其它 bean 对象--ref和怎么去引用/注入内部 bean 对象-内部 bean 对象

    前言 本章是spring基于XML 配置bean系类中第2篇讲解怎么通过通过 p 名称空间配置 bean以及怎么去引用 注入其它 bean 对象 ref和怎么去引用 注入内部 bean 对象 个人主页 尘觉主页 个人简介 大家好 我是尘觉
  • Fragment里面加一个轮播图

    首先先在Fragment中加入banner
  • Eclipse中创建的新项目没src和JRE System Library

    src JRE System Library 因为现有的JRE System Library不是适合的版本 这时更改版本 方法一 项目右键 Build Path Configure Build path remove删去原有JRE Syst
  • adb connect不成功,提示由于目标计算机积极拒绝,无法连接。

    在Windows的命令窗口敲命令 adb connect 192 168 2 X 连接Android电视adb的时候 出现下面的错误提示 unable to connect to 192 168 2 X 5555 cannot connec
  • 量化投资学习-2:股票与美女2-美女的类型

    人生 股票 的起点差不多 人生 股票 的终点差不多 人生 股票 的过程却大相径庭 你会选择哪个 美女 还是普通女 还是丑女 还是妖艳头牌 大家闺秀美女 还是网红美女 几天的邂逅激情 还是一段美好的旅程的 还是天长地久 关注的人多 价格就高
  • GO基础知识总结

    一 GO关键字25个 引导程序整体结构8个关键字 package import const var func defer go return 声明复合数据结构的4个关键字 struct interface map chan 控制程序结构的1
  • log4cplus源码分析

    1 引题 虽然从本科起就学的C 然后在工作的2年时间中也不断的在用C 写代码 虽然基本的语法和一些常用的库函数已经滚瓜烂熟 可是总觉得自己写的代码还不是很专业 特别是看到那些老外们写得代码 从设计 到编码风格 再到各种编程技法的使用有很多都
  • opencv-python图像处理 ---图像轮廓检测与代码实现

    一 轮廓检测 边缘检测虽然能够检测边缘 但是其边缘并不是连续的 图像轮廓用于检测一个整体 来用于后续进行其他处理 opencv提供了两个函数来完成这些操作 findContours 该函数可以查找轮廓 drawContours 绘制轮廓 轮
  • 用keil的时候没有安装对应MCU的库,以STM32F103F为例

    安装keil的时候没有用到这个芯片就没有安装对应的库 重新安装之后遇到的几个坑 打开keil显示没有这个型号 解决方法是安装对应的库 STM32F103F要安装Keil STM32F1xx DFP 2 4 1 pack 安装完库之后 点击O
  • pytorch部署新利器TorchServer

    pytorch的爬坑指南 排坑不易转载请注明出处 参考文档 https github com pytorch serve 由于本地下载pytorch 1 7有问题 刚又瞅一眼现在是需要1 6 所以采用了docker部署 上干货 1 dock
  • BS4爬取物价局房产备案价以及dataframe的操作来获取房价的信息分析

    因为最近要买房子 然后对房市做了一些调研 发现套路极多 卖房子的顾问目前基本都是一派胡言能忽悠就忽悠 所以基本他们的话是不能信的 一个楼盘一次开盘基本上都是200 300套房子 数据量虽然不大 但是其实看一下也很烦要一页一页的翻 如果是在纸
  • SQL11 获取所有员工当前的manager

    SQL11 获取所有员工当前的manager 一 问题描述 二 基本思路 三 完成代码 一 问题描述 二 基本思路 员工表包括普通员工和经理 员工表左连接部门经理表 然后where筛选非经理的员工即可 三 完成代码 select dept
  • Hibernate笔记_Mapping

    1 对Mapping的最好定义 The mappings are applied to express the various different ways of forming associations in the underlying
  • Android资源文件在配置文件中的使用与java代码对资源文件的操作

    一 学习目标 资源文件很多 本节内容只讲下面四种资源文件 1 字符串资源文件 目录 文件名 文件内容 使用 2 尺寸资源文件 目录 文件名 文件内容 使用 3 颜色资源文件 目录 文件名 文件内容 使用 4 图片资源文件 目录 文件名 使用
  • 面试题:两个按递增顺序排列的整数数组 nums1 和 nums2合并到nums1中,并递增排序,只允许开辟常量空间!!

    给你两个按递增顺序排列的整数数组 nums1 和 nums2 另有两个整数 m 和 n 分别表示 nums1 和 nums2 中的元素数目 请你合并 nums2 到 nums1 中 使合并后的数组同样按 递增顺序 排列 只允许开辟常量空间
  • 目录树的遍历及遍历文件的处理

    在将windows上的jsp网页移植到linux环境中时 发现一个个的转换编码及修改默认编码类型太慢 写此脚本进行尝试文件遍历 bin bash SPATH root cheng DIR WebRoot DPATH web find DIR
  • Kubernetes(K8S)简介

    目录 一 使用容器原因 二 容器与虚拟机区别 虚拟机 Docker 三 使用K8s原因 四 常用概念 Master Node Pod 为什么提出Pod的概念 Labels Namespace Replication Controller R