k8s_day01_01

2023-11-17

k8s_day01_01
1、it发展趋势
image-20211123134352863

​ it 的发展趋势中,我们最早的资源粒度从最早的物理机时代 到达十年之前的 kvm 还有xen 为代表的虚拟化代表的虚拟机时代 ,那个时候,VMware是如日中天的时期,vmware 以产品众多且成熟 而且是虚拟化的先行者 ,所以在当时的商业领域中 颇负盛名。

​ 在开源领域中,仍然以xen 为代表的 称之为 准虚拟化或者半虚拟化技术,以及像后来的kvm 严重依赖于cpu ,内部固有的硬件虚拟化技术hvm 也称之为硬件辅助的虚拟化技术 也成为完全虚拟化技术为代表的这2类产品 ,给IT 环境带来了很大的变化。

​ 其实我们之前讲过,运维工程师主要有三大任务之一的就是 资源管理。过去呢,在虚拟机出现之前,只能分配物理机给他们,需要审批上架之类一系列的服务,后来有了虚拟机之类的技术,只要在多台物理服务器之上构建出一个统一的虚拟化管理环境, 一旦测试或开发工程师用到新的主机、实例或者隔离的环境时候,只须申请相对应的工单 ,选择是批复否通过即可,大大的提升了当时的效率。

​ 2013年后,docker的出现 改变了当时一贯的 打包、分发 软件构建逻辑。 对于软件程序来说,尤其是C开发的程序,非常依赖底层的平台环境,一个程序编译完后,如果是x86环境编译的想切换到x64环境运行,只能重新编译。

​ 所以在我们交付一个软件时,客户端可能有各种各样的软件平台 是不一样的,底层硬件平台所构建的操作系统 OS 又是不一样的,必须提供一个巨大的产品矩阵才能满足所有的用户需要,这对于我们程序打包发布来讲是及其麻烦的,所以在学了docker 容器之后,不考虑底层内核操作系统的差异话,一次打包构建之后就能到处运行了。因此极大的便捷了软件的打包发布流程。

2、容器 原理

​ 但是我们知道,容器所实现的这种功能 ,无非就是在底层一个 一层硬件和内核的基础之上,实现了用户空间的切分。在正常情况下一个内核空间之上只有一个用户空间,我们把这个用户空间 进行切分,每个用户空间用来运行一个独立的应用程序及其子进程,这个每一个用户空间就叫做userspace ,就完全把它当作一个容器来对待,只有运行中的叫容器,未运行的在docker 容器的语境中叫镜像。

每个镜像就是一个独立的根文件系统,它拥有一个程序运行所依赖的库文件、运行环境 配置文件等等。这个文件在docker打包构建时,为了能实现镜像层级的复用,它采取了一个非常有创意的技术:分层构建、联合挂载的技术,依赖于高级的文件系统 aufs、overlayfs2 (可以理解为这就是它的存储驱动),有时候把它称为 ‘graphdriver’? ,对于镜像来说是分层构建的,基于某一个应用来讲,要把它所用到的所有镜像 叠加起来 统一挂载在统一的一个用户空间,我们把它称为联合挂载机制 。

容器运行起来之后就是一个独立的用户空间,之所以内存在 就是因为内部有一个进程存在。因为之所以一个用户空间是运行状态的,就意味着内部有一个ID 号为1 的进程,而后呢 其他进程都是该进程的子进程 我们把它称为用户的supervisor 进程, 学习操作系统的都知道这是一个 init 进程(后来叫systemd),而现在呢由于容器内只运行一个进程及其子进程,所以id为1的进程就是应用程序自身,比如通常nginx 容器的id为1 的就是nginx 的master 进程, worker 进程坏了不碍事,如果父进程终止了,其子进程也会终止,这个容器也就宕机了。一个进程接受到singnl term 或 kill 的信号就会终止. 这个id为1的进程能够接受处理 外部的信号。

3、容器技术缺点

​ 简单来说 ,就是把一个内核支撑之上的用户空间 强行分成多个用户空间,让每个用户空间内部只运行一个进程 ,从而产生那种人为的隔离效果。 这种隔离一定是藕断丝连的,因为它底下共享的是统一组内核管理下资源 ,尽管做了各种各样的隔离,但是相比较传统的主机及虚拟化技术 ,还是有很大区别和隔离不好的特点,所以对于那些要求隔离达到严格、苛刻的那种应用程序 ,传统的主机及虚拟化技术仍然有它的用武之地

