Kubernetes (k8s) 快速认知

应用部署方式

在这里插入图片描述

传统部署时代

  • 早期的时候,各个组织是在物理服务器上运行应用程序。
  • 缺点
    • 资源分配问题:
      • 无法限制在物理服务器中运行的应用程序资源使用
    • 维护成本问题:
      • 部署多个物理机,维护许多物理服务器的成本很高

虚拟化部署时代

  • 虚拟化技术允许在单个物理服务器的 CPU 上运行多台虚拟机(VM)
  • 虚拟化能使应用程序在不同 VM 之间被彼此隔离,且能提供一定程度的安全性
  • 虚拟化技术能够更好地利用物理服务器的资源,并且因为可轻松地添加或更新应用程序
  • 缺点
    • 需要单独一个系统,占用资源
    • 不能灵活的扩容和缩容

容器部署时代

  • 容器类似于 VM,但是更宽松的隔离特性,使容器之间可以共享操作系统(OS)
  • 容器比起 VM 被认为是更轻量级的,每个容器都具有自己的文件系统、CPU、内存、进程空间等
  • 跨云和操作系统发行版本的可移植性:可在 Ubuntu、RHEL、CoreOS、本地、 Google Kubernetes Engine 和其他任何地方运行。

容器化带来的问题

容器化部署存在的问题

  • 20个物理机发布100个容器,怎么快速发布和管理
  • 应用发布上线出现问题,需要进行回滚历史版本,如何进行回滚
  • 突发海量请求过来,如何根据情况进行快速扩容
  • 用户请求过来,怎么分配请求到100个容器里面
  • 某个容器故障了,如何快速启动新容器去替代
  • 。。。。。。。

上面容器管理的问题称为容器编排,为了解决这些问题,产生了一些容器编排的软件

  • Docker Swarm:Docker自己的容器编排工具
  • Mesos:Apache的资源管控的工具,结合Marathon使用
  • Kubernetes:Google开源的的容器编排工具, 基于内部Borg系统的开源版本

什么是Kubernetes(简称 k8s)

介绍

  • Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”。
  • k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。
  • Google 在 2014 年开源了 Kubernetes 项目。 Kubernetes 建立在 Google 大规模运行生产工作负载十几年经验的基础上, 结合了社区中最优秀的想法和实践。
  • Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。

k8s 常用功能

  • 服务发现和负载均衡
    • Kubernetes 可以使用 DNS 名称或自己的 IP 地址来暴露容器。
    • 如果进入容器的流量很大,Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。
  • 存储编排
    • Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。
  • 自动部署和回滚
    • 你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器
    • 当版本发布错误,可以立刻回退到之前的版本
  • 自我修复
    • 如果某个容器宕机了,K8S 可以快速重新启动新的的容器,替换旧的容器
  • 密钥与配置管理
    • Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 SSH 密钥。
    • 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。

Kubernetes常见概念组件和整体架构

Kubernetes常见组件和整体架构讲解

K8S整体架构,也是Client-Server模型
  • 控制节点Master-Node,负责集群的管理
  • 工作节点Worker-Node,负责为集群提供运行环境
    在这里插入图片描述

kubernetes常见概念

Master (集群控制节点)
  • 指的是集群控制节点(相当于整个集群的指挥中心),在每个Kubernetes集群里都需要有一个Master来负责整个集群的管理和控制
Node (Node节点)
  • 除了master,k8s集群中的其他机器被称为Node节点,Node节点才是kubernetes集群中的工作负载节点
  • 每个Node节点都会被master分配一些工作负载(docker容器),node节点上的docker负责容器的运行
Pod
  • Pod是一组容器, 在K8S中,最小的单位是Pod, 一个Pod可以包含多个容器,但通常情况下我们在每个Pod中仅使用一个容器
  • 可以把Pod理解成豌豆荚, Pod内的每个容器是一颗颗豌豆
  • 分类
    • 自主创建:直接创建出来的Pod,这种pod删除后就没有了,也不会自动重建
    • 控制器创建:通过控制器创建的pod,这类Pod删除了之后还会自动重建
