k8s是用于自动部署,扩展和管理容器化应用程序的开源系统。
Kubernetes集群的两种管理角色:Master和Node
Master指的是集群控制节点,每个Kubernetes集群里需要有一个Master节点来负责整个集群的管理和控制,基本上Kubernetes的所有控制命令都发给它,它来负责具体的执行过程。
Node除了Master,Kubernetes集群中的其他机器被称为Node节点,Node节点可以是一台物理主机,也可以是一台虚拟机。Node节点才是Kubernetes集群中的工作负载节点,每个Node都会被Master分配一些工作负载(Docker容器),当某个Node宕机时,其上的工作负载会被Master自动转移到其他节点上去。
查看集群中有多少个Node:kubectl get nodes
查看某个Node的详细信息:kubectl describe node
Pod
Pod是在K8s集群中运行部署应用或服务的最小单元,它是可以支持多容器的。Pod的设计理念是支持多个容器在一个Pod中共享网络地址和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。Pod对多容器的支持是K8s最基础的设计理念
每个Pod都有一个Pause容器作为根容器,每个Pod还包含一个或多个紧密相关的用户业务容器。一个Pod里的多个容器共享Pod IP地址,一个Pod里的容器与另外主机上的Pod容器能够直接通信。
Pod的两种类型:普通的Pod及静态Pod。
静态pod只存在某个Node的某一个具体文件中,并只在这个Node上启动使用。
普通Pod一旦被创建,就会被放入到etcd中存储,随后会被Kubernetes Master调度到某个具体的Node上并进行绑定(Binding),随后该Pod被对应的Node上的kubelet进程实例化成一组相关的Docker容器并且启动起来。在默认情况下,当Pod里的某个容器停止时,Kubernetes会自动检测到这个问题并且重新启动这个Pod(重启Pod里的所有容器),如果Pod所在的Node宕机,则会将这个Node上的所有Pod重新调度到其他节点上。
Endpoint:Pod的IP加上这里的容器端口(containerPort,它代表着此Pod里的一个服务进程的对外通信地址
Event是一个事件的记录,记录了事件的最早产生时间、最后重现时间、重复次数、发起者、类型,以及导致此事件的原因等众多信息,kubectl describe pod xxxx来查看它的描述信息,用来定位问题的原因
Label是Kubernetes系统中另外一个核心概念。一个Label是一个key=value的键值对,其中key与vaue由用户自己指定。Label可以附加到各种资源对象上。
Replication Controller它定义了一个期望的场景,即声明某种Pod的副本数量在任意时刻都符合某个预期值,所以RC的定义包括
Pod期待的副本数(replicas);
用于筛选目标Pod的Label Selector;
当Pod的副本数量小于预期数量时,用于创建新Pod的Pod模版(template)
Deployment
Service
Volume(存储卷) 是Pod中能够被多个容器访问的共享目录,Kubernetes中的Volume定义在Pod上,然后被一个Pod里的多个容器挂载到具体的文件目录下;Kubernetes中的Volume中的数据也不会丢失。Kubernetes支持多种类型的Volume。
类型:
1.emptyDir:一个emptyDir Volume是在Pod分配到Node时创建的。
2.hostPath:为在Pod上挂载宿主机上的文件或目录。
3.gcePersistentDisk:使用这种类型的Volume表示使用谷歌公有云提供的永久磁盘(Persistent Disk,PD)存放Volume的数据,它与emotyDir不同,PD上的内容会被永久保存,当Pod被删除时,PD只是被卸载(Unmount),但不会被删除。
4.awsElasticBlockStore:该类型的Volume使用亚马逊公有云提供的EBS Volume存储数据
5.NFS:使用NFS网络文件系统提供的共享目录存储数据时,需要在系统中部署一个NFS Server。
6.其他
persistent volumes:
PersistentVolume给用户和管理员提供了一套API,抽象出存储是如何提供和消耗的细节。两种新的API资源:PersistentVolume(简称PV)和PersistentVolumeClaim(简称PVC)。
PV是集群中的资源,PVC是对这些资源的请求,同时也是这些资源的“提取证”。
PersistentVolume(持久卷,简称PV)是集群内,由管理员提供的网络存储的一部分。就像集群中的节点一样,PV也是集群中的一种资源。它也像Volume一样,是一种volume插件,但是它的生命周期却是和使用它的Pod相互独立的。PV这个API对象,捕获了诸如NFS、ISCSI、或其他云存储系统的实现细节。
PersistentVolumeClaim(持久卷声明,简称PVC)是用户的一种存储请求。它和Pod类似,Pod消耗Node资源,而PVC消耗PV资源。Pod能够请求特定的资源(如CPU和内存)。PVC能够请求指定的大小和访问的模式(可以被映射为一次读写或者多次只读)。
Namespace:很多情况下用于实现多租户的资源隔离。Nameaspace通过将集群内部的资源对象“分配”到不同的Namespce中,形成逻辑上分组的不同项目、小组或用户组,便于不同的分组在共享使用整个集群的资源的同时还能被分别管理。