4-Kubernetes-redis-nfs单机版部署

507 阅读4分钟

Kubernetes-redis-nfs单机版部署

背景

简单的在kubernetes上部署单例的redis数据库

一、环境准备,安装kubernetes集群

​ 当前节点base、master、slave1、slave2

kubernetes安装不在此赘述,请参考参考资料进行安装

kubernetes安装nfs不在此赘述,请参考参考资料进行安装

​ 参考资料

1-Kubernetes基于Centos7构建基础环境(一)

2-Kubernetes基于Centos7构建基础环境(二)

3-Kubernetes基于Centos7构建基础环境(三)

4-Kubernetes-基于Centos7安装面板及监控(四)

1-kubernetes-nfs动态存储部署)

集群名称集群域名说明
basebase.xincan.cn部署harbor、nfs等服务
mastermaster.xincan.cnkubernetes主节点,做污点容忍,排除业务资源,nfs客户端等
slave1slave1.xincan.cnkubernetes从节点,nfs客户端等
slave2slave2.xincan.cnkubernetes从节点,nfs客户端等

二、总体流程:

  1. 找一台虚拟机部署harbor、nfs服务,我这里不在赘述,请参照前面的文档;
  2. 在nfs服务端创建Redis数据存储挂载本地位置(redis-single);
  3. 在kubernetes主节点上某个目录下创建redis-single文件夹,也可以自定义,主要保证内部kubernetes资源定义文件一样即可;
  4. 进入此文件夹之后,复制一下文档中列出的kubernetes资源并保存到此目录下,所有资源如下列表;
[root@master redis-single]# ll

redis-single
├── 1-redis-namespace.yaml
├── 2-redis-pv.yaml
├── 3-redis-pvc.yaml
├── 4-redis-configmap.yaml
├── 5-redis-deployment.yaml
└── 6-redis-service.yaml

  1. 资源创建;
  2. 效果展示;
  3. 连接测试;

三、资源创建

  1. 创建Redis的命名空间Namespace,名称为:redis
    • 将所有的资源挂载到此命名空间下;
[root@master redis-single]# vim 1-redis-namespace.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: redis
  labels:
    app: redis
  1. 创建Redis的存储资源PersistentVolume,名称为:redis-pv
[root@master redis-single]# vim 2-redis-pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: redis-pv
  namespace: redis
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 500M
  claimRef:
    apiVersion: v1
    kind: PersistentVolumeClaim
    name: redis-pvc
    namespace: redis
  persistentVolumeReclaimPolicy: Retain
  storageClassName: nfs
  nfs:
    path: /nfs/data/redis-single
    server: 172.16.124.130
  volumeMode: Filesystem
  1. 创建Redis的存储匹配资源PersistentVolumeClaim,名称为:redis-pvc
[root@master redis-single]# vim 3-mysql-pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: redis-pvc
  namespace: redis
  labels:
    app: redis
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 500M
  1. 创建Redis的配置资源ConfigMap,名称为:redis-config
[root@master redis-single]# vim 4-redis-configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: redis-config
  namespace: redis
  labels:
    app: redis
data:
  redis.conf: |+
    requirepass 123456
    appendonly yes
    protected-mode no
  1. 创建Redis实例资源Deployment,名称为:redis-server
[root@master redis-single]# vim 5-redis-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-server
  namespace: redis
  labels:
    app: redis
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
      - name: redis
        image: base.xincan.cn/library/redis:v6.2
        imagePullPolicy: IfNotPresent
        ports:
        - name: client
          containerPort: 6379
        - name: server
          containerPort: 16379
        command: ["redis-server", "/conf/redis.conf"]
        volumeMounts:
        - name: conf
          mountPath: /conf
        - name: redis-nfs-storage
          mountPath: /data
      volumes:
      - name: redis-nfs-storage
        persistentVolumeClaim:
          claimName: redis-pvc
      - name: conf
        configMap:
          name: redis-config
          defaultMode: 0755
  1. 创建Redis对外暴露资源Service,名称为:redis
[root@master redis-single]# vim 6-redis-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: redis
  namespace: redis
  labels:
    app: redis
spec:
  type: ClusterIP
  ports:
  - name: client
    port: 6379
    targetPort: 6379
  - name: server
    port: 16379
    targetPort: 16379
  selector:
    app: redis
  1. 创建资源
  • 进入mysql-single执行命令:kubectl apply -f ../redis-single/
  • 删除所有资源命令:kubectl delete -f ../redis-single/
[root@master redis-single]# kubectl apply -f ../redis-single/
namespace/redis created
persistentvolume/redis-pv created
persistentvolumeclaim/redis-pvc created
configmap/redis-config created
deployment.apps/redis-server created
service/redis created
[root@master redis-single]#


[root@master redis-single]# kubectl delete -f ../redis-single/
namespace "redis" deleted
persistentvolume "redis-pv" deleted
persistentvolumeclaim "redis-pvc" deleted
configmap "redis-config" deleted
deployment.apps "redis-server" deleted
service "redis" deleted
[root@master redis-single]#

四、效果展示

  1. 通过kubectl -n redis get pod,svc,cm,pv,pvc,查询redis命名空间下对应的资源,pv(persistentvolume)数据挂载资源,pvc等等资源
[root@master redis-single]# kubectl -n redis get pod,svc,cm,pv,pvc
NAME                                READY   STATUS    RESTARTS   AGE
pod/redis-server-69b8d7ff66-fwp66   1/1     Running   0          3s

NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)              AGE
service/redis   ClusterIP   10.1.0.237   <none>        6379/TCP,16379/TCP   3s

NAME                         DATA   AGE
configmap/kube-root-ca.crt   1      3s
configmap/redis-config       1      3s

NAME                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM             STORAGECLASS   REASON   AGE
persistentvolume/redis-pv   500M       RWO            Retain           Bound    redis/redis-pvc   nfs                     3s

NAME                              STATUS   VOLUME     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/redis-pvc   Bound    redis-pv   500M       RWO                           3s
[root@master redis-single]#


五、测试内部连接、navicat外部连接

  1. 命令方式测试quit; 退出容器
[root@master redis-single]# kubectl -n redis exec -it redis-server-69b8d7ff66-fwp66 -- redis-cli -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> get name
"\"\xe5\xbc\xa0\xe4\xb8\x89\""
127.0.0.1:6379>
  1. Another Redis Desktop Manager外部连接

    • 暴露service端口,修改type: ClusterIP为type: NodePort,保存退出
    • 通过查询服务得到端口为31139
    • 配置客户端连接
[root@master redis-single]# kubectl -n redis edit svc redis

type: NodePort

service/redis edited
[root@master redis-single]#
[root@master redis-single]# kubectl -n redis get svc redis
NAME    TYPE       CLUSTER-IP   EXTERNAL-IP   PORT(S)                          AGE
redis   NodePort   10.1.0.237   <none>        6379:31139/TCP,16379:32675/TCP   8m
[root@master redis-single]#

image-20210513185842160

image-20210513185926028

六:结束语

至此单机版Kubernetes部署redis单机版完成