Pod Controller (Pod控制器)
  • 控制器是管理pod的中间层,只需要告诉Pod控制器,想要创建多少个什么样的Pod,它会创建出满足条件的Pod并确保每一个Pod资源处于用户期望的目标状态。如果Pod在运行中出现故障,它会基于指定策略重新编排Pod
  • 通过它来实现对pod的管理,比如启动pod、停止pod、扩展pod的数量等等
  • 类型
    • ReplicaSet、Deployment、Horizontal Pod Autoscaler、DaemonSet等
Service
  • 在k8s里面,每个Pod都会被分配一个单独的IP地址,但这个IP地址会随着Pod的销毁而消失
  • Service (服务)就是用来解决这个问题的, 对外服务的统一入口,用于为一组提供服务的Pod 抽象一个稳定的网络访问地址
  • 一个Service可以看作一组提供相同服务的Pod的对外访问接口,作用于哪些Pod是通过标签选择器来定义的
Label (标签)
  • K8S提供了一种机制来为Pod进行分类,那就是Label(标签),同一类pod会拥有相同的标签
  • Label的具体形式是key-value的标记对,可以在创建资源的时候设置,也可以在后期添加和修改
  • 给某个资源对象定义一个Label,就相当于给它打了一个标签,可以通过Label Selector(标签选择器)查询和筛选拥有某些Label的资源对象,K8S通过这种方式实现了类似SQL的对象查询机制
  • 应用场景
    • 未使用前,分散难管理,如果需要部署不同版本的应用到不同的环境中,难操作
      在这里插入图片描述
    • 为Pod打上不同标签,使用Label组织的Pod,轻松管理
      在这里插入图片描述
Label选择器
  • 对应的资源打上标签后,可以使用标签选择器过滤指定的标签
  • 标签选择器目前有两个
    • 基于等值关系(等于、不等于)
    • 基于集合关系(属于、不属于、存在)
NameSpace(命名空间)
  • 可以在一个物理集群上运行多个虚拟集群,这种虚拟集群被称作命名空间,用来隔离pod的运行环境
  • 同一个名字空间中的资源名称必须唯一,而不同名字空间之间则没有这个要求
  • NameSpace是不能嵌套的,每一个 Kubernetes 的资源都只能在一个NameSpace内
  • NameSpace是在多个用户之间划分集群资源的一种方法(通过资源配额)
  • (注意)不必使用多个名字空间来分隔轻微不同的资源,例如同一软件的不同版本: 应该使用标签 来区分同一名字空间中的不同资源
  • Kubernetes 会创建四个初始NameSpace名称空间
    • default 没有指明使用其它名字空间的对象所使用的默认名字空间
    • kube-system Kubernetes 系统创建对象所使用的名字空间
    • kube-public 所有的客户端(包括未经身份验证的客户端)都可以读取该名字空间。
    • kube-node-lease 该名字空间包含用于与各个节点关联的 Lease(租约)对象。 节点租约允许 kubelet 发送心跳, 由此控制面能够检测到节点故障

应用分类

  • 有状态应用
    • 不能简单的实现负载均衡的服务,有数据产生的服务,Redis、MySql、RabbitMQ等
    • 相关服务须通过一些较复杂的配置才能做到负载均衡
    • 有状态的应用,建议直接在物理机部署,方便维护管理
  • 无状态应用
    • 没有对应业务数据的应用,可以简单的实现负载均衡,复制一个节点即可快速扩容,如SpringCloud中的业务服务
    • 无状态的应用适合部署在 Kubernetes(K8s)中或者容器中

