【问题标题】:How to configure side-car of StatefulSet to use persistent-volume of main container?如何配置 StatefulSet 的 side-car 以使用主容器的持久卷?
【发布时间】:2020-05-13 18:49:36
【问题描述】:

我有一个 statefulset,我想为该 statefulset 添加另一个 container-2 并且我希望该 container-2 访问 container-1 的 pv(使用 volumeClaimTemplates: 创建)

我们可以通过什么方式实现上述目标?

【问题讨论】:

  • 你之前有没有尝试过,或者如果可能的话,这只是理论上的问题?

标签: kubernetes google-kubernetes-engine kubernetes-helm kubernetes-pod kubernetes-statefulset


【解决方案1】:

您提出的问题很笼统,没有任何具体要求(仅 GKE 标签)和使用相同 PV 的 2 个容器。

我已经测试了statefulset 的非常简单的示例。 当您使用statefulset 时,您必须记住一些statefulset limitations

在这个测试中,我使用了来自here(使用busybox而不是nginx)和GKE集群v1.14.10-gke.36的Kubernetes文档示例。 请记住,

Statefulset 和服务 yaml 如下:

apiVersion: v1
kind: Service
metadata:
  name: busybox-service
  labels:
    app: busybox
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: busybox
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: busybox
spec:
  serviceName: busybox
  replicas: 1
  selector:
    matchLabels:
      app: busybox
  template:
    metadata:
      labels:
        app: busybox
    spec:
      containers:
        - image: busybox
          args: [/bin/sh, -c, 'sleep 9999' ]
          volumeMounts:
            - mountPath: /test
              name: busybox-volume 
          name: busybox
        - image: busybox
          args: [/bin/sh, -c, 'sleep 9999' ]
          volumeMounts:
            - mountPath: /test
              name: busybox-volume  
          name: busybox-two
  volumeClaimTemplates:
  - metadata:
      name: busybox-volume 
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

输出:

$ kubectl get pods,pv,pvc
NAME            READY   STATUS    RESTARTS   AGE
pod/busybox-0   2/2     Running   0          2m38s
NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                              STORAGECLASS   REASON   AGE
persistentvolume/pvc-3fe7dbe8-96ce-11ea-ae2e-42010a9a012f   1Gi        RWO            Delete           Bound    default/busybox-volume-busybox-0   standard                2m36s
NAME                                             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/busybox-volume-busybox-0   Bound    pvc-3fe7dbe8-96ce-11ea-ae2e-42010a9a012f   1Gi        RWO            standard       2m39s

测试:

$ kubectl exec -ti busybox-0 -c busybox -- /bin/sh
/ # ls
bin   dev   etc   home  proc  root  sys   test  tmp   usr   var
/ # cd test
/test # ls
lost+found
/test # echo "This is test message, container buxybox" >> msg.txt
/test # cat msg.txt
This is test message, container buxybox
/test # exit
$ kubectl exec -ti busybox-0 -c busybox-two -- /bin/sh
/ # ls
bin   dev   etc   home  proc  root  sys   test  tmp   usr   var
/ # cd test/
/test # ls
lost+found  msg.txt
/test # cat msg.txt
This is test message, container buxybox
/test # echo "This is message from container busybox-two" >> msg.txt
/test # exit
$ kubectl exec -ti busybox-0 -c busybox -- /bin/sh
/ # cat /test/msg.txt
This is test message, container buxybox
This is message from container busybox-two

此示例在GKE 上进行了测试,因此您无需像 Cloud Provider 那样创建 PV 和 PVC。 希望这能回答您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-24
    • 2018-09-18
    • 1970-01-01
    • 2017-09-03
    • 2019-08-17
    • 1970-01-01
    • 2023-03-29
    • 2018-02-17
    相关资源
    最近更新 更多