将资源对象映射为存储卷

在Kubernetes中有一些资源对象可以以存储卷的形式挂载为容器内的目录或者文件,目前包括ConfigMap、Secret、DownwardAPI、ServiceAccountToken、Project Volume

一、ConfigMap

ConfigMap主要保存应用程序所需要的配置文件,并且通过Volume形式挂载到容器内的文件系统中,供容器内的应用程序读取。

例如,一个包含两个配置文件的ConfigMap资源如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: cm-appconfigfiles
data:
  key-serverxml: |
    <?xml version='1.0' encoding='utf-8'?>
    ......
  key-loggingproperties: "handlers
    ......
    = 4host-manager.org.apache.juli.FileHandler\r\n\r\n"

    在Pod的YAML配置中,可以将ConfigMap设置为一个Volume,然后在容器中通过VolumeMounts将ConfigMap类型的Volume挂载到/config目录下:

apiVersion: v1
kind: Pod
metadata:
  name: cm-test-app
spec:
  containers:
  - name: cm-test-app
    image: kubeguide/tomcat-app:v1
    ports:
    - containerPort: 8080
    volumeMounts:
    - name: serverxml
      mountPath: /configfiles
  volumes:
  - name: serverxml
    configMap:
      name: cm-appconfigfiles
      items:
      - key: key-serverxml
        path: server.xml
      - key: key-loggingproperties
        path: logging.properties

    在Pod成功创建之后,进入容器内部查看在/config目录下有两个文件

 

 ConfigMap中的配置内容如果是UTF-8编码的字符,则将被系统认为是文本文件,如果是其它字符,则系统将以二进制数据格式进行保存(设置binaryData字段)

二、Secret

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque #
data:
  password: dmFsdWUtMg0K #base64编码
  username: dmFsdWUtMg0K #base64编码
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mycontainer
    image: redis
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"
  volumes:
  - name: foo
    secret:
      secretName: mysecret

 

三、Downward API

 通过Downward API可以将Pod或Container的某些元数据信息(例如Pod名称、Pod IP、Node IP、Label、 Annotation、容器资源限制等)以文件形式挂载到容器内,供容器内部使用。下面是将Pod的标签通过DownWard API挂载为容器内文件:

apiVersion: v1
kind: Pod
metadata:
  name: downward-api-test
  labels:
    zone: us-est-coast
    cluster: test-cluster
    rack: rack-001
  annotations:
    build: two
    builder: chugao
spec:
  containers:
  - name: client-container
    image: busybox
    command: ["sh", "-c"]
    args:
    - while true; do
      if [[ -e /etc/podinfo/labels ]]; then
        echo -en '\n\n'; cat /etc/podinfo/labels; fi;
      if [[ -e /etc/podinfo/annotations ]]; then
        echo -en '\n\n'; cat /etc/podinfo/annotations; fi;
        sleep 5;
      done;
    volumeMounts:
      - name: podinfo
        mountPath: /etc/podinfo
  volumes:
    - name: podinfo
      downwardAPI:
        items:
        - path: "labels"
          fieldRef:
            fieldPath: metadata.labels
        - path: "annotations"
          fieldRef:
            fieldPath: metadata.annotations

 

 

 

四、Projected Volume和Service Account Token

     Projected Volume是一种特殊的卷类类型,用于将(ConfigMap、Secret、Downward API)一个或多个资源一次性挂载到容器内的同一个目录下。

     如果Pod希望同时挂载ConfigMap、Secret、Downward API,则需要设置不同类型的Volume都挂载为容器内的目录或文件。如果应用程序希望将配置文件和秘钥文件放在容器内的同一个目录下,则通过多个Volume就无法实现。为了支持这种需求,Kubernetes引入了一种新的Projected Volume存储卷类型,用于将多种配置类型数据通过单个Volume挂载到容器内的单个目录下:

   Projected Volume的一些常见的应用场景:

  1. 通过Pod的标签生成的不同的配置文件,需要使用配置文件,以及用户名和密码,这时需要使用3种资源:ConfigMap、Secret、Downward API
  2. 在自动化运维应用中使用配置文件和账号信息时,需要使用ConfigMap、Secret
  3. 在配置文件内使用Pod名称(metadata.name)记录日志时,需要使用ConfigMap、Downward API
  4. 如果某个Secret对Pod所在命名空间(metadata.namespace)进行加密时,需要使用Secret、Downward API

Projected Volume在Pod的Volume定义中类型projected,通过srouces字段设置一个或多个ConfigMap、Sectet、Downward API、ServiceAccountToken资源。各种类型的资源配置内容与单独设置Volume时基本一样,但有两点不同:

  • 对于Secret类型从Volume字段为"secretName"在projected.source.secret中被改为”name"
  • Volume的挂载模式为“defaultMode”仅可以设置在projected级别,对于各子项,仍然可以设置各自的挂载模式,使用字段名为“mode”
    #
    #使用Projected Volume挂载COnfigMap、Sectet、Downward API 三种资源
    #
    apiVersion: v1
    kind: Pod
    metadata:
      name: volume-test
    spec:
      containers:
      - name: container-test
        image: busybox
        volumeMounts:
        - name: all-in-one
          mountPath: "/projected-volume"
          readOnly: true
      volumes:
      - name: all-in-one
        projected:
          sources:
          - secret:
              name: mysecret
              items:
                - key: username
                  path: my-group/my-username
          - downwardAPI:
              items:
                - path: "labels"
                  fieldRef:
                    fieldPath: metadata.labels
                - path: "cpu_limit"
                  resourceFieldRef:
                    containerName: container-test
                    resource: limits.cpu  
          - configMap:
              name: muconfigmap
              items:
                - key: config
                  path: my-group/my-configmap

  使用projected Volume挂载两个Secret资源,其中一个设置为非默认挂载

#
#使用Projected Volume挂载ServiceAccountToken
#
apiVersion: v1
kind: Pod
metadate:
  name: sa-token-test
spec:
  containers:
  - name: container-test
    image: busybox
    volumemounts:
    - name: token-vol
      mountPath: "/service-account"
      readOnly: true
  volumes:
  - name: token-val
    projected:
      sources:
      - serviceAccountToken:
        audience: api
        expirationsSeconds: 3600
        path: token

 

#
#使用projected挂载两个secret并同一个设置挂载模式
#
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
  - name: container-test
    image: busybox
    volumeMounts:
    - name: all-in-one
      mountPath: "/projected-volume"
      readOnly: true
  volumes:
  - name: all-in-one
    projected:
      sources:
      - secret:
          name: mysecret
          items:
            - key: username
              path: my-group/my-username
      - secret:
          name: mysecret2
          items:
            - key: passwoed
              path: my-group/my-password
              mode: 0511                       #设置非默认挂载

对于ServiceAccountToken类型为Volume,可以设置Token的audience、expirationsSeconds、path等属性信息

  • audience: 预期受众的名称。Token的接收者必须使用其中的audience标识符来标识自己,否则应该拒绝该Token。该字段是可选的,默认为API Server的标识符“api”
  • expirationsSeconds: Service Account Token的过期时间,默认为1h至少为10min。管理员可以通过kube-apiver的启动参数--service-account-max-token-expiration限制token的最长生效
  • path:挂载目录下的相对路径
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Kubernetes 是一个开源的容器编排工具,可以帮助用户自动化部署、扩展和管理容器化应用程序。在 Kubernetes 中,资源对象是指用于描述和管理集群中各种资源的抽象概念。 以下是 Kubernetes 中常见的资源对象类型: 1. Pod(容器组):Pod 是 Kubernetes 中最小的可部署对象,通常包含一个或多个容器,共享同一个网络命名空间和存储卷。 2. ReplicaSet(副本集):ReplicaSet 用于管理一组相同的 Pod 副本,保证在集群中的任何时间都有指定数量的副本运行。 3. Deployment(部署):Deployment 是一种管理 Pod 和 ReplicaSet 的高级对象,用于实现容器化应用程序的滚动更新和回滚。 4. Service(服务):Service 提供了一种逻辑方式来访问一组 Pod,通常用于将网络流量路由到后端的 Pod。 5. ConfigMap(配置映射):ConfigMap 用于存储集群中的配置数据,例如应用程序的环境变量和配置文件。 6. Secret(密钥):Secret 用于存储敏感信息,例如密码和证书,以安全地在集群中传输和存储。 7. PersistentVolume(持久卷):PersistentVolume 用于将持久化存储抽象出来,使其在不同的存储系统之间具有可移植性。 8. StatefulSet(有状态集):StatefulSet 用于管理具有唯一标识和稳定网络标识符的 Pod,通常用于运行需要持久化存储和有状态服务的应用程序。 这些资源对象是 Kubernetes 集群中的基本构建块,使用它们可以轻松地管理和扩展容器化应用程序。 ### 回答2: Kubernetes中的资源对象是指在Kubernetes集群中由用户定义和管理的各种资源类型,用于表示和控制应用程序、服务和基础设施等方面的相关资源。 Kubernetes提供了多种资源对象,包括但不限于以下几种: 1. Pod(容器组):Pod是Kubernetes中最小的可调度和部署单元,可以包含一个或多个容器。Pod通常将相关的容器组合在一起,共享网络和存储,并提供容器之间的通信和数据共享。 2. ReplicaSet(副本集):ReplicaSet用于定义和管理Pod的集合。它确保指定数量的Pod副本运行,并根据需要自动进行缩放,以实现应用程序的高可用性和负载均衡。 3. Deployment(部署):Deployment是ReplicaSet的高级抽象,用于实现无缝的应用程序部署和升级。它可以定义应用程序的副本数、升级策略和滚动升级等参数,并确保在应用程序版本变更时无需停机。 4. Service(服务):Service定义了一组Pod的访问方式和网络连接,提供了一个稳定的地址和端口,使得其他Pod或外部用户能够与应用程序进行通信。 除了上述常用资源对象,还有诸如ConfigMap(配置映射)、Secret(密钥)、Namespace(命名空间)等资源对象,它们用于管理和传递应用程序的配置信息、敏感数据和资源隔离等方面的需求。 通过使用这些资源对象,用户可以方便地定义和管理各种不同类型的应用程序和服务,并通过Kubernetes提供的强大的调度和管理功能,实现高可用性、弹性伸缩和自动化的应用程序部署和运维。 ### 回答3: Kubernetes 中的资源对象是指在集群中定义和管理的可部署的计算资源。它们用来描述和控制应用程序的部署、扩展和管理。Kubernetes 中有多种资源对象可供使用,如下所示: 1. Pod: Pod 是 Kubernetes 中最小的可部署对象单元。它由一个或多个容器组成,并共享相同的网络和存储资源。Pod 可以用来运行一个或多个容器应用程序。 2. Deployment: Deployment 是用来管理 Pod 的资源对象。它定义了一组 Pod 的副本,并负责监控和维护这些 Pod 的状态。通过 Deployment,可以方便地进行应用的部署、升级和回滚操作。 3. Service: Service 是用来暴露 Pod 的网络服务的资源对象。它为一组 Pod 提供了一个统一的访问入口,并负责将请求按照相应的负载均衡算法分发给后端的 Pod。 4. Volume: Volume 是用来管理 Pod 中的存储资源资源对象。它可以将外部存储系统挂载到 Pod 中,以便应用程序可以进行持久化数据的存储。 此外,Kubernetes 还提供了许多其他类型的资源对象,如 StatefulSet、DaemonSet、Job、CronJob 等,用于满足不同应用程序的需求。这些资源对象可以通过 YAML 或 JSON 文件进行定义和配置,并通过 Kubernetes API 进行管理和操作。 通过使用 Kubernetes 的资源对象,我们可以更方便地管理和部署应用程序,实现高可用性和弹性的系统架构,提高应用程序的可靠性和可扩展性。它为开发人员和运维人员提供了一种简单而强大的方式来管理和扩展应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值