K8S整体架构

  • K8S整体架构,也是Client-Server模型
    • 控制节点Master-Node,负责集群的管理

      • apiserver:提供操作【k8s集群资源】的唯一入口,RESTful方式请求,并提供认证、授权、访问控制、API注册和发现等
      • scheduler:负责资源的调度,按照预定的调度策略,【计算】将Pod调度到相应的Node节点进行应用部署
      • controller-manager:控制器管理中心,负责维护集群的状态,比如故障检测、滚动更新等,根据调度器的安排通知对应的节点创建pod
      • etcd:存储中心,是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库
    • 工作节点Worker-Node,负责为集群提供运行环境

      • Node是Pod真正运行的主机,可以是物理机也可以是虚拟机, Node本质上不是K8S来创建的, K8S只是管理Node上的资源,为了管理Pod,每个Node节点上至少需要运行container runtime(Docker)kubeletkube-proxy服务
      • kubelet:相当于主节点派到工作节点的一个代表,用于管理本机容器(相当于master节点的化身),负责维护容器的生命周期也负责Volume(CVI)网络(CNI)的管理
      • kube-proxy:负责为Service提供cluster内部的服务发现/网络代理/负载均衡等操作,为部署的应用程序提供访问入口,和apiserver是不一样的,后者是操作k8s集群内部的

文档

K8S文档:https://kubernetes.io/docs/home/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/230191.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【QT】QListWidget控件的使用