4、docker三大基础组件

​ docker 容器技术中有三个非常重要的组件,由docker cllient 、 docker host、 docker registry 所组成的运行环境。部署了docker 的主机叫做docker host ,通常会运行一个进程叫docker daemon 和docker 客户端进行交互, docker 客户端通常部署在本机上,通过本机的127 回环地址建立通信。事实上我们也可以把客户端构建在远程主机之上,叫docker client 与doker daemon 进行基于https 的rpc 通信, 能接收来自客户端的指令 docker start stop … 去管理docker主机上的各种镜像 :容器 container 、image、network、volume … (这些都可以称为docker 镜像)

docker  客户端 就是对这些镜像实现进行增删查改的请求,因为他们是能够通过http 协议  映射到http中post、get 、delete 之类的一些方法去实现。

​ 如果想在docker host 上 启动并且运行一个软件,有个基本要求 ,‘dockergraph ”?上必须存有镜像,docker host 上如果没有 则必须依赖另一个组件registry,称为docker 注册表?可以叫docker 仓库 ,但是这并不是很精确。registry 上可以有很多个厂库,而且一个厂库通常是右一个程序的多个不同版本组成的 ,比如我们称为nginx 厂库,意味厂库内有以nginx标签为区别的各种镜像 镜像的表示由repo + tag 组成。 有名的registry 有 dockerhub Quey

5、容器带来的排障问题

​ docker 部署: 正常情况下, 单个docker 容器很难发生作用,除了部署起来很方便,但是由于每个容器都是一个隔离的用户环境,对运维没有益处反而有害,原因各位都明白,如果容器内只运行一个一个程序init docker 自身,如果出现bug ,我们想去诊断,在容器内会缺乏各种工具, tcpdump、ls 可能都没有,如果有, 则会被打包在每一个镜像当中,会 使得镜像太大了,分发起来不方便,很难越过文件边界系统去使用。

6、 docker 网络

docker 容器内的2个进程想通信怎么办? 需要用到docker 网络: 3个模型:

参考 :https://blog.csdn.net/mtldswz312/article/details/102901424

  • none: 不使用网络,意味只能一个用户空间或者容器内 的本地进程之间 通过 回环网络 进行通讯,则不能对外通信

  • brige:

  • host: 直接共享宿主机的内核空间

  • 联盟容器: 一个容器加入到另一个容器的网络之中去, 那么这2个进程可以通过 进行通讯

overlay的网络模型:也叫叠加网络 vxlan vlan

7、正常情况下跨2个容器宿主机的通信存在的问题:
7.1 隧道 :叠加网络(覆盖网络)模型

​ H表示主机地址,c 表示容器地址

  • 都是 H1 主机上有容器 c1 , H2 上有容器c2

    c1访问 c2

    c1先要把SANT 源地址转换 成为H1的地址, 访问 H2 的30080端口【容器C2暴露的端口】, H2 则需要通过目标地址转换成c1的地址,所以c1 、 c2 老死都不知道 对方的真实地址。 因为c1 请求 看到的是H2地址 c2请求看到的是 H1 地址。

    当容器数量变多时, 访问的关系就变得复杂,且效率低下

    叠加网络(覆盖网络)模型 缺点

    在两台主机上 ,用ipip 隧道进行通信 ,c1 和c2 请求看到的是对方的真实地址

    缺点 传统以太网MTU值是1500 , c1 c2在封装报文时 ,因为多分装了ip头,会产生巨型帧,所以内层c1 c2 的MTU 值必须得设置的小一些 ,这样就降低了传输了效率,每次发报文都要额外占用几十个字节

7.2 路由表:(underlay 承载网络):

​ 容器、主机在一个大二层网络,容器之间都在一个网段下 如10.0.0.0/8 , c1 把H1 当作路由器 ,c2 把H2 当作路由器。 c1 访问c2 时 直接通过宿主机间的路由 H1、H2 当作下一跳,通过路由表直接访问。 缺点: 由于存在太多的容器、主机,且动态变化, 每个主机必须维护 到其他主机的动态路由表。

