Running Pods on Only Some Nodes
If you specify a
.spec.template.spec.nodeSelector, then the DaemonSet controller will create Pods on nodes which match that node selector. Likewise if you specify a.spec.template.spec.affinity, then DaemonSet controller will create Pods on nodes which match that node affinity. If you do not specify either, then the DaemonSet controller will create Pods on all nodes.
场景:
内网K8S集群,应开发需求,每个应用环境,需要独立的consul,并且应用连接到node上consul-client。但是consul-client并不是所有node都要有,只是存在被选中的node上。
从github consul-helm-chart,修改helm value.yaml 文件,(良好的习惯,将helm的value.yaml上传到仓库)
- 修改image 版本对应版本,以及storage class 等等
- 另一处,修改client的nodeSelector(只在特定的节点,启动consul client)
1
2
3
4
5
6
7322 # nodeSelector labels for client pod assignment, formatted as a multi-line string.
323 # ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector
324 # Example:
325 # nodeSelector: |
326 # beta.kubernetes.io/arch: amd64
327 nodeSelector: |
328 project: dop-test
下一步,我们需要让节点自动注册到自己node上的consul client上。需要pods能够获取到本机consul client 的IP。于是通过valueFrom🤓.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20apiVersion: v1
kind: Pod
metadata:
name: consul-example
spec:
containers:
- name: example
image: "consul:latest"
env:
- name: HOST_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
command:
- "/bin/sh"
- "-ec"
- |
export CONSUL_HTTP_ADDR="${HOST_IP}:8500"
consul kv put hello world
restartPolicy: Never最后便是应用程序,通过consul的headless svc 链接,注册进来啦。
