k8s部署redis
Overview
[TOC]
在K8s集群中部署Redis集群有很多方式,对于我的项目来说,一是要支持持久化;二是要支持redis容器毁灭时,能够重建就行。
Ceph有点重了。。。故采用Longhorn实现持久化存储。
安装Longhorn
先决条件
K8s集群nodes中每个node均执行以下命令:
1$ sudo apt-get install open-iscsi
2
3$ sudo apt-get install util-linux
安装
登陆rancher WEB,点击进入目标k8s集群,依次点击:Apps/Chart,输入longhorn,点击安装,等待安装完成。
安装完毕之后,集群管理页面会多出一个Longhorn菜单,通过此菜单可以进入Longhorn管理页。
安装Redis
以下操作在rancher web shell UI执行:
生成namespace
1$ kubectl create namespace redis-server
生成文件
pvc.yaml
- 用于生成一个持久卷用于redis容器
1apiVersion: v1
2kind: PersistentVolumeClaim
3metadata:
4 name: redis-pvc
5 namespace: redis-server
6spec:
7 accessModes:
8 - ReadWriteOnce
9 storageClassName: longhorn
10 resources:
11 requests:
12 storage: 5Gi
deployment.yaml
- 用于部署一个redis容器
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 name: redis-server
5 namespace: redis-server
6spec:
7 replicas: 1
8 selector:
9 matchLabels:
10 app: redis-server
11 template:
12 metadata:
13 labels:
14 app: redis-server
15 name: redis-server
16 spec:
17 containers:
18 - name: redis-server
19 image: redis
20 args: ["--appendonly", "yes"]
21 ports:
22 - name: redis-server
23 containerPort: 6379
24 volumeMounts:
25 - name: lv-storage
26 mountPath: /data
27 env:
28 - name: ALLOW_EMPTY_PASSWORD
29 value: "yes"
30 imagePullSecrets:
31 - name: nexus-registry
32 volumes:
33 - name: lv-storage
34 persistentVolumeClaim:
35 claimName: redis-pvc
说明:imagePullSecrets 是访问私有镜像仓库的配置信息,如果您的环境不涉及,可以移除此属性。
service.yaml
- 用于暴露Redis服务
1apiVersion: v1
2kind: Service
3metadata:
4 name: redis-server
5 namespace: redis-server
6spec:
7 selector:
8 app: redis-server
9 type: NodePort
10 ports:
11 - name: redis-port
12 protocol: TCP
13 port: 6379
14 targetPort: 6379
15 nodePort: 30001
部署
1$ kubectl apply -f pvc.yaml
2$ kubectl apply -f deployment.yaml
3$ kubectl apply -f service.yaml
卸载
1$ kubectl delete -f service.yaml
2$ kubectl delete -f deployment.yaml
3$ kubectl delete -f pvc.yaml