【云原生】容器编排工具Kubernetes

目录

一、 K8S介绍

官网地址:

1.1docker编排与k8s编排相比

1.2特性

1.3功能

二、K8S重要组件

2.1核心组件

(1)Kube-apiserver

(2)Kube-controller-manager

(3)Kube-scheduler

(4)Node

①kubelet

②kube-proxy

③docker

(5)etcd

2.2Kubernetes工作原理

三、Pod

3.1 Pod控制器

(1)Deployment

(2)ReplicaSet

(3)StatefulSet

(4)DaemonSe

(5)Job 和 CronJob

四、五大标签选择器

4.1Label(标签)

4.2Service

(1)三个流量调度模式

4.3Ingress

4.4Name

(1)资源

4.5Namespace(命名空间选择器)


一、 K8S介绍

Kubernetes 发布于 2014年6月, 源于希腊语,意为 “舵手” 或 “领航员”,由于 kubernetes从k 到s中间有8个字母,所以简称k8s。

Google 在十年前就已经将容器化作为基础架构,borg 就是 Google 内部的大型集群管理系统,borg 系统并不开源。在docker 大规模容器化后,Google 为了迅速占领 docker 容器化管理, Google 基于 borg 的设计理念使用 Go 语言开发新的组件系统 Kubernetes,并且开源给了CNCF。

官网地址:

k8s官网地址:Kubernetes Documentation | Kubernetes

中文版:https://kubernetes.io/zh/docs/concepts/overview/what-is-kubernetes/

1.1docker编排与k8s编排相比

  • 单机使用,无法有效集群
  • 随着容器数量的上升,管理成本攀升
  • 没有有效的容灾、自愈机制
  • 没有预设编排模版,无法实现快速、大规模容器调度
  • 没有统一的配置管理中心工具
  • 没有容器生命周期的管理工具
  • 没有图形化运维管理工具

1.2特性

 弹性伸缩  以最小的成本运行服务

 自我修复 
 自动发布(默认回滚发布模式)
 集中化配置管理和密钥管理(密钥是加密的)
 存储编排,支持外挂存储并对外挂存储资源进行编排
 任务批量处理运行
 提供一次性任务,定时任务;满足批量数据处理和分析的场景。

1.3功能

以集群的方式运行、管理跨机器的容器
解决docker跨机器容器之间的通讯问题
K8S的自我修复机制使得容器集群总在运行在用户期望的状态

二、K8S重要组件

2.1核心组件

(1)Kube-apiserver

(2)Kube-controller-manager

负责管理各种控制器,监控集群状态并自动执行相应操作。

 

(3)Kube-scheduler

根据资源需求和调度策略,将 Pod 调度到合适的节点上运行。

预选策略(predicate)

优选策略(priorities)

(4)Node

①kubelet

运行在每个节点上,负责管理容器和 Pod 生命周期,并与 API Server 通信。

②kube-proxy

负责为 Pod 提供网络代理和负载均衡功能。

③docker

容器引擎,运行容器,负责本机容器的创建删除

(5)etcd

分布式键值存储系统,用于存储集群的配置数据和状态。

这些核心组件共同协作,实现了 k8s 的主要功能,如容器编排、自动扩展、服务发现和负载均衡等。此外,还有其他辅助性的组件如 DNS 服务(CoreDNS)、日志收集(Fluentd)、监控(Prometheus)等,它们可以根据具体需求来选择是否部署。

2.2Kubernetes工作原理

用户通过kubectl工具发送请求通过认证给kube apiserver来创建pod请求,apiserver会将相关信息写入etcd当中,随后apiserver会找kube controller-manager创建相应pod,controller-manager会通过apiserver会在etcd读取数据寻找相应pod信息,之后apiserver找到scheduler去调度pod,关于pod调到哪里还是通过apiserver读取etcd里的数据获得相关node节点信息,并找到最适合运行pod的节点,最后scheduler通过算法调度出预选策略优选策略,算出应该把pod调度到哪个node节点上运行,之后scheduler通过apiserver找到对应node节点上的kubelet组件,通过这个组件创建并维护pod,相关容器则是通过docker创建。然后这些pod通过kube proxy关联起来成为集群,kube proxy使用service资源使用统一IP地址暴露出去,外部用户就可以通过这个ip地址轮巡到pod里面所运行的业务了。kubelet会监事这个node上面啊运行了多少资源,以及pod相关的状态和信息,发送给apiserver,apiserver会将信息写入etcd并保存起来。pod的维护由controller-manager来做,当pod的数量不满足预设的数量时,它就会再去创建到相应的预设数量来保证pod的总量。

三、Pod

一个Pid可以放多个容器,一个Pid中的容器可以共享资源,不同Pid中的容器不能相互访问(默认情况)。

 

3.1 Pod控制器

(1)Deployment

建立在 ReplicaSet 之上,提供了更高级别的应用程序部署功能。可以方便地进行滚动更新、版本回滚等操作。

