【K8S 基本概念】Kurbernetes的架构和核心概念

目录

一、Kurbernetes

1.1 简介

1.2、K8S的特性:

1.3、docker和K8S:

1.4、K8S的作用:

1.5、K8S的特性:

二、K8S集群架构与组件:

三、K8S的核心组件:

一、master组件:

1、kube-apiserver:

2、kube-controller-manager:

3、kube-scheduler:

4、ETCD组件:

二、node组件:

1、kubelet:

2、kube-proxy:

3、docker:

4、pod:

5、deployment:

6、replicaset:

7、daemonset:

8、statefulset:

9、job:

10、cronjob:

11、service:

12、label:

13、ingress:

14、namespace:


一、Kurbernetes

1.1 简介

K8S:kubernets中间8个字母省略就是K8S

K8S是负责自动化运维管理多个容器化程序的集群,是一个功能强大的容器编排工具。可以以分布式和集群化的方式进行容器管理

能提供自动部署,自动扩展和管理容器化部署的应用程序的一个开源的系统

K8S是Google研发的borg系统作为原型,后期经go语言编写的开源软件

Kubernetes 官网

GitHub - kubernetes/kubernetes: Production-Grade Container Scheduling and Management 源码包

市面上的版本:

1.15、1.18、1.20

我们使用的是1.20

1.2、K8S的特性:

1、强大的容器编排能力

作为容器编排管理平台,拥有强大的容器编排能力。

Kubernetes 与 Docker 共同发展并且深度集成了 Docker,因此适应容器的特点,比如容器组合、标签选择和服务发现等,可以满足企业级的需求,具体表现如下:

以 Pod(容器组)为基本的编排和调度单元以及声明式的对象配置模型(控制器、configmap、secret 等)

资源配额与分配管理

健康检查、自愈、伸缩与滚动升级

2、轻量级

轻量级,对微服务架构有很好的支撑。

微服务架构的核心是将一个巨大的单体应用分解为很多小的互相连接的微服务,一个微服务可能由多个实例副本支撑,副本的数量可以随着系统的负荷变化进行调整。

整个系统划分出各个功能独立的组件,组件之间边界清晰、部署简单,以及很多功能实现了插件化,可以非常方便地进行扩展和替换:

服务发现、服务编排与内部路由支持

服务快速部署和自动负载均衡

提供对“有状态”服务的支持

3、便携性

无论公有云、私有云、混合云还是多云架构都全面支持,可以随时随地地将系统整体进行“搬迁”。

Kubernetes 架构方案中屏蔽了底层网络的细节,基于服务的虚拟 IP 地址的设计方式让架构和底层硬件无关,无需改变配置文件就可以将系统从物理机迁移到公有云上,并且谷歌云(GCE)、华为云(CCE)、阿里云(ACK)和腾讯云(TKE)都支持 Kubernetes 集群。

1.3、docker和K8S:

docker微服务,可以满足微服务使用,那么为什么还要使用K8S呢

  1. 传统的部署方式:一般意义上的二进制部署,安装-运行-运行维护,需要专业的人员,如果出了故障还需要人工重新拉起来。而且如果业务量增大,只能水平的进行拓展,再部署一台
  2. 容器化,我们可以用dockerfile编写好我们自定义的容器,随时基于镜像都可以运行。数量少还能管的过来。数量一旦太多,管理起来太复杂。而且docker一般是单机运行,没有高可用

1.4、K8S的作用:

简单,高效的部署容器化应用

  1. 解决了docker的单机部署和无法集群化的特点
  2. 解决了随着容器数量的增加,对应增加的管理成本
  3. 容器的高可用,提供容器的自愈机制
  4. 解决了容器没有预设模版,以及无法快速、大规模部署。以及大规模的容器调度
  5. K8S提供了集中化配置管理的中心
  6. 解决了容器的生命周期的管理工具
  7. 提供了图形化工具,可以用图形化工具对容器进行管理

