k8s下安装redis

这篇具有很好参考价值的文章主要介绍了k8s下安装redis。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Redis安装

1.1 添加repo

helm repo add bitnami https://charts.bitnami.com/bitnami

 redis有两种部署方式:redis &redis cluster,  详细内容参见 redis 17.11.6 · bitnami/bitnami

k8s 部署redis,kubernetes,redis

k8s 部署redis,kubernetes,redis

1.2 修改redis的pv size

创建的master和replica pod的默认size是8Gi,如果k8s的node没有足够的空间,会抛出如下错误:default-scheduler  0/3 nodes are available: pod has unbound immediate PersistentVolumeClaims. preemption: 0/3 nodes are available: 3 No preemption victims found for incoming podk8s 部署redis,kubernetes,redis为此,我们可以在安装时控制以下参数重新设置pod的size,

--set replica.persistence.size=2Gi --set master.persistence.size=2Gi

1.3 指定storageclass

Redis在创建过程中会自动生成pvc,这些pvc需要绑定到特定pv以完成实际意义的存储。这里我们使用storageclass来实现该过程:

--set global.storageClass=<storageclass name> (i.e., manual in this examples)

1.4 总命令

安装redis

redis默认会安装1个master,3个node,可以通过以下参数来修改

--set  replica.replicaCount=2 --set master.count=1
helm install --set replica.persistence.size=2Gi --set master.persistence.size=1Gi \
 --set global.storageClass=manual  --set  replica.replicaCount=2 --set master.count=1 linkage-redis bitnami/redis

安装redis-cluster

redis-cluster默认创建6个nodes(每个nodes包括一个master及一个replica),可以调整参数该边node数目,但调整后的nodes数不能<3

k8s 部署redis,kubernetes,redis

--set cluster.nodes=3
helm install --set replica.persistence.size=2Gi --set master.persistence.size=2Gi \
 --set global.storageClass=manual  linkage-redis bitnami/redis-cluster

二、部署storageclass

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: manual
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

三、PV

apiVersion: v1
kind: PersistentVolume
metadata:
  name: $pv_name
spec:
  storageClassName: manual
  capacity:
    storage: 2Gi
  accessModes:
  - ReadWriteOnce
  hostPath:
    path: $data_path

pv的storageClassName指向先前创建的storageclass (manual)。此外,还需要指定data的存放路径 hostPath,这要求在k8s的各node上创建该路径,并修改路径权限;

chmod 777 $data_path

否则pod会抛出如下错误: Can't open or create append-only dir appendonlydir: Permission denied

k8s 部署redis,kubernetes,redis

四、修改pvc (deprecated)

一旦执行helm install命令,k8s就会生成对应的pvc。通常,K8S不提倡pvc的修改,而是强调删除outdated pvc,创建新的pvc。因此,不建议修改pvc(修改的的时候会报错,该问题未解决)。

修改redis下master & replica pod使用的pvc,使其指向步骤3中创建的pv

metadata:
  annotations:
    pv.kubernetes.io/bind-completed: "yes"
    pv.kubernetes.io/bound-by-controller: "yes"
  creationTimestamp: "2023-06-29T11:18:24Z"
  finalizers:
  - kubernetes.io/pvc-protection
  labels:
    app.kubernetes.io/component: master
    app.kubernetes.io/instance: my-redis
    app.kubernetes.io/name: redis
  name: redis-data-my-redis-master-0
  namespace: default
  resourceVersion: "2608115"
  uid: 4f1b0e39-8078-4fdc-8aff-388437ab9922
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
  storageClassName: $storage_name #指定storage name
  volumeMode: Filesystem
  volumeName: $pv_name #指定pv
status:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 2Gi
  phase: Bound
~              

五、重要参考文献

1. storage、pv、pvc的关联关系及配置方法
kubernetes - Error "no persistent volumes available for this claim and no storage class is set" - Stack Overflow

 2. 详细的安装过程

iDeploying Redis Cluster on Kubernetes | AirplaneiyIn this guide, learn how to run Redis on Kubernetes and explore tips for improving performance, security, and more.https://www.airplane.dev/blog/deploy-redis-cluster-on-kubernetes

 六、相关知识点

