網站建設方案報價百度seo公司報價
1、概述
我們知道在 Kubernetes 容器編排平臺中, 我們可以非常方便的進行應用的擴容縮, 同時也能非常方便的進行業(yè)務的迭代,本章主要講解在Kubernetes1.25搭建Redis單實例和Redis集群主從同步的環(huán)境流程步驟, 如果是高頻訪問重要的線上業(yè)務我們最好是部署在物理機器上;
2、Kubernetes環(huán)境說明
# 集群信息
[root@k8s-master ~]# kubectl cluster-info
Kubernetes control plane is running at https://10.211.55.11:6443
CoreDNS is running at https://10.211.55.11:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxyTo further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
[root@k8s-master ~]## 集群節(jié)點
[root@k8s-master ~]# kubectl get nodes -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8s-master Ready control-plane 18h v1.25.0 10.211.55.11 <none> CentOS Stream 8 4.18.0-408.el8.x86_64 docker://20.10.22
k8s-node1 Ready <none> 18h v1.25.0 10.211.55.12 <none> CentOS Stream 8 4.18.0-408.el8.x86_64 docker://20.10.22
k8s-node2 Ready <none> 18h v1.25.0 10.211.55.13 <none> CentOS Stream 8 4.18.0-408.el8.x86_64 docker://20.10.22# 動態(tài)卷
[root@k8s-master ~]# kubectl get sc -n dev
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
nfs-storage storage-nfs Delete Immediate false 6s
3、通過configMap傳入配置文件、動態(tài)存儲卷存儲持久化redis數據、hostPath存儲日志
知識儲備:
configMap不熟悉的朋友請看這篇文章https://blog.csdn.net/u011837804/article/details/128590751
動態(tài)存儲卷不熟悉的朋友請看這篇文章https://blog.csdn.net/u011837804/article/details/128692744
hostPath不熟悉的朋友請看這篇文章https://blog.csdn.net/u011837804/article/details/128588534
3.1、創(chuàng)建configMap
3.1.1、redis配置文件
Redis配置文件/root/redis/redis.conf
# 綁定任意接口、服務端口、后臺運行。
bind 0.0.0.0
port 6379
# 非常大的巨坑在使用k8s中的container作為redis容器時其daemonize no一定要設置為no
daemonize no
supervised no# redis服務pid進程文件名
pidfile "/var/run/redis.pid"# 關閉保護模式,并配置使用密碼訪問
protected-mode no
requirepass 123456# 數據文件保存路徑,rdb/AOF文件也保存在這里
dir "/data"# 日志文件記錄文件(notice / verbose)
# /var/log/redis/redis.log
loglevel verbose
logfile "/logs/redis.log"# 最大客戶端連接數
maxclients 10000# 客戶端連接空閑多久后斷開連接,單位秒,0表示禁用
timeout 300
tcp-keepalive 60 # 內存初始化
maxmemory 1gb
maxmemory-policy volatile-lru
slowlog-max-len 128
lua-time-limit 5000# Redis 數據持久化(rdb/aof)配置
# 數據自動保存腳本條件例如300s中有10key發(fā)生變化
save 300 100
save 60 10000
# RDB 文件名
dbfilename "dump.rdb"
# 對RDB文件進行壓縮,建議以(磁盤)空間換(CPU)時間。
rdbcompression yes
# 版本5的RDB有一個CRC64算法的校驗和放在了文件的最后。這將使文件格式更加可靠。
rdbchecksum yes
# RDB自動觸發(fā)策略是否啟用,默認為yes
rdb-save-incremental-fsync yes# AOF開啟
appendonly yes
# AOF文件名
appendfilename "appendonly.aof"
# 可選值 always, everysec,no,建議設置為everysec
appendfsync everysec# Redis風險命令重命名
# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
rename-command FLUSHDB b840fc02d524045429941cc15f59e41cb7be6c53
rename-command FLUSHALL b840fc02d524045429941cc15f59e41cb7be6c54
rename-command EVAL b840fc02d524045429941cc15f59e41cb7be6c55
rename-command DEBUG b840fc02d524045429941cc15f59e41cb7be6c56
# rename-command SHUTDOWN SHUTDOWN
3.1.2、創(chuàng)建confMap
# 查看當前已有cm
[root@k8s-master redis]# kubectl get cm -n dev
NAME DATA AGE
kube-root-ca.crt 1 76m
[root@k8s-master redis]#
[root@k8s-master redis]#
# 創(chuàng)建cm 名稱為 redis-single 后面要用到
[root@k8s-master redis]# kubectl create configmap -n dev redis-single --from-file=/root/redis/redis.conf
configmap/redis-single created
[root@k8s-master redis]#
# 已創(chuàng)建
[root@k8s-master redis]# kubectl get cm -n dev
NAME DATA AGE
kube-root-ca.crt 1 76m
redis-single 1 5s
[root@k8s-master redis]## 查看cm內容
[root@k8s-master redis]# kubectl get cm -n dev -o json
3.2、創(chuàng)建動態(tài)存儲卷
由于創(chuàng)建復雜就不在此重新貼過程,按照https://blog.csdn.net/u011837804/article/details/128692744 此文章操作即可,結果如下
# 查看已創(chuàng)建sc 注意:nfs-storage 下述要用到
[root@k8s-master ~]# kubectl get sc -n dev
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
nfs-storage storage-nfs Delete Immediate false 3h3m
3.3、開始部署單實例redis
3.3.1、配置文件redis-single-cm.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:name: redis-cmnamespace: dev
spec:serviceName: redis-single-cm-servicereplicas: 1selector:matchLabels:app: redis-cmtemplate:metadata:labels:app: redis-cmspec:containers:- name: redisimage: redis:7.0imagePullPolicy: IfNotPresentports:- containerPort: 6379name: servercommand: [ "redis-server", "/conf/redis.conf"]volumeMounts:# 從configmap獲取的配置文件,掛載到指定文件中- name: confmountPath: /conf/redis.confsubPath: redis.conf# 動態(tài)存儲卷存儲持久化redis數據 - name: datamountPath: /data- name: logsmountPath: /logs# 時區(qū)設置- name: timezonemountPath: /etc/localtime volumes:- name: conf# 配置文件采用configMapconfigMap:name: redis-singledefaultMode: 0755# 日志采用hostPath卷- name: logshostPath:type: DirectoryOrCreate path: /root/redis/logs# 時區(qū)定義- name: timezone hostPath:path: /usr/share/zoneinfo/Asia/Shanghai# 存儲卷認領 volumeClaimTemplates:- metadata:name: dataspec:accessModes: [ "ReadWriteOnce" ]# 上述創(chuàng)建的sc名稱storageClassName: "nfs-storage"resources:requests:storage: 50Mi
---
apiVersion: v1
kind: Service
metadata:name: redis-single-cm-servicenamespace: dev
spec:type: ClusterIPports:- port: 6379targetPort: 6379name: serverselector:app: redis-cm
3.3.2、執(zhí)行并查看效果
# 執(zhí)行redis-single-cm.yaml
[root@k8s-master ~]# kubectl apply -f redis-single-cm.yaml
statefulset.apps/redis-cm created
service/redis-single-cm-service created
[root@k8s-master ~]## 查看 pods已創(chuàng)建成功,說明我們的配置無任何問題
[root@k8s-master ~]# kubectl get pods -n dev
NAME READY STATUS RESTARTS AGE
nfs-client-provisioner-79599dbcfb-gpq78 1/1 Running 0 123m
redis-cm-0 1/1 Running 0 6s
[root@k8s-master ~]## pvc已自動創(chuàng)建
[root@k8s-master ~]# kubectl get pvc -n dev
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
data-redis-cm-0 Bound pvc-32d16583-cdd7-4ab7-a745-432ff43c146f 50Mi RWO nfs-storage 116s
[root@k8s-master ~]## 查看nfs共享文件,確認redis持久化數據已存儲
[root@k8s-master nfs]# pwd
/root/data/nfs
[root@k8s-master nfs]#
[root@k8s-master nfs]# ls
dev-data-redis-cm-0-pvc-32d16583-cdd7-4ab7-a745-432ff43c146f
[root@k8s-master nfs]#
[root@k8s-master nfs]# cd dev-data-redis-cm-0-pvc-32d16583-cdd7-4ab7-a745-432ff43c146f/
[root@k8s-master dev-data-redis-cm-0-pvc-32d16583-cdd7-4ab7-a745-432ff43c146f]#
[root@k8s-master dev-data-redis-cm-0-pvc-32d16583-cdd7-4ab7-a745-432ff43c146f]# ls
appendonlydir dump.rdb
[root@k8s-master dev-data-redis-cm-0-pvc-32d16583-cdd7-4ab7-a745-432ff43c146f]#