Kubernetes是什么?
Kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。Kubernetes是Google开源的一个容器编排引擎,同时也是一个开源的容器集群管理系统,可以实现容器应用的自动化部署、自动扩缩容、监控和维护等功能。

一、Kubernetes架构

Kubernetes最初源于谷歌内部的Borg,提供了面向应用的容器集群部署和管理系统。Kubernetes的目标旨在消除编排物理/虚拟计算、网络和存储基础设施的负担,并使应用程序运营商和开发人员完全将重点放在以容器为中心的原理上进行自助运营。
Kubernetes具备完善的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建负载均衡器、故障发现和自我修复能力、服务滚动升级和在线扩容、可扩展的资源自动调度机制、多粒度的资源配额管理能力。
Borg是谷歌内部的大规模集群管理系统,负责对谷歌内部很多核心服务的调度和管理。Borg的目的是让用户能够不必操心资源管理的问题,从而更专注于自己的核心业务。Borg甚至能做到跨多个数据中心的资源利用率最大化。

Kubernetes属于主从分布式架构,主要由Master和Node组成,以及包括客户端命令行工具kubectl和其它附加项。

Master:作为控制节点,对集群进行调度管理;由kube-apiserver、kube-scheduler、kube-controller-manager和etcd组成。
Node:作为工作节点,运行业务应用的容器;由kubelet、kube-proxy和docker(或者rocket)组成。

二、Kubernetes组件

Master指的是集群控制节点,每个Kubernetes集群里需要有至少一个Master来负责集群的管理和控制。Master可以是一台物理机,也可以是一台虚拟机,Master节点上运行着以下组件:
kube-apiserver:提供了HTTP Rest接口的关键服务进程,是集群里所有资源的增、删、改、查等操作的唯一入口,也是集群的控制入口。
kube-controller-manager:运行管理控制器,是集群中处理常规任务的后台进程,每个Controller都负责一种具体的控制流程,而Controller Manager就是这些Controller的核心管理者。
kube-scheduler:负责资源调度(Pod调度)的进程,为新创建的Pod选择一个Node节点。
etcd:是kubernetes默认的存储系统,集群里所有资源对象的数据全部保存在etcd中。

Node指的是集群的工作节点,和Master一样,可以是一台物理主机,也可以是一台虚拟机。每个Node都会被Master分配一些工作负载(Docker容器),当某个Node宕机时,其上的工作负载会被Master自动转移到其他节点上去。Node上运行的组件如下:
kubelet:负责Pod对应的容器的创建、启停等任务,同时与Master节点密切协作,实现集群管理的基本功能。
kube-proxy:实现Kubernetes Service的通信与负载均衡机制的重要组件。
docker:容器引擎,负责本机的容器创建和管理工作。