K8S是基于开源的容器集群管理系统,在docker容器技术的基础之上,为容器化的集群提供部署、运行、资源调度、服务发现、动态伸缩等一系列完整的功能(大规模容器)

  1. 对docker等容器技术从应用的包——部署——运行——停止——销毁,全生命周期管理
  2. 集群方式运行,可以跨机器管理容器
  3. 解决docker的跨机器运行的网络问题
  4. K8S可以自动修复,使得整个容器集群可以在用户期待的状态下运行。

1.5、K8S的特性:

  1. 弹性伸缩,基于命令,或者图形化界面,以及CPU的使用情况,自动的对部署的程序进行扩容和缩容。以最小的成本来运行服务
  2. 自我修复:节点故障时,他可以自动的重新启动失败的容器,替换和重新部署
  3. 服务发现和负载均衡(自带的):K8S为多个容器提供一个统一的访问入口(内部地址和内部DNS名称),自动负载均衡关联的所有容器
  4. 自动发布和回滚:K8S采用滚动的更新策略来更新应用。如果更新过程中出现问题,可以根据回滚点来进行回滚
  5. 集中化的配置管理和秘钥管理:K8S集群中的各个组件都是要进行密钥对验证的。但是K8S得安全性还是不够,核心的组件不建议部署(mysql和nginx不建议),适合部署自定义应用
  6. 存储编排

·自动化的把容器部署在节点上

·也可以通过命令行或者yml文件(自定义pod)来实现指定节点部署

·也可以通过网络存储,NFS GFS

任务进行批次处理。提供一次性的任务,提供定时任务,满足需要批量处理和分析的场景

二、K8S集群架构与组件:

三、K8S的核心组件:

Kubernetes 采用主从分布式架构,节点在角色上分为 Maste 和 Node。

Kubernetes Master 是控制节点,负责k8s集群的调度、管理等运维工作,组件有apiserver、controller-manager、scheduler、etcd。

Kubernetes Node 是运行节点,负责运行工作负载,即容器应用,组件有kubelet、kuber-proxy、容器引擎/容器运行时(docker、containerd)等。

一、master组件:

1、kube-apiserver:

K8S集群之中每个组件都是要靠密钥对进行验证,组件之间通信靠apiserver,API是应用接口服务,K8S的所有资源请求和调用操作都是kube-apiserver来完成,所有对象资源的增、删、改、查和监听的操作都是kubu-apiserver处理完之后交给etcd来进行

apiserver是K8S所有请求的入口服务,apiserver负责接收K8S的所有请求(命令行、图形化界面),然后根据用户的具体请求,通知对应的组件展示或者运行命令

apiserver相当于整个集群的大脑

2、kube-controller-manager:

运行管理控制器。是K8S集群中处理常规任务的后台线程。是集群中所有资源对象的自动化控制中心。一个资源对应一个控制器,controller-manager负责管理这些控制器

·node controller(节点控制器):负责节点的发现以及节点故障的发现和响应

·replication controller(副本控制器):控制关联pod的副本数,可以随时扩缩容

·endpoints controller(端点控制器):监听service和对应pod的副本变化。端点就是一个服务暴露出的访问点。要访问这个服务,必须要知道他的endpoints。就是每个服务的IP地址+端口

·service account和roken controller(服务账户和令牌控制):为命名空间创建默认账户和api访问令牌。访问不同的namespace命名空间

·resourcequota controller(资源控制器):可以对命名空间的资源使用进行控制,也可以对pod的资源进行控制

·namespace controller(命名空间控制器):管理命名空间的生命周期

·service controller(服务节点控制器):K8S集群和外部的主机之间的接口控制器。

3、kube-scheduler:

资源调度组件,根据调度的算法为新创建的pod选择一个合适的node节点

可以理解为K8S的所有node节点的调度器,部署和调度node

预先策略:人工定制,指定node节点上部署

优先策略:有限制条件。根据调度算法选择一个合适的node,node节点的资源情况,node节点的资源控制的情况等等,选一个资源最富裕,负载最小的node来部署

4、ETCD组件:

