1.安裝nfs-subdir-external-provisioner
helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner — version 4.0.17 — namespace nfs — set nfs.server=<你的nas地址> — set nfs.path=<你的nas掛載目錄>
排錯指南:
- **卡在containercreating
kubectl get pod
kubectl describe pod
看見類似於下列之報錯:
Output: mount: /var/lib/kubelet/pods/********/volumes/kubernetes.io~nfs/nfs-subdir-external-provisioner-root: bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.<type> helper program.
解決方法:
- 檢查nas的NFS是否開啟
- 在每台K8S節點上裝 sudo apt install nfs-common
2.裝好就能建立一個pvc.yaml測試
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: redis-claim
namespace: nfs
spec:
accessModes:
- ReadWriteMany
#這裡指定了sc為nfs-client待會會用到
storageClassName: nfs-client
resources:
requests:
storage: 2Gi
#套用上面寫的pvc.yaml
kubectl apply -f pvc.yaml
#查看建立好的pvc
kubectl get pvc -n nfs
3.開始配置redis-cluster
#安裝helm
sudo apt-get install helm
#將來源加入helm
helm repo add bitnami https://charts.bitnami.com/bitnami
helm search repo bitnami
#導出values.yaml進行客製化配置
helm show values bitnami/redis-cluster>./values.yaml
參數說明
password: 可以設置密碼
nodes: 6 可以設置節點數
replicas: 1 可以設置副本數
nodePorts: 可以設置是否暴露端口
persistence: 底下的 storageClass: 需要設置為跟上面對齊的「nfs-client」
4.開始安裝redis-cluster
helm install redis -f values.yaml oci://registry-1.docker.io/bitnamicharts/redis-cluster
如果要免密的話可在values.yaml中設置或帶上參數 — set usePassword=false
#檢查
helm ls -n default
kubectl get pod -n default | grep redis
kubectl get endpoints,services | grep redis
#卸載
helm uninstall redis -n default
查看pod運行狀態為running之後
進入容器的方法有三種:
#通過pod名稱直接進入容器內的redis
kubectl exec - stdin - tty redis-redis-cluster-0 -n default - redis-cli
#進入容器再進入redis的原始方法
kubectl get pod -n default
kubectl exec -it redis-redis-cluster-0 -n default bash
redis-cli -h 127.0.0.1 -p 密碼
#外部進入容器redis的方法
kubectl get svc -n default
#查看到服務的容器內ip之後
redis-cli -h 10.xx.xx.xx -p 6379 -a 密碼
進入redis之後就能下redis-cli的指令了
CLUSTER INFO
CLUSTER NODES
MEMORY INFO
5.安裝redis-insight來輔助使用
apiVersion: apps/v1
kind: Deployment
metadata:
name: redisinsight
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: redisinsight
template:
metadata:
labels:
app: redisinsight
spec:
containers:
- name: redisinsight
image: redislabs/redisinsight:1.12.1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8001
volumeMounts:
- name: db
mountPath: /db
volumes:
- name: db
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: redisinsight-service
namespace: default
spec:
type: NodePort
ports:
- port: 80
targetPort: 8001
nodePort: 31888
selector:
app: redisinsight
#查看服務是否起來
kubectl get pod -n default | grep redis
#查看對外端口是否為31888
kubectl get svc -n default | grep redis
訪問之後就能進行redis-cluster的連結
這裡一樣是使用容器內ip,10.xx.xx.xx的ip來配置
連結成功之後就能測試使用redis並觀察惹