初识Kubernetes(K8s):理论基础

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)的旅程。

原文地址:http://blog.51cto.com/andyxu/2308937

时间: 2024-10-29 12:12:49

初识Kubernetes(K8s):理论基础的相关文章

初识Kubernetes(K8s):从一个单机部署实现Java Web应用例子开始

本文是通过yum方式安装Kubernetes,并部署tomcat+mysql实现Jave Web应用.此应用是JSP页面通过JDBC访问Mysql数据库,只要程序正确连接到数据库上,就会自动完成对应的Table的创建与初始化数据的准备工作.当我们通过浏览器访问此应用时,就会显示一个表格的页面,数据则来自数据库.此应用需要启动两个容器:Web App容器和MySQL容器,并且Web App容器需要访问MySQL容器.现在我们就来看看通过Kubernetes是如何实现Java Web应用的.在继续阅

Docker+Kubernetes(k8s)微服务容器化实践

Docker+Kubernetes(k8s)微服务容器化实践网盘地址:https://pan.baidu.com/s/1uVkMsKgfzsJcShlnuLk3ZQ 密码:1i7q备用地址(腾讯微云):https://share.weiyun.com/5ZcsfIX 密码:udrifz Docker官方支持Kubernetes, Kubernetes是容器编排最大赢家,Kubernetes 以其高效.简便.高水平的可移植性等优势占领了绝大部分市场,江湖一哥地位毋庸置疑,脱胎于谷歌的成熟的Borg

《两地书》--Kubernetes(K8s)基础知识(docker容器技术)

大家都知道历史上有段佳话叫“司马相如和卓文君”.“皑如山上雪,皎若云间月”.卓文君这么美,却也抵不过多情女儿薄情郎. 司马相如因一首<子虚赋>得汉武帝赏识,飞黄腾达之后便要与卓文君“故来相决绝”,寄来给家乡留守的妻子一封<两地书>,上面只有一行数字:“一二三四五六七八九十百千万.”意义是:无亿,我已经无意于你啦. 卓文君看了这封信也不示弱,回了一首<怨郎诗>,司马相如看了发现虽然我是靠写诗吃饭的.要说写诗还是我媳妇厉害,于是亲自将卓文君迎回长安. 卓文君其实是个二婚.头

kubernetes(k8s)-介绍2

kubernetes(k8s)-安装(二) 什么是Kubernetes Kubernetes是一个开源平台,用于跨主机群集自动部署,扩展和操作应用程序容器,提供以容器为中心的基础架构. 使用Kubernetes,您可以快速高效地响应客户需求: 快速,可预测地部署应用程序. 在运行中扩展应用程序. 无缝推出新功能. 仅使用您需要的资源来优化硬件的使用. 我们的目标是建立一个组件和工具的生态系统,以减轻在公共云和私有云中运行应用程序的负担. Kubernetes是: Kubernetes是Googl

Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)

0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 master 服务器的组件有:kube-apiserver.kube-controller-manager.kube-scheduler 因此需要下载k8s master,下载地址:https://github.com/kubernetes/kubernetes/blob/master/CHANGE

Kubernetes(K8S)集群在centos7.4下创建

自己在搭Kubernetes(K8S)集群下遇到的坑写一点随笔. 本次采用192.168.60.21,192.168.60.22,192.168.60.23作为需要装的服务器. master需要安装etcd, flannel,docker, kubernetes   192.168.60.21 yum –y install etcd yum –y install flannel yum –y install docker yum –y install kubernetes 分支上安装flanne

kubernetes (K8S) 集群的搭建方式

kubernetes (K8S) 集群的搭建方式有两种: 守护进程模式和容器模式 (请注意看图,不一样的) 容器的编排管理工具,当然推荐使用容器来部署了.不过容器镜像是在 Google 云上的,需要各位各显神通了. container部署: systemd模式部署: 原文地址:https://www.cnblogs.com/liuxgcn/p/11154259.html

Build Kubernetes[k8s] cluster

我是先对docker初步到进阶的了解学习,常用的命令,基本的容器构建和docker原理概念学习完之后,步入k8s.即使这样,刚看k8s官方文档时,其设计理念.组件构成以及生态需要了解掌握的知识不在少数.为此,花了几天时间在官方文档&个人博客上做了上述方面初步了解,较为直观的便可分为两方面: master: API server Controller Manager Scheduler Etcd node: kublet kube-proxy pod Kubernetes集群组件: etcd 一个

ubuntu16.04 docker kubernetes(k8s) istio 安装

版本: docker: 19.03.5 kubernetes: 1.17.0 istio: 1.4.3 步骤一:给ubuntu换源 https://www.cnblogs.com/lfri/p/10612037.html 步骤二:装docker sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.

Kubernetes K8s架构师实战集训营

Kubernetes K8s架构师实战集训营 https://pan.baidu.com/s/1ZSHbOurKhvVLu15Q_fNI9Q Kubernetes K8s架构师实战集训营 https://pan.baidu.com/s/1ZSHbOurKhvVLu15Q_fNI9Q ├─第 1 章:Ansible 自动化部署 K8S 集群 01-Ansible 概述,基本使用.mp4 02-7个常用模块基本使用.mp4 03-Playbook 基本使用-A.mp4 03-Playbook 基本使