1.k8s简介

k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈。

2.Kubernetes 为何称为 K8s?

简短的回答是编写 K8s 比编写 Kubernetes 更短,K8s 是 Kubernetes 的缩写形式,其逻辑是将 K 后面的八个字母替换为 8,K8s由此而来。

3. K8s是什么

kubernetes是一个基于容器技术的分布式架构领先方案在这里插入图片描述

4. K8s基础概念

4.1 Master

集群的"大脑",Kubernetes里的Master指的是集群控制节点,负责整个集群的管理和控制,基本上接收Kubernetes的所有控制命令,master负责具体的执行过程。

master相当于Kubernetes集群的大脑,非常重要(高可用部署建议用3台服务器)。一旦master宕机或者不可用,那么对集群内容器应用的管理都将失效。
运行在master上的组件:

  • Kubernetes API Server(kube-apiserver):Kubernetes API,集群的统一入口,各组件协调者,以HTTP API提供接口服务,Kubernetes里所有资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储。

  • Kubernetes Controller Manager(kube-controller-manager):Kubernetes里所有资源对象的自动化控制中心,可以理解为资源对象的大总管

  • kube-scheduler:负责资源调度(Pod调度)的进程

4.2 Node

具体"干活"的,工作负载节点,在Kubernetes集群中除了master节点外的机器被称为Node。

每个Node都会被Master分配一些工作负载(Docker容器),当某个Node宕机时,其上的工作负载会被Master自动转移到其他Node节点上。
运行在Node上的组件:

  • kubelet:kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周期,负责Pod对应容器的创建、启停等任务。同时与Master密切协作,实现集群管理的基本功能,获取Node节点上Pod的运行状态等

  • kube-proxy:在Node节点上实现Pod网络代理,实现Kubernetes Service的通信和负载均衡机制的重要组件。

  • docker:Docker引擎,负责本机的容器的创建和管理工作

注:
Node可以在运行期间动态增加到Kubernetes集群中

4.3 Etcd

Etcd是Kubernetes提供默认的存储系统,保存所有集群数据,使用时需要为Etcd数据提供备份计划。Etcd是一个高可用的键值存储系统

4.4 Replication Controller

简称RC,RC是Kubernetes系统中的核心概念之一。它能够保证Pod持续运行,并且在任何时候都有指定数量的Pod副本,在此基础上提供一些高级特性,比如滚动升级和弹性伸缩


在我们定义了一个RC并将其提交到Kubernetes集群中后,Master上的Controller Manager组件就会得到通知,定期巡检系统中当前存活的目标Pod,并确保目标Pod实例的数量刚好等于此RC的期望值,如果有过多的Pod副本在运行,系统就会停掉一些Pod,过少则会再创建一些Pod。相比传统的IT环境,如果程序意外挂掉,需要手工重启,但是在k8s通过RC,就大大减少这些手工运维工作

4.5 ReplicaSet

ReplicaSet 实现了 Pod 的多副本管理。使用 Deployment 时会自动创建 ReplicaSet,也就是说 Deployment 是通过 ReplicaSet 来管理 Pod 的多个副本,所以我们通常不需要直接使用 ReplicaSet。

注:
1.Replication Controller由于与Kubernetes代码中的模块Replication Controller同名,并且“Replication Controller”无法准确表达它的本意,所以在Kubernetes1.2中,升级为另外一个新概念——Replica Set,官方解释为“下一代的RC”
2.我们很少单独使用Replica Set,它主要被Deployment这个更高层的资源对象所使用。

4.6 Deployment

应用管理者,是用于部署应用的对象,Deployment内部使用了Replica Set来实现的,我们可以把Deployment看做RC的一次升级

注:
创建Deployment对象后,master会根据Deployment对象的配置文件去描述应用,应用名称,使用的镜像名称,需要几个实例,多少内存,多少CPU资源

4.7 Pod

Pod 是一组容器(当然也可以只有一个)容器本身就是一个小盒子了,Pod 相当于在容器上又包了一层小盒子。Pod是Kubernetes的最小调度单位。

注:
Pod中的容器共享数据卷volume
Pod中的容器共享IP地址和端口

4.8 Service

Service是一组逻辑pod的抽象,为一组pod提供统一入口,用户只需与service打交道,service提供DNS解析名称,负责追踪pod动态变化并更新转发表,通过负载均衡算法最终将流量转发到后端的pod。Kubernetes里的每个Service其实也可以理解为我们的微服务架构中的一个微服务。

Service对外提供多种入口:

  • ClusterIP:Service在集群内的唯一ip地址,虚拟的IP,只能在 Kubernetes集群里访问。通过ClusterIP,负载均衡的访问后端的Pod
  • NodeIP+NodePort:Service会在集群的每个Node上都启动一个端口,通过NodeIP:NodePort访问后端的Pod

注:
1.Service负责服务发现,找到每个Pod,不管Deployment的Pod有多少个,不管它是更新,销毁还是重建,Service总是能发现并维护好它的ip列表。
2.kube-proxy是kubernetes核心组件,运行在集群中每一个节点上,负责监控集群中service、endpoint变更,维护各个节点上的转发规则,是实现servcie功能的核心部件。

4.9 Label

标签,一个Label是一个key=value的键值对。Label可以被附加到各种资源对象上,例如Node、Pod、Service、RC等,一个资源对象可以定义任意数量的Label。

4.10 Volume

Volume(存储卷)Volume是Pod中能够被多个容器共享的磁盘目录。我们知道,默认情况下Docker容器中的数据都是非持久化的,在容器消亡后数据也会消失。因此Docker提供了Volume机制以便实现数据的持久化。Kubernetes中Volume的概念与Docker中的Volume类似,但不完全相同。

Kubernetes提供了非常丰富的Volume类型:

  • emptyDir:临时空间,Pod分配到Node时创建,无须指定宿主主机上对应的目录,在Kubernetes会自动分配当前Node的一个目录,当Pod被移除时,emptyDir中的数据也会永久删除。
  • hostPath:为Pod挂载宿主主机上的文件或目录。用于数据永久保存。在不同的Node上具有相同配置的Pod,可能会因为宿主机上的目录和文件不同而导致Volume上的目录和文件的访问结果不一致。
  • gcePersistentDisk:使用谷歌公有云提供的永久磁盘。数据永久保存。
  • NFS:NFS 是 Network File System 的缩写,即网络文件系统。Kubernetes 中通过简单地配置就可以挂载 NFS 到 Pod 中,而 NFS 中的数据是可以永久保存的,同时 NFS 支持同时写操作。k8s挂载NFS

Persistent Volume:简称PV,就是网盘,网络存储,不属于任何Node,但可以在每个Node上访问。

4.11 Namespace

命名空间,Namespace在很多情况下用于实现多租户的资源隔离。Namespace通过集群内部的资源对象"分配"到不同的Namespace中,形成逻辑上纷纷组的不同项目,便于不同的分组共享使用整个集群的资源的同时还能被分别管理。

4.12 ConfigMap

ConfigMap顾名思义,是用于保存配置数据的键值对,可以用来保存单个属性,也可以保存配置文件。就是为了让镜像 和 配置文件解耦,以便实现镜像的可移植性和可复用性,因为一个configMap其实就是一系列配置信息的集合,将来可直接注入到Pod中的容器使用,而注入方式有两种,一种将configMap做为存储卷,一种是将configMap通过env中configMapKeyRef注入到容器中


在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