​ 解决方法 :就是搞一个注册中心 或者路由表的方式通过BGP 路由学习【缺点是当host 过多时或变化屏藩时,产生的路由学习报文会很大】

​ 比如现在有3个主机 ,注册中心给每个主机的网段 是 172.16.1.0/16 、172.16.2.0/16 、172.16.3.0/16 、172.16.X.0/16,每加一个主机就是一个新的子网段。 这个网络分配的结果向注册中心汇报,每个主机上运行一个守护进程 作为客户端始终注册监听着数据信息的改变,一旦注册中心的数据发生改变就会更新自己的路由表。 underlay 模型特点就是1到N ,一台主机到另外其他的所有主机都可能是下一跳。

​ 这种网络模型产生(或者叫引入)的问题就是 : docker 容器天生的轻量便捷性就意味着变动频繁,如果一个docker host 运行一个 nginx 容器 ,后来这台主机挂了,生成新nginx容器 就会产生新的网络配置,客户端就访问不到新的nginx 容器

8、docker 本质

​ docker 用到容器技术不是创新 ,容器用的是内核技术 ,docker 本身可认为是一个UI或者叫Manager ,调用了内核的功能,之所以大火是因为docker 创造性发明了镜像技术

9、ks 什么是?

ks 就是一个组件 ,把底层物理机的资源集合起来 抽象成为资源池,而后把抽象的结果以接口提供给客户端 ,客户端只要向ks 提前运行容器的请求,容器就能跑起来,至于跑到哪,不用管

10、ks 优点及带来的职业趋势

​ 当单个实例无法承载我们访问 请求时 ,过去的策略是 加机器 上负载均衡。 ks 的话 ,如果容器的数量不够用,会自动创建容器并且添加到负载均衡器,这个过程是自动的,当然也可以手动介入。纯自动的话,可以创建 控制器,控制器会监控容器数量,多一个或少一个都直接添加删除。 而且可以在这个控制器上添加一个二级控制器,二级控制器可以对接到监控系统上,监控系统会采集一级控制器下容器内存、cpu的指标,如果过低,或者过高, 就控制一级(底层的)控制器 添减容器数量,知道这些容器的内存、cpu指标均为达到 监控系统的阈值。

​ 这就是运维工程师的核心职责 ,这听起来很好 ,但是容器大多是有状态的应用 如果mysql 主从 ,就不能随便增减。 在ks上 ,有专业的运维工程师,把特定 集群容器的的管理经验沉淀下来, 代码化, 这个代码在ks 上 叫做 operator ,也就是运维工程师 。如果要运行mysql 主从 ,只要创建 mysql 的operator 即可。可以实现mysql 的搭建、数据备份。 对于有经验的运维开发工程师 ,从事开发operator ,或者对ks 二次开发 更好,也就是SRE【把运维经验工具化】。

11、ks 组件构成

ks 上 的节点有2种角色 master 和 worker

master node 有以下几个组件构成:

  • API server
  • Contoller Manger 负责管理各种各样的控制器
  • scheduler 调度器
  • Etcd 强一致性 分布式注册中心 或者叫 kv 存储服务器。本来API server 是要存各种各样的数据的,但是它没有存 ,而是利用ectd 存各种各样的数据

worker node

  • kubelet 与master建立通信,一直保持联络,能执行master 下发的指令,执行master所要执行的任务

  • kube-proxy 代理服务组件

  • container engine 遵循oci的引擎 ,用于运行容器

这3个客户端组件 只会和 apiserver 服务端进行交互。 apiserver 是整体的控制中心,什么事都不干,除了存数据,真正的数据中心是这个Controller Maneger ,cm 并不会直接指挥kubelet 工作, 而是 cm 会查询apiserver 的状态 ,如过 结果不对就请求改变这个结果,而kubelet 会看见apiserver 的改变 ,也就看到了指令

apiserver 借助 etcd 存储状态数据。 kube-proxy kubelet 和 API server 通信的结果 、和scheduler 的下发结果。

12 、容器运行的流程

​ 现在要运行一个容器 ,既可以用controler 运行容器 ,也可以直接请求运行容器。