k8s 部署redis,kubernetes,redis

 通过层层的关联关系实现了host上的path与container上path的绑定(mount),进而实现在container销毁的情况下,其在mountpath下内容会存储在hostpath中。

volume

On-disk files in a container are ephemeral, which presents some problems for non-trivial applications when running in containers. One problem occurs when a container crashes or is stopped. Container state is not saved so all of the files that were created or modified during the lifetime of the container are lost. During a crash, kubelet restarts the container with a clean state. Another problem occurs when multiple containers are running in a Pod and need to share files. It can be challenging to setup and access a shared filesystem across all of the containers. The Kubernetes volume abstraction solves both of these problems. Familiarity with Pods is suggested.

 a volume is a directory, possibly with some data in it, which is accessible to the containers in a pod. How that directory comes to be, the medium that backs it, and the contents of it are determined by the particular volume type used.

 Ephemeral volume types have a lifetime of a pod, but persistent volumes exist beyond the lifetime of a pod. When a pod ceases to exist, Kubernetes destroys ephemeral volumes; however, Kubernetes does not destroy persistent volumes. For any kind of volume in a given pod, data is preserved across container restarts.

七、使用方法

可以使用python包访问以pod形式存在的redis DB,详细教程参见Python guide | Redis

pip install redis #安装python包

# 使用如下程序完成redis访问
import redis
r = redis.Redis(host='10.97.236.244', port=6379, decode_responses=True)
r.set('foo', 'bar')
print(r.get('foo'))

上述程序执行运行时错误:redis.exceptions.AuthenticationError: Authentication required.

  File "/home/ubuntu/Projects/socc23/motivation/logs/load-memory-intensive-req.py", line 3, in <module>
    r.set('foo', 'bar')
....
    response = self._parser.read_response(disable_decoding=disable_decoding)
  File "/home/ubuntu/anaconda3/envs/linkage/lib/python3.10/site-packages/redis/connection.py", line 349, in read_response
    result = self._read_response(disable_decoding=disable_decoding)
  File "/home/ubuntu/anaconda3/envs/linkage/lib/python3.10/site-packages/redis/connection.py", line 372, in _read_response
    raise error
redis.exceptions.AuthenticationError: Authentication required.

上述问题有两种解决办法:

方案一、重新安装redis并在安装过程中指定secretpassword

helm install my-release \
  --set auth.password=secretpassword \
    oci://registry-1.docker.io/bitnamicharts/redis

方法二、获取默认密码并通过redis-cli修改密码文章来源地址https://www.toymoban.com/news/detail-656228.html

kubectl get secret --namespace default my-redis-nodes -o \
jsonpath="{.data.redis-password}" | base64 --decode #获取default password

import redis
r = redis.Redis(host='10.97.236.244', port=6379, decode_responses=True,password='jWDFay24fY') #这里的password上一步的查询结果

