Redis
Redis是高级键值缓存和存储。它通常被称为数据结构服务器,因为键可以包含字符串,哈希,列表,集合,排序集合,位图和超级日志。
TL; DR;
# Testing configuration
$ helm install my-release <helm-repo>/redis
# Production configuration
$ helm install my-release <helm-repo>/redis --values values-production.yaml
介绍
该图表使用Helm软件包管理器在Kubernetes集群上引导了Redis部署。
Bitnami图表可与Kubeapps一起用于在群集中部署和管理Helm Charts。该图表已经过测试,可以在BKPR上与NGINX Ingress,证书管理器,流利的软件和Prometheus一起使用。
先决条件
- 总督1.12+
- Helm 2.11+或Helm 3.0-beta3 +
- 基础架构中的PV供应商支持
安装图表
要使用发布名称安装图表my-release
:
$ helm install my-release <helm-repo>/redis
该命令以默认配置在Kubernetes集群上部署Redis。“参数”部分列出了可以在安装过程中配置的参数。
提示:列出所有使用的版本
helm list
卸载图表
要卸载/删除my-release
部署:
$ helm delete my-release
该命令将删除与图表关联的所有Kubernetes组件并删除发行版。
参量
下表列出了Redis图表的可配置参数及其默认值。
参数 | 描述 | 默认 |
| 全局Docker映像注册表 |
|
| 全局Docker注册表机密名称作为数组 |
|
| 用于动态配置的全局存储类 |
|
| Redis密码(覆盖 |
|
| Redis映像注册表 |
|
| Redis映像名称 |
|
| Redis图像标签 |
|
| 图片拉出政策 |
|
| 将docker-registry秘密名称指定为数组 |
|
| 使用字符串部分覆盖redis.fullname模板的字符串(将在发行版名称之前) |
|
| 使用字符串完全覆盖redis.fullname模板的字符串 |
|
| 使用主从拓扑 |
|
| 奴隶数量 |
|
| 现有秘密对象的名称(用于密码验证) |
|
| 密钥名称,其中包含要从现有机密中检索的密码 |
|
| 使用密码 |
|
| 将密码挂载为文件而不是环境变量 |
|
| Redis密码(如果设置了现存密码,则忽略此密码) | 随机产生 |
| 其他通用Redis节点配置(此值作为模板评估) | 参见values.yaml |
| 使用的Kubernetes DNS域名 |
|
| 启用网络策略 |
|
| 不需要客户端标签进行连接 |
|
| 允许来自其他名称空间的连接 |
|
| 对于其他名称空间,按Pod标签和名称空间标签进行匹配 |
|
| 启用安全上下文(redis主节点和从节点pod) |
|
| 容器的组ID(redis主节点和从节点pod) |
|
| 容器的用户标识(redis主节点和从节点pod) |
|
| 设置容器的命名空间sysctls(redis主和从属pod) |
|
| 指定是否应创建ServiceAccount |
|
| 要创建的ServiceAccount的名称 | 使用全名模板生成 |
| 指定是否应创建RBAC资源 |
|
| 创建规则 |
|
| 启动边车普罗米修斯出口商 |
|
| Redis导出器映像注册表 |
|
| Redis导出器映像名称 |
|
| Redis导出器图像标签 |
|
| 图片拉出政策 |
|
| 将docker-registry秘密名称指定为数组 |
|
| 二进制的额外参数;这里可能的值 | {} |
| 公制出口商吊舱的附加标签 | {} |
| Metrics导出器窗格的附加注释 | {} |
| 出口商资源请求/限制 | 内存: |
| 如果 |
|
| Prometheus在其中运行的可选名称空间 |
|
| 刮取指标的频率(默认使用,回溯至Prometheus的默认设置) |
|
| 默认为kube-prometheus安装(建议使用CoreOS),但应根据Prometheus安装进行设置 |
|
| Kubernetes服务类型(redis指标) |
|
| 监视服务的注释(redis主服务器和redis从服务) | {} |
| 指标服务的其他标签 | {} |
| 如果redis指标服务类型为loadBalancerIP |
|
| 指标导出器Pod priorityClassName | {} |
| 将其设置为true可以为Prometheus运算符创建prometheusRules |
|
| 普罗米修斯会发现其他可用于普罗米修斯的标签 |
|
| 应该在其中创建prometheusRules资源的名称空间 | 与Redis相同的名称空间 |
| 要创建的规则,请查看示例值。 |
|
| 提供一个现有的PersistentVolumeClaim |
|
| 使用PVC保留数据(主节点) |
|
| 安装卷的路径,以使用其他图像 |
|
| 要挂载的卷的子目录 |
|
| 背衬PVC的存储类别 |
|
| 永久卷访问模式 |
|
| 数据量大小 |
|
| matchLabels持久卷选择器 |
|
| matchExpressions持久卷选择器 |
|
| StatefulSet的更新策略 | onDelete |
| 分区更新策略 |
|
| Redis主容器的其他标签 | {} |
| Redis主容器的其他注释 | {} |
| Redis端口(在主服务器和从服务器中) |
|
| Redis主入口点字符串。 |
|
| 主节点的其他Redis配置(此值作为模板评估) |
|
| 禁用的Redis命令数组(主) |
|
| Redis主站其他命令行标志 | [] |
| 用于容器分配的Redis主节点标签 | {“ beta.kubernetes.io/arch”:“ amd64”} |
| Redis主容器分配的公差标签 | [] |
| Redis主Pod分配的相似性设置 | {} |
| 备用调度程序的名称 |
|
| Kubernetes服务类型(redis主服务器) |
|
| Kubernetes服务端口(redis主服务器) |
|
| Kubernetes服务nodePort(redis master) |
|
| Redis主服务的注释 | {} |
| Redis主服务的附加标签 | {} |
| 如果redis主服务类型为loadBalancerIP |
|
| 如果redis主服务类型为loadBalancerSourceRanges |
|
| Redis主CPU /内存资源请求/限制 | 内存: |
| 打开和关闭活动度探针(redis主窗格) |
|
| 启动活动性探测之前的延迟(redis主窗格) |
|
| 多久执行一次探查(redis master pod) |
|
| 探测超时时(redis主容器) |
|
| 探针失败后的最小连续成功次数(redis主容器) |
|
| 成功后将被视为探针的最小连续失败数。 |
|
| 打开和关闭就绪探针(redis主容器) |
|
| 启动就绪探针之前的延迟(redis主容器) |
|
| 多久执行一次探查(redis master pod) |
|
| 探测超时时(redis主容器) |
|
| 探针失败后的最小连续成功次数(redis主容器) |
|
| 成功后将被视为探针的最小连续失败数。 |
|
| Redis Master Pod PriorityClassName | {} |
| 启用用于更改注册表中的卷权限的初始化容器(对于默认的k8 |
|
| 初始化容器容量许可映像注册表 |
|
| 初始化容器容量许可映像名称 |
|
| 初始化容器体积许可图像标签 |
|
| 初始化容器容量许可映像拉取策略 |
|
| 初始化容器的容量许可CPU /内存资源请求/限制 | {} |
| Kubernetes服务类型(redis从属) |
|
| Kubernetes服务nodePort(redis从属) |
|
| Redis从站服务注释 | {} |
| Redis从站服务的附加标签 | {} |
| Kubernetes服务端口(redis从站) |
|
| 如果Redis从属服务类型为LoadBalancerIP |
|
| 如果Redis从属服务类型为loadBalancerSourceRanges |
|
| Redis从站入口点数组。如果未提供,则使用docker映像的ENTRYPOINT。 |
|
| 从节点的其他Redis配置(此值作为模板评估) |
|
| Redis命令数组以禁用(从属) |
|
| Redis从站附加命令行标志 |
|
| 打开和关闭活动性探针(redis从属Pod) |
|
| 启动活动性探测之前的延迟(redis从属Pod) |
|
| 多久执行一次探测(redis从属Pod) |
|
| 探测超时时(redis从属Pod) |
|
| 探针失败后的最小连续成功次数(redis slave pod) |
|
| 成功后将被视为探针的最小连续失败数。 |
|
| 打开和关闭slave.readiness探针(redis slave pod) |
|
| 启动slave.readiness探针之前的延迟(redis slave pod) |
|
| 多久执行一次探测(redis从属Pod) |
|
| 探测超时时(redis从属Pod) |
|
| 探针失败后的最小连续成功次数(redis slave pod) |
|
| 成功后将被视为探针的最小连续失败数。(redis奴隶吊舱) |
|
| 使用PVC保留数据(从节点) |
|
| 安装卷的路径,以使用其他图像 |
|
| 要挂载的卷的子目录 |
|
| 背衬PVC的存储类别 |
|
| 永久卷访问模式 |
|
| 数据量大小 |
|
| matchLabels持久卷选择器 |
|
| matchExpressions持久卷选择器 |
|
| StatefulSet的更新策略 | onDelete |
| 分区更新策略 |
|
| Redis从属Pod的附加标签 |
|
| Redis从属Pod的附加注释 |
|
| 备用调度程序的名称 |
|
| Redis从站CPU /内存资源请求/限制 |
|
| 为奴隶启用节点/荚亲和力 | {} |
| Redis从站pod priorityClassName | {} |
| 启用哨兵容器 |
|
| 使用标记容器的密码 |
|
| 前哨主机组的名称 |
|
| 查询Redis Sentinel服务以获取活动Sentinel列表的超时 |
|
| 选举新主人的法定人数 |
|
| 检测Redis节点超时 |
|
| 执行选举故障转移的超时 |
|
| 集群中的并行同步数 |
|
| Redis Sentinel端口 |
|
| 前哨节点的其他Redis配置(此值作为模板评估) |
|
| 为哨兵副本启用静态ID(如果禁用的ID将在启动时随机生成) |
|
| Kubernetes服务类型(redis标记) |
|
| Kubernetes服务nodePort(redis sentinel) |
|
| Redis哨兵服务注释 | {} |
| Redis哨兵服务的附加标签 | {} |
| 用于Redis只读操作的Kubernetes服务端口 |
|
| 用于Redis标记的Kubernetes服务端口 |
|
| 用于Redis只读操作的Kubernetes服务节点端口 | `` |
| 用于Redis标记的Kubernetes服务节点端口 | `` |
| 如果Redis前哨服务类型为LoadBalancerIP |
|
| 打开和关闭活动性探针(redis前哨吊舱) |
|
| 启动活力探测之前的延迟(redis前哨吊舱) |
|
| 多久执行一次探测(redis前哨容器) |
|
| 探针超时时(redis前哨容器) |
|
| 探针失败后的最小连续成功次数(redis前哨容器) |
|
| 成功后将被视为探针的最小连续失败数。 |
|
| 打开和关闭sentinel.readiness探针(redis sentinel pod) |
|
| 启动sendinel.readiness探针之前的延迟(redis sentinel pod) |
|
| 多久执行一次探测(redis前哨吊舱) |
|
| 探针超时时(redis前哨容器) |
|
| 探针失败后的最小连续成功次数(redis前哨容器) |
|
| 成功后将被视为探针的最小连续失败数。(redis前哨容器) |
|
| Redis前哨CPU /内存资源请求/限制 |
|
| Redis Sentinel映像注册表 |
|
| Redis Sentinel映像名称 |
|
| Redis Sentinel图片标签 |
|
| 图片拉出政策 |
|
| 将docker-registry秘密名称指定为数组 |
|
| 启用初始化容器来修改内核设置 |
|
| sysctlImage命令执行 | [] |
| sysctlImage初始化容器注册表 |
|
| sysctlImage初始化容器名称 |
|
| sysctlImage初始化容器标签 |
|
| sysctlImage初始化容器拉取策略 |
|
| 将主机 |
|
| sysctlImage初始化容器CPU /内存资源请求/限制 | {} |
| 指定是否应创建PodSecurityPolicy |
|
使用的--set key=value[,key=value]
参数指定每个参数helm install
。例如,
$ helm install my-release \
--set password=secretpassword \
<helm-repo>/redis
上面的命令将Redis服务器密码设置为secretpassword
。
或者,可以在安装图表时提供指定参数值的YAML文件。例如,
$ helm install my-release -f values.yaml <helm-repo>/redis
提示:您可以使用默认值。
minikube用户注意事项:minikube的当前版本(在撰写本文时为v0.24.1)提供
hostPath
仅可由root写入的持久卷。使用图表默认值会导致Redis Pod在尝试写入/bitnami
目录时导致Pod失败。考虑使用安装Redis--set persistence.enabled=false
。有关更多信息,请参见minikube 1990。
配置和安装详细信息
滚动式VS不可变标签
强烈建议在生产环境中使用不可变标签。这样可以确保如果使用不同的映像更新相同的标记,则部署不会自动更改。
如果存在主容器的新版本,重大更改或严重漏洞,Bitnami将发布新图表以更新其容器。
生产配置
该图表包括一个values-production.yaml
文件,您可以在其中找到一些与常规配置相比面向生产配置的参数values.yaml
。您可以使用此文件而不是默认文件。
- 奴隶数量:
```diff - cluster.slaveCount:2
- cluster.slaveCount:3
- 启用NetworkPolicy:
```diff - networkPolicy.enabled:否
- networkPolicy.enabled:true
- 启动侧面汽车普罗米修斯出口商:
```diff - metrics.enabled:假
- metrics.enabled:true
集群拓扑
默认值:主从
使用安装图表时cluster.enabled=true
,它将部署Redis主StatefulSet(仅允许一个主节点)和Redis从StateStatefulSet。从属设备将是主设备的只读副本。将公开两个服务:
- Redis主服务:指向可以执行读写操作的主服务器
- Redis从站服务:指向从站,其中仅允许读取操作。
万一主节点崩溃,从节点将等待,直到Kubernetes Controller Manager再次重新生成主节点为止。
奴隶主奴
使用cluster.enabled=true
和安装图表时sentinel.enabled=true
,它将部署Redis主服务器StatefulSet(仅允许一个主服务器)和Redis从属StatefulSet。在这种情况下,豆荚将包含一个带有Redis Sentinel的额外容器。此容器将形成Redis Sentinel节点的群集,如果实际的主机失败,它将提升一个新的主机。除此之外,仅公开一项服务:
- Redis服务:公开端口6379(用于Redis只读操作)和端口26379(用于访问Redis Sentinel)。
对于只读操作,请使用端口6379访问服务。对于写操作,必须使用以下命令(使用redis-cli或类似命令)访问Redis Sentinel群集并查询当前的主服务器:
SENTINEL get-master-addr-by-name <name of your MasterSet. Example: mymaster>
该命令将返回当前主机的地址,可以从群集内部对其进行访问。
万一当前的主节点崩溃,Sentinel容器将选择一个新的主节点。
使用密码文件
要将密码文件用于Redis,您需要创建一个包含密码的秘密。
注意:重要的是必须调用带有密码的文件
redis-password
然后使用秘密名称作为参数来部署Helm Chart:
usePassword=true
usePasswordFile=true
existingSecret=redis-password-file
sentinels.enabled=true
metrics.enabled=true
指标
该图表可以选择启动Prometheus的指标导出器。指标终结点(端口9121)在服务中公开。可以使用类似于示例Prometheus scrape配置中所述的方法从群集中擦除指标。如果要从集群外部抓取指标,则可以利用Kubernetes API代理访问端点。
主机内核设置
Redis可能需要对主机内核进行一些更改才能按预期工作,特别是增加somaxconn
价值并禁用透明大页面。
为此,您可以使用sysctlImage
配置值设置特权的initContainer ,例如:
sysctlImage:
enabled: true
mountHostSys: true
command:
- /bin/sh
- -c
- |-
install_packages procps
sysctl -w net.core.somaxconn=10000
echo never > /host-sys/kernel/mm/transparent_hugepage/enabled
另外,对于Kubernetes 1.12+,您可以设置securityContext.sysctls
为主和从Pod配置sysctls 。例:
securityContext:
sysctls:
- name: net.core.somaxconn
value: "10000"
请注意,这不会禁用透明大表。
坚持不懈
默认情况下,统计图在路径上安装持久卷/data
。使用动态卷供应创建卷。如果持久卷声明已存在,请在安装期间指定它。
现有的PersistentVolume索赔
- 创建PersistentVolume
- 创建PersistentVolumeClaim
- 安装图表
$ helm install my-release --set persistence.existingClaim=PVC_NAME <helm-repo>/redis
网络政策
要为Redis启用网络策略,请安装
实现Kubernetes NetworkPolicy规范的网络插件,
并将其设置networkPolicy.enabled
为true
。
对于Kubernetes v1.5和v1.6,还必须通过设置
DefaultDeny名称空间注释来打开NetworkPolicy 。注意:这将对名称空间中的所有Pod强制执行策略:
kubectl annotate namespace default "net.beta.kubernetes.io/network-policy={\"ingress\":{\"isolation\":\"DefaultDeny\"}}"
启用NetworkPolicy后,只有带有生成的客户端标签的Pod
才能连接到Redis。
成功安装后,该标签将显示在输出中。
使用networkPolicy.ingressNSMatchLabels
来自其他命名空间的pod可以连接到Redis。设置networkPolicy.ingressNSPodMatchLabels
为与匹配的命名空间中的pod标签匹配。例如,对于标记为的名称空间redis=external
和该名称空间中的标记为podredis-client=true
的字段,应设置以下字段:
networkPolicy:
enabled: true
ingressNSMatchLabels:
redis: external
ingressNSPodMatchLabels:
redis-client: true
将现有发行版升级到新的主要版本
图表的主要版本更改(例如v1.2.3-> v2.0.0)表明存在
不兼容的重大更改,需要手动操作。
到10.0.0
对于带有的发行版usePassword: true
,该值sentinel.usePassword
控制密码验证是否也适用于前哨端口。true
对于安全配置,默认为,但是可以考虑以下情况而禁用:
-
5.0.1
在引入身份验证功能之前使用redis-sentinel版本。 - 需要更新redis客户端以支持哨兵身份验证的位置。
如果使用主/从拓扑,或者使用usePassword: false
,则无需采取任何措施。
至8.0.18
对于带有metrics.enabled: true
导出器映像默认标签的发行版,现在为v1.x.x
。这引入了许多更改,包括度量标准名称。您现在要使用此仪表板。请参阅redis_exporter github页面以获取更多详细信息。
至7.0.0
此版本导致Redis Master StatefulSet定义发生更改,因此命令头盔升级将无法立即使用。或者,可以执行以下操作之一:
- 推荐:创建Redis Master PVC的克隆(例如,使用类似该项目的项目)。然后重新使用此克隆的PVC启动新版本。
helm install my-release <helm-repo>/redis --set persistence.existingClaim=<NEW PVC>
- 替代方案(不建议这样做,后果自负):
helm delete --purge
不删除分配给Redis Master StatefulSet的PVC。因此,可以执行以下命令来升级发行版
helm delete --purge <RELEASE>
helm install <RELEASE> <helm-repo>/redis
图表的早期版本未在从属服务器中使用持久性,因此此升级会将其添加到它们中。另一个重要的变化是,没有值从主机继承到从机。例如,在6.0.0中slaves.readinessProbe.periodSeconds
,如果为空,则将其设置为master.readinessProbe.periodSeconds
。这种方法缺乏透明度,难以维护。从现在开始,必须像配置主机一样配置所有从机参数。
一些值也发生了变化:
-
master.port
并slave.port
已更改为redisPort
(主机和从机的值相同) -
master.securityContext
并且slave.securityContext
已更改为securityContext
(主机和从机的值相同)
默认情况下,升级不会更改群集拓扑。如果要使用Redis Sentinel,则必须显式设置sentinel.enabled
为true
。
至6.0.0
图表的早期版本使用init容器来更改卷的权限。如果securityContext
模板中的指令还不够用(例如,使用cephFS),则可以这样做。在图表的此新版本中,默认情况下禁用此容器(这不会影响大多数部署)。如果您的安装仍然需要起始容器,执行helm upgrade
与--set volumePermissions.enabled=true
。
至5.0.0
对于包含redis-server
和redis-cli
二进制文件的任何映像,此版本中的默认映像可能会切换出来。如果redis-server
不是默认图像ENTRYPOINT,则master.command
必须指定。
重大变化
-
master.args
并被slave.args
删除。使用master.command
或slave.command
代替以覆盖图像入口点,或master.extraFlags
将其他标志传递给redis-server
。 -
disableCommands
现在被解释为字符串数组,而不是逗号分隔值的字符串。 -
master.persistence.path
现在默认为/data
。
4.0.0
此版本chart
从中删除了spec.selector.matchLabels
不变的标签StatefulSet apps/v1beta2
。它被无意中
添加,导致任何后续升级失败。参见https://github.com/helm/charts/issues/7726。
它还修复了https://github.com/helm/charts/issues/7726,extensions/v1beta1
如果spec.selector
未明确设置,则无法升级部署。
最后,它通过删除可变标签来修复https://github.com/helm/charts/issues/7803,spec.VolumeClaimTemplate.metadata.labels
从而使其可升级。
为了升级,请在升级之前删除Redis StatefulSet:
$ kubectl delete statefulsets.apps --cascade=false my-release-redis-master
并编辑Redis从属(以及指标,如果启用)部署:
kubectl patch deployments my-release-redis-slave --type=json -p='[{"op": "remove", "path": "/spec/selector/matchLabels/chart"}]'
kubectl patch deployments my-release-redis-metrics --type=json -p='[{"op": "remove", "path": "/spec/selector/matchLabels/chart"}]'
显着变化
9.0.0
由于Redis导出器代码的最新更改,因此度量标准导出器已从单独的部署更改为Sidecar容器。检查官方页面以获取更多信息。指标容器映像已从oliver006 / redis_exporter更改为bitnami / redis-exporter(Bitnami维护的Oliver006 / redis_exporter软件包)。
7.0.0
为了在从站发生故障的情况下提高性能,我们向只读从站添加了持久性。这意味着我们从Deployment移到StatefulSets。这不会影响从图表的早期版本进行的升级,因为部署根本不包含任何持久性。
此版本还允许在Redis Pod内部启用Redis Sentinel容器(默认情况下禁用此功能)。万一主服务器崩溃,将选择一个新的Redis节点作为主服务器。为了查询当前的主服务器(不公开Redis主服务器服务),您需要首先查询Sentinel群集。在本节中找到更多信息。