k8s学习

k8s简介

在学习k8s以前,相信你们和我同样,确定都学习和使用过docker容器,而且对容器技术有了一个基本的认识。引用张磊老师的总结:其实一个“容器”,其实是一个由Linux NameSpace、linux Cgroups和rootfs三种技术构建出来的进程隔离环境。linux

而k8s又是什么呢,官方给出的定义是:k8s是一个开源的容器集群管理系系统,能够实现容器集群的自动化部署、自动化扩容和维护等功能。说白了,咱们是用k8s是为了管理docker集群,即docker能够当作k8s内部使用的低级别组件。可是k8s不单单支持docker,咱们在docker

后面学习k8s的架构时候能够看到。api

和不少其余组件先有工程实践,后有方法论的法杖路径不一样。k8s的理论基础则比工程实践走的领先不少,这主要是得益于谷歌内部的Borg系统。k8s项目来源于Borg,能够说是集结了Borg设计思想的精华,而且吸取了Borg系统中的经验和教训。网络

在这面咱们要先记住一个概念,Pod。它是k8s中的最小编排单位,而不是容器。所以后面的架构设计等内容都是围绕pod进行。架构

k8s的架构设计

k8s项目和它的原型项目Borg很相似,都是由Master和Node两种类型的节点组成,其主要架构以下:
负载均衡

其中,Master节点由以下三个组件组成:分布式

  • apiServer:提供了资源操做的惟一入口,并提供认证、受权,访问控制、API注册和发现等机制。而且将整个集群的数据处理之后,持久化到etcd当中。学习

  • controller manager:负责维护集群的状态,好比状态检测、自动扩展和滚动更新等ui

  • scheduler:负责资源的调度,按照预约的调度策略将Pod调度到相应的机器上。云计算

而在Node节点上,主要有如下一些核心组件:

  • kubelet:其是最核心的组件,主要负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理。

  • Container runtime:负责镜像管理以及Pod和容器的真正运行(CRI)。

  • kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡。

k8s的设计理念

对于云计算系统,系统API实际上处于系统设计的主导地位。在k8s中,系统没支持一项新功能,引入一项新技术,必定会引入对应的API对象,支持对该功能的管理操做。

每一个API对象都有如下三个属性:

  • 元数据(metadata):元数据是用来标识API对象的,每一个对象至少有3个元数据,namespace,name和uid

  • 规范(spec):规范描述了用户指望k8s急群众的分布式系统达到的理想状态,例如用户能够设置指望的Pod的副本数为3

  • 状态(status):状态描述了系统当前实际达到的状态。

相关文章
相关标签/搜索