到了这里,关于k8s下安装redis的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • kubernetes(K8S )安装部署 【保姆级步骤保成功】

    1、关闭firewalld和selinux(在k8s集群master和node上都进行操作)     临时关闭     systemctl stop firewalld systemctl disable firewalld setenforce 0 getenforce          service firewalld stop systemctl disable firewalld setenforce 0 getenforce     永久关闭     sed -i \\\'s/enforcing/disabled/\\\' /etc/selinux/config sed -ri \\\'s/

    2024年02月06日
    浏览(13)
  • 【k8s】基于Prometheus监控Kubernetes集群安装部署

    【k8s】基于Prometheus监控Kubernetes集群安装部署

    目录 基于Prometheus监控Kubernetes集群安装部署 一、环境准备 二、部署kubernetes集群 三、部署Prometheus监控平台 四、部署Grafana服务 五、grafana  web操作 IP地址 主机名 组件 192.168.100.131 k8s-master kubeadm、kubelet、kubectl、docker-ce 192.168.100.132 k8s-node01 kubeadm、kubelet、kubectl、docker-ce 192.168

    2024年02月12日
    浏览(57)
  • kubernetes(k8s) v1.28.2 安装与部署

    版本:kubernetes(k8s) v1.28.2 并准备主机名映射。 设置好静态IP。 在Ubuntu的/etc/hosts文件中,填入如下内容。也可以在Windows的C:WindowsSystem32driversetchosts文件中填写相同内容。 关闭防火墙和SELinux。 关闭防火墙命令如下。 可使用命令 systemctl status firewalld 查看防火墙状态。 关闭

    2024年02月03日
    浏览(17)
  • Centos7 安装部署 Kubernetes(k8s) 高可用集群

    Centos7 安装部署 Kubernetes(k8s) 高可用集群

    宿主机系统 集群角色 服务器IP 主机名称 容器 centos7.6 master 192.168.2.150 ks-m1 docker centos7.6 master 192.168.2.151 ks-n1 docker centos7.6 master 192.168.2.152 ks-n2 docker 1.1 服务器初始化及网络配置 VMware安装Centos7并初始化网络使外部可以访问** 注意事项:请一定要看完上面这篇文章再执行下面的操

    2024年02月03日
    浏览(34)
  • centos安装部署Kubernetes(k8s)步骤使用kubeadm方式

    centos安装部署Kubernetes(k8s)步骤使用kubeadm方式

    机器地址: 192.168.0.35 k8s-master 192.168.0.39 k8s-node1 192.168.0.116 k8s-node2 修改每台机器的名字 关闭防火墙和selinux 临时关闭selinux: 永久关闭: 修改selinux为disabled或者permissive 重启生效 配置本地解析 确保每个节点MAC地址和 product_uuid 的唯一性 同步时间 如果各机器上时间都没有问题

    2024年02月06日
    浏览(19)
  • 【云原生】【k8s】Kubernetes+EFK构建日志分析安装部署

    【云原生】【k8s】Kubernetes+EFK构建日志分析安装部署

    目录 EFK安装部署 一、环境准备(所有主机) 1、主机初始化配置 2、配置主机名并绑定hosts,不同主机名称不同 3、主机配置初始化 4、部署docker环境 二、部署kubernetes集群 1、组件介绍 2、配置阿里云yum源 3、安装kubelet kubeadm kubectl 4、配置init-config.yaml init-config.yaml配置 5、安装

    2024年02月12日
    浏览(18)
  • K8s(kubernetes)集群搭建及dashboard安装、基础应用部署

    K8s(kubernetes)集群搭建及dashboard安装、基础应用部署

    本质是一组服务器集群,在集群每个节点上运行特定的程序,来对节点中的容器进行管理。实现资源管理的自动化。 自我修复 弹性伸缩 服务发现 负载均衡 版本回退 存储编排 控制节点(master)-控制平面 APIserver :资源操作的唯一入口 scheduler :集群资源调度,将Pod调度到node节

    2024年02月08日
    浏览(17)
  • 云原生|kubernetes|kubernetes集群部署神器kubekey安装部署高可用k8s集群(半离线形式)

    云原生|kubernetes|kubernetes集群部署神器kubekey安装部署高可用k8s集群(半离线形式)

    前面利用kubekey部署了一个简单的非高可用,etcd单实例的kubernetes集群,经过研究,发现部署过程可以简化,省去了一部分下载过程(主要是下载kubernetes组件的过程)只是kubernetes版本会固定在1.22.16版本,etcd集群可以部署成生产用的外部集群,并且apiserver等等组件也是高可用,

    2024年02月15日
    浏览(16)
  • 深入了解Kubernetes(k8s):安装、使用和Java部署指南(持续更新中)

    深入了解Kubernetes(k8s):安装、使用和Java部署指南(持续更新中)

    Docker和Kubernetes是两个不同的概念和技术,它们在容器化应用和容器编排方面有着不同的功能和作用。 Docker: Docker是一个开源的容器化平台,用于构建、打包和运行应用程序。通过使用Docker,你可以将应用程序及其依赖项打包到一个独立的轻量级容器中,使其可以在不同的环

    2024年02月10日
    浏览(12)
  • Centos7安装部署k8s(kubernetes)最新v1.27.1版本超详细安装教程

    从零开始的k8s安装 硬件配置要求 cpu = 2核 硬盘 = 20G 内存 = 2G 节点数量建议为奇数(3, 5, 7, 9等)(1台好像也能搭,没试过) 以下命令出除特殊要求外,其余都建议在master主机执行 本教程配置如下 主机名 IP 配置 master 192.168.42.150 2核+2G+20G node1 192.168.42.151 2核+2G+20G node2 192.168.

    2024年02月11日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包