2017-05-04 1 views
1

J'essaie actuellement de comprendre comment et pourquoi les pods sont programmés ou pas sur le contrôleur avec kube-aws 0-9-6 (1.6.2) Après avoir installé une pile propre, interroger l'espace de noms système de Kube Je vois ce qui suit:Kube-Aws Kubernetes Contrôleurs et tolérances de pods

kubectl --kubeconfig=kubeconfig --namespace kube-system get pod 
    NAME                READY  STATUS RESTARTS AGE 
    heapster-v1.3.0-690018220-tvr45         0/2  Pending 0   1h 
    kube-apiserver-ip-10-0-0-17.eu-west-1.compute.internal   1/1  Running 0   3h 
    kube-controller-manager-ip-10-0-0-17.eu-west-1.compute.internal 1/1  Running 0   3h 
    kube-dns-1455470676-tlrlf           0/3  Pending 0   3h 
    kube-dns-autoscaler-1106974149-xvdw5        0/1  Pending 0   1h 
    kube-proxy-ip-10-0-0-17.eu-west-1.compute.internal    1/1  Running 0   3h 
    kube-scheduler-ip-10-0-0-17.eu-west-1.compute.internal   1/1  Running 0   1h 
    kubernetes-dashboard-v1.5.1-50n8s         1/1  Running 0   7s 

maintenant, nous voyons que certains des gousses sont en cours d'exécution et d'autres sont en attente. Les gousses en attente sont en suspens en raison:

No nodes are available that match all of the following predicates:: PodToleratesNodeTaints (1). 

regardant d'abord au niveau du noeud, je vois ce qui suit:

Taints:   node.alpha.kubernetes.io/role=master:NoSchedule 

Ce qui est bien, le nœud du contrôleur n'est pas planifiable, maintenant, je voulais voyez pourquoi les cosses sont programmées et pourquoi les autres ne le sont pas. recherche Tout d'abord au déploiement Kube-apiserver nous voyons:

tolerations: 
- effect: NoExecute 
    operator: Exists 

Tout d'abord cela ne figure pas dans les données de l'utilisateur du contrôleur, je me demande d'où il vient, mais même si elle est là, il ne fait aucune sens que cette tolérance satisfait la souillure de la NoSchedule

Ensuite, si nous regardons d'autres gousses qui sont en état d'attente, nous pouvons voir ce qui suit:

tolerations: 
    - key: CriticalAddonsOnly 
    operator: Exists 

Ceci est parfaitement clair pourquoi ils ne peuvent pas être planifiés et ils sont en attente. ça ne satisfait pas la souillure.

À partir de ce moment, peu importe ce que je fais (sauf satisfaire le NoSchedule). Rien ne change. L'ajout de l'effet NoExecute à l'un des noeuds en attente ne les fait pas apparaître, ce qui est correct car ils ne satisfont rien.

Je ne trouve aucune justification pour l'api-serveur, contrôleur-gestionnaire, proxy et planificateur en cours d'exécution à l'attente et non (ne peut pas voir quelque chose de spécial dans la données utilisateur ainsi)

Peut quelqu'un s'il vous plaît expliquez-moi ce qui se passe?

Merci

Répondre

0

Les tolerations & souillures doivent être définis dans le yaml des objets déployées (par exemple le programmateur, le dispositif de commande, etc.). Je ne m'attendrais pas à ce qu'ils soient dans les UserData de l'instance.

Avez-vous des nœuds dans votre cluster autre que le maître? On dirait que les autres addons (dns, etc.) fonctionneraient sur les nœuds du cluster alors que les composants centraux (scheduler, etc.) sont configurés pour s'exécuter sur le maître.