(2)ReplicaSet

用于管理 Pod 的副本数量,确保指定数量的 Pod 始终处于运行状态。支持滚动更新应用程序。

(3)StatefulSet

用于管理有状态的应用程序,每个 Pod 都有唯一标识和稳定的网络标识。适用于需要持久化存储和有序部署的应用程序。

(4)DaemonSe

确保每个节点上都运行一个 Pod 的控制器。适用于在每个节点上运行系统级别的守护进程。

(5)Job 和 CronJob

用于批处理任务或定时任务的控制器。执行完任务后会自动停止 Pod。

这些控制器根据用户定义的规则和策略,自动管理 Pod 的生命周期,确保集群中的应用程序正常运行和扩展。通过这些控制器,可以实现灵活的应用程序管理和自动化操作。

四、五大标签选择器

4.1Label(标签)

Label Selector 基于标签对资源进行选择和过滤。标签是键值对的形式,可以附加在各种 Kubernetes 资源上,如 Pod、Service、Deployment 等。通过 Label Selector,可以根据标签的匹配规则来选择特定的资源。

4.2Service

Service 是 Kubernetes 资源,用于暴露应用程序内部的 Pod。它定义了一组逻辑上相关的 Pod,并为它们创建了一个稳定的网络终结点(Endpoint)。通过 Service,可以为应用程序提供一个统一的入口,使得客户端能够访问后端 Pod 的服务。Service 可以是 ClusterIP、NodePort、LoadBalancer 或 ExternalName 类型,用于不同的网络访问方式。

(1)三个流量调度模式

userspace(废弃)

ipvs(推荐,性能最好)

通过ip地址直接转发

IP tables(濒临废弃)(默认)

从上到下转发

4.3Ingress

Ingress 是一种 Kubernetes 资源,用于将外部流量引导到集群内部的服务。它充当了流量入口的角色,通过定义规则和路由来决定如何将请求转发到后端的 Service 中的 Pod。Ingress 可以实现负载均衡、HTTPS/TLS 加密、URL 路由等功能,提供了更高级别的流量控制和管理。

4.4Name

Name 是 Kubernetes 资源的一个属性,用于标识该资源的名称。每个资源都必须具有唯一的名称。例如,Pod、Deployment、Service 等所有资源都需要指定一个名称以便在集群中进行引用和操作。

(1)资源

    api     版本
    kind       类别
    metadata     元数据信息
    spec清单
    status    状态

4.5Namespace(命名空间选择器)

Namespace Selector 用于选择特定的命名空间(Namespace)。命名空间是 Kubernetes 中用于组织和隔离资源的一种机制,通过命名空间选择器可以选择所需的命名空间中的资源。

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

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

相关文章

DevOps管理软件生命周期

整体的软件开发流程 PLAN:开发团队根据客户的目标制定开发计划 CODE:根据PLAN开始编码过程,需要将不同版本的代码存储在一个库中。GIT,SVN BUILD:编码完成后,需要将代码构建并且运行。MAVEN TEST:成功构建…

【性能优化】聊聊性能优化那些事

针对于互联网应用来说,性能优化其实就是一直需要做的事情,因为系统响应慢,是非常影响用户的体验,可能回造成用户流失。所以对于性能非常重要。最近正好接到一个性能优化的需求,需要对所负责的系统进行性能提升。目前接…

Windows环境下RabbitMQ下载安装

一、准备安装文件 1、下载Erlang 登录网站Downloads - Erlang/OTP,选择“Download Windows installer”,如下图所示: 弹出框中,选在下载保存地址,保存文件,如下图所示: 2、下载RabbitMQ 登录…

ElasticSearch简介

一、基本概念 1、Index(索引) 动词,相当于 MySQL 中的 insert; 名词,相当于 MySQL 中的 Database 2、Type(类型) 在 Index(索引)中,可以定义一个或多个类…

无需公网IP,在家SSH远程连接公司内网服务器「cpolar内网穿透」

文章目录 1. Linux CentOS安装cpolar2. 创建TCP隧道3. 随机地址公网远程连接4. 固定TCP地址5. 使用固定公网TCP地址SSH远程 本次教程我们来实现如何在外公网环境下,SSH远程连接家里/公司的Linux CentOS服务器,无需公网IP,也不需要设置路由器。…

unity tolua热更新框架教程(2)

Lua启动流程 增加脚本luamain,继承luaclient 建立第一个场景GameMain,在对象GameMain挂载脚本LuaMain,启动场景 看到打印,lua被成功加载 lua入口及调用堆栈 这里会执行main.lua文件的main函数 C#接口导出 在此处配置C#导出的代码 …

【Python】爬虫练习-爬取豆瓣网电影评论用户的观影习惯数据

