如何定义DaemonSet的单个定义来创建与其略有不同的荚?我的意思是不同的豆荚是从不同的命令中产生的。目前,我创建了两个不同的DaemonSet对象来创建两种不同的荚。
我来告诉你细节。
我一直在修改kube-flannel.yml,特别是DaemonSet的定义。我想添加“-iface=”to flanneld "/opt/bin/flanneld“、"--ip-masq”、“-kube-subnet”,并且我想使用基于节点标签的两个不同的以太网接口。
我有三种不同的节点: 1)具有两个以太网接口的主节点: eth0用于内部网络,eth3用于外部网络;2)从节点具有一个以太网接口: eth0用于内部网络;3)新添加的节点具有一个以太网接口: p2p1用于内部网络。
当我有1)和2)时,我可以使用以下命令:"/opt/bin/ flanneld“、”-ip-masq“、”-kube-subnet“、”- iface =-eth0“,我必须添加-iface选项,因为主节点上的flanneld会自动检测eth3而不是eth0,这也是我手动添加iface选项的原因。
现在我有了3),我必须用不同的命令做两个DaemonSet定义:"/opt/bin/flanneld“、"--ip-masq”、“-kube-subnet-mgr”、“-ifac面=-eth0”( 1)和2)、"/opt/bin/flanneld“、”-ip-masq“、”-kube-subnet“、”-iface=-p2p1“(用于3)标签选择器用于判断用于节点的DaemonSet。整个定义附在最后。
是否有更优雅的方法来创建与单个DaemonSet定义略有不同的荚?最好只有一个带有占位符的定义,它可以被特定标签的值替换。
否则我可以用另一种方式设置法兰绒来做这件事?如果我们能给出一个以太网接口列表给-iface选项,那就太好了,但是我的同事发现,只有一个接口/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发布于 2017-02-22 17:21:15
如果您需要更高级的容器命令逻辑,我可以建议两个选项。
quay.io/coreos/flannel:v0.7.0-amd64构建一个定制的停靠映像,并添加一个执行逻辑的脚本(例如,基于ifconfig | grep p2p1的输出)。使用脚本作为容器命令(在Dockerfile或POD规范中指定此命令)。command以执行此脚本。示例命令:["/bin/sh", "/etc/kube-flannel/entrypoint.sh"]在我看来,备选案文2似乎更容易,也更灵活。
https://stackoverflow.com/questions/42385991
复制相似问题