是K8S的存储服务,etcd是分布式键值存储系统(key:value),存储K8S的关键配置和用户配置,先通过apiserver调用etcd当中的存储信息,然后再实施。在整个集群中,能对etcd存储进行读写权限的,只有apiserver

一般来说四大核心组件都部署在主节点上

二、node组件:

1、kubelet:

弄得节点的监视器,以及与master节点的通信器,也可以理解为master安装在node节点上的监控眼线。

kubelet会定时向api server汇报自己的node上运行服务的状态,api server会把节点状态保存在etcd存储中

能够接收来自master节点的调度命令。如果发现自己的状态和master节点的状态不一致,调用docker的接口,同步数据。

对接点上的生命周期进行管理,保证节点上的镜像不会占满磁盘空间,退出容器的资源,进行回收

2、kube-proxy:

实现每个node节点上pod的网络代理。负责节点上的网络规划和四层负载均衡工作。负责写入iptables(快淘汰了)、ipvs实现服务映射

kube-proxy:本身不直接给pod提供网络代理,proxy只是service资源的载体

访问:192.168.233.91:34943——10.299.96.10:80(proxy代理)——最后到每个集群nginx节点ip(负载均衡轮询)

kube-proxy:实际上代理的是pod的集群网络(虚拟网络)

K8S的每个node节点上都有一个kube-proxy组件

3、docker:

容器引擎,运行容器,负责本机的容器创建和管理

pod不是容器,是基于容器创建的pod

K8S要创建pod时,kube-scheduler调度到节点上(node节点),节点上的kubelet指示docker启动特定的容器。kubelet把容器的信息收集,发送给主节点。只需要在主节点发布指令,节点上的kubelet就会指示docker对容器进行拉取镜像、启动、停止容器

4、pod:

也是运行在节点上的。是K8S中创建部署的最小的也是最简单的基本单位,一个pod只代表集群上正在运行的进程。

同一个pod内每个容器就像是一颗颗豌豆子,pod就是豌豆

pod是由一个或多个容器组成,pod中的容器共享网络,存储和计算资源。可以部署在不同的docker主机上

一个pod里面可以运行多个容器,也可以是一个容器

在生产环境中,一般是单个容器或者具有关联关系的多个容器组成一个pod

容器是容器,pod是pod。pod是基于容器创建的

5、deployment:

无状态应用部署,作用就是管理和控制pod以及他的replicaset(副本数,表示运行几个容器)管控他的运行状态

6、replicaset:

保证pod的副本数据量,受控于deployment。

在K8S中部署服务,实际上就是pod,deployment部署的服务就是pod,replicaset就是来定义pod的容器数量

可以保证pod的不可重复性。在当前命名空间不能重复。不同命令空间名称可以重复

官方推荐使用deployment进行服务部署

7、daemonset:

确保所有节点运行同一类的pod

8、statefulset:

有状态应用部署。

9、job:

可以给pod中设置一个一次性任务,运行完即退出

10、cronjob:

一直在运行的周期性任务,默认就是cronjob

11、service:

在K8S集群中,创建一个pod之后,都会将其中运行的容器分配一个集群内的IP地址,由于业务的变更,容器可能会发生变化,IP地址也会发生变化,service的作用就是提供整个pod对外统一的IP地址(cluster-ip)

可以将service理解成一个网关(路由器),通过访问service就可以访问pod内部的容器集群

service能实现负载均衡和代理——kube-proxy——来实现负载均衡

service是K8S微服务的核心,屏蔽了服务的细节,统一的对外暴露的端口,真正实现了“微服务”

service的流量调度:userspace(用户空间,已经废弃了),iptables(即将废弃),ipvs(目前1.20都用ipvs来实现流量调度)

12、label:

标签,K8S的特色管理方式,分类管理资源对象

node pod service namespace

label标签可以用户自定义

lable选择器:等于,不等于,使用定义的标签名

13、ingress:

K8S集群对外暴露提供访问的接口

