经常看到有人需要把数据库、Redis 等各种中间件 和 文件处理程序之类 的放在 K8S 里面部署。
我现在学的还浅,对我来说 K8S 主要是一个服务编排工具,如果放进去了一个有状态应用,就失去了 K8S 很多编排的特性,运维成本也会上升。
感觉搞个单独的服务器用 Docker 装不更加香吗?
1
rrfeng 2020-05-09 15:24:11 +08:00
statefulset 了解一下,可以组合多种角色一键部署、滚动升级啥的。
|
2
binbinyouliiii OP @rrfeng #1 statefulset 我知道,可是这种有状态的不就只能落死节点了
|
3
asilin 2020-05-09 15:50:06 +08:00
如果没有分布式存储,就相当于落死节点了。
但如果有 Ceph 存储集群等用来做 PVC 存储,则就可以在任意节点漂移了,相当于 staleless 。 |
4
tolerance 2020-05-09 15:55:23 +08:00
服务器很多的时候,多少有点作用
|
5
binbinyouliiii OP |
6
lhx2008 2020-05-09 16:02:56 +08:00 via Android
最大的优点就是弹性部署,快速重建,快速伸缩,然后一般都是 CRD 来控制了,statefulset 那种意思不大。
|
7
binbinyouliiii OP @lhx2008 #6 数据肯定需要持久化的,弹性和伸缩不会搞丢数据吗?
|
8
lhx2008 2020-05-09 16:09:08 +08:00 via Android
@binbinyouliiii 持久化是 CEPH 这种提供,弹性伸缩就是加节点,比如原来一主一从变成一主两从,或者六节点三切片变成十二节点六个切片。新节点加入就会联系旧节点同步数据的。
|
9
namelosw 2020-05-11 21:43:31 +08:00 1
你自己管理 Stateful 集群更难,伸缩都要自己搞,ip,网络什么的很麻烦。比如 Cassandra 之类的。
数据库这种 cluster 一般还好,一般也不经常部署,扔 Kubernetes 外面也行,但是经常加节点的时候还是 Statefulset 好用,Kubernetes shutdown 的时候也会按顺序 graceful shutdown,自己弄不小心就会丢数据。 最需要 Statefulset 的是 Akka 之类的这种,你的应用是 stateful 的,经常部署经常伸缩,扔 Kubernetes 外面管理起来很头疼。Statefulset 能自己起名字自己管理,手动弄全要自己配。 比如说你考虑重写一个魔兽世界这种东西,一个巨型地图十万人,状态不仅要在内存,还得跨机器,每台机器存一片地图和玩家。基本这种需求写出来的代码就要用 Statefulset 。 |