1
votes

Le planificateur personnalisé laisse le pod dans le cluster Kubernetes en attente

Je déploie un planificateur personnalisé après avoir suivi les instructions étape par étape comme mentionné dans la documentation Kubernetes

Voici [un lien] ( https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/ )

Pods que je spécifie doit être planifié en utilisant le planificateur que j'ai déployé "my-scheduler" laisse en Pending.

alisd@kubeMaster:~$ kubectl describe serviceaccount my-scheduler -n kube-systemName:                my-scheduler
Namespace:           kube-system
Labels:              <none>
Annotations:         <none>
Image pull secrets:  <none>
Mountable secrets:   my-scheduler-token-68pvk
Tokens:              my-scheduler-token-68pvk
Events:              <none>

.....

alisd@kubeMaster:~$ kubectl describe clusterrolebinding my-scheduler-as-kube-scheduler
Name:         my-scheduler-as-kube-scheduler
Labels:       <none>
Annotations:  <none>
Role:
  Kind:  ClusterRole
  Name:  system:kube-scheduler
Subjects:
  Kind            Name          Namespace
  ----            ----          ---------
  ServiceAccount  my-scheduler  kube-system

......

alisd@kubeMaster:~$ kubectl get clusterrolebinding
NAME                                                   AGE
calico-node                                            46h
cluster-admin                                          46h
kubeadm:kubelet-bootstrap                              46h
kubeadm:node-autoapprove-bootstrap                     46h
kubeadm:node-autoapprove-certificate-rotation          46h
kubeadm:node-proxier                                   46h
my-scheduler-as-kube-scheduler                         46h

........

Kubectl version : -Client: v1.14.1
                  -Server: v1.14.0

kubeadm version : v1.14.1



alisd@kubeMaster:~$ kubectl get pods -n kube-system
NAME                                 READY   STATUS    RESTARTS   AGE
calico-node-944jv                    2/2     Running   4          45h
coredns-fb8b8dccf-hzzwf              1/1     Running   2          45h
coredns-fb8b8dccf-zb228              1/1     Running   2          45h
etcd-kubemaster                      1/1     Running   3          45h
kube-apiserver-kubemaster            1/1     Running   3          45h
kube-controller-manager-kubemaster   1/1     Running   3          45h
kube-proxy-l6wrc                     1/1     Running   3          45h
kube-scheduler-kubemaster            1/1     Running   3          45h
my-scheduler-66cf896bfb-8j8sr        1/1     Running   2          45h


alisd@kubeMaster:~$ kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
annotation-second-scheduler   0/1     Pending   0          4s



alisd@kubeMaster:~$ kubectl describe pod annotation-second-scheduler
Name:               annotation-second-scheduler
Namespace:          default
Priority:           0
PriorityClassName:  <none>
Node:               <none>
Labels:             name=multischeduler-example
Annotations:        <none>
Status:             Pending
IP:                 
Containers:
  pod-with-second-annotation-container:
    Image:        k8s.gcr.io/pause:2.0
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-jclk7 (ro)
Volumes:
  default-token-jclk7:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-jclk7
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:          <none>







alisd@kubeMaster:~$ kubectl logs -f my-scheduler-66cf896bfb-8j8sr -n kube-system



E0426 14:44:01.742799       1 reflector.go:126] k8s.io/client-go/informers/factory.go:133: Failed to list *v1.StorageClass: storageclasses.storage.k8s.io is forbidden: User "system:serviceaccount:kube-system:my-scheduler" cannot list resource "storageclasses" in API group "storage.k8s.io" at the cluster scope
E0426 14:44:02.743952       1 reflector.go:126] k8s.io/client-go/informers/factory.go:133: Failed to list *v1.StorageClass: storageclasses.storage.k8s.io is forbidden: User "system:serviceaccount:kube-system:my-scheduler" cannot list resource "storageclasses" in API group "storage.k8s.io" at the cluster scope

... ....


7 commentaires

