这里记录kubernetes学习和使用过程中的内容。
CentOS7 k8s-1.13 flanneld-0.10 docker-18.06 etcd-3.3
本节记录kubernetes的基本概念。
kubernetes基本概念
Master
Master是Kubernetes里的集群控制节点,每个k8s集群里都需要一个Master节点来负责整个集群的管理和控制,基本k8s上所有的控制命令都是由它发起的,如果它宕机了,那整个集群所有的控制命令都可能不可用了。所有一般它是一台物理机或虚拟机。
一般Master节点上需要启动以下服务:
- kube-apiserver (Kubernetes Api Server),提供 HTTP Rest 接口的关键服务进程,是 k8s 里所有资源增、删、查、改等操作的唯一入口,也是集群控制的入口服务。
- kube-controller-manager(Kubernetes Controller Manager),k8s 里所有资源对象的自动化中心,管理所有的资源。
- kube-scheduler(Kubernetes Scheduler),负责资源调度(Pod 调度)的服务。
其实还有一个etcd服务,存储 k8s 里所有资源对象的数据。
Node
k8s 集群中节点分为管理节点Master和工作节点Node,在早期版本里叫Minion。和Master一样,它一般是一台物理机或虚拟机。Master负责任务的分配调度,Node就负责任务执行,实际的工作都是在Node节点上(使用docker),当一个Node宕机是,它的任务会被分配到其他Node节点上。
Node节点也有一些关键的服务:
- kubelet:负责Pod对应容器的创建、启停等任务,同时与Master节点密切协作,实现集群管理的基本功能。
- kube-proxy:实现 Kubernetes Service 的通信与负载均衡机制的重要组件
- Docker Engine(docker):docker引擎,负责本机的容器创建和管理工作。
- flanneld:严格来说它不是 k8s 的核心组件,它用来管理 k8s 集群的网络。
使用命令
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
192.168.10.11 Ready <none> 2d7h v1.13.0
192.168.10.12 Ready <none> 2d2h v1.13.0
Pod
Pod 是 k8s 最重要也是最基本的概念,每个Pod都有一个特殊的被称为“根容器”的Pause容器。Pause容器对应的镜像属于 k8s 平台的一部分,每个Pod由Pause容器和业务容器组成。
为什么由Pod的概念和Pod这样的结构呢:原因如下:
- 在一组容器作为单元的情况下,我们难以对“整体”简单地进行判断及有效地行动。引入业务无关并且不易死亡地Pause容器作为Pod的根容器,以它地状态代表整个容器组地状态,以此来解决这个难题。
- Pod里的多个业务容器共享Pause容器的IP,共享Pause容器挂接的Volume,这样既简化了密切关联的业务容器之间的通信问题,也很好地解决了它们之间地文件共享问题。
Kubernetes为每个Pod都分配了唯一地IP地址,称之为Pod IP,一个Pod里地多个容器共享Pod IP地址。k8s采用虚拟二层网络技术,如flanneld、OpenvSwitch等实现集群内任务两个Pod之间地TCP/IP直接通信。
Pod有两种类型:普通地Pod和静态Pod(static Pod)
- 普通Pod 存储在etcd中,创建后就被k8s调度到某个Node上,随后被kubelet实例化成一组容器并启动。默认情况下,如果Pod中某个容器停止,则重启Pod中所有容器,如果所在地Node宕机,则调度到其他Node上。
- static Pod 存储在某个具体Node地一个具体文件中,并且只在此Node上启动运行。
以下是Pod、容器和Node的关系:
[root@k8s-master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
mysql-f8g28 1/1 Running 0 80m
myweb-529z6 1/1 Running 0 73m
myweb-dkb4n 1/1 Running 0 73m
myweb-ggvwz 1/1 Running 0 73m
myweb-j5t4x 1/1 Running 0 73m
myweb-l6wqv 1/1 Running 0 73m
nginx 1/1 Running 1 88m