Kubernetes 集群部署 Redis + redis_exporter (單節點)

      網友投稿 1094 2025-04-02

      簡介

      Redis 參數配置

      創建 ConfigMap 存儲 Redis 配置文件

      Kubectl 部署 ConfigMap

      簡介

      Redis 參數配置

      Kubernetes 集群部署 Redis + redis_exporter (單節點)

      創建 ConfigMap 存儲 Redis 配置文件

      Kubectl 部署 ConfigMap

      Redis 數據存儲

      創建 PV

      創建 PVC 綁定存儲空間

      通過 Kubectl 工具部署 PV、PVC

      部署 Redis + redis_exporter

      原理

      redis_exporter

      創建 Sidecar 部署 Redis

      通過 Kubectl 工具部署 Redis

      測試 Redis 是否能夠正常使用

      Redis 是否能夠正常獲取監控數據

      系統環境:

      Redis 版本:5.0.8

      Kubernetes 版本:1.19.2

      操作系統版本:CentOS 7.8

      簡介

      Redis 是我們常用的非關系型數據庫,在項目開發、測試、部署到生成環境時,經常需要部署一套 Redis 來對數據進行緩存。這里介紹下如何在 Kubernetes 環境中部署用于開發、測試的環境的 Redis 數據庫,當然,部署的是單節點模式,并非用于生產環境的主從、哨兵或集群模式。

      Redis 參數配置

      在使用 Kubernetes 部署應用后,一般會習慣與將應用的配置文件外置,用 ConfigMap 存儲,然后掛載進入鏡像內部。這樣,只要修改 ConfigMap 里面的配置,再重啟應用就能很方便就能夠使應用重新加載新的配置,很方便。

      創建 ConfigMap 存儲 Redis 配置文件

      創建 Kubernetes 的 ConfigMap 資源,用于存儲 Redis 的配置文件 redis.conf 內容:

      redis-config.yaml:

      kind: ConfigMap apiVersion: v1 metadata: name: labels: app: redis data: redis.conf: |- dir /data port 6379 bind 0.0.0.0 appendonly yes protected-mode no pidfile /data/redis-6379.pid

      Kubectl 部署 ConfigMap

      通過 kubectl 工具部署 Kubernetes ConfigMap 資源,命令如下:

      $ kubectl create -f redis-config.yaml

      Redis 數據存儲

      Kubernetes 部署的應用一般都是無狀態應用,部署后下次重啟很可能會漂移到不同節點上,所以不能使用節點上的本地存儲,而是網絡存儲對應用數據持久化,PV 和 PVC 是 Kubernetes 用于與儲空關聯的資源,可與不同的存儲驅動建立連接,存儲應用數據,所以接下來我們要創建 Kubernetes PV、PVC 資源。

      創建 PV

      PV 支持多種存儲驅動,不同存儲驅動的 PV 配置方式是不同的,需要根據你的存儲系統來配置 PV 參數。這里用的是 NFS 存儲(共享網絡文件存儲系統),直接使用前面創建的 StorageClass 即可 。

      具體參考:

      Kubernetes 集群部署 NFS-Subdir-External-Provisioner 存儲插件

      創建 PVC 綁定存儲空間

      redis-storage.yaml:

      ## PVC kind: PersistentVolumeClaim apiVersion: v1 metadata: name: redis spec: storageClassName: nfs-storage #---指定StorageClass resources: requests: storage: 5Gi #設置 pvc 存儲資源大小 accessModes: - ReadWriteOnce

      通過 Kubectl 工具部署 PV、PVC

      通過 kubectl 工具部署 Kubernetes PV、PVC 資源,命令如下:

      $ kubectl create -f redis-storage.yaml

      部署 Redis + redis_exporter

      原理

      Prometheus 的數據指標是通過一個公開的 HTTP(S) 數據接口獲取到的,我們不需要單獨安裝監控的 agent,只需要暴露一個 metrics 接口,Prometheus 就會定期去拉取數據;

      對于一些普通的 HTTP 服務,我們完全可以直接重用這個服務,添加一個 /metrics 接口暴露給 Prometheus;而且獲取到的指標數據格式是非常易懂的,不需要太高的學習成本。

      同時現在很多服務從一開始就內置了一個/metrics 接口,比如 Kubernetes 的各個組件、istio 服務網格都直接提供了數據指標接口。有一些服務即使沒有原生集成該接口,也完全可以使用一些 exporter 來獲取到指標數據,比如今天介紹的 redis_exporter,而 exporter 就有點類似于傳統監控服務中的 agent,作為服務一直存在,用來收集目標服務的指標數據然后直接暴露給 Prometheus。

      redis_exporter

      redis 沒有自帶 /metrics 接口供 Prometheus 使用,在這種情況下,我們就需要利用 exporter 服務來為 Prometheus 提供指標數據了。Prometheus 官方為許多應用就提供了對應的 exporter 應用,也有許多第三方的實現,我們可以前往官方網站進行查看:https://prometheus.io/docs/instrumenting/exporters/。

      這里我們選擇官方的 redis_exporter:https://github.com/oliver006/redis_exporter

      創建 Sidecar 部署 Redis

      創建用于 Kubernetes Deployment 來配置部署 Redis 的參數:

      配置 Redis 的鏡像地址、名稱、版本號;

      配置其 CPU 與 Memory 資源的占用;

      配置 Volume 掛載之前創建的 PV、PVC、ConfigMap 資源等等;

      sidecar 掛載 redis_exporter。

      這里通過 redis_exporter 的服務來監控 redis 服務,我們以 sidecar 的形式和主應用部署在同一個 Pod 中,比如我們這里來部署一個 redis,并用 redis_exporter 的方式來采集監控數據供 Prometheus 使用,這里通過 redis_exporter 的服務來監控 redis 服務,我們以 sidecar 的形式和主應用部署在同一個 Pod 中,比如我們這里來部署一個 redis,并用 redis_exporter 的方式來采集監控數據供 Prometheus 使用。

      如下資源清單文件:promethues-redis-deploy.yaml:

      ## Service apiVersion: v1 kind: Service metadata: name: cloud-redis labels: app: redis spec: selector: app: redis ports: - name: redis port: 6379 targetPort: 6379 - name: prom port: 9121 targetPort: 9121 --- ## Deployment apiVersion: apps/v1 kind: Deployment metadata: name: cloud-redis labels: app: redis spec: replicas: 1 selector: matchLabels: app: redis template: metadata: annotations: prometheus.io/scrape: "true" prometheus.io/port: "9121" labels: app: redis spec: initContainers: - name: system-init image: busybox:1.32 imagePullPolicy: IfNotPresent command: - "sh" - "-c" - "echo 2000 > /proc/sys/net/core/somaxconn && echo never > /sys/kernel/mm/transparent_hugepage/enabled" securityContext: privileged: true runAsUser: 0 volumeMounts: - name: sys mountPath: /sys containers: - name: redis-exporter image: oliver006/redis_exporter:latest resources: requests: cpu: 100m memory: 100Mi ports: - containerPort: 9121 - name: redis image: redis:5.0.8 command: - "sh" - "-c" - "redis-server /usr/local/etc/redis/redis.conf" ports: - containerPort: 6379 resources: limits: cpu: 1000m memory: 1024Mi requests: cpu: 1000m memory: 1024Mi volumeMounts: - name: data mountPath: /data - name: config mountPath: /usr/local/etc/redis/redis.conf subPath: redis.conf volumes: - name: data persistentVolumeClaim: claimName: redis - name: config configMap: name: redis-config - name: sys hostPath: path: /sys

      參數簡介:

      ports: 配置鏡像映射端口。

      resources: 配置 CPU、Memory 資源限制,可以通過配置該值來配置 Pod 的 QoS 級別。

      volumeMounts: 存儲卷掛載配置,用于鏡像內存儲的掛載配置,與 volumes 中對于的 name 進行綁定。

      volumes: 存儲卷配置,可配置使用 pvc、hostPath、emptyDir、nfs 等存儲,需要配置 name 值與 -VolumeMounts 進行綁定。

      通過 Kubectl 工具部署 Redis

      通過 kubectl 工具部署 Deployment 來創建 Redis,命令如下:

      # -n:指定部署應用的 Namespace 命名空間 $ kubectl create -f redis-deploy.yaml -n mall

      測試 Redis 是否能夠正常使用

      進入Redis 使用 redis-cli 命令進行連接:

      $ kubectl exec -ti cloud-redis-79b69db657-vjh8r --container redis -n mall -- /bin/bash root@cloud-redis-79b69db657-vjh8r:/data# redis-cli 127.0.0.1:6379> set a "100" OK 127.0.0.1:6379> get a "100" 127.0.0.1:6379>

      可以看到,已經成功連接并進入 Redis 命令行界面,說明數據庫能正常使用。

      注意:

      pod 里有多個容器,需要加上 --container or -c 參數,指定進入的容器。

      Redis 是否能夠正常獲取監控數據

      創建完成后,我們可以看到 redis 的 Pod 里面包含有兩個容器:

      $ kubectl get pods -n mall NAME READY STATUS RESTARTS AGE cloud-redis-79b69db657-vjh8r 2/2 Running 0 5d4h $ kubectl get svc -n mall NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE cloud-redis ClusterIP 10.96.243.202 6379/TCP,9121/TCP 5d4h

      我們可以通過 9121 端口來校驗是否能夠采集到數據:

      $ curl 10.96.243.202:9121/metrics # HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles. # TYPE go_gc_duration_seconds summary go_gc_duration_seconds{quantile="0"} 4.6144e-05 go_gc_duration_seconds{quantile="0.25"} 9.4462e-05 go_gc_duration_seconds{quantile="0.5"} 0.000122258 go_gc_duration_seconds{quantile="0.75"} 0.000168729 go_gc_duration_seconds{quantile="1"} 0.009149671 go_gc_duration_seconds_sum 1.531426455 go_gc_duration_seconds_count 6342 # HELP go_goroutines Number of goroutines that currently exist. # TYPE go_goroutines gauge go_goroutines 10 # HELP go_info Information about the Go environment. # TYPE go_info gauge go_info{version="go1.15"} 1 # HELP go_memstats_alloc_bytes Number of bytes allocated and still in use. # TYPE go_memstats_alloc_bytes gauge go_memstats_alloc_bytes 4.304504e+06 # HELP go_memstats_alloc_bytes_total Total number of bytes allocated, even if freed. # TYPE go_memstats_alloc_bytes_total counter go_memstats_alloc_bytes_total 1.6514546264e+10 # HELP go_memstats_buck_hash_sys_bytes Number of bytes used by the profiling bucket hash table. # TYPE go_memstats_buck_hash_sys_bytes gauge go_memstats_buck_hash_sys_bytes 1.581302e+06 # HELP go_memstats_frees_total Total number of frees. # TYPE go_memstats_frees_total counter go_memstats_frees_total 1.45861236e+08 ......

      源碼地址:

      https://github.com/zuozewei/blog-example/tree/master/Kubernetes/k8s-redis-exporter

      Kubernetes Redis

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:WPS輕松辦公—如何將表格用漸變色填充(wps表格百分比填充漸變色)
      下一篇:Excel中如何對姓名進行按照筆畫排序或字母排序確定編號
      相關文章
      亚洲网站在线免费观看| 久久精品九九亚洲精品| 亚洲xxxxxx| 337p欧洲亚洲大胆艺术| 久热综合在线亚洲精品| 亚洲va久久久噜噜噜久久狠狠 | 亚洲人成电影网站久久| 亚洲宅男精品一区在线观看| 精品亚洲国产成人| 久久亚洲精品国产亚洲老地址 | 亚洲色欲色欲www在线丝| 亚洲精品无码乱码成人| 亚洲国产精品无码专区| 国产AV无码专区亚洲A∨毛片| 亚洲国产精品无码专区影院| 西西人体44rt高清亚洲 | 国产精品亚洲综合一区在线观看 | 在线观看亚洲电影| 亚洲国产精品专区在线观看| 国产国拍精品亚洲AV片| 国产亚洲一区二区手机在线观看| 亚洲av永久无码精品古装片| 亚洲欧洲日韩国产综合在线二区| 亚洲黄网在线观看| 亚洲一卡2卡3卡4卡国产网站| 2020久久精品亚洲热综合一本| 亚洲综合色丁香婷婷六月图片| 亚洲精品无码一区二区 | 怡红院亚洲红怡院在线观看| MM131亚洲国产美女久久| 亚洲精品成人片在线观看精品字幕 | 亚洲校园春色另类激情| 亚洲日韩精品无码专区| 国产综合成人亚洲区| 国产亚洲精品久久久久秋霞 | 国产精品亚洲AV三区| 亚洲精品无码99在线观看| 亚洲熟妇无码八AV在线播放| 亚洲av不卡一区二区三区| 亚洲一区中文字幕在线观看| 苍井空亚洲精品AA片在线播放|