此文为学习《Kubernetes权威指南》和阿里云原生公开课的相关笔记
学习笔记:
Pod作为K8s中调度和使用的基本单位,承担了在集群中建立容器、部署基本功能的任务,而RC/RS/Delpoymet/DaemonSet/Job/StatefulSet等类型的资源对象担当控制器,负责Pod的创建和生命周期的管理,上述的这些工作使得一个K8s集群能够有序的被部署进行设计者想要安排的任务,然而一个集群的最终目的应当是面向用户提供服务,包装容器功能为用户提供服务入口这项任务是由Service这一资源对象来完成的。
Service解决的问题有:
-
K8s应用之间互相调用较为困难,Pod生命周期较短、IP地址变化快。
-
单单是副本控制器管理下的Pod群无法统一对外提供接口、无法实现负载均衡。
K8s中的每一个Service与微服务架构中的一个微服务所对应,每个Service定义了一个服务的访问入口地址,外部网络或者前端的应用(其他Pod)通过这个入口访问K8s集群中一组由Pod副本组成的集群实例,而Service与其后端的Pod副本则通过Label Selector来实现无缝对接,从这个视角看,Service才是K8s的真正核心,Pod的建立是为了集群具备对外提供某一Service的能力,而副本控制器则是保证Service的服务能力和服务质量始终符合预期的标准。
最终,系统将由多个提供不同业务能力而又彼此独立的微服务单元组成,服务之间通过TCP/IP进行通信,从而形成强大的分布式能力、弹性扩展能力、容错能力,程序架构也变得简单和直观。
画了一张逻辑关系图:
下面通过几个实例学习Service的基本用法:
一、通过Service实现服务提供和自动负载
1、创建一个提供Web服务的Deployment
该Deployment包含两个Tomcat容器副本,通过containerPort开放8080端口
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp
spec:
replicas: 2
selector:
matchLabels:
app: webapp
template:
metadata:
name: webapp
labels:
app: webapp