三、Kubernetes对象

  • Pod
    Pod是Kubernetes集群创建或部署的最基本、最小的单位,每个Pod里运行着一个或多个容器,每个Pod里都有一个特殊的被称为Pause的容器,其他容器则为业务容器,这些业务容器共享Pause容器的网络栈和Volume(存储卷)。Kubernetes为每个Pod都分配了唯一的IP地址,称为Pod IP,一个Pod里的所有容器共享这一个Pod IP。
  • Service
    Service定义了这样一种抽象:一个Pod的逻辑分组,一种可以访问它们的策略。Service通常被称为微服务,定义了一个服务的访问入口地址,前端的应用(Pod)通过这个入口访问其背后的一组由Pod副本组成的集群实例,Service与其后端Pod副本集群之间通过Label Selector来实现通信。
  • Label
    标签,一个Label就是一个key=value的键值对,由用户自己指定。Label可以附加到各种资源对象上,例如Pod、Service等,一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上去。Label通常在资源对象定义时确定,也可以在对象创建后动态添加或者删除。
  • Volume
    存储卷,与Docker的Volume比较类似,不同的是,Kubernetes中的Volume定义在Pod上,这个Pod里的所有容器都可以将其挂载到具体的文件目录下,实现容器间的资源共享。
  • Persistent Volume
    网络存储卷,与Volume不同的是,它是在Node之间共享资源,每个Node都可以挂载使用。Pod可通过定义一个PersistentVolumeClaim(PVC)对象,来使用Persistent Volume资源。
  • Name
    Kubernetes REST API中的所有对象都用Name和UID来明确地标识。Name在一个对象中同一时间只能拥有一个Name,如果对象被删除,也可以使用相同的Name创建新的对象,Name用于在资源引用URL中的对象。
  • Namespace
    命名空间,很多情况下用于实现多租户的资源隔离。Namespace通过将集群内部的资源对象“分配”到不同的Namespace中,形成逻辑上分组的不同项目、小组或用户组,便于不同的分组在共享使用整个集群的资源的同时还能被分别管理。
  • Horizontal Pod Autoscaling
    简称HPA,是Kubernetes中实现Pod水平自动伸缩的功能。对于Pod集群来说,HPA可以实现很多自动化功能,当Pod中业务负载上升的时候,可以创建新的Pod来保证业务系统稳定运行;当Pod中业务负载下降的时候,可以销毁Pod来提高资源利用率。
  • Annotation
    注解,与Label类似,使用key/value键值对的形式进行定义。Annotation是用户任意定义的“附加”信息,以便于外部工具进行查找。很多时候,Kubernetes的模块自身会通过Annotation的方式标记资源对象的一些特殊信息。
  • ReplicaSet
    ReplicaSet(RS)是Replication Controller(RC)的升级版本,确保运行指定数量的Pod。RC与RS的唯一区别就是对Lable Selector的支持不同,RS支持新的基于集合的标签,RC仅支持基于等式的标签。
    当我们定义了一个RS并提交到Kubernetes集群中,Master节点上的Controller Manager组件就得到通知,定期巡检系统中当前存活的目标Pod,并确保目标Pod实例的数量刚好等于此RS的期望值,如果有过多的Pod副本在运行,系统就会停掉多余的Pod;如果小于RS的期望值,系统就会自动创建一些新的Pod,使其目标Pod实例的数量等于RS的期望值。
  • Deployment
    Deployment为Pod和ReplicaSet提供声明式更新,通过它来管理Pod和ReplicaSet。当我们要部署一个Pod时,需要创建、调度、绑定节点和启动容器这一完整过程,而Deployment就是负责这一整个部署过程的。

    Deployment的典型使用场景有以下几个:
    创建一个Deployment对象来生成对应的ReplicaSet,并完成Pod副本的创建过程。
    检查Deployment的状态来查看部署工作是否完成(Pod副本的数量是否达到预期的值)。
    更新Deployment以创建新的Pod(比如镜像升级)。
    如果当前Deployment不稳定,则回滚到一个早先的Deployment版本。
    挂起或者恢复一个Deployment。
  • StatefulSet
    StatefulSet为Pod提供唯一标识,实现有序的部署、删除和扩展。Deployment用于部署无状态服务,StatefulSet用来部署有状态服务。

    StatefulSet的使用场景如下:
    稳定性,唯一的网络标识。
    稳定性,持久化存储。
    有序的部署和扩展。
    有序的删除和终止。
    有序的自动滚动更新。
  • DaemonSet
    DaemonSet能够让所有(或者特定)的Node节点运行同一个Pod。当节点加入到Kubernetes集群中,Pod会被DaemonSet调度到该节点上运行,当节点从集群中移除时,被DaemonSet调度到该节点上的Pod也会被移除。如果删除DaemonSet,与DaemonSet相关的Pod都会被删除。
  • Job
    仅执行一次的任务,任务执行完成后Pod销毁,可批量处理一次性任务。还可以让任务定时运行。

    四、总结

    上述这些组件都是Kubernetes系统的核心组件,它们共同构成了Kubernetes系统的框架和计算模型。通过对它们进行灵活组合,用户就可以快速、方便地对容器集群进行配置、创建和管理。除了本文所介绍的核心组件,Kubernetes中还有许多辅助配置的资源对象,例如LimitRange、ResourceQuota等。另外,还有一些系统内部使用的对象,例如Binding、Event等可参考官方API文档。
    说在最后
    本人也是刚接触Kubernetes(K8s),本文内容是摘自相关书籍和网上的相关资料,并结合自己的理解所写的,如有理解错误的地方还请大家不吝指出,共同进步。
    由于国内关于Kubernetes的学习资料很少,51cto上倒是有相关的订阅专栏,但都是要钱的,对于这个我不做评论。这里向跟我一样的初学者推荐一本书《Kubernetes权威指南(第2版)》,网上可以下载到PDF版本,虽然这本书讲的Kubernetes的版本是1.3的,版本比较老,但对于初学者可以学习它的理论知识,并结合网上新版本的相关资料自行理解,也是一种非常不错的学习方法。
    对Kubernetes(K8s)有兴趣的朋友,可以关注我的博客,后面我会继续发表学习Kubernetes的博文,欢迎各位朋友和我一起踏上Kubernetes(K8s)的旅程。

转载于:https://blog.51cto.com/andyxu/2308937

