当前位置: 首页 > news >正文

Kubernetes概念


文章目录

    • Kubernetes概念
    • 一、Kubernetes简介
    • 二、kubernetes整体架构
    • 三、kubernetes分层架构
    • 四、kubernetes工作原理
    • 五、kubernetes核心概念


Kubernetes概念

一、Kubernetes简介

Kubernetes提供了面向应用的容器集群部署和管理系统。将重点放在以容器为中心的原语上进行自助运营。
Kubernetes 也提供稳定、兼容的基础(平台),用于构建定制化的workflows 和更高级的自动化任务。

Kubernetes 具备完善的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建负载均衡器、故障发现和自我修复能力、服务滚动升级和在线扩容、可扩展的资源自动调度机制、多粒度的资源配额管理能力。

Kubernetes 还提供完善的管理工具,涵盖开发、部署测试、运维监控等各个环节。

1、K8S主要功能:

K8s是用来对docker容器进行管理和编排的工具,其是一个基于docker构建的调度服务,提供资源调度、均衡容灾、服务注册、动态扩容等功能套件,其作用如下所示:

(1)数据卷:pod中容器之间数据共享,可以使用数据卷

(2)应用程序健康检查:容器内服务可能发生异常导致服务不可用,可以使用健康检查策略保证应用的健壮性。

(3)复制应用程序实例:控制器维护着pod的副本数量,保证一个pod或者一组同类的pod数量始终可用。

(4)弹性伸缩:根据设定的指标(CPU利用率等)动态的自动缩放pod数

(5)负载均衡:一组pod副本分配一个私有的集群IP地址,负载均衡转发请求到后端容器,在集群内布,其他pod可通过这个Cluster IP访问集群。

(6)滚动更新:更新服务不中断,一次更新一个pod,而不是同时删除整个服务

(7)服务编排:通过文件描述部署服务,使的程序部署更高效。

(8)资源监控:Node节点组件集成cAdvisor资源收集工具,可通过Heapster汇总整个集群节点资源数据,然后存储到InfluxDB时序数据库,再由Grafana展示

(9)提供认证和授权:支持属性访问控制、角色访问控制等认证授权策略

二、kubernetes整体架构

K8S集群包括两个部分:
1、Master 节点 (主节点)主要负责管理和控制
Master节点包含Etcd、Apiserver、controller-manager、Scheduler等组件,作用分别如下:

Etcd:存储状态的数据库,保存了整个集群的状态;
Apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
controller-manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
Scheduler:负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上。

2、Node 节点(计算节点)
Node节点包含kubelet、kube-proxy等组件,作用分别如下:

kubelet:主要负责监视指派到它所在Node上的Pod,包括创建、修改、监控、删除等;
kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡。
Docker Engine:Docker引擎,负责本机的容器创建和管理工作

三、kubernetes分层架构

Kubernetes设计理念和功能其实就是一个类似Linux的分层架构,各层说明如下:

1、核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境
2、应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)
3、管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)
4、接口层:kubectl命令行工具、客户端SDK以及集群联邦
5、生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴
(1)Kubernetes外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS应用、ChatOps等
(2)Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等

四、kubernetes工作原理

k8s的工作原理,原理实现步骤如下:

1、运维人员向 apiserver 发出指令,可以通过API Server的REST API,也可用Kubectl命令行工具。

2、apiserver 响应命令,通过一系列认证授权,把 pod 数据存储到 etcd,创建 deployment 资源并初始化 (期望状态)。

3、controller-manager 通过 list-watch 机制,监测发现新的 deployment,将该资源加入到内部工作队列,发现该资源没有关联的 pod 和 replicaset,启用 deployment controller 创建 replicaset 资源,再启用 replicaset controller 创建 pod。

4、创建完成后,将 deployment,replicaset,pod 资源更新存储到 etcd。

5、scheduler 通过 list-watch 机制,监测发现新的 pod,经过主机过滤、主机打分规则,将 pod 绑定 (binding) 到合适的主机。

6、将绑定结果存储到 etcd。

7、kubelet 每隔 20s (可以自定义) 向 apiserver 通过 NodeName 获取自身 Node 上所要运行的 pod 清单,通过与自己的内部缓存进行比较,新增加 pod。

8、kubelet 调用 Docker API 创建并启动 pod。

9、kube-proxy 为新创建的 pod 注册动态 DNS 到 CoreOS。给 pod 的 service 添加 iptables/ipvs 规则,用于服务发现和负载均衡。

10、controller-manager 通过 control loop(控制循环)将当前 pod 状态与用户所期望的状态做对比,如果当前状态与用户期望状态不同,则 controller 会将 pod 修改为用户期望状态,实在不行会将此 pod 删掉,然后重新创建pod。

五、kubernetes核心概念

基本概念总结:

概念:作用
Cluster: 超大计算机抽象,由节点(node)组成
node: 集群中的计算机
Container: 应用居住和运行在容器中
Pod Kubernetes: 基本调度单位
ReplicaSet: 创建和管理 Pod,支持无状态应用
Service: 应用 Pods 的访问点,屏蔽 IP 寻址和负载均衡
Deployment: 管理 ReplicaSet,支持滚动等高级发布机制
ConfigMap/Secrets: 应用配置,secret 敏感数据配置
DaemonSet: 保证每个节点有且仅有一个 Pod,常见于监控
StatefulSet: 类似 ReplicaSet,但支持有状态应用
Job: 运行一次就结束的任务
CronJob: 周期性运行的任务
Volume: 可装载磁盘文件存储
PersisentVolume/PersistentVolumeClaims: 超大磁盘存储抽象和分配机制
Label/Selector: 资源打标签和定位机制
Namespace: 资源逻辑隔离机制
Readiness Probe: 就绪探针,流量接入 Pod 判断依据
Liveness Probe: 存活探针,是否 kill Pod 的判断依据

相关文章:

  • git stash save untracked not staged
  • Android-Jetpack--Hilt详解
  • 【活动回顾】sCrypt在2023伦敦区块链大会上的精彩表现
  • 基于谷歌Flutter的媒体资讯APP的设计与实现
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • tcpdump使用心得
  • Spark_spark hints 详细介绍
  • Golang中WebSocket和WSS的支持
  • 一起学docker系列之十四Dockerfile微服务实践
  • Jtti:windows中apache怎么实现负载均衡
  • 【Java SE】带你在String类世界中遨游!!!
  • 软件设计之生成器模式
  • ESP32-Web-Server编程-JS 基础 1
  • JS常用数据类型转换(数字型和字符串型之间转换)
  • 企业级业绩系统如何建设
  • [case10]使用RSQL实现端到端的动态查询
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • HTTP那些事
  • SegmentFault 2015 Top Rank
  • spark本地环境的搭建到运行第一个spark程序
  • Theano - 导数
  • underscore源码剖析之整体架构
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 缓存与缓冲
  • 基于遗传算法的优化问题求解
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 前端
  • 使用 @font-face
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​configparser --- 配置文件解析器​
  • ​业务双活的数据切换思路设计(下)
  • (4)logging(日志模块)
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (二十三)Flask之高频面试点
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (十一)图像的罗伯特梯度锐化
  • (转)EXC_BREAKPOINT僵尸错误
  • (轉)JSON.stringify 语法实例讲解
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .NET实现之(自动更新)
  • /boot 内存空间不够
  • :O)修改linux硬件时间
  • @test注解_Spring 自定义注解你了解过吗?
  • [ Linux Audio 篇 ] 音频开发入门基础知识
  • [20180224]expdp query 写法问题.txt
  • [C++]指针与结构体