Kubernetes部署Redis 数据库

系统环境:

  • Redis 版本:5.0.8
  • Kubernetes 版本:1.17.4
  • 操作系统版本:CentOS 7.8

一、简介

Redis 是我们常用的非关系型数据库,在项目开发、测试、部署到生成环境时,经常需要部署一套 Redis 来对数据进行缓存。这里介绍下如何在 Kubernetes 环境中部署用于开发、测试的环境的 Redis 数据库,当然,部署的是单节点模式,并非用于生产环境的主从、哨兵或集群模式。单节点的 Redis 部署简单,且配置存活探针,能保证快速检测 Redis 是否可用,当不可用时快速进行重启。

二、Redis 参数配置

在使用 Kubernetes 部署应用后,一般会习惯与将应用的配置文件外置,用 ConfigMap 存储,然后挂载进入镜像内部。这样,只要修改 ConfigMap 里面的配置,再重启应用就能很方便就能够使应用重新加载新的配置,很方便。

创建 ConfigMap 存储 Redis 配置文件

创建 Kubernetes 的 ConfigMap 资源,用于存储 Redis 的配置文件 redis.conf 内容:

redis-config.yaml

kind: ConfigMap
apiVersion: v1
metadata:
  name: redis-config
  labels:
    app: redis
data:
  redis.conf: |-
    dir /data
    port 6379
    bind 0.0.0.0
    appendonly yes
    protected-mode no
    requirepass 123456
    pidfile /data/redis-6379.pid

通过 Kubectl 工具部署 ConfigMap

通过 kubectl 工具部署 Kubernetes ConfigMap 资源,命令如下:

  • -n:指定部署应用的 Namespace 命名空间。
$ kubectl create -f redis-config.yaml -n mydlqcloud

三、Redis 数据存储

Kubernetes 部署的应用一般都是无状态应用,部署后下次重启很可能会漂移到不同节点上,所以不能使用节点上的本地存储,而是徐亚网络存储对应用数据持久化,PV 和 PVC 是 Kubernetes 用于与储空关联的资源,可与不同的存储驱动建立连接,存储应用数据,所以接下来我们要创建 Kubernetes PV、PVC 资源。

PV、PVC 资料可以参考 Kubernetes 存储资源 PV、PVC 和 StorageClass 文章。

创建 PV、PVC 绑定 Mysql 存储空间

PV 支持多种存储驱动,不同存储驱动的 PV 配置方式是不同的,需要根据你的存储系统来配置 PV 参数。这里用的是 NFS 存储(共享网络文件存储系统),可以按照以下方式进行配置:

redis-storage.yaml

## PV
apiVersion: v1
kind: PersistentVolume
metadata:
  name: redis
  labels:
    app: redis             #设置 pv 的 label 标签
spec:
  capacity:          
    storage: 5Gi           #设置 pv 存储资源大小 
  accessModes:       
  - ReadWriteOnce
  mountOptions:
  - hard
  - nfsvers=4.1    
  nfs:                     #指定使用 NFS 存储驱动
    server: 192.168.2.11   #指定 NFS 服务器 IP 地址
    path: /nfs/redis       #指定 NFS 共享目录的位置,且需提前在该目录中创建 redis 目录
  persistentVolumeReclaimPolicy: Retain  
---
## PVC
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: redis
spec:
  resources:
    requests:
      storage: 5Gi         #设置 pvc 存储资源大小
  accessModes:
  - ReadWriteOnce
  selector:
    matchLabels:
      app: redis           #根据 Label 选择对应 PV

通过 Kubectl 工具部署 PV、PVC

通过 kubectl 工具部署 Kubernetes PV、PVC 资源,命令如下:

  • -n:指定部署应用的 Namespace 命名空间。
$ kubectl create -f redis-storage.yaml -n mydlqcloud

四、Kubernetes 部署 Redis

创建 Deployment 部署 Redis

创建用于 Kubernetes Deployment 来配置部署 Redis 的参数,需要配置 Redis 的镜像地址、名称、版本号,还要配置其 CPU 与 Memory 资源的占用,配置探针监测应用可用性,配置 Volume 挂载之前创建的 PV、PVC、ConfigMap 资源等等,内容如下:

redis-deploy.yaml

## Service
apiVersion: v1
kind: Service
metadata:
  name: redis
  labels:
    app: redis
spec:
  type: NodePort
  ports:
  - name: redis
    port: 6379
    nodePort: 30379
    targetPort: 6379
  selector:
    app: redis
---
## Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
  labels:
    app: redis
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
    spec:     
      containers:
      - name: redis
        image: redis:5.0.8
        ports:
        - containerPort: 6379
        resources:
          limits:
            cpu: 1000m
            memory: 1024Mi
          requests:
            cpu: 1000m
            memory: 1024Mi
        livenessProbe:
          tcpSocket:
            port: 6379
          initialDelaySeconds: 300
          timeoutSeconds: 1
          periodSeconds: 10
          successThreshold: 1
          failureThreshold: 3
        readinessProbe:
          tcpSocket:
            port: 6379
          initialDelaySeconds: 5
          timeoutSeconds: 1
          periodSeconds: 10
          successThreshold: 1
          failureThreshold: 3
        volumeMounts:
        - name: data
          mountPath: /data
        - name: config
          mountPath:  /usr/local/etc/redis/redis.conf
          subPath: redis.conf
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: redis
      - name: config      
        configMap:
          name: redis-config

参数简介:

  • ports: 配置镜像映射端口。
  • resources: 配置 CPU、Memory 资源限制,可以通过配置该值来配置 Pod 的 QoS 级别。
  • livenessProbe: 配置存活探针,定时检测 Redis 应用运行状态,如果检测到 Redis 挂掉将进行重启操作。
  • readinessProbe: 配置就绪探针,定时检测 Redis 应用启动状态,如果启动成功将允许流量涌入,启动失败将进行重启操作。
  • command: 探针执行探测时执行的探测命令。
  • volumeMounts: 存储卷挂载配置,用于镜像内存储的挂载配置,与 volumes 中对于的 name 进行绑定。
  • volumes: 存储卷配置,可配置使用 pvc、hostPath、emptyDir、nfs 等存储,需要配置 name 值与 VolumeMounts 进行绑定。

 

通过 Kubectl 工具部署 PV、PVC

通过 kubectl 工具部署 Deployment 来创建 Redis,命令如下:

  • -n:指定部署应用的 Namespace 命名空间。
$ kubectl create -f redis-deploy.yaml -n mydlqcloud

五、测试 Redis 是否能够正常使用

接下来启动个 Rysql 镜像,使用里面的 Rsyql 客户端工具,对部署在 Kubernetes 中的 Rysql 进行连接,测试是否能够正常可用,这里本人 Kubernetes 集群地址为 192.168.2.11 部署的 Rysql 的 NodePort 端口号为 30379,所以这里启动一个对应版本的 Rysql 镜像,然后进入镜像内部,输入 Rysql 登录命令进行测试。

运行一个 redis 镜像,并且进入镜像内部:

$ docker run -it redis:5.0.8 /bin/bash

在镜像内部命令行中输入 redis 登录命令,测试是否能够正常登录:

$ redis-cli -h 192.168.2.11 -p 30379 -a 123456

显示如下:

Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.2.11:30379> 

发表评论