K8S的概念和基本应用

2023-11-03

学习视频:Kubernetes基本概念和应用_哔哩哔哩_bilibili

零 . 架构概览

  • master节点:管理调度集群资源,一般为多节点构成,可以是物理机,也可以是虚拟机。
  • worker节点:资源的提供者,一般为多节点构成,可以是物理机,也可以是虚拟机。
  • pod:绿色部分,相当于云平台的虚拟机
  • 容器container:cpu和内存、资源的隔离单位,多节点部署,主容器+辅助容器。它共享pod的存储资源和网络栈。
  • k8s平台:解决集群资源调度的问题,将空闲的pod合理的分配到worker节点上面去。监控集群,如有节点或pod挂了,重新协调和启动pod,保证应用高可用,称为治愈。保证集群的网络,保证pod服务之间可以互通互联。

master节点组件构成

  • master节点:k8s集群的大脑,分布式数据库etcd,k8s集群集中的状态存储:节点,pod,发布,配置等都存储在里面。高可用部署的话,至少需要部署3个节点。
  • 所有的操作都是通过调用apiserver来实现的,可以认为是etcd的代理。
  • scheduler:负责调度决策的组件,比如:pod应该分配到那些worker里面去。
  • controller manager:保证集群状态最终一致的组件。通过apiserver 监控集群的状态,确保实际状态与预期状态一致。

worker节点组件构成

  • kubelet :worker节点的资源管理者,相当于agent角色。监听apiserver的事件,执行master下发的任务,汇报情况给APIserver等,是worker节点的小脑。
  • container runtime:结点容器资源的管理者。kubelet不直接参与动作,而是委托给container runtime。比如:启动或关闭容器,收集容器状态。在启动容器的时候,如果本地没有镜像缓存,会从docker hub 去拉取相应的镜像,缓存到本地。
  • kube-proxy:管理k8s中的服务网络的(servernetwork),当需要把服务暴露给外网的时候,需要kube-proxy代理作为转发。
  • pod:瞬息的,不固定的,ip可能会变(可变+不可变)。

K8S发布pod流程样例

流程解读如下:

1、使用kubectl命令行工具向apiserver发送一个创建一个新的replicaset 的请求。apiserver会将该资源请求先存储到etcd中。

2、controller manager 监听replicaset的 创建或修改相关的事件。接收到上一步的创建pod的一个通知。

3、controller manager比较当前集群状态和预期集群的状态,当发现不一致时,调用第一步中的创建pod的模板,在apiserver中创建预期的pod。

4、scheduler监听到apiserver创建新pod的请求,运行调度算法,选择空闲的work节点。然后通过apiserver更新创建pod的定义。把这些pod指定到具体要发布到哪些work节点上。、

注意,此时:controller manager、scheduler 只是通过apiserver更新了希望创建的集群状态,pod并没有真正创建。

5、一旦pod被分配到某个worker节点,apiserver就会通知相应节点上面的kubelet,kubelet接到通知以后,就会指示他的节点上的container runtime 去运行对应的容器。

6、container runtime就会开始下载镜像,启动容器。同时kubelet开始监控容器的运行。

K8S总体架构

小结各个组件的作用

 虚拟机抽象-pod

  • 容器 = 应用 + 操作系统,是一种资源隔离抽象;
  • pod 是容器的包装,是一种虚拟机抽象;
  • k8s 是管理pod虚拟机的数据中心抽象; 

https://kubernetes.io/docs/concepts/workloads/pods/pod/

  • 一般是一个pod对应一个容器,但也有一对多的情况,一个主,一个辅助。

https://hub.docker.com/r/spring2go/spring-petclinic/tags

发布pod:按照要求书写发布规范。

Pod | Kubernetes

如何访问pod?

针对测试环境:
端口转发功能开启外部访问:
kubectl port-forword petclinic 8080:8080 (主机端口:pod端口)

nodeport service

  • 传统数据中心反向代理原理

通过在数据中心的网络边界部署反向代理(proxy service)将内网资源暴露出去,使得公网可访问。

反向代理2大作用:

反向路由 + 负载均衡

  • k8s的反向代理

label:大标签机制,键值对

selector:路由选择机制,pod一致性。

service:负载均衡

添加一个:labels: 不然无法访问。

 K8S反向代理-service

传统反向代理

配置反向代理将web应用暴露出去。

反向代理作用:4层/7层

1、反向路由:将web请求反向路由到内部的应用地址。里面有个地址映射,比如:将域名映射到内部应用的IP,可直接在代理服务器配置。

2、负载均衡

nodeport service -k8s的反向代理

 作用:

1、反向路由

2、负载均衡

解释:

1、k8s中service是一个抽象概念。在k8s中,service将流量反向路由到后端的pod是通过selector和labels机制实现的。labels是一种打标签机制,selector是一种路由选择机制。selector上的标签和labels上的标签跨域匹配上,那么selector就将流量路由到匹配的pod上。该机制对比传统的nginx更加灵活,,能力更强。

service发布规范样例:

nodeport 范围:30000~32767

通过service实现蓝绿发布

 

 Replicaset

随机路由,默认路由到3个pod中的随机一个。

Replicaset负责pod的高可用,具有自愈能力。若集中中的一个或一些pod删除了或不工作了,Replicaset会负责重新创建新的pod。

发布规范案例:

replicas:指定副本数量

滚动发布原理和Deployment

滚动发布- rolling update:

定义:一种高级的发布策略,按照批次依次替换老版本,逐步升级到新版本。发布过程中,应用不中断,用户体验平滑。

流程:逐步替换

每批次发布数量可以大于1,每个批次发布数量也可以各不相同。

蓝绿发布vs滚动发布

K8S发布抽象Deployment

 Deployment 对replicaset再次包装。

Deployment滚动发布流程

发布流程样例:

K8S内部反向代理-clusterip-service

内部服务之间如何相互访问?

解决方法:引入一个反向代理抽象,反向代理不仅可以部署在外部与内部边界,也可在内部pod之间部署。

原理:

mysql-pod.yml

 mysql-service.yml

petclinic-deployment.yml

 petclinic-service.yml

 部署:

由于依赖关系原因,先部署mysql。

kubectl  apply -f mysql-pod.yml

kubectl   apply -f mysql-service.yml

kubectl  apply -f petclinic-deployment.yml

kubectl  apply -f petclinic-service.yml

 总结:

K8S的namespace和kube-dns

域名--->IP  ?

namespace的概念:

名字空间之间是逻辑隔离的,名字空间可自定义。

 系统名字空间组件:

get all -n kube-system

 域名--->IP  ?

K8S的配置抽象configmap原理

ConfigMap是一个用于存储应用程序配置数据的Kubernetes对象。它允许将应用程序配置数据与容器镜像分开存储,这样可以更容易地管理和升级应用程序,而不必重新构建和重建容器镜像。

ConfigMap的实现原理是通过将配置文件数据存储在Kubernetes的etcd中,并将该数据挂载到容器的特定路径中。这样,在容器启动时,它会读取挂载的ConfigMap数据,并将其作为容器内的配置文件使用。

ConfigMap支持多种类型的数据,包括简单的键值对、INI文件和JSON/YAML格式的文本文件。配置数据可以直接在Kubernetes集群中创建,也可以从外部文件或环境变量中导入。

当ConfigMap中的配置数据发生更改时,Kubernetes会通知相关的容器,以便它们可以重新加载新的配置数据。这使得应用程序的配置更加灵活和可扩展,可以随时进行修改和升级,而无需重新构建和重建容器镜像。

发布时,configmap的配置以环境变量的形式,注入到pod中。 

将配置定义到一个公用的configmap中, 发布后cinfigmap的配置会注入到后台这些pod中,很好的解决了冗余和维护困难的问题。

演示部署架构

 pod的配置不用直接写到里面,而是从configmap来获取。

ENV-->configmap

deployment文件变化: 

 envfrom直接指向configmap,name为configmap的name。

K8S机密配置抽象secret

提供比较安全的存储敏感数据的方式。

 

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

K8S的概念和基本应用 的相关文章

