前言
新的一年还是要学习一些新技术的,先从k8s开始吧。 作为一个想成为“微服务技术专家”,除了上层类spring cloud的解决方案,服务治理方案之外,k8s作为底层基础设施,所承担的自动扩缩容,devops等功能也是微服务架构中很重要的一环。
k8s
k8s作为容器化操作系统,包括了部署,调度,节点集群间扩展。docker作为k8s底层的调度组件。主要具备:
- 自动化容器的部署和复制
- 随时扩展或收缩容器部署
- 打包容器组,并提供容器间的负载均衡
- 提供容器弹性操作等
k8s集群
k8s的集群,一般以一组物理节点或虚拟机节点组成,在节点上部署k8s,架构图如下:
通过上图可以观察到一些名词:
- Container
- Pod
- Label
- Replication Controller
- Service
- Node
- K8s Master
Pod
Pod安装在节点上,包含一组容器和卷,同一个Pod里面的容器共享网络命名空间,可以使用localhost进行通信。pod是随时创建销毁的。
- 因为pod是短暂的,所以需要使用k8s的挂载卷存储持久化容器数据。
- pod的创建可以通过手动创建,也可以使用replication controller根据pod模板创建出拷贝。
- 引入service解决因为pod创建销毁带来的ip地址改变的问题。
Label
Label是一个键值对,可以用来标记pod,service或者replication controller可以通过selectors选择带有指定label的pod。
Replication Controller
通过RC可以确保任何时间都存在指定数量的pod副本。比如创建3个副本,k8s会监控他们,随时确保永远有3个副本在运行。
创建RC时,需要指定两个东西:
- Pod模板:用来创建Pod副本。
- Label:RC需要监控的Pod的副本集。
Service
多个Pod副本可以通过Service做负载均衡。
由于Pod的IP是短暂的,所以引入了Service,Service是个逻辑概念,Service通过selector筛选label和Pod进行绑定。
在Service对pod进行绑定时会做以下事情:
- 为Service创建一个DNS入口,前端Pod会根据DNS查找service并解析出ip地址。
- 前端pod在得到service的ip地址后,会根据service的负载均衡策略,请求到具体的pod上,底层通过node上的kube-proxy完成。
Node
Node叫做节点,一般是物理机或者虚拟机,是k8s的工作节点,node上有k8s相关的关键组件:
- Kubelet:主节点代理
- Kube-proxy:Serivce使用其路由到Pod
- Docker:用于容器创建
K8s Master
Master是集群的主节点,拥有K8s api server,可以对外提供rest交互,master节点可以用来创建和复制pod的RC。