一、服务分类
- 无状态服务
不会对本地环境产生任何依赖,例如Nginx、Apache
优点:对客户端透明,无依赖关系,可用高效实现扩容、迁移
缺点:不能存储数据,需要额外的数据服务支撑
- 有状态服务
会对本地环境产生依赖,例如需要存储数据到本地磁盘,MySQL、Redis等
优点:可以独立存储数据,实现数据管理
缺点:集群环境下需要实现主从、数据同步、备份、水平扩容复杂
二、资源和对象
资源:
Kubernetes中所有内动都被抽象为“资源”,如Pod、Service、Node等都是资源。
资源类别很多种,kubectl可以通过配置文件来创建对象,配置文件更像是描述对象属性的文件,配置文件格式可以是json或者yaml,常用yaml。
对象:
是资源的实例,是持久化的实体。如某个具体的Pod、某个具体的Node。k8s使用这些尸体去表示整个集群的状态。
对象的创建、删除、修改都是通过“Kubernetes API”,也就是apiserver组件提供的API接口。
资源的分类
元数据型、集群级、命名空间级。
1.元数据类型:(以下列的只是常用的,不是只有以下选项)
- Horizontal Pod Autoscaler(HPA)
Pod自动扩容,可以根据CPU使用率或自定义指标(metrics)自动对Pod进行扩/缩容。
- PodTemplate
是关于Pod的定义,但是被包含在其他的对象中(例如Deployment、StatefulSet、DaemonSet等控制器)。控制器通过Pod Template信息来创建Pod。
- LimitRange
可以对集群内Request和Limits的配置做一个全局的统一的限制,相当于批量设置了某一个范围内(某个命名空间)的Pod的资源使用限制。
2.集群级:(以下列的只是常用的,不是只有以下选项)
- Namespace
- Node
- ClusterRole
- ClusterRoleBinding
3. 命名空间级:(以下列的只是常用的,不是只有以下选项)
3.1 工作负载型:Pod
Pod是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。一组容器的集合。成员容器间共享网络,能够进行数据共享和通信。其生命周期是短暂的。
控制器:Controller
通过它来实现对pod的管理,控制Pod的具体状态和行为。确保所有的容器运行在同一个Pod上。控制器包含:ReplicationController、ReplicaSet、Deployment、StatefulSet、DaemonSet、Job、CronJob
3.1.1 ReplicationController(RC)
帮助我们动态更新Pod的副本数,实现动态扩容、缩容
3.1.2 ReplicaSet(RS)
帮助我们动态更新Pod的副本数,在ReplicationController的基础上加入了Lable和selector属性。可以通过selector来选择对哪些Pod生效。
3.1.3 Deployment(生产环境中实际用Deployment部署,而不用RS、RC)
Deployment针对RS的更高层次的封装,提供了更丰富的部署相关功能。
新增的功能:
- 创建Replica Set / Pod
- 滚动升级/回滚
- 平滑扩容和缩容
- 暂停与恢复Deployment
3.1.4 StatefulSet(适用有状态服务)
主要特点:
- 稳定的持久化存储
- 稳定的网络标识
- 有序部署、有序扩展
- 有序收缩、有序删除
组成: Headless Service 、VolumeClaimTemplate
Headless Service:对于有状态服务的DNS管理
VolumnClaimTemplate:用于创建持久化卷创建模板
注意事项:
- kubernetes v1.5版本以上才支持
- 所有Pod的Volume必须使用PersistentVolumn或者是管理员事先创建好
- 为了保证数据安全,删除StatefulSet时不会删除Volume
- StatefulSet需要一个Headless Service来定义DNS domain,需要在StatefulSet之前创建好
3.1.5 DaemonSet
为每一个匹配的Node都部署一个守护进程,DaemonSet保证在每个Node上都运行一个容器副本,常用来部署一些集群的日志、监控或者其他系统管理应用。典型的应用包括:
- 日志收集,比如fluentd,logstatsh等
- 系统监控,比如Prometheus Node Exporter,Collectd等
- 系统程序,比如kube-proxy,kube-dns,glusterd,ceph等
3.1.6 Job
一次性运行的任务,运行完成后Pod销毁,不再重新启动容器
3.1.7 CronJob
是在Job基础上加上了定时功能
3.2 Service 与Ingress 服务发现与负载均衡
Serivce:
实现k8s集群内部的网络调用、负载均衡。定义一组pod的访问规则,主要是解决pod的动态变化,提供统一的访问入口:
1、防止pod失联,准备找到提供同一服务的pod(服务发现)
2、定义一组Pod的访问策略(负载均衡)
Ingress:
实现将k8s内部服务暴露给外网访问的服务。通过Ingress-nginx 实现反向代理、负载均衡。
3.3 Volume 存储
数据卷,共享Pod中容器使用的数据,用来存放持久化数据,比如数据库数据。
3.4 CSI
Container Storage Interface是由Kubernetes、Mesos、Docker等社区联合制定的一个行业标准接口规范,旨在将任意文件系统暴露给容器化应用程序。
END