kubernetes构架及组件介绍
传统部署时代
早期在物理机上直接运行应用程序,无法对其定义资源边界,导致资源不分配,其他的程序性能下降
虚拟化部署时代
虚拟化允许应用程序在VM之间隔离,并提供安全界别,但是不能自由访问应用程序
因为虚拟haul可以轻松添加或更新应用程序,减低硬件成本,所有可以更好的利用资源,可以时实现更好的可伸缩性,每个mv都是一台完整的计算机。
因为调用的是虚拟资源所有没有特别的优质底层资源。
kubernetes概述
kubernetes是一个开源的可移植,可扩展的容器编排调度引擎,使用GO语言开进行发。和docker容器结合在一起,可实现容器技术的分布式架构方案。主要用于自动化部署,扩张和管理容器类应用,提供资源调度,部署管理,服务发现,扩容缩容,监控等功能。
它的目标不仅仅是一个容器编排功能,二十题共一个应用规范,用户可以描述集群的架构,定义服务的最终状态,kubernetes可以将系统达到和维持在这个状态。
使用kubernetes具备的好处
具备微服务架构
微服务架构背后有多个实例副本支撑,二k8s平台中内嵌的负载均衡调度器发挥着重要作用具备超强的横向扩容能力
kubernetes服务功能
- 数据卷:当pod容器之间想要共享数据时,可以使用数据卷
- 应用程序监控检查
- 复制应用程序实例:保证一个pod或一组同类的pod数量始终可用
- 弹性伸缩:根据设定的指标(cpu利用率)自动缩放pod副本数
- 服务发现:使用环境变量或dns服务插件保证容器中程序发现pod入库访问地址
- 负载均衡:一组pod副本分配一个私有的集群ip地址
- 滚动更新
- 服务编排
- 资源监控
- 提供认证和授权:支持角色访问
kubernetes服务特点
- 服务发现和负载均衡:如果容器的流量很大,kubernetes可以负载均衡分配网络流量,从而包含智能服务部署的稳定性
- 存储编排:可以自动挂载选择的存储系统
- 自动部署和回滚
- 自动二进制打包
- 自我修复:可以重启失败的容器,替换容器,杀死不响应用户定义的云行状况检查的容器
- 密钥与配置管理:
kubernetes应用场景
- 快速部署应用
- 快速扩展应用
- 物非对接新的应用功能
- 节省资源,优化硬件资源的使用
kubernetes架构
- etcd保存了整个集群的状态;
- apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
- controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
- scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
- kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
- Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
- kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;
master节点组件
master节点提供集群的管理控制中心,对集群进行全局决策,并检测和响应集群事件,基本上k8s所有的控制命令都是发送给master,master负责具体的执行过程,建议master节点占据一个独立的服务器并做高可用
kube-apiserver:用于暴露kubernetes api接口,任何资源请求/调用操作都经过它,提供了http rest接口的关键服务进程,是kubernetes中有的资源的增删改查等操作的唯一入口,也是集群控制入口进程
Etcd:是kubernetes听的默认存储,所有集群数据都保存在其中。使用时建议备份
kube-scheduler:是负责资源调度的进程,监视新创建且没有分配到node的pod
kube-controller-manager:运行管理控制器,是集群中吃力常规任务的后台进程,是kubernetesi所有资源对象的自动化控制中心。
- 节点控制器(node controller):对每个节点进行检查pod状态,并且响应
- 复制控制器(replication controller):负责维护正确数量的pod
- 端点控制器(endpoints controller):填充端点对象(即连接servers 和 pods)
- 服务账户和令牌控制器:为新的命名空间创建默认账户和api访问令牌
node节点
node节点是k8s集群中的工作负载节点,每个node都会别master分配一些工作负载,当某个node宕机时,node上的工作负载会被master转移到其他的node节点上去
- kubelet:负责pod对应容器的创建,启停等任务,同时与master节点密切协作,实现管理
- kube-proxy:用于实现酷比二本 Service之间的通信与负载均衡机制
- docker Engine(docker):docker引擎,负责本机的容器创建和管理工作
node节点可以在运行期间动态增加kubernetes集群中,前提是这个节点上已经正确安装,配置和启动上述关键进程。默认情况上下,kubelet会向master注册自己。一旦node节点被纳入集群管理范围,kubelet进程会定时向master汇报自身情况。
插件(Addons)
插件使用kubernetes资源实现集群功能。因为这些提供集群级别的功能,所以插件的命名空间资源我属于kube-system命名空间
- DNS
- dashboard:一个web界面,很方便。
除了核心组件,还有一些推荐的Add-ons:
- kube-dns负责为整个集群提供DNS服务
- Ingress Controller为服务提供外网入口
- Heapster提供资源监控
- Dashboard提供GUI
- Federation提供跨可用区的集群
- Fluentd-elasticsearch提供集群日志采集、存储与查询
kubernetes资源对象
kubernetes所有的资源对象都可以通过其提供的kubectl工具进行增删改查等操作,并将其保存在Etcd中持久化存储。
- pod(豆荚):是kubernetes创建或部署的最小的基本单位,一个pod代表集群上正在运行的一个进程。一个pod由一个或多个容器组成,od中容器可以共享存储和网络。在同一台docker主机上运行,每个pod都有一个特殊的别称为“根容器”的pause容器,pause容器对应的镜像属于kubernetes平台的一部分。除了pause容器,每个pod包含一个或多个紧密相关的用户业务容器
- label(标签):一个label是一个key-value的键值对,其中key与value由用户自己指定,label可以附加到各种资源对象上,一个资源对象可以定义任意数量的label,同一个label也可以被添加到任意数量的资源对象中,可以通过label selector 标签选择器查询和筛选拥有某些label的资源对象
- replicaset controller(复制控制器 RC):是最早保证pod高可用的api对象,通过监控运行中的pod来保证集群中运行指定数目的pod副本。
RS与RC唯一区别就是label selector支持不同,RS支持行的基于集合的标签,RC仅支持基于等式的标签 - Deploymnet(部署):表示用户对k8s集群的更新,也可以是创建一个新的服务,逐渐将新RS中副本数量增加到理想状态,并且将旧RS中的副本数减少到0的复合操作,未来对所有的长期服务型的业务管理
- service(服务):RC保证了pod数量,deployment保证维护,此时就需要service来解决访问问题,service将pod包含到一起,并对外提供一个访问地址。然后service对其进行负载均衡调度,进行分配。
是由kube-proxy(负载均衡器)实现的,在k8s的每个node节点都会运行一个kube-proxy组件。 - jbk(计划任务):用来控制批处理型任务的api对象
- volume(数据卷):共享pod中容器使用的数据
- namespace:命名空间将独享逻辑分配到不同的namespace,可以是不同的项目,用户等区分管理
- statefulset:适合持久性的应用程序,有唯一的网络标志符(ip),持久存储,有序的部署,扩展,删除和滚动更新
kubernetes原理
- master就是集群的大脑
- node就是干活的,一般一个node就是一个虚拟机或者物理机,上面部署这docker服务和kubelet服务。
Deployment-应用管理者
当我们有一个k8s集群后,此时可以在上面跑docker可以运行的应用,也就是docker镜像
有了镜像后。就会通过Deployment配合着文件描述应用,写入配置文件.yaml中
有了配置文件就可以通过k8s提供的命令行客户端kubectl去管理这个应用,kubectl会和master通过验证授权连接上api在和RestAPI通信,完成应用管理,例如kubectl create -f .yaml 来创建这个应用。
创建完成,由k8s来保证应用运行。
pod-kubernetes 最小调度单位
pod就是一组容器,可以通过volume共享存储
相同的网络空间,一样的IP地址,一样的网卡和网络设置
互相沟通隧道
service-服务发现-找到每一个pod
上面的Deployment创建后,pod也运行起来了,但是pod-ip+prot来访问时,ip一直在变,并且pod-ip很多,所以,需要一个来对其控制
service通过pod的label标签来对其维护,并且对外提供了多个入口
- ClusterIP:service在集群内的唯一IP地址
- nodePort:service会在集群中的每个node启动一个端口
- loadBalancer:在nodeport的基础上,借助公有云环境创建一个外部的负载均衡器,并将请求转发到nodeip:nodeport上
- externalname:讲服务通过DNS CNAME记录方式转发到指定的域名
rollingupdate-滚动升级
就是一边增加新版本的pod数量,一边减少旧版本的pod直到0
管理员--kubelet--deployment(nginx.yaml)--label--service--pod--container
kubernetes构架及组件介绍的更多相关文章
- (转帖)开源容器集群管理系统Kubernetes架构及组件介绍
最近在搞Docker还有她的管理工具,选型Kuberetes后,被她的术语和概念搞得晕头转向...看了一篇文章还不错,放到这里分享出来. 地址:http://www.linuxidc.com/Linu ...
- Kubernetes组件介绍
一.api-server 基本概念 该端口默认值为6443,可通过启动参数"--secure-port"的值来修改默认值. 默认IP地址为非本地(Non-Localhost)网 ...
- 【k8s】kubernetes(k8s)介绍
转自 http://blog.csdn.net/Real_Myth/article/details/78719244 一.Kubernetes系列之介绍篇 •Kubernetes介绍 1.背景介绍 ...
- ceph-csi组件源码分析(1)-组件介绍与部署yaml分析
更多ceph-csi其他源码分析,请查看下面这篇博文:kubernetes ceph-csi分析目录导航 ceph-csi组件源码分析(1)-组件介绍与部署yaml分析 基于tag v3.0.0 ht ...
- k8s功能、各组件介绍以及pod创建流程
一.什么是Kubernetes Kubernetes(k跟s中间隔了8个字母又称k8s) 是谷歌开源的容器集群管理系统,是 Google 多年大规模容器管理技术Borg 的开源版本,主要功能包括: 基 ...
- 开源免费且稳定实用的.NET PDF打印组件itextSharp(.NET组件介绍之八)
在这个.NET组件的介绍系列中,受到了很多园友的支持,一些园友(如:数据之巅. [秦时明月]等等这些大神 )也给我提出了对应的建议,我正在努力去改正,有不足之处还望大家多多包涵.在传播一些简单的知识的 ...
- 免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
前面介绍了六种.NET组件,其中有一种组件是写文件的压缩和解压,现在介绍另一种文件的解压缩组件SharpZipLib.在这个组件介绍系列中,只为简单的介绍组件的背景和简单的应用,读者在阅读时可以结合官 ...
- 免费高效实用的.NET操作Excel组件NPOI(.NET组件介绍之六)
很多的软件项目几乎都包含着对文档的操作,前面已经介绍过两款操作文档的组件,现在介绍一款文档操作的组件NPOI. NPOI可以生成没有安装在您的服务器上的Microsoft Office套件的Excel ...
- 免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)
很多的软件项目中都会使用到定时任务.定时轮询数据库同步,定时邮件通知等功能..NET Framework具有“内置”定时器功能,通过System.Timers.Timer类.在使用Timer类需要面对 ...
- 免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
在生活中有一种东西几乎已经快要成为我们的另一个电子”身份证“,那就是二维码.无论是在软件开发的过程中,还是在普通用户的日常中,几乎都离不开二维码.二维码 (dimensional barcode) , ...
随机推荐
- Git入门图文教程(1.5W字40图)🔥🔥--深入浅出、图文并茂
01.认识一下Git!-简介 Git是当前最先进.最主流的分布式版本控制系统,免费.开源!核心能力就是版本控制.再具体一点,就是面向代码文件的版本控制,代码的任何修改历史都会被记录管理起来,意味着可以 ...
- Unity之语音识别
Unity之语音识别 前言 开篇 Unity版本及使用插件 正题 写脚本 挂载到游戏场景中 结尾 唠家常 今日无推荐 前言 开篇 今儿心情好,哈哈哈哈哈 今天小黑给大家带来Unity的语音识别功能,超 ...
- PHP判断访问来源是PC端还是移动端
一个方法轻松搞定,各种判断后当返回true为移动端,反之为PC端. function isMobile(){ // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 if (isset ($ ...
- Android第五次作业
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q ...
- Nginx06 Rewrite
1 简介 rewrite模块即ngx_http_rewrite_module模块,主要功能是改写请求URI,是Nginx默认安装的模块.rewrite模块会根据PCRE正则匹配重写URI,然后发起内部 ...
- npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
出现问题原因: vscode运行前端命令,没有为安装的npm配置环境变量 解决办法: 配置环境变量,可查看前一篇文章nodejs 环境变量配置 配置完后还出如题原因: 重新启动vscode终端powe ...
- STM32F4寄存器串口DMA汇总
1.初始化 //RCC RCC->APB1ENR|=1<<20; //使能串口5时钟 RCC->APB1ENR|=1<<19; //使能串口4时钟 RCC-> ...
- UBUNTU16.04卸载安装protobuf
1.卸载 sudo apt-get remove libprotobuf-dev which protoc 然后删除路径即可 2.安装 sudo apt-get install autoconf au ...
- JZOJ 4319. 【NOIP2015模拟11.5】Lucas的数列
题目 思路 暴力很好打,我们显然可以先把关于 \(k\) 的式子拆开 先二项式展开,然后把外面的 \(m\) 乘进去,把 \(p\) 的分母 \(m\) 消去 \(K = (\sum_{i=1}^m ...
- bootstrap怎么让手机端电脑端自适应显示隐藏元素
我用的是bootstrap v3 这是电脑端: 这是手机端: 其实很简单:我用的 visible-lg 弄了半天才发现md是中等屏幕可见,所以要用lg 代码如下: 一行一共是12,我这里有3个元素,所 ...