ingress在第七层属于应用层,七层代理,转发的是http请求,http/https。

service是四层转发,转发的是流量

https://www.test.com:80——>ingress——>service——pod——容器

14、namespace:

K8S上可以通过namespace命名空间的方式来实现资源隔离、项目隔离

通过namespace可以把集群划分为多个资源不可共享的虚拟集群组

不同命令空间里面的资源,名称可以重复

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

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

相关文章

Zookeeper之手写一个分布式锁

前言 我之前写了一篇快速上手ZK的文章:https://blog.csdn.net/qq_38974073/article/details/135293106 本篇最要是进一步加深学习ZK,算是一次简单的实践,巩固学习成果。 设计一个分布式锁 对锁的基本要求 可重入:允许同一个应…

【软件工程】漫谈增量过程模型:软件开发的逐步之道

🍎个人博客:个人主页 🏆个人专栏: 软件工程 ⛳️ 功不唐捐,玉汝于成 目录 前言: 正文 增量过程模型(Incremental Process Model) 主要特点和阶段: 优点&#xff1…

【滑动窗口】C++算法:K 个不同整数的子数组

作者推荐 动态规划 多源路径 字典树 LeetCode2977:转换字符串的最小成本 本题涉及知识点 滑动窗口 LeetCoe992 K 个不同整数的子数组 给定一个正整数数组 nums和一个整数 k,返回 nums 中 「好子数组」 的数目。 如果 nums 的某个子数组中不同整数的个数恰好为 …

右键添加 idea 打开功能

1.开始运行regedit 2.找到: HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell _3.开始设置 一、右键shell目录新建项Idea二、右键Idea新建command三、选择Idea 右侧空白出新建字符串 名字为Icon 值填入idea的运行程序地址 四、选择command 默认项填入idea的运行程序地址…

Vue3-29-路由-编程式导航的基本使用

