Amazon web services Redis ReJSON部署中的共享PVs不工作 群集信息:
库伯内特斯版本:大调:1,小调:17 正在使用的云:裸金属 安装方法:minikube和kubectl 主机操作系统:Ubuntu 16.04 问题: 我将创建3个副本,并在其中一个pod中创建JSON集。数据只能在该pod内访问。我的问题是如何访问同一个集合并从另一个pod获取它 以下是YAML文件:Amazon web services Redis ReJSON部署中的共享PVs不工作 群集信息:,amazon-web-services,kubernetes,google-cloud-platform,devops,redisjson,Amazon Web Services,Kubernetes,Google Cloud Platform,Devops,Redisjson,库伯内特斯版本:大调:1,小调:17 正在使用的云:裸金属 安装方法:minikube和kubectl 主机操作系统:Ubuntu 16.04 问题: 我将创建3个副本,并在其中一个pod中创建JSON集。数据只能在该pod内访问。我的问题是如何访问同一个集合并从另一个pod获取它 以下是YAML文件: apiVersion: v1 kind: Service metadata: name: rejson spec: ports: - port: 6379 selector:
apiVersion: v1
kind: Service
metadata:
name: rejson
spec:
ports:
- port: 6379
selector:
app: rejson
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: rejson
spec:
replicas: 3
selector:
matchLabels:
app: rejson
strategy:
type: Recreate
template:
metadata:
labels:
app: rejson
spec:
containers:
- image: redislabs/rejson
args: ["--appendonly", "yes", "--save", "900", "1", "--save", "30", "2", "--loadmodule", "/usr/lib/redis/modules/rejson.so"]
name: rejson
ports:
- containerPort: 6379
name: rejson
volumeMounts:
- name: rejson-persistent-storage
mountPath: /data
volumes:
- name: rejson-persistent-storage
persistentVolumeClaim:
claimName: rejson-pv-claim
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rejson-pv-claim
labels:
app: rejson
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
yaml上的问题是使用的访问模式,您应该将访问模式更改为ReadWriteMany
允许的访问模式如下:
ReadWriteOnce–卷可以通过单个节点以读写方式装入
ReadOnlyMany–卷可以由多个节点以只读方式装入
ReadWriteMany–卷可以由多个节点以读写方式装入
查看这个非常基本的示例,了解如何在通过使用PV/PVC部署创建的POD中的容器之间共享文件内容,以及如何在扩展部署时在副本之间共享文件内容
首先创建一个持久卷,请参阅下面带有hostPath配置的yaml示例
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv-1
labels:
pv: my-pv-1
spec:
capacity:
storage: 1Gi
volumeMode: Filesystem
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
hostPath:
path: /var/log/mypath
$ kubectl create -f pv.yaml
persistentvolume/my-pv-1 created
其次,使用下面的yaml示例创建一个持久卷声明
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc-claim-1
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
selector:
matchLabels:
pv: my-pv-1
$ kubectl create -f pvc.yaml
persistentvolumeclaim/my-pvc-claim-1 created
验证pv和pvc状态是否设置为绑定
第三,在部署所需的两个pod中消耗pvc请参阅下面的示例yaml,其中卷安装在多pod部署的两个pod busy1和busy2上,其中写入第一个容器的文件在第二个容器中可读
multi-pod-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: multipod
name: multipod
spec:
replicas: 1
selector:
matchLabels:
app: multipod
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: multipod
spec:
containers:
- command:
- sleep
- "3600"
image: busybox
name: busy1
volumeMounts:
- name: vol
mountPath: /var/log/mypath
- command:
- sleep
- "3600"
image: busybox
name: busy2
volumeMounts:
- name: vol
mountPath: /var/log/mypath
volumes:
- name: vol
persistentVolumeClaim:
claimName: my-pvc-claim-1
$ kubectl create -f multi-pod-deploy.yaml
deployment.apps/multipod created
$ kubectl get all
NAME READY STATUS RESTARTS AGE
pod/multipod-5758475c69-fkl57 2/2 Running 0 36s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 37h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/multipod 1/1 1 1 36s
NAME DESIRED CURRENT READY AGE
replicaset.apps/multipod-5758475c69 1 1 1 36s
现在连接部署中的第二个容器,它应该从第一个容器看到文件,如下所示
$ kubectl exec -it multipod-5758475c69-fkl57 -c busy2 /bin/sh
/ # cd /var/log/mypath/
/var/log/mypath # ls
date file_in_container1.txt
/var/log/mypath # cat file_in_container1.txt
Tue Feb 4 10:25:32 UTC 2020
Tue Feb 4 10:25:34 UTC 2020
现在,当我们扩展此部署并创建更多副本时,因为我使用的是hostPath而不是nfs,所以我必须确保所有副本pod都在同一节点上运行
更改访问模式:从-ReadWriteOnce更改为-ReadWriteMany即使在将访问模式更改为ReadWriteMany之后,pod2中的数据库与我在pod1中给出的数据库不一样,并在pod1中设置了数据库。在您的问题中,您能否更新$kubectl get pv和$kubectl get pvc的输出。还请共享$kubectl Descripte pv和$kubectl Descripte pvc。。你的写作和阅读路径是什么。。。。。mountPath:/data正如我在上面的屏幕截图中看到的那样,您正在使用hostPath作为PV,因此,如果您回到上面的示例,您应该确保所有replicapod都在同一个节点上运行。。因为每个节点上的主机路径不同,并且具有不同的数据。
$ kubectl exec -it multipod-5758475c69-fkl57 -c busy1 /bin/sh
/ # df -kh
Filesystem Size Used Available Use% Mounted on
overlay 38.7G 4.1G 34.6G 11% /
tmpfs 64.0M 0 64.0M 0% /dev
tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
/dev/vda1 38.7G 4.1G 34.6G 11% /dev/termination-log
/dev/vda1 38.7G 4.1G 34.6G 11% /etc/resolv.conf
/dev/vda1 38.7G 4.1G 34.6G 11% /etc/hostname
/dev/vda1 38.7G 4.1G 34.6G 11% /etc/hosts
shm 64.0M 0 64.0M 0% /dev/shm
/dev/vda1 38.7G 4.1G 34.6G 11% /var/log/mypath
tmpfs 7.8G 12.0K 7.8G 0% /var/run/secrets/kubernetes.io/serviceaccount
tmpfs 7.8G 0 7.8G 0% /proc/acpi
tmpfs 64.0M 0 64.0M 0% /proc/kcore
tmpfs 64.0M 0 64.0M 0% /proc/keys
tmpfs 64.0M 0 64.0M 0% /proc/timer_list
tmpfs 64.0M 0 64.0M 0% /proc/timer_stats
tmpfs 64.0M 0 64.0M 0% /proc/sched_debug
tmpfs 7.8G 0 7.8G 0% /proc/scsi
tmpfs 7.8G 0 7.8G 0% /sys/firmware
# cd /var/log/mypath/
/var/log/mypath # date >> file_in_container1.txt
/var/log/mypath # date >> file_in_container1.txt
/var/log/mypath # cat file_in_container1.txt
Tue Feb 4 10:25:32 UTC 2020
Tue Feb 4 10:25:34 UTC 2020
$ kubectl exec -it multipod-5758475c69-fkl57 -c busy2 /bin/sh
/ # cd /var/log/mypath/
/var/log/mypath # ls
date file_in_container1.txt
/var/log/mypath # cat file_in_container1.txt
Tue Feb 4 10:25:32 UTC 2020
Tue Feb 4 10:25:34 UTC 2020
$ kubectl scale deployment --replicas=2 multipod
deployment.apps/multipod scaled
$ kubectl get all -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/multipod-5758475c69-7xl9j 2/2 Running 0 47s 192.168.58.112 k8s-node02-calico <none> <none>
pod/multipod-5758475c69-fkl57 2/2 Running 0 21m 192.168.58.111 k8s-node02-calico <none> <none>
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 38h <none>
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
deployment.apps/multipod 2/2 2 2 21m busy1,busy2 busybox,busybox app=multipod
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
replicaset.apps/multipod-5758475c69 2 2 2 21m busy1,busy2 busybox,busybox app=multipod,pod-template-hash=5758475c69
$ kubectl exec -it multipod-5758475c69-7xl9j /bin/sh
Defaulting container name to busy1.
Use 'kubectl describe pod/multipod-5758475c69-7xl9j -n default' to see all of the containers in this pod.
/ # cd /var/log/mypath/
/var/log/mypath # ls
file_in_container1.txt
/var/log/mypath # cat file_in_container1.txt
Tue Feb 4 10:25:32 UTC 2020
Tue Feb 4 10:25:34 UTC 2020
/var/log/mypath #