随机推荐

  • 智慧文本Supertext:错失千万,标书中的一字之差到底有多可怕?

    一招不慎 满盘皆输 这句话对于经常会参与投标工作的朋友来说 或许深有同感 国内一家企业投标 因为业务人员的疏忽 将 投标书 投标人名字中的 张 写成了 章 因为这一字之差 让这家极具竞争力的企业陷入争议 最终与成功失之交臂 在投标工作的准备
  • python 抓取alexa数据

    要抓取http www alexa cn rank baidu com网站的排名信息 例如抓取以下信息 需要微信扫描登录 因为这个网站抓取数据是收费 所以就利用网站提供API服务获取json信息 上面的API KEY值需要花钱买的 注意开通
  • 最新最新通信工程毕业设计题目选题推荐100例

    文章目录 1前言 2 如何选题 3 通信工程选题方向 2 1 移动通信方向 2 2 嵌入式开发方向 2 3 人工智能方向 2 4 物联网方向 2 5 算法研究方向 2 6 移动应用开发方向 2 7 网络通信方向 3 4 学长作品展示 1前言
  • 使用Docker实现持续集成

    使用Docker实现持续集成 基于Docker的特征 现在常见的利用Docker进行持续集成的流程如下 开发者提交代码 触发镜像构建 构建镜像上传至私有仓库 镜像下载至执行机器 镜像运行 其基本拓扑结构如图1所示
  • JSP实现等腰杨辉三角,你真的了解杨辉三角吗?

    jsp实现等腰杨辉三角 什么是杨辉三角 java实现杨辉三角 jsp实现杨辉三角 在jsp实现之前 先了解一下什么是杨辉三角 再通过java实现一下杨辉三角 最后通过jsp实现等腰杨辉三角 什么是杨辉三角 杨辉三角形 又称贾宪三角形 帕斯卡
  • 发布一个开源的新闻api(整理后就开源)

    目录 说明 基础说明 其他说明 通用接口 登录 注册 更改密码 需要token 更换头像 需要token 获取用户列表 需要token 上传文件 5000端口 获取文件 5000端口 源码文件 db文件均不能获取 验证token 需要tok
  • Java技术——内部类

    内部类 inner class 定义 在一个类中定义另外一个类 这个类就叫做内部类 优点 内部类可以让我们将逻辑上相关的一组类组织起来 并由外部类来控制内部类的可见性 当我们建立一个内部类时 其对象 就拥有了与外部类对象 之间的一种关系 这
  • pid算法C语言实现

    理论我就不多说了 网都已经很多了 但能直接看到效果的确不多 这里我就提供一个 语言实现的可以看到效果的实际例程 pid h ifndef PID H define PID H typedef struct pid int error las
  • [1023]fastText文本分类算法

    文章目录 简介 模型架构 分层 softmax Hierarchical softmax N grams 特征 使用 fastText 运行速度快的原因 fasttext参数 github https github com facebook
  • 如何利用《新概念英语》练习听力?

    新概念英语 是很好的教材 如何将它变成优秀的听力材料呢 第一步 不要看书 将整篇课文听写下来 如果有的词听不出来 猜测该词应该是什么 实在听不出来就不勉强 随着听写的增多 听力会逐渐增强 在听的过程中 也可加深对英语发音的认识 而且实践证明
  • 【论文翻译-2】BiO-Net: Learning Recurrent Bi-directional Connections for Encoder-Decoder Architecture

    BiO Net Learning Recurrent Bi directional Connections for Encoder Decoder Architecture 源自 MICCAI2020 Medical Image Compu
  • Apache logs目录下找不到access_log文件

    目录 一 实验 1 Apache logs目录下找不到access log文件 一 实验 1 Apache logs目录下找不到access log文件 1 问题 apache服务器logs目录下 没有access log文件 2 解决方法
  • Python学习笔记之几点代码格式要求

    1 缩进 通常我们都是用Tab制表符进行代码缩进 但是标准来说是要用4个空格进行缩进 如果代码工具可以设置按Tab自动转换为4个空格 那就设置一下吧 想想之前写的代码没有用4个空格 代码规范很重要 在需要缩进的地方都使用四个空格 可提高可读
  • 【LSTM分类】基于注意力机制的卷积神经网络结合长短记忆神经网络CNN-LSTM-attention实现数据分类附matlab代码

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 matlab项目合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 更多Matlab仿真内容点击 智能优化算法 神经网络预测 雷达通信 无线传感器 电力系统 信号
  • 爬虫手册04 Splash的使用

    Splash的使用 目标 作为Selenium的备选方案 加载js渲染后的浏览器数据 安装方法 https blog csdn net weixin 40743639 article details 122833394 spm 1001 2
  • 《英语(二)》作文案例

    翻译文章 1 More than twenty years ago my hometown was just a small old and poor town Most of people were farmers There were
  • GLES3.0中文API-glGetQueryObjectuiv

    名称 glGetQueryObjectuiv 返回查询对象的参数 C规格 void glGetQueryObjectuiv GLuint id GLenum pname GLuint params 参数 id 指定查询对象的名称 pname
  • js逆向解析,js爬虫

    废话不多说 直接开干 吸取了百度精华 来写文章了 难度系数 两颗星 大概逻辑 1 请求url 2 找到请求参数 3 分析参数产生过程 4 整合参数 1 请求url http fanyi youdao com 2 找到请求参数 3 分析参数产
  • SQL中的循环、for循环、游标

    SQL中的循环 for循环 游标 1 利用游标循环更新 删除MemberAccount表中的数据 DECLARE My Cursor CURSOR 定义游标 FOR SELECT FROM dbo MemberAccount 查出需要的集合
  • K8S的概念和基本应用

    学习视频 Kubernetes基本概念和应用 哔哩哔哩 bilibili 零 架构概览 master节点 管理调度集群资源 一般为多节点构成 可以是物理机 也可以是虚拟机 worker节点 资源的提供者 一般为多节点构成 可以是物理机 也可