当前位置: 首页 > 编程日记 > 正文

初识Kubernetes(K8s):理论基础

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

一、Kubernetes架构

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

相关文章:

Sobel算子及cvSobel

转自:http://blog.sina.com.cn/s/blog_4bdbec750100mufo.html 由于项目里要用到边缘检测,所以今天研究了一下最简单的梯度的方法。 首先,我们来开一下计算机是如何检测边缘的。以灰度图像为例,它的理论基础是这样的,如…

python全栈开发笔记---------函数

一 数学定义的函数与python中的函数 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因…

OpenCV中的内存泄露问题(cvLoadImage,cvCloneImage)

转自:http://apps.hi.baidu.com/share/detail/30893646 在做项目的过程中,使用OpenCV经常会出现一些内存泄露问题,自己编写的程序出现问题还情有可原,但若是库函数调用和使用时出现,却很令我恼火。花了好长时间和实践的…

41款实用工具,数据获取、清洗、建模、可视化都有了

诸如结构式访谈、非结构式访谈、开放式问卷调查、封闭式问卷调查、记录评论和观察等技术统称为事实调查方法。这种事实调查方法和其他数据获取方法可以采取自动化,而不必使用人工方法。使用具有专用软件的物理设备(如终端、传感器和扫描仪等)…

OpenCV中的内存泄漏检测

转自:http://chaishushan.blog.163.com/blog/static/130192897200911685559809/ 内存泄漏时程序开发中经常遇到的问题. 而且出现内存泄漏很难检测,但是其导致的结果却是灾难性的. 这里讲一下opencv中内存泄漏检测的一些技巧.OpenCV中关于内存管理主要涉及到以下3个函…

一文全面了解基于内容的推荐算法

作者丨gongyouliu来源 | 转载自大数据与人工智能(ID:ai-big-data)这篇文章我们主要关注的是基于内容的推荐算法,它也是非常通用的一类推荐算法,在工业界有大量的应用案例。本文会从什么是基于内容的推荐算法、算法基本原理、应用场…

[Nginx优化]分享nginx配置文件及优化说明

1、系统及内核方面 根据服务器用途,建议系统最小化安装或针对web服务器进行系统内核重新编译;在内核参数的一些优化,如下: # Add net.ipv4.tcp_max_syn_backlog 65536 #表示SYN队列的长度 net.core.netdev_max_backlog 3…

laravel项目composer安装

