内存布局
JDK8
的 JVM
内存布局如下:
StatefulSet 对存储状态的管理机制,主要通过使用 Persistent Volume Claim
的功能。
Pod 中需要将容器内部的存储进行挂载出来,只要在 Pod 中使用 Volume,定义一个具体类型的 Volume 就可以了。
比如下面这种最简单的 hostPath
1 | apiVersion: v1 |
Deployment不足以满足所有的应用编排问题,造成这个问题的根本原因,因为Deployment对应用做了一个简单的假设,一个应用的所有Pod是完全一样的,它们之间没有顺序,也无所谓到底运行在哪一台宿主机上,需要的时候Deployment可以根据Pod模板创建新的Pod,不需要的时候Deployment就可以杀掉任意一个Pod。
这样的话并不能满足我们的所有场景,多个实例之间可能存在依赖关系,比如主从关系、主备关系。还有一些自身实例中自己带有一些缓存数据的,实例一旦被杀掉虽然能够重建出来但是数据已经丢了。
这种实例之间有不对等关系,以及实例对外部数据有依赖的,称为有状态应用,Deployment适合用来部署无状态应用,容器技术对于有状态应用来说,困难程度直线上升,一开始有状态应用几乎成了容器技术圈子的忌讳,不过Kubernetes还是成为了第一个吃螃蟹的人,这个吃螃蟹的工具就是StatefulSet
。