K8S volumn 挂载文件

volumeMounts:
- name: cfg-vol
  mountPath: /etc/grafana/provisioning/datasources
- name: cfg-ini
  mountPath: /usr/share/grafana/conf/sample.ini
  subPath: sample.ini
- name: cfg-temp
  mountPath: /usr/share/grafana/conf/test.json
  subPath: test.json
  volumes:
  - name: cfg-vol
    configMap:
      name: cm-grafana-yaml
  - name: cfg-ini
    configMap:
      name: cm-grafana-ini
  - name: cfg-temp
    configMap:
      name: cm-grafana-temp

可以在一个 configMap 中挂载多个文件,也可以一个文件挂载一个 configMap,

上面的例子是 一个文件挂载一个 configMap

下面举例 一个  configMap 挂载多个文件

需求

将一个configmap 内的两个文件挂载在一个pod的不同目录下

  • /app/conf/grafanaoracle.properties
  • /app/start-timeshift.sh

创建一个configmap

kind: ConfigMap
apiVersion: v1
metadata:
  labels:
    app.kubernetes.io/managed-by: Helm
  name: test-config
data:
  grafanaoracle.properties: |
    name=kevin
    nage=19
  start-timeshift.sh: |
    #!/bin/sh
    cd /app/influxdb-timeshift-proxy
    INFLUXDB=nms-influxdb:8086 /usr/bin/npm run start

 创建一个deploy

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    zcm-app: test-configmap
  name: test-configmap
spec:
  replicas: 1
  selector:
    matchLabels:
      zcm-app: test-configmap
  template:
    metadata:
      labels:
        zcm-app: test-configmap
    spec:
      containers:
      - env:
        - name: CLOUD_APP_NAME
          value: paas_test-configmap
        image: nginx
        imagePullPolicy: IfNotPresent
        name: test-configmap
        ports:
        - containerPort: 9999
          name: http-oracle
          protocol: TCP
        volumeMounts:       # 关键代码 开始
        - mountPath: /app/start-timeshift.sh
          name: properties
          readOnly: true
          subPath: start-timeshift.sh
        - mountPath: /app/conf/grafanaoracle.properties
          name: properties
          readOnly: true
          subPath: grafanaoracle.properties
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      volumes:
      - configMap:
          defaultMode: 420
          items:
          - key: grafanaoracle.properties  # key 和 path 同名即可
            path: grafanaoracle.properties
          - key: start-timeshift.sh
            path: start-timeshift.sh
          name: test-configmap
        name: properties 	# 关键代码 结束

item  部分可以省略

### Namespace 和 Volume 的编程或配置中的使用 Namespace 和 Volume 是分布式文件系统(如 Hadoop Distributed File System, HDFS)以及容器化环境中非常重要的概念。以下是关于它们在编程和配置中的具体应用。 #### 1. **HDFS 中的 Namespace** HDFS 使用 NameNode 来维护整个文件系统的命名空间 (namespace),其中包括目录结构、文件元数据及其对应的块位置信息[^1]。NameNode 将这些信息存储在内存中,因此其堆大小会直接影响可支持的文件数量和总集群存储容量。为了优化资源利用并减少小文件带来的性能瓶颈,可以采取以下措施: - **增大单个文件尺寸**: 鼓励应用程序创建更大的文件而非大量小型文件,这可以通过调整业务逻辑实现。 - **归档工具的应用**: 提供专门用于压缩多个小文件到单一较大文件的功能,从而降低 NameNode 上的压力。 ```bash hdfs dfs -archive -help ``` 此命令展示了如何通过 `hadoop archive` 工具来处理大量的小文件。 #### 2. **Volume 在虚拟化环境下的作用** 在现代云计算架构下,volume 被广泛应用于持久化存储需求场景之中。无论是 Docker 容器还是 Kubernetes Pod,都可以挂载外部卷作为工作负载的数据载体。这种做法不仅提高了灵活性还增强了安全性与隔离度。 例如,在定义一个简单的Docker服务时,我们通常这样指定本地路径映射至容器内部: ```yaml version: '3' services: app: image: myapp:v1 volumes: - ./data:/var/lib/myapp/data ``` 这里 `/./data` 表示宿主机上的某个特定目录被绑定到了容器内的 `/var/lib/myapp/data` 下面去[^2]。 另外值得注意的是某些高级特性比如生命周期管理和资源配置平衡同样适用于讨论范围内[^3]: - 生命周期管理允许管理员设定自动清理策略或者迁移规则; - 对于计算密集型任务来说合理分配CPU时间片显得尤为重要;而对于I/O敏感的工作流则更应该关注磁盘吞吐量等因素的影响。 综上所述,无论是在传统的大规模数据分析平台里头还是新兴微服务体系下面,“名字空间(namespace)”同“体积(volume)”这两个术语都扮演着不可或缺的角色,并且各自有着独特而又紧密相连的意义所在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值