​ 客户端想请求运行容器 用到kubectl, 提交请求后 scheduler 会发现 这个容器还没有被调度,scheduler 就会从这几个容器中找一个合适运行容器的节点w2 ,scheduler 并不会直接告诉w2 ,而是告诉API server。w2 的kubelet会一直watch API server ,关注其中和自己相关的事件,一旦发现某个调度请求和自己相关,自己就会执行相应的操作。

worker node叫数据节点

master 叫 控制节点

image-20211123133913616

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

k8s_day01_01 的相关文章

  • MVC和依赖注入,被迫使用单例Controller?

    我正在致力于构建一个根据 MVC 原则运行并利用依赖注入的 PHP 框架 我想我已经把前端控制器部分放下了 有一个工作路由器实例化控制器实例并根据请求的 URI 调用适当的操作 接下来是依赖注入 我想实现一个使用反射解决依赖关系的容器 这样
  • 如何将 JSON 数据从 Android 发送到 php url?

    我想将登录信息从我的应用程序发送到 php url 因为这我的应用程序将崩溃 任何人都可以帮助我解决这个问题 这是我的服务器登录方法 我想将数据发送到此登录方法 Method public method login Parameters 3
  • 如何使用 php 从字符串中提取日期

    我需要从字符串中提取日期 下面是我的代码和字符串 str Updated status to Masters Software Engineering Enrolled Documents to Send on 03 06 2014 14
  • PHP strtotime() 未返回正确的月份

    由于当前月份 年份是 2012 年 1 月 为什么以下代码返回 2011 年 12 月而不是 2011 年 11 月 echo date F Y strtotime 2 months 如果有影响的话 这是在 PHP 5 3 0 上 要获得您
  • 将字符串分解为标记,保持引用的子字符串完整

    我不知道我在哪里看到它 但是谁能告诉我如何使用 php 和 regex 来完成这个任务 this is a string that has quoted text inside 我希望能够像这样爆炸它 0 this 1 is 2 a 3 s
  • 间歇性 PHP 抽象类错误

    我已经为此奋斗了一段时间 但无法弄清楚 也许其他人也有 或者 Slim PHP Apache 等这里有更深层次的问题 在正常工作几个小时后 我的 Slim 安装将开始给出所有路线均如此 致命错误 类 Slim Collection 包含 1
  • CakePHP - 选择性 SSL

    如何对网站的某些部分强制使用 HTTPS 例如登录页面或注册页面 并使用 HTTP 来完成网站的其余部分 我最喜欢的强制转换为 https 的方法是将其作为 php 脚本中的第一件事 它可以在 Joomla 中运行 也可以在 CakePHP
  • 使用控制器通过 codeigniter 处理返回的自定义 css 和 javascript 文件

    我正在开发一个 php codeigniter 项目 我正在考虑创建一个专门用于处理返回自定义 css 和 javascript 文件的控制器 在之前的项目中 我在视图文件的标头中包含了外部 CSS 和 JS 文件 但它们本质上必须是静态的
  • Laravel:使用 Faker 播种多个独特的列

    介绍 怎么样 伙计们 我有一个关于模型工厂和多个独特列的问题 背景 我有一个名为 Image 的模型 该模型将语言支持存储在单独的模型中 图片文字 图片文字 has an image id栏 语言栏和文本栏 图片文字有一个约束MySQL那个
  • 如何使用 AJAX/jQuery 显示打印内容?

    所以我试图理解整个 AJAX jQuery 的事情 现在 当我单独运行这个 PHP 脚本时 我必须等待并观察轮子旋转 直到循环完成然后加载 while row mysql fetch array res postcode to storm
  • 如何解决 注意:未定义索引:第 21 行 C:\xampp\htdocs\invmgt\manufactured_goods\change.php 中的 id [重复]

    这个问题在这里已经有答案了 我的 PHP 代码有一个问题 显示 注意 未定义的索引 我确信它非常简单 因为我是初学者 所以我不太清楚到底出了什么问题 所以请帮助我 这是代码
  • laravel 5.3 新的 Auth::routes()

    最近开始使用laravel 5 3写博客 但是运行后出现一个问题php artisan make auth 当我运行这个时 它会在我的web php 这是其中的代码 Auth routes Route get home HomeContro
  • 如何在php中根据url从mysql获取数据?

    我在 mysql 数据库中有一个页表 其中包含 page name title content author 字段 我想用 php 来获取它http www domain com index php page page name http
  • 退出 PHP 脚本后终止或停止 MySQL 查询

    我在工作中运行一个统计服务器 由于运行的查询量很大 该服务器有时会变得非常慢 我们的营销团队使用它作为主要统计工具 团队中的某些人有时会在脚本结束之前退出脚本 通过关闭浏览器或选项卡 同时 SQL 查询继续执行 当有人关闭或离开 PHP 脚
  • C++ php 和静态库

    我创建了一个library a 其中包含 cpp 和 h 文件 其中包含很多类 嵌套类和方法 我想在 php 示例中包含这个静态库并尝试使用它 我想提一下 我是 php 新手 我已经在 test cpp 文件中测试了我的 libray a
  • Microsoft VS Code:当我尝试启动程序时,出现错误“spawn php ENOENT”

    我正在尝试在 Microsoft VS Code 上运行 PHP 代码 当我单击启动时 唯一发生的事情是调试控制台中出现错误 生成 php ENOENT 为了解决这个问题 我将 XDebug 的 dll 文件放入 ext 文件夹中 我将 p
  • 为什么 LinkedIn v2 Share API 在任何 v2/shares 端点上给出权限不足的错误?

    当我调用任何 v2 LinkedIn 共享 API 端点时 例如https api linkedin com v2 socialActions https api linkedin com v2 socialActions share UR
  • 简单的颜色变化

    我正在创建一个用户界面 用户可以在其中更改页面的颜色值 我想要的是获取分配给其背景颜色的值并将其变亮一定程度 我只是想获得一条亮点线 而不必每次都制作新图像 示例 用户将背景颜色设置为 ECECEC 现在我希望某个元素边框变成 F4F4F4
  • PHP:是否可以从文件内容(字符串)创建 SplFileObject 对象?

    例如 contents file get contents image png 是否可以从 contents 创建 SplFileObject 对象 Thanks php 有一些特殊的流包装器 http www php net manual
  • 一些基本的 PHP 问题 [已关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我只是有一些基本的 php 问题来加深我对学习的理解 但我找不到简单的答案 我有一个 php ajax 应用程序 它生成 mysql

随机推荐

  • Unity动画知识之二:Animator动画状态机

    文 拉撒路 上次我们讲过 Unity游戏动画从入门到住院 今天我们来讲一下动画状态机 好了 现在我们已经成功的导入了动画 接下来要玩的东西就很装13啦 因为大部分动画师是用不到这家伙的 需要掌握这个技能的 至少也是动画组长级别了 嗯 一个组
  • 找不到工作?对不起,这份测试面试题来晚了!

    1 测试测试与 测试的区别 首先alpha测试和beta都属于验收测试 这两种测试都需要用户参加 且都不能由程序员和测试员执行 广义上来讲 测试是 内测 测试是 公测 alpha测试是用户在开发环境或者是公司内部模拟实际操作环境的测试 测试
  • C#学习笔记 线程操作

    完整代码在这里 https github com techstay csharp learning note 创建并使用线程 使用线程执行任务 要创建一个线程很简单 实例化一个System Threading Thread对象并向其构造函数
  • optimizeinplace

    上篇介绍了 X文件网格的渲染方法 如果需要创建自己的网格文件 并将它渲染出来 那么可以考虑创建一个空的网格 然后读取网格文件内容 将顶点 材质和纹理数据写入以上的网格相关缓冲区中 创建一个自定义顶点格式的空Mesh网格可由 D3DXCrea
  • docker创建linux镜像,docker创建centos镜像无法使用systemctl

    docker获取centos镜像 里面执行安装lnmp之后 发现使用systemctl无法使用 root 92926bd84d70 systemctl restart nginx Failed to get D Bus connection
  • MES管理系统如何实现数据采集和过程控制

    随着工业4 0的到来 MES管理系统解决方案已成为企业实现生产过程数字化和智能化的关键工具 MES生产管理系统不仅提供生产计划 调度 质量管理和设备维护等功能 还在数据采集和过程控制方面发挥着重要作用 本文将探讨MES生产管理系统如何实现数
  • VS下Qt的信号与槽实现

    实现主窗口中Add按钮的功能 这一部分要特别注意 除了实现功能代码外 还需自己手动添加一些其他的代码 Qt Creator可以自动添加 我们需要在2个地方添加代码 第1个是在addressbook h文件下添加一个槽函数声明 即属于priv
  • net::ERR_CONNECTION_REFUSED 解决大全

    sockjs node info报错 sockjs node作用 SockJS is a JavaScript library for browsers that provides a WebSocket like object SockJ
  • 项目构建之maven篇:4.坐标与依赖及spring依赖注入demo

    源代码下载 坐标
  • 数据结构-将升序数组转化为平衡二叉搜索树-java

    1 题目 给定一个升序排序的数组 将其转化为平衡二叉搜索树 BST 平衡二叉搜索树指树上每个节点 node 都满足左子树中所有节点的的值都小于 node 的值 右子树中所有节点的值都大于 node 的值 并且左右子树的节点数量之差不大于1
  • 笔试算法题

    转自 http www cnblogs com xwdreamer archive 2011 12 13 2296910 html 1 把二元查找树转变成排序的双向链表 题目 输入一棵二元查找树 将该二元查找树转换成一个排序的双向链表 要求
  • 【TVM系列二】TVM介绍

    文章同步更新在公众号 AIPlayer 欢迎扫码关注 共同进步 目录 一 TVM的工作流程 1 整体流程 2 关键数据结构 3 Transformations 4 搜索空间和基于机器学习的转换 5 目标代码转化 二 逻辑架构组件 三 运行T
  • Android图形显示系统4 图像生产者(下)

    一 概述 在上一篇文章 Android图形显示系统2 图像消费者 中 我们详细地讲解了图像消费者 我们已经了解了 Android 中的图像元数据是如何被 SurfaceFlinger HWComposer 或者 OpenGL ES 消费的
  • 传统企业数字化转型难点有哪些?传统企业数字化转型战略方向

    互联网时代下 市场发展瞬息万变 企业数字化转型迫在眉睫 如何做好数字化转型 需要从以下这几个方面出发 1独立不孤立 企业需要积极主动加强对于数字化转型的认知 理解数字化转型的价值所在 开利网络认为 企业数字化转型首先是观念上的转换 通过贯彻
  • MATLAB生成单位矩阵、三角矩阵、零矩阵、1矩阵

    单位矩阵 eye m n 稀疏单位矩阵 speye m n ps I speye 1000 构成 1000 1000 单位矩阵的稀疏表示形式 它只需要大约 16 KB 的存储 这与 I sparse eye 1000 1000 的最终结果相
  • 概率论知识回顾(十七):方差

    概率论知识回顾 十七 重点 方差 知识回顾用于巩固知识和查漏补缺 知识回顾步骤 查看知识回顾中的问题 尝试自己解答 自己解答不出来的可以查看下面的知识解答巩固知识 对知识解答有疑问的 说明有关这一点的知识或者公式没有理解透彻或者没有记住 要
  • Win11 VSCode远程连接WSL2数据库

    首先 在VSCode中打开远程连接 可能会提示远程连接失败 无法连接到远程扩展主机服务器 错误 websocket close with status code 1006 这时启动wsl2 终端输入 vim etc ssh sshd con
  • CTFHub

    0x00 前言 CTFHub 专注网络安全 信息安全 白帽子技术的在线学习 实训平台 提供优质的赛事及学习服务 拥有完善的题目环境及配套 writeup 降低 CTF 学习入门门槛 快速帮助选手成长 跟随主流比赛潮流 0x01 题目描述 S
  • 单片机毕设选题 - 基于STM32自行车智能无线防盗报警器 -物联网 单片机 嵌入式

    hr style border solid width 100px height 1px color 000000 size 1 quot 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到
  • k8s_day01_01

    k8s day01 01 1 it发展趋势 it 的发展趋势中 我们最早的资源粒度从最早的物理机时代 到达十年之前的 kvm 还有xen 为代表的虚拟化代表的虚拟机时代 那个时候 VMware是如日中天的时期 vmware 以产品众多且成熟