注意:第二步不用操作了,yaml文件仅供参考

1.创建Namespace

kubectl apply -f Namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: cluster-redis

2.创建PersistentVolumeClaim #这一步不用操作了

kubectl apply -f PersistentVolumeClaim.yaml
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: redis-pvc1
namespace: cluster-redis
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
storageClassName: "storage"
---
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: redis-pvc2
namespace: cluster-redis
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
storageClassName: "storage"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: redis-pvc3
namespace: cluster-redis
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
storageClassName: "storage"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: redis-pvc4
namespace: cluster-redis
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
storageClassName: "storage"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: redis-pvc5
namespace: cluster-redis
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
storageClassName: "storage"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: redis-pvc6
namespace: cluster-redis
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
storageClassName: "storage"

3.创建statefulset

kubectl apply -f ConfigMap.yaml
kubectl apply -f StatefulSet.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: redis-cluster-configmap
namespace: cluster-redis
data:
update-node.sh: |
#!/bin/sh
REDIS_NODES="/data/nodes.conf"
sed -i -e "/myself/ s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/${POD_IP}/" ${REDIS_NODES}
exec "$@"
redis.conf: |+
cluster-enabled yes
cluster-require-full-coverage no
cluster-node-timeout 15000
cluster-config-file /data/nodes.conf
cluster-migration-barrier 1
appendonly yes
protected-mode no
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: redis-pod
namespace: cluster-redis
spec:
serviceName: redis-cluster-service
replicas: 6
selector:
matchLabels:
app: redis-pod
template:
metadata:
labels:
app: redis-pod
spec:
containers:
- name: redis
image: redis:6.2.1
ports:
- containerPort: 6379
name: client
- containerPort: 16379
name: gossip
command: ["/conf/update-node.sh", "redis-server", "/conf/redis.conf"]
env:
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
volumeMounts:
- name: conf
mountPath: /conf
readOnly: false
- name: data
mountPath: /data
readOnly: false
volumes:
- name: conf
configMap:
name: redis-cluster-configmap
defaultMode: 0755
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ "ReadWriteMany" ]
resources:
requests:
storage: 1Gi
storageClassName: "storage" # 注意这个,事先创建好存储卷

4.创建service

kubectl apply -f Service.yaml
apiVersion: v1
kind: Service
metadata:
name: redis-cluster-service
namespace: cluster-redis
spec:
type: ClusterIP
ports:
- port: 6379
targetPort: 6379
name: client
- port: 16379
targetPort: 16379
name: gossip
selector:
app: redis-pod

5.初始化 Redis Cluster

注意如下这一步,分开来看:

(1) 命令: kubectl get pods -n cluster-redis -l app=redis-pod -o jsonpath='{range.items[*]}{.status.podIP}:6379 '|awk '{print $1" "$2" "$3" "$4" "$5" "$6" "}'

这个命令是获取到StatefulSet.yaml文件中生成的redis pod ip,最后那个awk是过滤到不需要的信息

比如执行kubectl get pods -n cluster-redis -l app=redis-pod -o jsonpath='{range.items[*]}{.status.podIP}:6379 '得到的结果如下:

10.0.2.122:6379 10.0.0.65:6379 10.0.2.123:6379 10.0.0.66:6379 10.0.0.69:6379 10.0.2.125:6379 :6379

可以看到最后有个多余的:6379是没用的,awk的作用就是去掉这个

(2) 命令:kubectl exec -it redis-pod-0 -n cluster-redis -- redis-cli --cluster create (pod ip) --cluster-replicas 1

这个命令是登录到其中一个pod中创建集群使用的

kubectl exec -it redis-pod-0 -n cluster-redis -- redis-cli --cluster create `kubectl get pods -n cluster-redis -l app=redis-pod -o jsonpath='{range.items[*]}{.status.podIP}:6379 '|awk '{print $1" "$2" "$3" "$4" "$5" "$6" "}'` --cluster-replicas 1

6.验证集群部署

kubectl exec -it redis-pod-0 -n cluster-redis -- redis-cli cluster info
for x in $(seq 0 5); do echo "redis-pod-$x"; kubectl exec redis-pod-$x -n cluster-redis -- redis-cli role; echo; done

7.注意事项

(1)StatefulSet类型的资源不能通过修改'replicas', 'template', and 'updateStrategy'等字段来进行更新,否则就会报错,具体如下:

The StatefulSet "redis-pod" is invalid: spec: Forbidden: updates to statefulset spec for fields other than 'replicas', 'template', and 'updateStrategy' are forbidden

(2)生成的pod编号是从0开始的,依次是 redis-pod-0, redis-pod-1, redis-pod-2, redis-pod-3, redis-pod-4, redis-pod-5.

当删除一个pod时则会自动生成一个同名的pod.当然了,新生成的pod ip会发生变化

(3)查看pod对应的DNS域名

# for x in $(seq 0 5); do kubectl exec redis-pod-$x -n cluster-redis -- hostname -f; done
redis-pod-0.redis-cluster-service.cluster-redis.svc.cluster.local
redis-pod-1.redis-cluster-service.cluster-redis.svc.cluster.local
redis-pod-2.redis-cluster-service.cluster-redis.svc.cluster.local
redis-pod-3.redis-cluster-service.cluster-redis.svc.cluster.local
redis-pod-4.redis-cluster-service.cluster-redis.svc.cluster.local
redis-pod-5.redis-cluster-service.cluster-redis.svc.cluster.local

