StatefulSet:部署有状态的多副本应用
很高兴大家能做到这里,这是容器kubernetes内容最后一个章节了!而且非常简单,恭喜大家!
部署有状态的集群应用
针对有状态的应用,多数是数据有状态,例如mongodb副本集等,我们希望数据能够在pod扩容、缩容时磁盘数据不会被丢弃,能够复用磁盘。我们使用StatefulSet完成这些。
# cat kubia-statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet #使用了stateful
metadata:
name: kubia
spec:
serviceName: kubia
replicas: 2
selector:
matchLabels:
app: kubia
template:
metadata:
labels:
app: kubia
spec:
containers:
- name: kubia
image: luksa/kubia-pet
ports:
- name: http
containerPort: 8080
volumeMounts:
- name: data
mountPath: /var/data
volumeClaimTemplates: #为每个pod申请了磁盘
- metadata:
name: data
spec:
resources:
requests:
storage: 20Gi
accessModes:
- ReadWriteOnce
storageClassName: "alicloud-disk-available"
创建它看看,大家能够注意到,每个pod名字不再是随机码了,而是有了编号,他们也就是有了固定的名字了,所以对应的磁盘也是有了名字
$ k create -f kubia-statefulset.yaml
statefulset.apps/kubia created
$ k get all
NAME READY STATUS RESTARTS AGE
pod/kubia-0 1/1 Running 0 61s
pod/kubia-1 1/1 Running 0 46s
NAME READY AGE
statefulset.apps/kubia 2/2 61s
$ k get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
data-kubia-0 Bound d-j6c3dilgxismppu271ed 20Gi RWO disk 7m39s
data-kubia-1 Bound d-j6c9x6t7z31woktn8jl3 20Gi RWO disk 7m24s
这样他们在随着容量变化时,总是能够对号入座,是不是很简单呢?另外StatefulSet相比ReplicaSet,操作基本都是相同的,所以扩缩容等管理我们就不重复了
# 如
$ kubectl scale statefulset kubia --replicas=3 1 ↵
statefulset.apps/kubia scaled
StatefulSet在缩容时,pod卸下的磁盘不会被清理掉,因为扩容时还会再被复用,这是固定的机制。大家要记得这个点。
Cool!其实StatefulSet是很简单的,但是很多服务都会用到它,需要多练习。
好了,课程到这里告一段落,再次恭喜大家完成了这么多的内容。
思考题
谈谈你对ReplicaSet/StatefulSet的理解
Deployment和上面两个set有关联么,谈谈你的理解
谈谈你对kubernetes的体验感受
最后更新于
这有帮助吗?