20200115 k8s的原理

Docker:开源的容器引擎。

Images(Docker镜像)

Container(容器)容器是镜像的可运行实例。镜像和容器的关系有点类似于面向对象中,类和对象的关系。

Docker Registry是一个集中存储与分发镜像的服务。构建完Docker镜像后,就可在当前宿主机上运行。但如果想要在其他机器上运行这个镜像,就需要手动复制。此时可借助Docker Registry来避免镜像的手动复制。

一个Docker Registry(看作Maven仓库)可包含多个Docker仓库(看作jar包路径),每个仓库可包含多个镜像标签(看作jar包版本号),每个标签对应一个Dokcer镜像。

Docker Registry可分为公有(Docker Hub)和私有。

 

为什么需要 k8s?容器集群管理系统

应用部署模式的演进:虚拟化模式,容器化模式。容器内的应用程序进程直接运行在宿主机(真实物理机)的内核上.传统:虚拟出的虚拟机装操作系统、Docker:容器引擎管理下的容器。

相比虚拟机 1)容器更加轻量级,启动更快(秒级);2)容器可移植性更好。

微服务运行在容器中。把镜像运行在容器中。

管理大量的容器带来了新的挑战,容器编排调度引擎 k8s。

优势:简化应用部署;提高硬件资源利用率;健康检查和自修复;自动扩容缩容;服务发现和负载均衡。

k8s的集群架构1)主节点,承载 k8s 的控制和管理整个集群系统的控制面板;2)工作节点,运行用户实际的应用。

pod:k8s 调度的最小单元。

1)pod 相当与逻辑主机,每个 pod 都有自己的 IP 地址;

2)pod 内的容器共享相同的 IP 和端口空间;

3)默认情况下,每个容器的文件系统与其他容器完全隔离;

 

k8s是一个编排容器的工具,其实也是管理应用的生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈,例如一个服务器挂了,可以自动将这个服务器上的服务调度到另外一个主机上进行运行,无需进行人工干涉。

k8s可以更快的更新新版本,打包应用,更新的时候可以做到不用中断服务,服务器故障不用停机,从开发环境到测试环境到生产环境的迁移极其方便,一个配置文件搞定,一次生成image,到处运行。

 

k8s的全生命周期管理

在k8s进行管理应用的时候,基本步骤是:创建集群,部署应用,发布应用,扩展应用,更新应用。

 

1、创建集群:为什么要使用集群?( k8s集群 )

要想屏蔽底层的细节,增强可靠性和稳定性,从而需要创建集群。统一对外提供接口,无须进行各种复杂的调用。提供更好的性能,组合集群中各个机器的计算存储网络资源,提供更好的TPS和PS;提供横向扩容的能力,在进行横向扩容的时候,性能基本上能呈线性增长。

在k8s只要使用两条指令就可以创建一个集群,一个是kubectl init进行初始化,创建一个master节点,第二条指令就是kubectl join xxx创建一个node节点,加入这个集群。

在这边可以看到k8s在物理上进行划分的时候,划分了两种类型的主机,一个master节点,主要用来调度,控制集群的资源等功能;而node节点,主要是用来运行容器的节点,也就是运行服务的节点。

主节点和从结点的功能不同。 

其实集群都差不多,master用来控制,用来存储各种元数据,node节点是一个工作节点,真正来干活的;node节点定时与master进行通信,通过kubelet进程来汇报信息。

 

2、部署应用

使用集群的主要目标是啥?用来提供服务,让开发开发的应用程序能在集群上运行,从而需要让开发能运行一个应用来进行测试。

在开发完成程序之后,需要将程序打包成image,然后放到registry中,然后就能够运行应用了。

在k8s里面,集群调度的最小单元就是一个pod,一个pod可以是一个容器,也可以是多个容器,例如你运行一个程序,其中使用了nginx,使用mysql了,使用了jetty,那么可以将这三个使用在同一个pod中,对他们提供统一的调配能力,一个pod只能运行在一个主机上,而一个主机上可以有多个pod。

pod,相当于一个逻辑主机,还记得创建一个vm,在vm上运行几个进程么,其实道理是一样的,pod的存在主要是让几个紧密连接的几个容器之间共享资源,例如ip地址,共享存储等信息。如果直接调度容器的话,那么几个容器可能运行在不同的主机上,这样就增加了系统的复杂性。

 

3、发布应用

发布应用主要就是对外提供服务,可能会有人提出疑问,我都运行了服务,为什么还不能提供服务,这是因为在集群当中,创建的ip地址等资源,只有在同一个集群中才能访问,每个pod也有独一的ip地址,当有多个pod提供相同的服务的时候,就需要有负载均衡的能力,从而这里就涉及到一个概念就是service,专门用来提供服务的。

服务主要是用来提供外界访问的接口,服务可以关联一组pod,这些pod的ip地址各不相同,而service相当于一个复杂均衡的vip,用来指向各个pod,当pod的ip地址发生改变之后,也能做到自动进行负载均衡,在关联的时候,service和pod之间主要通过label来关联,也就是标签。

4、 扩容缩容。在业务上线之后,碰到了双十一怎么办?扩容。。。万剑归宗,只要有一个pod,那么就可以产生无数个pod。

 

k8s的基本入门,其实算是一种用户视角,只是用来演示如何使用k8s,怎么提高了生产力而已。

在给客户演示的时候,为啥要选择k8s?主要就是如何提高了发布的效率,更新版本的效率,更方便更快捷的上线新版本。舵手或飞行员.

 

我们用kubernetes去管理Docker集群,即可以将Docker看成Kubernetes内部使用的低级别组件。

 

Cluster 集群,Node 结点,结点分为主结点(master)和工作结点(worker)。Pod K8s中的工作单元,K8s是以Pod而非容器为单位排程的。Pod可以理解为Docker单机环境,每个Pod中包含一至多个容器,总是被启动在一个结点;一个Pod的容器在K8s集群中有相同的地址和端口范围,即容器暴露于K8s集群的端口号不可重复。

K8s集群由主结点和工作结点两类构成。

etcd 一款开源软件。提供可靠的分布式数据存储服务,用于持久化存储K8s集群的配置和状态。主要用于保存集群的配置和状态。

K8s API server:K8s其它组件之间不直接通信,而是通过API server通信的。例如,只有API server连接了etcd,即其它组件更新K8s集群的状态时,只能通过API server读写etcd中的数据。

Controller Manager 执行集群级别的功能,如复制组件、追踪工作结点状态、处理结点失败等。Controller Manager组件是由多个控制器组成的,其中很多控制器是按K8s的资源类型划分的,如Replication Manager(管理ReplicationController 资源),ReplicaSet Controller,PersistentVolume controller。

 

©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值