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动态存储部署)
| 集群名称 | 集群域名 | 说明 |
|---|---|---|
| base | base.xincan.cn | 部署harbor、nfs等服务 |
| master | master.xincan.cn | kubernetes主节点,做污点容忍,排除业务资源,nfs客户端等 |
| slave1 | slave1.xincan.cn | kubernetes从节点,nfs客户端等 |
| slave2 | slave2.xincan.cn | kubernetes从节点,nfs客户端等 |
二、总体流程:
- 找一台虚拟机部署harbor、nfs服务,我这里不在赘述,请参照前面的文档;
- 在nfs服务端创建Redis数据存储挂载本地位置(redis-single);
- 在kubernetes主节点上某个目录下创建redis-single文件夹,也可以自定义,主要保证内部kubernetes资源定义文件一样即可;
- 进入此文件夹之后,复制一下文档中列出的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
- 资源创建;
- 效果展示;
- 连接测试;
三、资源创建
- 创建Redis的命名空间Namespace,名称为:redis
- 将所有的资源挂载到此命名空间下;
[root@master redis-single]# vim 1-redis-namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: redis
labels:
app: redis
- 创建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
- 创建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
- 创建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
- 创建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
- 创建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
- 创建资源
- 进入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]#
四、效果展示
- 通过
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外部连接
- 命令方式测试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>
-
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]#
六:结束语
至此单机版Kubernetes部署redis单机版完成