2017-02-22 21 views
0

如何定义DaemonSet的单个定义以创建与它稍有不同的豆荚? 我的意思是不同的豆荚是由不同命令创建的豆荚。 我目前创建两个不同的DaemonSet对象来创建两种不同类型的豆荚。如何定义一个DaemonSet来创建稍微不同的豆荚?

让我告诉你细节。

我一直在修改kube-flannel.yml,特别是DaemonSet的定义。 我想添加“--iface =”到flanneld [“/ opt/bin/flanneld”,“--ip-masq”,“--kube-subnet-mgr”] 我想用两个不同的以太网基于节点标签的接口。

我有三种不同类型的节点: 1)有两个以太网接口的主节点中:eth0对内部网络和ETH3用于外部网络 与一个以太网接口2)从节点中:eth0为内部网络 3)一个带有一个以太网接口的新增节点:p2p1用于内部网络

当我有1)和2)时,我可以使用以下命令: [“/ opt/bin/flanneld”,“--ip-masq “,” - kube-subnet-mgr“,”--iface = - eth0“] 我必须添加--iface选项,因为否则主节点上的flanneld会自动检测除eth0之外的eth3,这是reaso我手动添加iface选项。

现在,我有3个), 我必须做出不同的命令的两种DaemonSet定义: [ “/选择/斌/ flanneld”, “--ip-伪装”,“--kube子网的经理1)和2) ,[“/ opt/bin/flanneld”,“--ip-masq”,“ - kube-subnet-mgr”,“ - ”),“--iface = - eth0” -iface = - p2p1“] for 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 
+0

要查看关于Google网上论坛的讨论,请访问https://groups.google.com/forum/#!topic/kubernetes-users/F6GvfHoX7V4 – eastcirclek

回答

0

如果您需要有关容器命令的更多高级逻辑,我可以推荐2个选项。

  1. 构建基于quay.io/coreos/flannel:v0.7.0-amd64定制码头工人图像,并添加一个脚本,并逻辑(例如,基于的ifconfig | grep p2p1的输出)。使用脚本作为容器命令(可以在Dockerfile或POD规范中指定)。

  2. 同样的脚本也可以进入ConfigMap并装载到容器中,就像你已经使用flannel配置一样。然后,您可以更改容器的command以执行此脚本。示例命令:["/bin/sh", "/etc/kube-flannel/entrypoint.sh"]

在我看来,选项2似乎更容易和更灵活。