2017-02-22 1 views
0

Comment puis-je définir une seule définition de DaemonSet pour en créer des pods légèrement différents? Ce que je veux dire par différents pods, c'est que les pods sont créés à partir de différentes commandes. Je crée actuellement deux objets DaemonSet différents pour créer deux types de pods différents.Comment définir un DaemonSet pour créer des pods légèrement différents?

Laissez-moi vous dire les détails.

J'ai modifié kube-flannel.yml, en particulier la définition de DaemonSet. Je veux ajouter "--iface =" à flanneld ["/ opt/bin/flanneld", "--ip-masq", "--kube-subnet-mgr"] et je veux utiliser deux ethernet différent interfaces basées sur l'étiquette de noeud.

j'ai trois types de nœuds différents: 1) un noeud maître avec deux interfaces Ethernet: eth0 pour le réseau interne et eth3 pour réseau externe nœuds esclaves 2) avec une interface Ethernet: eth0 pour le réseau interne 3) a nœud nouvellement ajouté avec une interface ethernet: p2p1 pour le réseau interne

Lorsque j'avais 1) et 2), j'acceptais la commande suivante: ["/ opt/bin/flanneld", "--ip-masq "," --kube-subnet-mgr "," --iface = - eth0 "] Je dois ajouter l'option --iface car autrement flanneld sur le nœud maître détecte automatiquement eth3 autre que eth0, qui est le reaso n J'ajoute manuellement l'option iface.

Maintenant que j'ai 3), je dois faire deux définitions DaemonSet avec différentes commandes: [ "/ opt/bin/flanneld", "--ip-masq", « --kube-sous-réseau-Gest "," --iface = - eth0 "] pour 1) et 2) , ["/opt/bin/flanneld "," --ip-masq "," --kube-subnet-mgr "," - -iface = - p2p1 "] pour 3) Le sélecteur d'étiquette est utilisé pour indiquer quel DaemonSet est utilisé pour un nœud. La définition complète est jointe à la fin.

Existe-t-il une manière plus élégante de créer des pods légèrement différents à partir d'une seule définition de DaemonSet? Il serait bien d'avoir une seule définition avec un espace réservé qui peut être remplacé par la valeur d'un label spécifique.

Sinon, je peux le faire en réglant flanelle d'une manière différente? Ce serait bien si nous pouvons donner une liste d'interfaces ethernet à l'option --iface mais mon collègue a trouvé qu'une seule interface/ip peut être donnée à l'option --iface.

Merci.

--- 
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

Pour consulter la discussion sur Google Groupes, rendez-vous sur le lien https://groups.google.com/forum/#!topic/kubernetes-users/F6GvfHoX7V4 – eastcirclek

Répondre

0

Si vous avez besoin d'une logique plus avancée concernant les commandes de conteneur, je peux suggérer 2 options.

  1. construire une image docker personnalisée basée sur quay.io/coreos/flannel:v0.7.0-amd64 et ajouter un script qui fait la logique (par exemple en fonction de la sortie de ifconfig | grep p2p1). Utilisez le script comme commande de conteneur (spécifiez-le dans le fichier Docker ou dans la spécification POD).

  2. Le même script peut également être dans un ConfigMap et monté dans le conteneur, de la même manière que vous l'avez déjà fait avec la configuration de flanelle. Vous pouvez ensuite modifier le command du conteneur pour exécuter ce script.Exemple de commande: ["/bin/sh", "/etc/kube-flannel/entrypoint.sh"]

Option 2 semble être plus facile et plus souple à mon avis.