如何定义一个DaemonSet来创建略有不同的pods?
How to define a DaemonSet to create slightly different pods?
如何定义 DaemonSet 的单个定义以创建与它略有不同的 pods?
我所说的不同 pods 的意思是 pods 从不同的命令创建。
我目前制作了两个不同的 DaemonSet 对象来创建两种不同的 pods.
让我告诉你详情。
我一直在修改kube-flannel.yml,尤其是DaemonSet的定义。
我想将“--iface=”添加到 flanneld [“/opt/bin/flanneld”、“--ip-masq”、“--kube-subnet-mgr”]
我想根据节点标签使用两个不同的以太网接口。
我有三种不同类型的节点:
1)一个master节点有两个以太网接口:eth0用于内网,eth3用于外网
2) 从节点有一个以太网接口: eth0 用于内部网络
3) 一个新添加的节点,带有一个以太网接口:p2p1 用于内部网络
当我有 1) 和 2) 时,我可以使用以下命令:
[“/opt/bin/flanneld”、“--ip-masq”、“--kube-subnet-mgr”、“--iface=--eth0”]
我必须添加 --iface 选项,否则主节点上的 flanneld 会自动检测 eth3 而不是 eth0,
这就是我手动添加 iface 选项的原因。
现在我有 3 个),
我必须使用不同的命令创建两个 DaemonSet 定义:
[ "/opt/bin/flanneld", "--ip-masq", "--kube-subnet-mgr", "--iface=--eth0"] 对于 1) 和 2)
, [ "/opt/bin/flanneld", "--ip-masq", "--kube-subnet-mgr", "--iface=--p2p1"] for 3)
标签选择器用于告知节点使用哪个 DaemonSet。
完整的定义附在最后。
是否有更优雅的方法来创建与单个 DaemonSet 定义略有不同的 pods?
最好只有一个带有占位符的定义,该占位符可以由特定标签的值替换。
否则我可以通过以不同的方式设置法兰绒来做到这一点?
如果我们能给 --iface 选项一个以太网接口列表就好了,但是我的同事发现只能给一个 interface/ip 给 --iface 选项。
谢谢。
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: flannel
---
kind: ConfigMap
apiVersion: v1
metadata:
name: kube-flannel-cfg
labels:
tier: node
app: flannel
data:
cni-conf.json: |
{
"name": "cbr0",
"type": "flannel",
"delegate": {
"isDefaultGateway": true
}
}
net-conf.json: |
{
"Network": "10.244.0.0/16",
"Backend": {
"Type": "vxlan"
}
}
---
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: kube-flannel-ds
labels:
tier: node
app: flannel
iface: eth0
spec:
template:
metadata:
labels:
tier: node
app: flannel
iface: eth0
spec:
hostNetwork: true
nodeSelector:
beta.kubernetes.io/arch: amd64
iface: eth0
serviceAccountName: flannel
containers:
- name: kube-flannel
image: quay.io/coreos/flannel:v0.7.0-amd64
command: [ "/opt/bin/flanneld", "--ip-masq", "--kube-subnet-mgr", "--iface=eth0" ]
securityContext:
privileged: true
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
volumeMounts:
- name: run
mountPath: /run
- name: flannel-cfg
mountPath: /etc/kube-flannel/
- name: install-cni
image: quay.io/coreos/flannel:v0.7.0-amd64
command: [ "/bin/sh", "-c", "set -e -x; cp -f /etc/kube-flannel/cni-conf.json /etc/cni/net.d/10-flannel.conf; while true; do sleep 3600; done" ]
volumeMounts:
- name: cni
mountPath: /etc/cni/net.d
- name: flannel-cfg
mountPath: /etc/kube-flannel/
volumes:
- name: run
hostPath:
path: /run
- name: cni
hostPath:
path: /etc/cni/net.d
- name: flannel-cfg
configMap:
name: kube-flannel-cfg
---
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: kube-gpu-flannel-ds
labels:
tier: node
app: flannel
iface: p2p1
spec:
template:
metadata:
labels:
tier: node
app: flannel
iface: p2p1
spec:
hostNetwork: true
nodeSelector:
beta.kubernetes.io/arch: amd64
iface: p2p1
serviceAccountName: flannel
containers:
- name: kube-flannel
image: quay.io/coreos/flannel:v0.7.0-amd64
command: [ "/opt/bin/flanneld", "--ip-masq", "--kube-subnet-mgr", "--iface=p2p1" ]
securityContext:
privileged: true
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
volumeMounts:
- name: run
mountPath: /run
- name: flannel-cfg
mountPath: /etc/kube-flannel/
- name: install-cni
image: quay.io/coreos/flannel:v0.7.0-amd64
command: [ "/bin/sh", "-c", "set -e -x; cp -f /etc/kube-flannel/cni-conf.json /etc/cni/net.d/10-flannel.conf; while true; do sleep 3600; done" ]
volumeMounts:
- name: cni
mountPath: /etc/cni/net.d
- name: flannel-cfg
mountPath: /etc/kube-flannel/
volumes:
- name: run
hostPath:
path: /run
- name: cni
hostPath:
path: /etc/cni/net.d
- name: flannel-cfg
configMap:
name: kube-flannel-cfg
如果您需要有关容器命令的更高级逻辑,我可以建议 2 个选项。
基于 quay.io/coreos/flannel:v0.7.0-amd64
构建自定义 docker 图像并添加执行逻辑的脚本(例如,基于 ifconfig | grep p2p1
的输出)。使用脚本作为容器命令(在 Dockerfile 或 POD 规范中指定)。
也可以将相同的脚本放入 ConfigMap 并安装到容器中,就像您已经使用 flannel 配置一样。然后你可以更改容器的 command
来执行这个脚本。示例命令:["/bin/sh", "/etc/kube-flannel/entrypoint.sh"]
在我看来,选项 2 似乎更简单、更灵活。
如何定义 DaemonSet 的单个定义以创建与它略有不同的 pods? 我所说的不同 pods 的意思是 pods 从不同的命令创建。 我目前制作了两个不同的 DaemonSet 对象来创建两种不同的 pods.
让我告诉你详情。
我一直在修改kube-flannel.yml,尤其是DaemonSet的定义。 我想将“--iface=”添加到 flanneld [“/opt/bin/flanneld”、“--ip-masq”、“--kube-subnet-mgr”] 我想根据节点标签使用两个不同的以太网接口。
我有三种不同类型的节点: 1)一个master节点有两个以太网接口:eth0用于内网,eth3用于外网 2) 从节点有一个以太网接口: eth0 用于内部网络 3) 一个新添加的节点,带有一个以太网接口:p2p1 用于内部网络
当我有 1) 和 2) 时,我可以使用以下命令: [“/opt/bin/flanneld”、“--ip-masq”、“--kube-subnet-mgr”、“--iface=--eth0”] 我必须添加 --iface 选项,否则主节点上的 flanneld 会自动检测 eth3 而不是 eth0, 这就是我手动添加 iface 选项的原因。
现在我有 3 个), 我必须使用不同的命令创建两个 DaemonSet 定义: [ "/opt/bin/flanneld", "--ip-masq", "--kube-subnet-mgr", "--iface=--eth0"] 对于 1) 和 2) , [ "/opt/bin/flanneld", "--ip-masq", "--kube-subnet-mgr", "--iface=--p2p1"] for 3) 标签选择器用于告知节点使用哪个 DaemonSet。 完整的定义附在最后。
是否有更优雅的方法来创建与单个 DaemonSet 定义略有不同的 pods? 最好只有一个带有占位符的定义,该占位符可以由特定标签的值替换。
否则我可以通过以不同的方式设置法兰绒来做到这一点? 如果我们能给 --iface 选项一个以太网接口列表就好了,但是我的同事发现只能给一个 interface/ip 给 --iface 选项。
谢谢。
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: flannel
---
kind: ConfigMap
apiVersion: v1
metadata:
name: kube-flannel-cfg
labels:
tier: node
app: flannel
data:
cni-conf.json: |
{
"name": "cbr0",
"type": "flannel",
"delegate": {
"isDefaultGateway": true
}
}
net-conf.json: |
{
"Network": "10.244.0.0/16",
"Backend": {
"Type": "vxlan"
}
}
---
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: kube-flannel-ds
labels:
tier: node
app: flannel
iface: eth0
spec:
template:
metadata:
labels:
tier: node
app: flannel
iface: eth0
spec:
hostNetwork: true
nodeSelector:
beta.kubernetes.io/arch: amd64
iface: eth0
serviceAccountName: flannel
containers:
- name: kube-flannel
image: quay.io/coreos/flannel:v0.7.0-amd64
command: [ "/opt/bin/flanneld", "--ip-masq", "--kube-subnet-mgr", "--iface=eth0" ]
securityContext:
privileged: true
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
volumeMounts:
- name: run
mountPath: /run
- name: flannel-cfg
mountPath: /etc/kube-flannel/
- name: install-cni
image: quay.io/coreos/flannel:v0.7.0-amd64
command: [ "/bin/sh", "-c", "set -e -x; cp -f /etc/kube-flannel/cni-conf.json /etc/cni/net.d/10-flannel.conf; while true; do sleep 3600; done" ]
volumeMounts:
- name: cni
mountPath: /etc/cni/net.d
- name: flannel-cfg
mountPath: /etc/kube-flannel/
volumes:
- name: run
hostPath:
path: /run
- name: cni
hostPath:
path: /etc/cni/net.d
- name: flannel-cfg
configMap:
name: kube-flannel-cfg
---
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: kube-gpu-flannel-ds
labels:
tier: node
app: flannel
iface: p2p1
spec:
template:
metadata:
labels:
tier: node
app: flannel
iface: p2p1
spec:
hostNetwork: true
nodeSelector:
beta.kubernetes.io/arch: amd64
iface: p2p1
serviceAccountName: flannel
containers:
- name: kube-flannel
image: quay.io/coreos/flannel:v0.7.0-amd64
command: [ "/opt/bin/flanneld", "--ip-masq", "--kube-subnet-mgr", "--iface=p2p1" ]
securityContext:
privileged: true
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
volumeMounts:
- name: run
mountPath: /run
- name: flannel-cfg
mountPath: /etc/kube-flannel/
- name: install-cni
image: quay.io/coreos/flannel:v0.7.0-amd64
command: [ "/bin/sh", "-c", "set -e -x; cp -f /etc/kube-flannel/cni-conf.json /etc/cni/net.d/10-flannel.conf; while true; do sleep 3600; done" ]
volumeMounts:
- name: cni
mountPath: /etc/cni/net.d
- name: flannel-cfg
mountPath: /etc/kube-flannel/
volumes:
- name: run
hostPath:
path: /run
- name: cni
hostPath:
path: /etc/cni/net.d
- name: flannel-cfg
configMap:
name: kube-flannel-cfg
如果您需要有关容器命令的更高级逻辑,我可以建议 2 个选项。
基于
quay.io/coreos/flannel:v0.7.0-amd64
构建自定义 docker 图像并添加执行逻辑的脚本(例如,基于ifconfig | grep p2p1
的输出)。使用脚本作为容器命令(在 Dockerfile 或 POD 规范中指定)。也可以将相同的脚本放入 ConfigMap 并安装到容器中,就像您已经使用 flannel 配置一样。然后你可以更改容器的
command
来执行这个脚本。示例命令:["/bin/sh", "/etc/kube-flannel/entrypoint.sh"]
在我看来,选项 2 似乎更简单、更灵活。