初识Kubernetes(K8s):理论基础相关推荐

  1. 【CentOS】利用Kubeadm部署Kubernetes (K8s)

    [CentOS]利用Kubeadm部署Kubernetes (K8s)[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体实验流程 1 系统准 ...

  2. 深入剖析Kubernetes k8s

    深入剖析Kubernetes k8s 毫无疑问,Kubernetes 已经成为容器领域当之无愧的事实标准.除了 Google.Microsoft 等技术巨擘们在容器领域里多年的博弈外,国内的 BAT. ...

  3. 02 | 健康之路 kubernetes(k8s) 实践之路 : 生产可用环境及验证

    上一篇< 01 | 健康之路 kubernetes(k8s) 实践之路 : 开篇及概况 >我们介绍了我们的大体情况,也算迈出了第一步.今天我们主要介绍下我们生产可用的集群架设方案.涉及了整 ...

  4. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...

  5. kubernetes(k8s)-介绍2

    kubernetes(k8s)-安装(二) 什么是Kubernetes Kubernetes是一个开源平台,用于跨主机群集自动部署,扩展和操作应用程序容器,提供以容器为中心的基础架构. 使用Kuber ...

  6. Kubernetes(K8S)入门到运维 ( 六) Helm与功能组件及证书年限

    elm与功能性组件 为什么又来一个Helm? 在向K8S部署应用时,要依次部署Deployment.SVC等,步骤多且麻烦,而且随着越来越多的项目微服务化,复杂的应用在容器中部署以及管理就更为复杂了, ...

  7. Kubernetes(K8s)Events介绍(上)

    Kubernetes Events虽不常被提起,却意义非凡.它存储在Etcd里,记录了集群运行所遇到的各种大事件.本系列文章将一步一步地揭开Kubernetes Events的神秘面纱. 师出有名 前 ...

  8. 使用阿里云和gcr.azk8s.cn镜像安装Kubernetes (K8s)

    使用阿里云和gcr.azk8s.cn镜像安装Kubernetes (K8s) 由于墙的原因,k8s.gcr.io无法从国内访问,因此在安装Kubernetes时需要使用到国内的镜像.本文讲解使用kub ...

  9. Kubernetes K8S之资源控制器Job和CronJob详解

    Kubernetes的资源控制器Job和CronJob详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2 ...

  10. Kubernetes(K8s)基本概念:Volume(存储卷)、Persistent Volume

    Kubernetes(K8s)基本概念:Volume(存储卷) 一.Volume(存储卷) Volume是Pod中能够被多个容器访问的共享目录. K8s中的Volume定义在Pod上,然后被一个Pod ...

最新文章

  1. 从指纹到眼球识别:漫谈手机安全方案
  2. (POJ 3026) Borg Maze 最小生成树+bfs
  3. 自动化监控--zabbix中的template(模板)详解
  4. java实验七输入输出流_实验六_Java的输入输出流
  5. 送书 | 经典框架Kaldi配套的语音识别实战
  6. linux下配置iscsi存储,linux 下iscsi网络存储配置
  7. 广告点击率模型中,LR, GBDT+LR, FM, DNN等模型的优点和缺点?实际效果如何?
  8. java 判定1个IP地址是否是合法IP
  9. 打造前端MAC工作站(二)安装软件的两种方法
  10. 磁盘分区,格式化,挂载
  11. c# 使用Microsoft.Office.Interop.Excel导出文件时提示 兼容性检查
  12. 如何推动数字经济新时代产业转型升级
  13. 文档管理软件在线编辑和协同
  14. 芯动联科在科创板IPO过会:拟募资10亿元,金晓冬为实际控制人
  15. JSON parse error: Unrecognized field “abc“ (class cn.kk.xxxDto), not marked as ignorable;
  16. 【根文件系统 】开发板通过nfs挂载ubuntu上的根文件系统
  17. 【keepass】密码管理软件-推荐插件和相关工具合集-keepass工作流分析(自动填充、美化界面、快速添加记录、安全增强、软件和数据库维护类)
  18. 上海2013年驾校科目二学习心得,完全是我自己总结的。
  19. python购物街竟价项目_python制作视频教程下载地址
  20. ArcMap 镶嵌数据集基本使用方法

热门文章

  1. 【FFmpeg】AVOutputFormat/AVInputFormat 成员变量 flags 总结
  2. 【linux】用过的shell命令
  3. matlab直流输电,重金悬赏matlab编程(电力方向,轻型高压直流输电的小信号模型)...
  4. Java成员变量与类变量_Java基础随记2-成员变量和类变量的区别
  5. mybatis-plus对datetime返回去掉.0_华为AI认证-TensorFlow2.0编程基础
  6. matlab 通过矩阵变换使图像旋转平移_图像的几何变换
  7. ai条码插件免安装_ai条码插件2款下载|Barcode Toolbox插件+Barcode条码插件下载 - 偶要下载站...
  8. Android 活动与活动间数据传递
  9. 《深入理解计算机系统》第七章——链接知识点总结
  10. java 稀疏数组和二维数组转换,并保存稀疏数组到文件后可以读取