前面有特别提到,redis这类应用程序如果需要保持资料持久化,不会因为重启pod造成资料消失,就必须要建立statefulset,那麽这边就来介绍如何建立redis的statefulsets。
要建立Statefulset,就要先建立headless service。
apiVersion: v1
kind: Service
metadata:
name: redis-service
labels:
app: redis
spec:
ports:
- name: redis-port
port: 6379
clusterIP: None
selector:
app: redis
appCluster: redis-cluster
再来建立有 statefulset 的 redis
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: redis
spec:
selector:
matchLabels:
app: redis
serviceName: "redis"
replicas: 1
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis
image: redis
command: ["redis-server", "--appendonly", "yes"]
ports:
- containerPort: 6379
name: web
volumeMounts:
- name: redis-aof
mountPath: /data
volumeClaimTemplates:
- metadata:
name: redis-aof
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "gp2"
resources:
requests:
storage: 1Gi
这边特别提一下这段设定
- name: redis
image: redis
command: ["redis-server", "--appendonly", "yes"]
可以看到command那边提到appendonly,这个是什麽呢?
redis要持久化,除了pod设定改成statefulset外,也必须特别设定持久化。
有两种方式:
RDB(Redis DataBasa file):
已指定间隔对资料进行snapshot储存,然後在进行操作时,会fork出一个process进行操作,fork完成後主process就可以不受影响,不过由於其间隔复制的特性,有时会丢失资料。
AOF(Append-Only File):
透过fsync策略进行备份,有三种模式可以选:
在这边介绍完了Statefulset范例後,也顺便了解了redis持久化的设定,而除了Statefulset和ReplicaSet外,还有一个DaemonSet,因此下一章会介绍DaemonSet。
大纲 1. 不只有一个 expression 的 macro 2. 使用 code block 解决...
前言 为了解决 Vue.js 2x 元件之间无法重复使用逻辑和程序码,而出现了 Compositio...
Nuxt.js 跟 Vue-Router 是什麽关系? 有使用过 vue-router 的捧由,别紧...
创建App-讯息界面 今天进行讯息界面,本界面会使用Button、Text Field等基本UI来建...
问题延伸 1. 请问如何动态载入不同的 context ? 比如说我们这台状态机想要给许多不同的店家...