Loading
Loading...

Kubernetes 部署 Redis 5.0 数据库(单节点)

系统环境:

  • 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
maxmemory 1073741824

maxmemory 参数用于配置 Redis 可用最大内存数,单位为字节,1073741824 = 1G 大小,下面在 Deployment 部署时候的 limit 要和该限制的大小保持一致!

通过 Kubectl 工具部署 ConfigMap

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

  • -n:指定部署应用的 Namespace 命名空间。
Terminal window
$ 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 命名空间。
Terminal window
$ 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:
# 进行初始化操作,修改系统配置,解决 Redis 启动时提示的警告信息
initContainers:
- name: system-init
image: busybox:1.32
imagePullPolicy: IfNotPresent
command:
- "sh"
- "-c"
- "echo 2000 > /proc/sys/net/core/somaxconn && echo never > /sys/kernel/mm/transparent_hugepage/enabled"
securityContext:
privileged: true
runAsUser: 0
volumeMounts:
- name: sys
mountPath: /sys
containers:
- name: redis
image: redis:5.0.8
command:
- "sh"
- "-c"
- "redis-server /usr/local/etc/redis/redis.conf"
ports:
- containerPort: 6379
resources:
limits:
cpu: 1000m
memory: 1024Mi #注意,这里的内存限制要和上面的 ConfigMap 中 maxmemory 参数限制的内存大小保持一致
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
- name: sys
hostPath:
path: /sys

参数简介:

  • 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 命名空间。
Terminal window
$ kubectl create -f redis-deploy.yaml -n mydlqcloud

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

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

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

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

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

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

显示如下:

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

可以看到,已经成功连接并进入 Redis 命令行界面,说明数据库能正常使用。

---END---
如果本文对你有帮助,可以关注我的公众号 "小豆丁技术栈" 了解最新动态,顺便也请帮忙 Github 点颗星哦,感谢~

本文作者:超级小豆丁 @ 小豆丁技术栈

本文链接:http://www.mydlq.club/article/76/

本文标题:Kubernetes 部署 Redis 5.0 数据库(单节点)

本文版权:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!