8.使用

项目中代码连接redis集群的话,使用的参数是: ClusterIP:6379

k8s中安装redis6集群的更多相关文章

  1. k8s中安装rabbitmq集群

    官方文档地址:https://www.rabbitmq.com/kubernetes/operator/quickstart-operator.html 要求 1.k8s版本要1.18及其以上 2.能 ...

  2. k8s上安装elasticsearch集群

    官方文档地址:https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-quickstart.html yaml文件地址:https://dow ...

  3. ubuntu中安装hadoop集群

    hadoop是由java 语言编写的主从结构分布式计算存储架构 准备工作: 操作系统: Ubuntu16.04 软件安装包:jdk-8u171-linux-x64.tar.gz : hadoop-2. ...

  4. 在centos6.5中安装zookeeper集群

    简介 ZooKeeper服务器是用Java编写创建,它运行在JVM.所以需要使用JDK 6或更高版本,在这里就不说在centos安装jdk环境了,直接进入正题,我搭建的是 192.168.0.2, 1 ...

  5. kubernetes实战(四):k8s持久化安装rabbitmq集群

    1.下载文件 https://github.com/dotbalo/k8s/ 2.创建namespace kubectl create namespace public-service 如果不使用pu ...

  6. Kubernetes(K8s) 安装(使用kubeadm安装Kubernetes集群)

    背景: 由于工作发生了一些变动,很长时间没有写博客了. 概述: 这篇文章是为了介绍使用kubeadm安装Kubernetes集群(可以用于生产级别).使用了Centos 7系统. 一.Centos7 ...

  7. 2、二进制安装K8s 之 部署ETCD集群

    二进制安装K8s 之 部署ETCD集群 一.下载安装cfssl,用于k8s证书签名 二进制包地址:https://pkg.cfssl.org/ 所需软件包: cfssl 1.6.0 cfssljson ...

  8. 二进制安装 k8s 1.15.6 集群

    目录: 第一篇 环境介绍与基础配置 第二篇 部署前期准备工作 第三篇 ETCD 集群部署 第四篇 master节点的部署介绍和前置工作 第五篇 kube-nginx 和 keepalived 部署安装 ...

  9. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...

随机推荐

  1. JavaWEB-03-JDBC

    内容 JDBC `JDBC`简介 JDBC `JDBC`快速入门 JDBC API `JDBC API` 详解 数据库连接池 JDBC `JDBC`案例 1. JDBC入门 1.1 概述 概念 JDB ...

  2. AI写代码! 神器copilot介绍+安装+使用

    !郑重提示!!!!!!!: 正在学编程.算法的同学请千万不要依赖此插件,否则你可能甚至无法手写出一个for循环 AI帮我写代码?我帮AI写代码?庄周梦蝶?蝶梦庄周?十分梦幻. copilot在VSco ...

  3. 比起网易有数BI,也许这款数据可视化软件更适合你!

    有数BI是网易推出的面向企业客户的可视化敏捷BI产品.拥有数据填报和自助式商业智能分析产品,提供网页端和手机端应用,帮助客户快速实现数据填报.多维分析.大数据探索.实时大数据展示和成员分享. 山海鲸可 ...

  4. Idea Maven调试properties 找不到报错

    问题:maven执行package命令打包时,src/main/java路径下的properties文件偶尔丢失 解决方式:pom.xml中加入resources配置 <build> &l ...

  5. (一)java基础篇---第一个程序

    先认识java的基础知识 1.变量命名规则 :1)变量名由数字字母下划线组成,2)不能使用java的关键字,比如public这种,3)遵循小驼峰命名法 2.数据类型 2.1基本数据类型有8种 其中分为 ...

  6. led的进化

    1.一个led亮100ns,灭400ns,循环 2.一个led亮2500ns,灭5000ns,亮7500ns,灭10000ns循环 3.以2500ns为变化周期,20000ns为一个循环,每个周期的亮 ...

  7. CodeSys中编程实现串口通讯

    第一步:Linux中启用串口设备.[以树莓派4B为例] 树莓派4B有6个串口,参考上一篇<>,在 /boot/config.txt 中添加一行,开启 uart2 功能:   dtoverl ...

  8. day02-2

    JAVA入门 1.C&&C++ 1972年C诞生 贴近硬件,运行极快,效率极高 操作系统,编译器,数据库,网络系统等 指针和内存管理 1982年C++诞生 面向对象 兼容C 图形领域. ...

  9. 【一本通基础DP基础模型】摘花生

    题面 题目描述 Hello Kitty想摘点花生送给她喜欢的米老鼠.她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来.地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生, ...

  10. CentOS7添加swap分区

    买了个云主机,只有1G内存,跑爬虫经常内存不足,于是只能添加swap来缓解: 1.官方推荐的swap大小定义 2.使用dd命令在根下创建swapfile dd if=/dev/zero of=/swa ...