繁体   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