2017-02-22 4 views
0

少し異なるポッドを作成するためにDaemonSetの単一の定義を定義するにはどうすればよいですか? 異なるポッドを意味するのは、異なるコマンドから作成されたポッドです。 現在、2つの異なる種類のポッドを作成するために、2つの異なるDaemonSetオブジェクトを作成しています。少し異なるポッドを作成するDaemonSetを定義するには?

詳細を教えてください。

私はkube-flannel.yml、特にDaemonSetの定義を変更しています。 flanneld [ -/opt/bin/flanneld]、 "--ip-masq"、 " - kube-subnet-mgr"]に "--iface ="を追加したい場合 と私は2つの異なるイーサネットノードラベルに基づくインタフェース 1)2つのイーサネットインタフェースを持つマスターノード:eth0の外部ネットワーク1つのイーサネットインターフェースと 2)スレーブノードのために、内部ネットワーク及びETH3ための内部ネットワーク 3)Aのeth0の

Iは、ノードの三つの異なる種類を持っています新たに追加された1つのイーサネットインタフェースを持つノード:p2p1 I 1を有していた)、2)、Iは、次のコマンドを使用して大丈夫だった内部ネットワーク

用: [ "の/ opt/binに/ flanneld"、「--ip-MASQ "、" -kube-subnet-mgr "、" --iface = - eth0 "] そうでなければ、マスタノードのflanneldが自動的にeth0以外のeth3を検出するため、--ifaceオプションを追加する必要があります。はreasoですn ifaceオプションを手動で追加します。私は別のコマンドで2つのDaemonSet定義を行う必要があり

今私は3を持っていること)、 : [ "は/ opt/binに/ flanneld"、 "--ip-マスカレード"、「--kubeサブネット-MGR 1、2) 、[/ opt/bin/flanneld]、 "--ip-masq"、 " - kube-subnet-mgr"、 "--iface = -eth0" -iface = - p2p1 "] for 3) ラベルセレクタは、どのDaemonSetがノードに使用されているかを示すために使用されます。 定義全体が最後に添付されています。

単一のDaemonSet定義からわずかに異なるポッドを作成する方法はありますか? 特定のラベルの値で置き換えることができるプレースホルダを持つ単一の定義のみを持つとよいでしょう。

そうでなければ、私はflannelを別の方法で設定することでこれを行うことができますか? --ifaceオプションにイーサネットインターフェースのリストを与えることができればいいですが、私の同僚は--ifaceオプションに与えられるインターフェース/ ipは1つしかないことが分かりました。

ありがとうございました。

--- 
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 configで行ったのと同じ方法です。このスクリプトを実行するには、コンテナのcommandを変更します。コマンド例:["/bin/sh", "/etc/kube-flannel/entrypoint.sh"]

オプション2は、私の意見ではより簡単で柔軟性があるようです。

関連する問題