本文将介绍k8s知识体系中,最常见的专业名词以及相关概念
一、Pod
Pod是k8s中最小的逻辑单元,也叫做k8s的原子单元。一个Pod里可以运行多个容器,他们共享UTS命名空间(隔离Hostname和NIS域名)、共享NET命名空间(隔离网络设备、协议栈、端口等)、共享IPC命名空间(隔离进程间通信)。我们可以把Pod理解成豌豆荚,而同一个Pod内的每个容器是一颗颗豌豆。一个Pod内运行多个容器,又叫边车(SideCar)模式。
二、Pod控制器
Pod控制器是Pod启动的一种模板,用来保证在k8s里启动的Pod始终按照人们的预期运行(如副本数、生命周期、健康状态检查等)。k8s提供了众多的Pod控制器,常用的控制器有以下几种:
- Deployment
- DaemonSet
- ReplicaSet
- StatefulSet
- Job
- Cronjob
三、Name–名称
由于k8s内部使用“资源”来定义每一种逻辑概念(或者功能),故每一种“资源”都应该有自己的名称,“资源”有api版本(apiVersion)、类别(kind)、元数据(metadata)、定义清单(spec)、状态(status)等配置信息,而“资源”的名称通常定义在“资源”的元信息里。
四、Namespace–名称空间
随着项目增多、人员增加、集群规模扩大等,需要一种能隔离开k8s内部各种“资源”的方法,这就是名称空间。名称空间可以理解为k8s内部的虚拟集群组。不同的名称空间内的“资源”,名称可以相同,相同名称空间内的同种“资源”,名称不能相同。
合理的使用k8s的名称空间,使得集群管理员能够更好地对交付到k8s里的服务进行分类管理和浏览。查询k8s里特定“资源”要带上相应的名称空间,k8s里默认存在的名称空间有:default
、kube-system
、kube-public
、kube-node-lease
(1.13版本加入)。
五、Service–服务
在k8s里,虽然每个Pod都会被分配一个单独的IP地址,但这个IP地址会随着Pod的销毁而消失,Service就是用来解决这个问题的核心概念。一个Service可以看作一组提供相同服务的Pod的对外访问接口,Service作用于哪些Pod是可以通过标签选择器来定义。
六、Ingress
Ingress是k8s集群里工作在OSI网络参考模型下,第7层的应用对外暴露的接口。Service只能进行L4流量调度,表现形式是ip+Port。Ingress则可以调度不同的业务域、不同URL访问路径的业务流量。