传统部署时代

早期在物理机上直接运行应用程序,无法对其定义资源边界,导致资源不分配,其他的程序性能下降

虚拟化部署时代

虚拟化允许应用程序在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构架及组件介绍的更多相关文章

  1. (转帖)开源容器集群管理系统Kubernetes架构及组件介绍

    最近在搞Docker还有她的管理工具,选型Kuberetes后,被她的术语和概念搞得晕头转向...看了一篇文章还不错,放到这里分享出来. 地址:http://www.linuxidc.com/Linu ...

  2. Kubernetes组件介绍

    一.api-server   基本概念 该端口默认值为6443,可通过启动参数"--secure-port"的值来修改默认值. 默认IP地址为非本地(Non-Localhost)网 ...

  3. 【k8s】kubernetes(k8s)介绍

    转自 http://blog.csdn.net/Real_Myth/article/details/78719244 一.Kubernetes系列之介绍篇   •Kubernetes介绍 1.背景介绍 ...

  4. ceph-csi组件源码分析(1)-组件介绍与部署yaml分析

    更多ceph-csi其他源码分析,请查看下面这篇博文:kubernetes ceph-csi分析目录导航 ceph-csi组件源码分析(1)-组件介绍与部署yaml分析 基于tag v3.0.0 ht ...

  5. k8s功能、各组件介绍以及pod创建流程

    一.什么是Kubernetes Kubernetes(k跟s中间隔了8个字母又称k8s) 是谷歌开源的容器集群管理系统,是 Google 多年大规模容器管理技术Borg 的开源版本,主要功能包括: 基 ...

  6. 开源免费且稳定实用的.NET PDF打印组件itextSharp(.NET组件介绍之八)

    在这个.NET组件的介绍系列中,受到了很多园友的支持,一些园友(如:数据之巅. [秦时明月]等等这些大神 )也给我提出了对应的建议,我正在努力去改正,有不足之处还望大家多多包涵.在传播一些简单的知识的 ...

  7. 免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)

    前面介绍了六种.NET组件,其中有一种组件是写文件的压缩和解压,现在介绍另一种文件的解压缩组件SharpZipLib.在这个组件介绍系列中,只为简单的介绍组件的背景和简单的应用,读者在阅读时可以结合官 ...

  8. 免费高效实用的.NET操作Excel组件NPOI(.NET组件介绍之六)

    很多的软件项目几乎都包含着对文档的操作,前面已经介绍过两款操作文档的组件,现在介绍一款文档操作的组件NPOI. NPOI可以生成没有安装在您的服务器上的Microsoft Office套件的Excel ...

  9. 免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)

    很多的软件项目中都会使用到定时任务.定时轮询数据库同步,定时邮件通知等功能..NET Framework具有“内置”定时器功能,通过System.Timers.Timer类.在使用Timer类需要面对 ...

  10. 免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)

    在生活中有一种东西几乎已经快要成为我们的另一个电子”身份证“,那就是二维码.无论是在软件开发的过程中,还是在普通用户的日常中,几乎都离不开二维码.二维码 (dimensional barcode) , ...

随机推荐

  1. Git入门图文教程(1.5W字40图)🔥🔥--深入浅出、图文并茂

    01.认识一下Git!-简介 Git是当前最先进.最主流的分布式版本控制系统,免费.开源!核心能力就是版本控制.再具体一点,就是面向代码文件的版本控制,代码的任何修改历史都会被记录管理起来,意味着可以 ...

  2. Unity之语音识别

    Unity之语音识别 前言 开篇 Unity版本及使用插件 正题 写脚本 挂载到游戏场景中 结尾 唠家常 今日无推荐 前言 开篇 今儿心情好,哈哈哈哈哈 今天小黑给大家带来Unity的语音识别功能,超 ...

  3. PHP判断访问来源是PC端还是移动端

    一个方法轻松搞定,各种判断后当返回true为移动端,反之为PC端. function isMobile(){ // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 if (isset ($ ...

  4. Android第五次作业

    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q ...

  5. Nginx06 Rewrite

    1 简介 rewrite模块即ngx_http_rewrite_module模块,主要功能是改写请求URI,是Nginx默认安装的模块.rewrite模块会根据PCRE正则匹配重写URI,然后发起内部 ...

  6. npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

    出现问题原因: vscode运行前端命令,没有为安装的npm配置环境变量 解决办法: 配置环境变量,可查看前一篇文章nodejs 环境变量配置 配置完后还出如题原因: 重新启动vscode终端powe ...

  7. STM32F4寄存器串口DMA汇总

    1.初始化 //RCC RCC->APB1ENR|=1<<20; //使能串口5时钟 RCC->APB1ENR|=1<<19; //使能串口4时钟 RCC-> ...

  8. UBUNTU16.04卸载安装protobuf

    1.卸载 sudo apt-get remove libprotobuf-dev which protoc 然后删除路径即可 2.安装 sudo apt-get install autoconf au ...

  9. JZOJ 4319. 【NOIP2015模拟11.5】Lucas的数列

    题目 思路 暴力很好打,我们显然可以先把关于 \(k\) 的式子拆开 先二项式展开,然后把外面的 \(m\) 乘进去,把 \(p\) 的分母 \(m\) 消去 \(K = (\sum_{i=1}^m ...

  10. bootstrap怎么让手机端电脑端自适应显示隐藏元素

    我用的是bootstrap v3 这是电脑端: 这是手机端: 其实很简单:我用的 visible-lg 弄了半天才发现md是中等屏幕可见,所以要用lg 代码如下: 一行一共是12,我这里有3个元素,所 ...