一、Namspace
Namespace是对一组资源的对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或用户组。常见的Pods,serveres,deployments等都是属于某一个namespace的(默认是default),而Node,PersistentVolumes等则不属于任何一个Namespace。
二、Deployment
是否手动创建Pod,如果想要创建同一个容器的多份拷贝,需要一个个分别创建出来么,能否将Pods划到逻辑组里?
Deployment 确保任意时间都有指定数量的Pod副本在运行,如果为某个Pod创建了Deployment 并且指定3个副本,它会创建3个Pod,并且持续监控他们,如果某个Pod不响应,那么Deployment会替换它,保持总数为3。
如果之前不响应的Pod恢复了,现在就有4个Pod了,那么Deployment会将其中一个终止并保持总数为3.
如果运行中将副本数改为5,Deployment 会立刻启动2个新的Pod,保证总数为5,Deployment还支持回滚和滚动升级。
当创建Deployment 时,需要指定2个东西:
- Pod模板:用来创建Pod副本的模板。
- Label标签:Deployment 需要监控的Pod标签。
现在已经创建了Pod的一些副本,那么在这些副本上如何均衡负载呢?我们需要的是Service。
Service
Service是应用服务的抽象,通过labels为应用提供负载均衡和服务发现。匹配labels的Pod IP和端口列表组成 endpoints, 由kube-proxy负责将服务IP负载均衡到这些endpoints上。
每个Service都会自动分配一个 cluster IP (仅在集群内部可以访问的虚拟地址)和DNS名,其他容器可以通过该地址或DNS来访问服务,而不需要了解后端容器的运行。