1.下载 Composer (https://pkg.phpcomposer.com/#how-to-install-composer) 安装前请务必确保已经正确安装了 PHP。打开命令行窗口并执行 php -v 查看是否正确输出版本号。 打开命令行并依次执行下列命令安装最新版本的 Composer: 复制php -r…

淘宝装修:第一日 —— 图片轮播

先添加一个自定义内容区&#xff0c;进入源码编辑&#xff0c;如下图所示&#xff1a; 添加源码如下&#xff1a; <TABLE border0 cellSpacing0 cellPadding0 width773 height220> <TBODY> <TR> <TD width773> <P> <MARQUEE height220 behavi…

强化学习大规模应用还远吗?Youtube推荐已强势上线

来源 | 转载自深度传送门导读&#xff1a;本文将介绍在深度学习的强力驱动下&#xff0c;给推荐系统工业界所带来的最前沿的变化。本文主要根据几大顶会2019的最新论文&#xff0c;总结一下深度强化学习给推荐系统以及CTR预估工业界带来的最新进展。 凡是Google出品&#xff0c…

layui select 与 vue 的结合使用

2019独角兽企业重金招聘Python工程师标准>>> 1. 创建一个select元素 <form class"layui-form layui-form-pane all-account-filter-form"><div class"layui-form-item"><div class"layui-inline"><label class&…

OpenCV 2.2.0 CvvImage的使用

转自&#xff1a;http://blog.csdn.net/raocong2010/archive/2011/01/17/6146158.aspx# 前几日&#xff0c;OpenCV 2.2.0版本出现了...但是...以前版本的CvvImage类不见了...为了能够继续使用这个类&#xff0c;下面把这个类的源代码贴出来&#xff0c;使用的时候将该代码加入到…

c/c++标准预定义宏

转自&#xff1a;http://www.eefocus.com/andysun001/blog/10-06/192018_008b3.html 一、标准预定义宏The standard predefined macros are specified by the relevant language standards, so they are available with all compilers that implement those standards. Older c…

阿里AI攻克心血管识别技术,冠脉中心线提取论文入选国际医学影像会议

阿里在医疗AI领域取得新进展&#xff0c;继创下肺结节检测、肝结节诊断技术的重大突破后&#xff0c;又攻克了难度系数更高的心血管识别技术。 近日&#xff0c;阿里达摩院机器智能实验室有关冠状动脉中心线提取的论文已被国际顶级医学影像会议MICCAI 2019提前接收。 阿里AI论…

自由程序员在国外

可靠的做法是&#xff0c;在一些像oDesk这样的网站上找一些临时开发任务&#xff0c;在Linked In网站上提交一份个人简历。这样将有助于你在出行后尽早的找到可干的项目&#xff0c;而不必到时大减价来抢其他程序员的活儿(或消减自己的预算)。 从来不缺乏你可以捐赠代码的开源项…

关于spring aop Advisor排序问题

关于spring aop Advisor排序问题 当我们使用多个Advisor的时候有时候需要排序&#xff0c;这时候可以用注解org.springframework.core.annotation.Order或者实现org.springframework.core.Ordered接口。 示例代码&#xff1a; import org.aspectj.lang.ProceedingJoinPoint; im…

NLP重大突破?一文读懂XLNet“屠榜”背后的原理

作者 | 李理 原文链接&#xff1a;https://fancyerii.github.io/2019/06/30/xlnet-theory/ 本文介绍XLNet的基本原理&#xff0c;读者阅读前需要了解BERT等相关模型&#xff0c;不熟悉的读者建议学习BERT课程。 语言模型和BERT各自的优缺点 在论文里作者使用了一些术语&#…

CSS3支持IE6, 7, and 8的边框属性

我们都知道&#xff0c;IE 6,7不支持新增加的CSS3属性&#xff0c;甚至与IE8是CSS3还没有完全准备好。你知道吗&#xff0c;今天给大家分享一个脚本工具&#xff0c;可以帮助您启用CSS3的支持IE浏览器&#xff08;IE6&#xff09;与新的CSS3属性&#xff0c;包括&#xff1a;bo…

解决:VS 2005/2008 中 fstream 不能处理带有中文路径的问题

转自&#xff1a;http://blog.csdn.net/code_robot/archive/2010/06/23/5688867.aspx 有时候用ifstream或ofstream打开带有中文路径的文件会失败。 解决办法&#xff1a;1、使用C语言的函数设置为中文运行环境setlocale(LC_ALL,"Chinese-simplified"); 2、使用STL函…

NLP文本标注工具与平台(数据标注公司)

最近在做NLP相关项目&#xff0c;包括句法分析、情感分析等&#xff0c;有大量数据需要标注。我评估了几个文本标注工具&#xff0c;也接触了几家数据标注公司和平台&#xff0c;总结如下&#xff0c;供各位参考。 文本标注平台&#xff08;标注外包公司&#xff09; 数据标注公…

一文读懂基于神经网络的图片风格转移

作者 | moliam转载自 CSDN 博客前言将A图片的风格转移到B图片上&#xff0c;指的是将A图片的抽象艺术风格&#xff08;如线条、色彩等等&#xff09;和B图片的内容框架合成为一幅图。自然地&#xff0c;A图片称为风格图&#xff0c;而B图片就称为内容图。就像这样&#xff1a;左…

【物联网中间件平台-01】真正面向物联网的组态软件 YFIOs和YFHMI的前生今世

1前言 从2001年进入工控领域以来&#xff0c;前后7年多的时间开发了诸如二型计量监控系统、焦炉四大机车自动化系统、烧结配水监控系统、隧道广告影像系统、通用组态软件、嵌入式系统组态软件&#xff08;基于WINCE系统&#xff09;、LED视频影像系统和ICU病室输液管理等系统。…

OpenCV常遇问题解决方法汇总

1、cvLoad的使用和释放&#xff1a; CvMat *mat (CvMat*)cvLoad("a.xml"); cvRelease((void**)&mat); 2、cvCreateMatHeader的使用和释放&#xff1a; CvMat *mat cvCreateMatHeader(4, 2, CV_64FC1); cvReleaseMatHeader(&mat); 在OpenCV2.1及OpenCV2.2中…

分享我如何在7年时间里成长为阿里Java架构师(附学习路线图)

2019独角兽企业重金招聘Python工程师标准>>> 如何更高效的学习&#xff1f; 1.架构师应不应该写代码 总的来说&#xff0c;架构师和程序员在某些方面上有点像产品经理和用户的关系&#xff0c;大部分程序员并不会主动告诉你他们想要什么、哪里需要优化&#xff0c;甚…

github 与git 使用 及配置

git 是网上很流行的版本控制工具 ,尝试 熟悉并使用 它&#xff08;也有windows版本&#xff0c;这里介绍mac的&#xff09; 额&#xff0c;再操作前 先看看这个 并跟着做做 http://www.uml.org.cn/pzgl/201204285.asp 1&#xff0c;到github官网 申请账号 2&#xff0c;…

如何发布ActiveX 控件

转自&#xff1a;http://blog.csdn.net/zougangx/archive/2008/07/30/2738147.aspx [背景] 做过ActiveX控件的朋友都知道&#xff0c;要想把自己做的ActiveX控件功能放在自己的网页上使用&#xff0c;那么用户在客户端就必须进行本地的注册&#xff0c;也就是说用户得首先要把该…

200行代码实现一个滑动验证码

作者 | 崔庆才 转载自进击的Coder&#xff08;ID: FightingCoder&#xff09;做网络爬虫的同学肯定见过各种各样的验证码&#xff0c;比较高级的有滑动、点选等样式&#xff0c;看起来好像挺复杂的&#xff0c;但实际上它们的核心原理还是还是很清晰的&#xff0c;本文章大致说…

Envoy源码分析之Dispatcher

2019独角兽企业重金招聘Python工程师标准>>> 摘要&#xff1a; Dispatcher 在Envoy的代码中Dispatcher是随处可见的&#xff0c;可以说在Envoy中有着举足轻重的地位&#xff0c;一个Dispatcher就是一个EventLoop&#xff0c;其承担了任务队列、网络事件处理、定时器…

Windows 8 快捷键大全

为什么80%的码农都做不了架构师&#xff1f;>>> win8快捷键大全&#xff1a; Windows 键 X &#xff1a;Windows快捷菜单 Windows 键 C &#xff1a;显示个性分类和时钟 Windows 键 I &#xff1a;打开“设置”个性分类 Windows 键 K &#xff1a;打开“设备”…

Activex、OLE、COM、OCX、DLL之间区别、联系

转自&#xff1a;http://baike.baidu.com/view/393671.htm 概述 .ocx是ocx控件的扩展名,与.exe .dll同属于PE文件。下面说说什么是ocx控件! OCX 是对象类别扩充组件。 如果你用过Visual Basic或者Delphi一类的可视化编程工具&#xff0c;那么对控件这个概念一定不会陌生&#…