Amazon web services Redis ReJSON部署中的共享PVs不工作 群集信息:

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:

库伯内特斯版本:大调: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:
    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 #