Kubernetes实战:掌握Pod调度与ConfigMap配置管理
·
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调度:你可以通过
nodeSelector、nodeName和affinity等方式控制Pod的运行位置,实现资源的有序分配。 -
ConfigMap:用于将配置数据与容器镜像分离,支持通过环境变量或Volume方式注入到Pod中,提升应用的灵活性和可维护性。
这两个功能是Kubernetes中非常基础且重要的部分,熟练掌握它们将有助于你更好地管理和运维Kubernetes集群。
更多推荐


所有评论(0)