目录 1.概述 2.QListWidget 类常用的属性和方法 3.QListWidget列表框的信号和槽 4.QListWidget 类常用操作示例 4.1 初始化列表 4.2 插入项 4.3 删除当前项和清空列表 4.4 遍历并选择项 4.5 QListWidgetItem常用信号 5.QListWidget 类简单应用 1.概述 Qt 中用于项 (Item &#…

ctrl+d删除的东西怎么没有在回收站?分享原因及解决方法

“好奇怪哦,我用公司电脑的时候,使用ctrld误删除了一个XLSX格式的文件,回收站里也没有找到怎么回事?请问这样删除的文件能恢复吗?求各位高手指点。感谢~” ——在电脑操作中,CtrlD组合键被广泛应…

安全生产隐患排查治理信息化系统软件

安全隐患排查系统实现对重大危险源企业、安全隐患信息的登记、整改、复查、分类和统计。系统涵盖了安全隐患排查整治工作的各项基本内容,实现以安全隐患排查整治业务流为主线,处理流程简洁清晰、快速灵活;以排查整治流程为干线,快…

PyQt6 QToolBar工具栏控件

锋哥原创的PyQt6视频教程: 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计44条视频,包括:2024版 PyQt6 Python桌面开发 视频教程(无废话版…

进程通信知识基础【Linux】——下篇

目录 前文 一,命名管道 创建命名管道 1. getline——c库 2. unlink——系统接口 实践代码 common.hpp client.cpp server.cpp Log.cpp 二,共享内存(system V接口) 1. 创建共享内存 shmget接口 2. 删除共享内存 常见…

程序员必知!依赖倒置原则的实战应用与案例分析

依赖倒置原则(Dependence Inversion Principle,DIP)是一种软件设计原则,它要求高层模块不依赖于低层模块,而是依赖于抽象。同时,抽象不依赖于细节,细节应当依赖于抽象。换言之,要针对…

OpenSSL 3.2.0新增Argon2支持——防GPU暴力攻击

1. 引言 OpenSSL新发布的3.20版本中,引入了一些新特性,包括: post-quantum方法Brainpool曲线QUICArgon2:Argon2 是一种慢哈希函数,在 2015 年获得 Password Hashing Competition 冠军,利用大量内存计算抵…

​springboot代码混淆及反混淆代码工具

目录 介绍 什么是混淆 为什么用混淆? 基础混淆 高级混淆工具 #0x1 ipaguard Tool - springboot混淆工具 ipaguard界面概览 ipaguard启动界面 ipaguard代码混淆界面 资源文件混淆界面 重签名界面 尽管到目前为止,这些工具在将代码清理成我们可…

屏幕超时休眠-Android13

屏幕超时休眠-Android13 1、设置界面1.2 属性值1.2.1 默认值1.2.2 最小值限制 1.3 属性值疑问 Settings.System.SCREEN_OFF_TIMEOUT 2、超时灭屏2.1 锁定屏幕的超时2.2 屏幕灭屏的超时 3、永不休眠* 关键日志 1、设置界面 packages/apps/Settings/src/com/android/settings/dis…

上海迅软DSE管控策略大揭秘:如何让企业桌面管理更从容?

随着信息化程度的提高,政企单位在面对愈发复杂且不可控的内网安全问题时,常常因缺乏有效的技术手段而无法建立完善的管理机制,导致企业长期处于被动管理的状态。这使得在发生数据安全事件后,快速而有效地进行处置的能力相对薄弱。…

机器学习——自领域适应作业

任务 游戏里面的话有很多跟现实不一样的情况。 想办法让中间的特征更加的接近,让feat A适应feat B,产生相对正常的输出。 在有标签数据和没有数据的上面进行训练,并能预测绘画图像。 数据集 训练5000张总数,每类有500张测试100…

【二叉树 OJ题】二叉树基础知识 与 OJ题完成(二叉树构建与遍历问题,子树查找问题)

二叉树 ! 二叉树概念与OJ题完成 二叉树 !1 树1.1 树的概念1.2 树的相关概念1.3 树的表示方式 2 二叉树2.1 二叉树的概念2.2 二叉树的构建2.3 特殊的二叉树 3 二叉树OJ题的解决3.1 二叉树构建与遍历问题3.1.1 二叉树遍历3.1.2 二叉树构建3.1.3 题目完成 3…

玩转 TableAgent 数据智能分析

一、什么是数据智能分析? 数据智能分析是指利用先进的技术和工具对大量数据进行收集、整理、分析和挖掘,以获取有益的信息和见解。这种分析通常涉及人工智能、机器学习、数据挖掘和统计分析等技术,旨在揭示数据背后隐藏的模式、关联和趋势&a…

【普中】基于51单片机简易计算器数码管显示设计( proteus仿真+程序+实物演示+讲解视频)

【普中开发板】基于51单片机简易计算器数码管显示设计( proteus仿真程序实物演示讲解视频) Proteus 仿真:Proteus 8.16(有低版本) 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:P04 1. 主要功能&#xff1a…

GAMES101-Homework4

原理&#xff1a;就是上张图片 //该段代码表示四个点的情况&#xff0c;相当于举例子去计算上诉的公式 void naive_bezier(const std::vector<cv::Point2f> &points, cv::Mat &window) {auto &p_0 points[0];auto &p_1 points[1];auto &p_2 poi…

AI数字人直播问题及解决方案!

青否数字人SaaS系统&#xff08;数字人源码&#xff1a;zhibo175&#xff09;目前支持哪些平台使用数字人直播 目前支持的平台有&#xff1a;抖音、快手、视频号、淘宝/天猫、京东、小红书、拼多多&#xff0c;哔哩哔哩&#xff0c;tiktok&#xff0c;阿里国际站&#xff0c;用…

设计模式 简单工厂 工厂方法模式 抽象工厂模式 Spring 工厂 BeanFactory 解析

工厂模式介绍 工厂模式是我们最常用的实例化对象模式了&#xff0c;是用工厂方法代替new操作的一种模式。它是创建型模式。 简单工厂 简单工厂模式是指由一个工厂对象决定创建出哪一种产品类的实例, 但它不属于GOF 23种设计模式 简单工厂适用于工厂类负责创建的对象较少的场景,…

网络管理员推荐的网络监控软件-OpManager

网络是企业背后的基础&#xff0c;这些网络可帮助企业将信息保存在一个集中位置&#xff0c;需要并限制所有其他入站请求的人都可以访问。那么&#xff0c;如何提供持续的一流最终用户体验并维护快速发展的网络呢&#xff1f;只有借助可靠的实时网络监控工具&#xff0c;才能监…

nodejs配置express服务器,运行自动打开浏览器

查看专栏目录 Network 灰鸽宝典专栏主要关注服务器的配置&#xff0c;前后端开发环境的配置&#xff0c;编辑器的配置&#xff0c;网络服务的配置&#xff0c;网络命令的应用与配置&#xff0c;windows常见问题的解决等。 文章目录 设置方法&#xff1a;1&#xff0c;安装nodej…

python实现一张图片按指定宽高截取成多张图片

1、导入所需的包 import os from PIL import Image 2、获取源图片 path_img image img_dir os.listdir(path_img) 3、循环读取源图片并按指定宽高进行自动截图保存 for i in range(len(img_dir)):id img_dir[i].split(.)[0]img Image.open(path_img / img_dir[i])si…