补充一个知识点 路由配置中的 name 属性 : 可以给你的 路由 指定 name属性,称之为 命名路由。 这个 name 属性 在 编程式导航 传参时有重要的作用。 命名路由的写法如下 : 像指定 path 一样,直接指定一个 name 属性即可。{path:/d…

python+django网上购物商城系统o9m4k

语言:Python 框架:django/flask可以定制 软件版本:python3.7.7 数据库:mysql 数据库工具:Navicat 开发工具pycharm/vscode都可以 前端框架:vue.js 系统使用过程主要涉及到管理员和用户两种角色,主要包含个…

智能优化算法应用:基于减法平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于减法平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于减法平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.减法平均算法4.实验参数设定5.算法结果6.…

人工智能_机器学习078_聚类算法_概念介绍_聚类升维_降维_各类聚类算法_有监督机器学习_无监督机器学习---人工智能工作笔记0118

首先看一下什么是聚类,我们可以进入sklearn的官网去看看 可以看到这里,首先classification 这个分类我们学完了,然后就是regression回归我们也学完了对吧,其实我们现实生活中的,大部分问题就是 这两种问题就可以解决了. 然后我们再来看一个: clustering,这个就是聚类对吧.聚类算…

提升数据库性能的关键指南-Oracle AWR报告

文章目录 一、了解AWR报告:数据库性能的仪表盘二、生成AWR报告三、解读AWR报告的关键部分1.报告开头的系统基础信息2.ADDM发现3.负载概览(Load Profile)4.参数文件5.顶级前台等待事件6.SQL 统计信息-顶级SQL7.SGA Advisory AND PAG Advisory 一、了解AWR报告&#x…

Linux之磁盘分区,挂载

Linux分区 分区介绍 对linux来说无论有几个分区,分给哪个目录使用,归根结底只有一个根目录,linux中每个分区都是用来组成整个文件系统的一部分。linux采用“载入"的处理方法,他的整个文件系统中包含一整套的文件和目录&…

香橙派 ubuntu实现打通内网,外网双网络,有线和无线双网卡

当香橙派 ubuntu 连了有线,和无线时,默认请求外网时,只走一个网卡,如走了内网网卡,就只能访问内访问,访问不了外网;走了外网网卡就只能访问外网,访问不了内网; 实现双网…

【开源】基于Vue+SpringBoot的公司货物订单管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 客户管理模块2.2 商品维护模块2.3 供应商管理模块2.4 订单管理模块 三、系统展示四、核心代码4.1 查询供应商信息4.2 新增商品信息4.3 查询客户信息4.4 新增订单信息4.5 添加跟进子订单 五、免责说明 一、摘要 1.1 项目…

手写Spring与基本原理--简易版

文章目录 手写Spring与基本原理解析简介写一个简单的Bean加载容器定义一个抽象所有类的BeanDefinition定义一个工厂存储所有的类测试 实现Bean的注册定义和获取基于Cglib实现含构造函数的类实例化策略Bean对象注入属性和依赖Bean的功能Spring.xml解析和注册Bean对象实现应用上下…

2023-12-29 服务器开发-centos部署ftp

摘要: 2023-12-29 服务器开发-centos-部署ftp 部署ftp vsftpd(very secure FTP daemon)是Linux下的一款小巧轻快、安全易用的FTP服务器软件。本教程介绍如何在Linux实例上安装并配置vsftpd。 前提条件 已创建ECS实例并为实例分配了公网IP地址。 背景…

Vue3-26-路由-useRouter 和 useRoute 两个API 的作用介绍

先来说说两个API 的作用 useRouter() : 返回的是项目中的 路由实例的对象 可以通过这个实例对象进行路由的逻辑跳转 useRoute() : 返回的是当前的 路由对象, 可以在当前路由对象中获取到路由名称、路由参数、路由路径等玩完整的路由信息。 写个案例看一下具体是什么…

词法语法语义分析程序设计及实现,包含出错提示和错误恢复

词法说明 (1)关键字 main, int, char, if, else, for, while, void (2)运算符 - * / < < > > ! (3)界符 ; ( ) { } (4)标识符 ID letter(letter|digit)* (5)整型常数 NUM digit digit* (6)空格 ‘ ‘ ‘\n’ ‘\r’ ‘\t’ 空格用来分隔ID,NUM,运算符,界…

从AMI镜像恢复AWS Amazon Linux 2实例碰到的VNC服务以及Chrome浏览器无法启动的问题

文章目录 小结问题及解决VNC服务无法启动Chrome浏览器无法启动 参考 小结 将Amazon Linux 2保存为AMI (Amazon Machine Images)后&#xff0c;恢复成EC2 Instance (实例)后&#xff0c;VNC服务以及Chrome浏览器无法启动&#xff0c;进行了解决。 问题及解决 如果要将一个EC2…

从物联网到 3D 打印:硬件相关的开源项目概览 | 开源专题 No.52

arendst/Tasmota Stars: 20.4k License: GPL-3.0 Tasmota 是一款为 ESP8266 和 ESP32 设备提供的替代固件&#xff0c;具有易于配置的 webUI、OTA 更新、定时器或规则驱动的自动化功能以及通过 MQTT、HTTP、串口或 KNX 进行完全本地控制。该项目主要特点包括&#xff1a; 支持…

2024年上海中考数学提分的有效方法:吃透近十年中考数学真题

再过两天2023年就翻篇了&#xff0c;进入2024年&#xff0c;初三的学子们可能立刻就感觉到中考就在眼前。根据教育部门官方发消息&#xff0c;2024年中考日期安排在2024年6月19-21日&#xff0c;也意味着距离中考还有6个月多一点。 那么如何充分利用这最后的六个多月&#xff…

部署谷歌的Gemini大模型

前言 本文将介绍如何使用Docker、Docker-Compose私有化部署谷歌的Gemini大模型&#xff0c;以及没有服务器的情况下如何使用Vercel来部署。 Demo: 使用新加坡云服务器部署&#xff1a;Gemini Pro Chat (snowice.eu.org) 使用Vercel部署&#xff1a;Gemini Pro Chat (snowice.eu…