1、搭建自动创建pv的storageClass
可参考之前的文章,K8S 自动按需自动创建nfs存储卷(pv)
查看创建的storageClass
[root@master imooc-redis-test]# kubectl get storageclass
NAME PROVISIONER AGE
nfs-storage fuseim.pri/ifs 4d16h
2、查看configmap,命名为redis-conf
#1.创建redis.conf文件
[root@master imooc-redis-test]# cat redis.conf
appendonly yes
cluster-enabled yes
cluster-config-file /var/lib/redis/nodes.conf
cluster-node-timeout 5000
dir /var/lib/redis
port 6379
#2.根据redis.conf创建configmap
[root@master imooc-redis-test]#kubectl create configmap redis-conf --from-file=redis.conf
#3.查看redis-conf这个configmap中的内容
[root@master imooc-redis-test]# kubectl describe cm redis-conf
Name: redis-conf
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
redis.conf:
----
appendonly yes
cluster-enabled yes
cluster-config-file /var/lib/redis/nodes.conf
cluster-node-timeout 5000
dir /var/lib/redis
port 6379
Events: <none>
3、创建无头服务
#1.新建headless-service.yaml,内容如下
[root@master imooc-redis-test]# cat headless-service.yaml
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
#2.应用
[root@master imooc-redis-test]# kubectl apply -f headless-service.yaml
#3.查看服务
[root@master imooc-redis-test]# kubectl get svc redis-service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
redis-service ClusterIP None <none> 6379/TCP 58m
4、创建statefulSet
#1.创建redis-statefulSet.yaml文件
[root@master imooc-redis-test]# vim redis-statefulSet.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: redis-app
spec:
serviceName: redis-service
replicas: 6
selector:
matchLabels:
app: redis
appCluster: redis-cluster
template:
metadata:
labels:
app: redis
appCluster: redis-cluster
spec:
#terminationGracePeriodSeconds: 20
#affinity:
# podAntiAffinity:
# preferredDuringSchedulingIgnoredDuringExecution:
# - weight: 100
# podAffinityTerm:
# labelSelector:
# matchExpressions:
# - key: app
# operator: In
# values:
# - redis
# topologyKey: kubernetes.io/hostname
containers:
- name: redis
image: redis:latest
imagePullPolicy: IfNotPresent
command:
- "redis-server"
args:
- "/etc/redis/redis.conf"
- "--protected-mode"
- "no"
resources:
requests:
cpu: "100m"
memory: "100Mi"
ports:
- name: redis
containerPort: 6379
protocol: "TCP"
- name: cluster
containerPort: 16379
protocol: "TCP"
volumeMounts:
- name: redis-conf
mountPath: /etc/redis
- name: redis-cluster-data
mountPath: /var/lib/redis
volumes:
- name: redis-conf
configMap:
name: redis-conf
items:
- key: "redis.conf"
path: