深入掌握k8s核心概念--Pod(二)

Kubernetes 中 Pod 的配置管理(ConfigMap)、调度策略、回滚与扩缩容详解

一、Pod 配置管理:ConfigMap

ConfigMap 是 Kubernetes 中一种用于存储应用配置数据的资源对象,旨在将应用的配置细节从容器镜像中解耦出来,

以便在不修改镜像的前提下,能够灵活地管理和更新应用配置。

ConfigMap 主要包含两种数据类型:键值对(key-value pairs)和配置文件内容。

具备以下主要特性:

  1. 数据隔离:ConfigMap 将应用配置与镜像分离,使配置更改无需重新构建镜像,提升了灵活性和可维护性。

  2. 类型多样:支持键值对形式的数据存储,也可以存储完整的配置文件内容,满足不同应用场景的需求。

  3. 数据注入:ConfigMap 数据可以通过环境变量、命令行参数或卷挂载等方式注入到 Pod 中,供容器内应用读取。

  4. 更新热加载:当 ConfigMap 更新后,若 Pod 使用了 ConfigMap 卷,Kubernetes 可以触发 Pod 内部的配置自动更新(需应用支持)。

创建 ConfigMap 示例

apiVersion: v1
kind: ConfigMap
metadata:
  name: example-configmap
data:
  app.properties: |-
    key1=value1
    key2=value2
  database-config.yaml: |-
    username: dbuser
    password: dbpassword

上述 YAML 描述了一个名为 example-configmap 的 ConfigMap,其中包含两个配置文件内容:app.propertiesdatabase-config.yaml

使用 ConfigMap 的 Pod 示例

apiVersion: v1
kind: Pod
metadata:
  name: configmap-pod
spec:
  containers:
  - name: app-container
    image: your-app-image
    volumeMounts:
    - name: config-volume
      mountPath: /etc/config
    envFrom:
    - configMapRef:
        name: example-configmap
  volumes:
  - name: config-volume
    configMap:
      name: example-configmap

在这个例子中,我们创建了一个 Pod 并挂载了 example-configmap ConfigMap 到容器内的 /etc/config 目录,同时还将 ConfigMap 中的数据注入到容器环境变量,供应用直接读取。

使用ConfigMap的限制条件如下。

◎ ConfigMap必须在Pod之前创建。

◎ ConfigMap受Namespace限制,只有处于相同Namespace中的Pod才可以引用它。

◎ ConfigMap中的配额管理还未能实现。

◎ kubelet只支持可以被API Server管理的Pod使用ConfigMap。kubelet在本Node上通过 --manifest-url或–config自动创建的静态Pod将无法引用ConfigMap。

◎ 在Pod对ConfigMap进行挂载(volumeMount)操作时,在容器内部只能挂载为“目录”,无法挂载为“文件”。在挂载到容器内部后,在目录下将包含ConfigMap定义的每个item,如果在该目录下原来还有其他文件,则容器内的该目录将被挂载的ConfigMap覆盖。如果应用程序需要保留原来的其他文件,则需要进行额外的处理。可以将ConfigMap挂载到容器内部的临时目录,再通过启动脚本将配置文件复制或者链接到(cp或link命令)应用所用的实际配置目录下。

二、玩转 Pod 调度:Kubernetes 高级调度策略大揭秘(带示例)

Kubernetes 调度策略丰富多样,主要特性包括:

  1. 节点亲和性/反亲和性:通过节点标签选择特定节点部署 Pod,或者避免在某些节点上部署,如 nodeAffinity 和 nodeAntiAffinity。

  2. 区域亲和性/反亲和性:根据区域、可用区等高级地理属性控制 Pod 分布,确保应用高可用或资源优化。

  3. 资源约束:根据节点的 CPU、内存、磁盘、GPU 等资源条件进行调度,如 resources.requests 和 resources.limits。

  4. 污点容忍度:允许 Pod 允许或容忍节点上的污点(Taint),实现精细化调度。

  • NodeSelector: 根据节点标签和字段进行选择,将 Pod 限制在具有特定特性的节点上运行。

    示例:假设您有一个 Pod 需要访问专用的 GPU 资源。您可以使用 NodeSelector 将 Pod 调度到具有 gpu=true 标签的节点上。

    apiVersion: v1
    kind: Pod
    metadata:
      name: gpu-pod
    spec:
      nodeSelector:
        gpu: "true"
      containers:
        - name: my-app
          image: my-app-image
          # ...其他容器配置
    
  • Pod Affinity & Anti-Affinity: 基于 Pod 的亲和性和反亲和性进行选择,控制 Pod 之间的距离,提升应用程序性能。

    示例:假设您有一个 Web 应用程序和一个数据库 Pod。您可以使用 Pod Aff

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

达分奇先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值