Kubernetes作为容器编排的事实标准,提供了丰富的资源管理机制。本文将重点介绍Pod的调度策略以及如何使用ConfigMap管理应用配置,帮助你更好地掌控集群中的资源分配与配置注入。


一、Pod调度:控制Pod在哪个节点上运行

Kubernetes提供了多种方式控制Pod的调度行为,以下是三种常用方法:

1. 使用nodeSelector按标签调度

首先给节点打上标签:

kubectl label nodes cka-worker2 name=yinling

然后在Pod中指定该标签:

apiVersion: v1
kind: Pod
metadata:
  name: nstest
spec:
  containers:
  - name: nginx
    image: nginx
  nodeSelector:
    name: yinling

2. 使用nodeName直接指定节点

apiVersion: v1
kind: Pod
metadata:
  name: nntest
spec:
  containers:
  - name: nginx
    image: nginx
  nodeName: cka-worker1

3. 使用affinity进行更灵活的调度

节点亲和性允许你定义更复杂的调度规则:

apiVersion: v1
kind: Pod
metadata:
  name: require
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: disktype
            operator: In
            values:
            - ssd
  containers:
  - name: nginx
    image: nginx

二、ConfigMap:管理应用配置

ConfigMap允许你将配置信息与镜像解耦,提高应用的可移植性。

1. 通过YAML创建ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: game-demo
data:
  player_initial_lives: "3"
  ui_properties_file_name: "tomcat"
  game.properties: |
    enemy.types=aliens,monsters
    player.maximum-lives=5

2. 通过命令行创建

kubectl create configmap player \
  --from-literal=username=player \
  --from-literal=age=18

kubectl create configmap indexcontent \
  --from-file=index.html

3. 在Pod中使用ConfigMap

方式一:作为Volume挂载
apiVersion: v1
kind: Pod
metadata:
  name: configmapvolume
spec:
  containers:
  - name: test
    image: httpd
    volumeMounts:
    - name: index
      mountPath: /usr/local/apache2/htdocs
  volumes:
  - name: index
    configMap:
      name: indexcontent
方式二:作为环境变量
apiVersion: v1
kind: Pod
metadata:
  name: mysql
spec:
  containers:
  - name: mysql
    image: mysql
    env:
    - name: MYSQL_ROOT_PASSWORD
      valueFrom:
        configMapKeyRef:
          name: mysqlpw
          key: password

总结

  • Pod调度:你可以通过nodeSelectornodeNameaffinity等方式控制Pod的运行位置,实现资源的有序分配。

  • ConfigMap:用于将配置数据与容器镜像分离,支持通过环境变量或Volume方式注入到Pod中,提升应用的灵活性和可维护性。

这两个功能是Kubernetes中非常基础且重要的部分,熟练掌握它们将有助于你更好地管理和运维Kubernetes集群。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