Bonjour, pouvez-vous exécuter kubectl describe pods $ POD_NAME ? quel est son statut


lorsque j'exécute kubectl describe pods $ POD_NAME, je n'obtiens aucun événement


vous pouvez vérifier les journaux du deuxième planificateur, que fait ce gars?


Comment puis-je vérifier les journaux du deuxième planificateur


journaux kubectl -f mon-planificateur-66cf896bfb-8j8sr -n système-kube


Sortie: E0426 14: 45: 10.958513 1 reflector.go: 126] k8s.io/client-go/informers/factory.go:133: Impossible de lister * v1.StorageClass: storageclasses.storage.k8s.io est interdit: Utilisateur "system: serviceaccount: kube-system: my-scheduler" ne peut pas lister la ressource "storageclasses" dans le groupe d'API "storage.k8s.io" au niveau du cluster


pouvez-vous exécuter kubectl get clusterrolebinding ? il semble que le 2e ordonnanceur n'ait pas d'autorité


3 Réponses :


0
votes

Le compte de service system: serviceaccount: kube-system: my-scheduler doit être associé au rôle à l'échelle du cluster suivant system: kube-scheduler pour accéder aux ressources . my-scheduler aura les mêmes droits que le planificateur par défaut.

Notez également que nous avons créé un compte de service dédié my-scheduler et y lions le système de rôle de cluster: kube-scheduler afin qu'il puisse acquérir les mêmes privilèges que kube-scheduler. définir -a-déploiement-kubernetes-pour-le-planificateur

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: my-scheduler-as-kube-scheduler
subjects:
- kind: ServiceAccount
  name: my-scheduler
  namespace: kube-system
roleRef:
  kind: ClusterRole
  name: system:kube-scheduler
  apiGroup: rbac.authorization.k8s.io


4 commentaires

J'ai déjà un compte de service pour le 2ème planificateur: my-scheduler-as-kube-scheduler


Ce compte de service doit être lié à my-scheduler-as-kube-scheduler clusterrolebinding , pouvez-vous vérifier si vous l'avez ou non kubectl get clusterrolebinding ?


J'ai exécuté "kubectl describe clusterrolebinding my-scheduler-as-kube-scheduler" et "kubectl describe serviceaccount my-scheduler -n kube-system", veuillez vérifier ma question que j'ai modifiée


j'espère que vous avez également modifié le rôle kubernetes.io/docs/tasks/administer-cluster/...



2
votes

J'ai trouvé une solution

Ajoutez ces lignes:

 Events:
      Type    Reason     Age   From                 Message
      ----    ------     ----  ----                 -------
      Normal  Scheduled  12m   my-scheduler         Successfully assigned default/annotation-second-scheduler to kubemaster
      Normal  Pulled     12m   kubelet, kubemaster  Container image "k8s.gcr.io/pause:2.0" already present on machine
      Normal  Created    12m   kubelet, kubemaster  Created container pod-with-second-annotation-container
      Normal  Started    12m   kubelet, kubemaster  Started container pod-with-second-annotation-container

à la fin de la sortie de cette commande (cela ouvre un fichier que vous pouvez modifier) :

kubectl describe pod annotation-second-scheduler

Le pod utilisant le planificateur que j'ai déployé est maintenant en cours d'exécution

alisd@kubeMaster:~$ kubectl get pods 
NAME                          READY   STATUS    RESTARTS   AGE
annotation-second-scheduler   1/1     Running   0          9m33s

...... p>

kubectl edit clusterrole system:kube-scheduler

......

- apiGroups:
  - storage.k8s.io
  resources:
  - storageclasses
  verbs:
  - watch
  - list
  - get


0 commentaires

0
votes

Pour ajouter à la réponse de la solution ali saaad, j'ai également dû ajouter des "csinodes" aux ressources pour pouvoir planifier le pod, donc cela ressemble à:

- apiGroups:
   - storage.k8s.io
   resources:
   - csinodes
   - storageclasses
   verbs:
   - watch
   - list
   - get


0 commentaires