Kubernetes 入门
K8s是Google开源的Docker容器集群管理系统,为容器化的应用提供了资源调度、部署运行、服务发现、扩容、缩容等一整套功能。在K8s中,Service(服务)是分布式集群加架的核心,一个Service对象拥有如下关键特征: 拥有一个唯一指定的名字。拥有一个虚拟IP的端口号。能提供某种远程服务能力。被映射到了提供这种服务能力的一组容器应用上。Service的服务进程目...
K8s是Google开源的Docker容器集群管理系统,为容器化的应用提供了资源调度、部署运行、服务发现、扩容、缩容等一整套功能。
在K8s中,Service(服务)是分布式集群加架的核心,一个Service对象拥有如下关键特征:
- 拥有一个唯一指定的名字。
- 拥有一个虚拟IP的端口号。
- 能提供某种远程服务能力。
- 被映射到了提供这种服务能力的一组容器应用上。
Service的服务进程目前都基于Socket通信方式对外提供服务,虽然一个Service通常由多个相关的服务进程提供服务,每个服务进程都有一个独立的Endpoint(IP+PORT)访问点,但Kubernetes能够让我们通过Service(虚拟ClusterIP+Service Port)连接到指定的Service上。
Node(节点)
在较早的版本中也被称为Minion,在每个Node上运行用于启动和管理Pod的服务-Kubelet,并能够被Master管理。在Node上运行的服务进程包括Kubelet、kube-proxy和docker daemon。
(1)Node管理
我们说K8s创建一个Node,仅仅表示K8s在系统内部创建一个Node对象,创建后即会对其进行一系列健康检查,包括是否可以连通、服务是否正常启动、是否可以创建Pod等。
(2)Node controller对Node进行管理
Node controller是K8s Master中的一个组件,用于管理Node对象,它的两仆要功能包括:集群范围内的Node信息同步,以及单个Node的生命周期管理。
Pod
Pod是K8s的最基本的操作单元,包含一个或多个紧密相关的容器,一个Pod可以被一个容器化的环境看作应用层的“逻辑宿主机”(Logical Host),一个Pod中的多个容器应用通常是紧耦合的,Pod在Node上被创建、启动或者销毁。
为什么K8s使用Pod在容器之上再封装一层呢?一个很重要的原因是,Docker容器之间通信受到Docker网络机制的限制,在Docker的世界中,一个容器需要通过link方式才能访问另一个容器提供的服务,大量容器之间的link将是一件非常繁重的工作,通过Pod的概念将多个容器组合在一个虚拟的“主机”内,可以实现容器之间仅通过Localhost就能相互通信。
(1)POD的定义
对于Pod的定义通过Yaml或Json格式的配置文件来完成。
Label(标签)
Label以key/value键值对的形式附加到各种上对象上,label定义了这些对象的可识别属性,用来对它们进行管理和选择。label可以在创建对象时附加到对象上,也可以在对象创建后通过API进行管理 。
Replication Controller(RC)
RC用来定义Pod副本的数量,在Master内,Controller Manager进程通过RC的定义来完成Pod的创建、监控、启停等操作。
可以说,通过对Replication Controller的使用,K8s实现了应用集群的高可用性。
RC的定义使用yaml或json格式的配置文件来完成。
Service(服务)
一个Service可以看作一组提供相同服务的Pod的对外访问接口,Service作用于哪些Pod是通过label selector来定义的。
Service的定义同样使用yaml或json格式的配置文件来完成。
(1)Service的Cluster IP
Pod的IP地址是Docker Daemon根据docker0网桥的IP地址段进行分配的,但Service的Cluster IP地址是K8s系统中的虚拟IP地址,是由系统动态分配的。
(2)外部访问Service
由于Service对象在Cluster IP Range池中分配到的IP只能在内部访问,所以其他Pod都可以无障碍地访问到它。但如果这个Service作为前端服务,准备为集群外的客户端提供服务,就需要给这个服务提供公共IP了。
K8s支持两种对外提供服务的Service的type定义:NodePort和LoadBalance。
(3)多端口的服务
有很多情况下,一个服务都需要对外暴露多个端口。这种情况下,可以通过端口命名,使各Endpoint不会因重名而产生歧义。
Volume(存储卷)
Volume是Pod中能够被多个容器访问的共享目录,K8s中的Volume与Pod生命周期相同,但与容器的生命周期不相关。
Volume类型:
(1)EmptyDir
在Pod分配到Node时创建,同一个Pod中所有容器都可以读写EmptyDir中相同文件。当Pod从Node上称除时,EmptyDir中数据也会永久删除。
(2)hostPath
在Pod上挂载宿主机上的文件或目录。
(3)gcePersistentDisk
表示使用Google compute Engine上永久磁盘。
(4)awsElasticBlockStore
Amazon web Services的EBS Volume。
(5)nfs
使用NFS提供的共享目录挂载到Pod中。
(6)iscsi
使用iScSi存储设备上的目录挂载到Pod中。
(7)glusterfs
使用开源的GlusterFS网络文件系统的目录挂载到Pod中。
(8)rbd
使用Linux块设备共享存储挂载到Pod中。
(9)gitRepo
通过挂载一个空目录,并从GIT库clone一个git repository以供Pod使用。
(10)secret
用于Pod提供加密的信息,通过tmfs实现。
(11)persistentVolumeChain
从PV中申请所需要空间。
Namespace(命名空间)
通过将系统内部的对象“分配”到不同的Namespace中,K8s集群启动后,会创建一个名为“default”的namespace。
Annotation(注解)
Annotation与Label类似,也使用key/value键值对的形式进行定义,但Annotation则是用户任意定义的“附加”信息,以便于外部工具进行查找。
最后欢迎大家访问我的个人网站:1024s
更多推荐
所有评论(0)