目录 前言 一、配置环境 1.1、 安装Python 1.2、 安装Requests库和BeautifulSoup库 1.3.、安装Matplotlib 二、登录豆瓣网(重点) 2.1、获取代理 2.2、测试代理ip是否可用 2.3、设置大量请求头随机使用 2.4、登录豆瓣网 三、爬取某一部热门电影…

【51单片机实验笔记】声学篇(一) 蜂鸣器基本控制

目录 前言硬件介绍PWM基础蜂鸣器简介 原理图分析蜂鸣器驱动电路 软件实现蜂鸣器短鸣蜂鸣器功能封装 总结 前言 蜂鸣器在生活中的应用实则相当广泛。通过本章你将学会制造噪声 (笑~)你将学会驱动它们,并发出响声。 硬件介绍 PWM基础 占空比…

shell bash中设置命令set

1 Preface/Foreword set命令用于shell脚本在执行命令时候,遇到异常的处理机制。 2 Usage 2.1 set -e 当执行命令过程中遇到异常,那么就退出脚本,不会往下执行其它命令。 #!/bin/bash #set -eroot GIT_TAG${CI_BUILD_TAG-NOTAG} GIT_REV…

设计模式之建造者模式与原型模式

目录 建造者模式 简介 使用场景 优缺点 模式结构 实现 原型模式 简介 应用场景 优缺点 模式结构 实现 建造者模式 简介 将复杂对象的构建与表示进行分离,使得同样的构建过程可以创建不同的表示。是一个将复杂的对象分解为多个简单的对象,然…

npm版本升级报错

解决方法: 执行npm install --legacy-peer-deps依赖对等 npm install xxx --legacy-peer-deps命令用于绕过peerDependency里依赖的自动安装;它告诉npm忽略项目中引入的各个依赖模块之间依赖相同但版本不同的问题,以npm v4-v6的方式去继续执行…

8天长假快来了,Python分析【去哪儿旅游攻略】数据,制作可视化图表

目录 前言环境使用模块使用数据来源分析 代码实现导入模块请求数据解析保存 数据可视化导入模块、数据年份分布情况月份分布情况出行时间情况费用分布情况人员分布情况 前言 2023年的中秋节和国庆节即将来临,好消息是,它们将连休8天!这个长假…

Docker 使用

简介 Docker是一个开源的容器引擎,它有助于更快地交付应用。 Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。使用 Docker可更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。 Docker…

uniapp 项目实践总结(二)从零开始搭建一个项目

导语:本篇文章主要是项目方面的技术开发总结,新建一个项目可以选择使用可视化界面,也可以使用命令行搭建。 目录 可视化界面命令行搭建安卓开发环境苹果开发环境可视化界面 安装软件 使用官方推荐的 HbuilderX 软件,开发方式比较简单,内置相关环境以及终端,无需配置 no…

【python】可视化

柱状图 matplotlib之pyplot模块之柱状图(bar():基础参数、外观参数)_plt.bar_mighty13的博客-CSDN博客 bar()的基础参数如下: x:柱子在x轴上的坐标。浮点数或类数组结构。注意x可以为字符串数组! height&…

Unity中Shader的UV扭曲效果的实现

文章目录 前言一、实现的思路1、在属性面板暴露一个 扭曲贴图的属性2、在片元结构体中,新增一个float2类型的变量,用于独立存储将用于扭曲的纹理的信息3、在顶点着色器中,根据需要使用TRANSFORM_TEX对Tilling 和 Offset 插值;以及…

通过cpolar内网穿透,在家实现便捷的SSH远程连接公司内网服务器教程

文章目录 1. Linux CentOS安装cpolar2. 创建TCP隧道3. 随机地址公网远程连接4. 固定TCP地址5. 使用固定公网TCP地址SSH远程 本次教程我们来实现如何在外公网环境下,SSH远程连接家里/公司的Linux CentOS服务器,无需公网IP,也不需要设置路由器。…

Spring Boot 整合 Shiro(后端)

1 Shiro 什么是 Shiro 官网: http://shiro.apache.org/ 是一款主流的 Java 安全框架,不依赖任何容器,可以运行在 Java SE 和 Java EE 项目中,它的主要作用是对访问系统的用户进行身份认证、 授权、会话管理、加密等操作。 …

FreeRTOS操作系统中,断言输出 Error:..\..\FreeRTOS\portable\RVDS\ARM_CM4F\port.c,766 原因

分析:Error:..\..\FreeRTOS\portable\RVDS\ARM_CM4F\port.c,766 出现这个原因表示,你现在系统某个中断的优先级高于FreeRTOS可管理的优先级范围,一旦你这个中断触发,断言的信息即你串口就会输出这个条语句(前提你串口…

OpenCV(十九):模板匹配

1.模板匹配: OpenCV提供了一个模板匹配函数,用于在图像中寻找给定模板的匹配位置。 2.图像模板匹配函数matchTemplate void matchTemplate( InputArray image, InputArray templ, OutputArray result, int method, InputArray mask noArray() ); image…