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