簡體   English   中英

如何將 configMap 掛載為有狀態集中的卷掛載

[英]How to mount a configMap as a volume mount in a Stateful Set

根據https://kube.netes.io/docs/reference/generated/kube.netes-api/v1.17/#statefulset-v1- ,我沒有看到將 configMap 作為卷掛載到 statefulset 中的選項apps only PVC 可以與“StatefulSet”相關聯。 但是 PVC 沒有 configMaps 選項。

這是一個最小的例子:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: example
spec:
  selector:
    matchLabels:
      app: example
  serviceName: example
  template:
    metadata:
      labels:
        app: example
    spec:
      containers:
        - name: example
          image: nginx:stable-alpine
          volumeMounts:
            - mountPath: /config
              name: example-config
      volumes:
        - name: example-config
          configMap:
            name: example-configmap
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: example-configmap
data:
  a: "1"
  b: "2"

在容器中,您可以在/config下找到文件ab ,內容分別為12

一些解釋:您不需要 PVC 來將 configmap 作為卷掛載到您的 pod。 PersistentVolumeClaim是永久性驅動器,您可以從中讀取/寫入。 它們的使用示例是數據庫,例如 Postgres。

另一方面, ConfigMap是存儲在 Kubernetes 內部(在其 etcd 存儲中)的只讀鍵值結構,用於存儲應用程序的配置。 它們的值可以單獨或全部掛載為環境變量或文件。

我已經這樣做了。

apiVersion: v1
kind: ConfigMap
metadata:
  name: rabbitmq-configmap
  namespace: default
data:
  enabled_plugins: |
    [rabbitmq_management,rabbitmq_shovel,rabbitmq_shovel_management].
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: rabbitmq
  labels:
    component: rabbitmq
spec:
  serviceName: "rabbitmq"
  replicas: 1
  selector:
    matchLabels:
     component: rabbitmq
  template:
    metadata:
      labels:
        component: rabbitmq
    spec:
      initContainers:
      - name: "rabbitmq-config"
        image: busybox:1.32.0
        volumeMounts:
        - name: rabbitmq-config
          mountPath: /tmp/rabbitmq
        - name: rabbitmq-config-rw
          mountPath: /etc/rabbitmq
        command:
        - sh
        - -c
        - cp /tmp/rabbitmq/rabbitmq.conf /etc/rabbitmq/rabbitmq.conf && echo '' >> /etc/rabbitmq/rabbitmq.conf;
          cp /tmp/rabbitmq/enabled_plugins /etc/rabbitmq/enabled_plugins
      volumes:
      - name: rabbitmq-config
        configMap:
          name: rabbitmq-configmap
          optional: false
          items:
          - key: enabled_plugins
            path: "enabled_plugins"
      - name: rabbitmq-config-rw
        emptyDir: {}
      containers:
        - name: rabbitmq
          image: rabbitmq:3.8.5-management
          env:
          - name: RABBITMQ_DEFAULT_USER
            value: "username"
          - name: RABBITMQ_DEFAULT_PASS
            value: "password"
          - name: RABBITMQ_DEFAULT_VHOST
            value: "vhost"
          ports:
          - containerPort: 15672
            name: ui
          - containerPort: 5672
            name: api
          volumeMounts:
            - name: rabbitmq-data-pvc
              mountPath: /var/lib/rabbitmq/mnesia
  volumeClaimTemplates:
  - metadata:
      name: rabbitmq-data-pvc
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 2Gi
---
apiVersion: v1
kind: Service
metadata:
  name: rabbitmq
spec:
  selector:
    component: rabbitmq
  ports:
    - protocol: TCP
      port: 15672
      targetPort: 15672
      name: ui
    - protocol: TCP
      port: 5672
      targetPort: 5672
      name: api
  type: ClusterIP

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM