<p>kubeadm init bloqué sur "Le premier nœud s'est enregistré, mais n'est pas encore prêt"</p>

Créé le 29 mars 2017  ·  52Commentaires  ·  Source: kubernetes/kubeadm

Quels mots-clés avez-vous recherchés dans les problèmes Kubernetes avant de déposer celui-ci ? (Si vous avez trouvé des doublons, vous devriez plutôt y répondre.): kubeadm

S'agit-il d'un rapport de bogue ou d'une demande de fonctionnalité ? (choisissez-en un) : rapport de bogue

Version Kubernetes (utilisez kubectl version ): 1.6.0

Environnement :

  • Fournisseur de cloud ou configuration matérielle : Raspberry Pi 3 Model B
  • Système d' exploitation (par exemple depuis /etc/os-release) : Hypriot 1.4.0 (avec Docker rétrogradé manuellement à 1.12.6, Hypriot 1.4.0 est livré avec Docker 17.03.0-ce)
  • Noyau (par exemple uname -a ): 4.4.50-hypriotos-v7+
  • Outils d'installation : kubeadm
  • Autres :

Que s'est-il passé :

En suivant exactement le guide de démarrage de kubeadm :

# kubeadm init --apiserver-cert-extra-sans redacted --pod-network-cidr 10.244.0.0/16
[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.
[init] Using Kubernetes version: v1.6.0
[init] Using Authorization mode: RBAC
[preflight] Running pre-flight checks
[certificates] Generated CA certificate and key.
[certificates] Generated API server certificate and key.
[certificates] API Server serving cert is signed for DNS names [kube-01 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local redacted] and IPs [10.96.0.1 10.0.1.101]
[certificates] Generated API server kubelet client certificate and key.
[certificates] Generated service account token signing key and public key.
[certificates] Generated front-proxy CA certificate and key.
[certificates] Generated front-proxy client certificate and key.
[certificates] Valid certificates and keys now exist in "/etc/kubernetes/pki"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/scheduler.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/controller-manager.conf"
[apiclient] Created API client, waiting for the control plane to become ready
[apiclient] All control plane components are healthy after 206.956919 seconds
[apiclient] Waiting for at least one node to register and become ready
[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet

Ce dernier message, "Le premier nœud s'est enregistré, mais n'est pas encore prêt" se répète indéfiniment et kubeadm ne se termine jamais. Je me suis connecté au serveur maître dans une autre session pour voir si tous les conteneurs Docker fonctionnaient comme prévu et ils sont :

$ docker ps
CONTAINER ID        IMAGE                                                                                                                          COMMAND                  CREATED             STATUS              PORTS               NAMES
54733aa1aae3        gcr.io/google_containers/kube-controller-manager-arm<strong i="6">@sha256</strong>:22f30303212b276b6868b89c8e92c5fb2cb93641e59c312b254c6cb0fa111b2a   "kube-controller-mana"   10 minutes ago      Up 10 minutes                           k8s_kube-controller-manager_kube-controller-manager-kube-01_kube-system_d44abf63e3ab24853ab86643e0b96d81_0
55b6bf2cc09e        gcr.io/google_containers/etcd-arm<strong i="7">@sha256</strong>:0ce1dcd85968a3242995dfc168abba2c3bc03d0e3955f52a0b1e79f90039dcf2                      "etcd --listen-client"   11 minutes ago      Up 11 minutes                           k8s_etcd_etcd-kube-01_kube-system_90ab26991bf9ad676a430c7592d08bee_0
bd0dc34d5e77        gcr.io/google_containers/kube-apiserver-arm<strong i="8">@sha256</strong>:c54b8c609a6633b5397173c763aba0656c6cb2601926cce5a5b4870d58ba67bd            "kube-apiserver --ins"   12 minutes ago      Up 12 minutes                           k8s_kube-apiserver_kube-apiserver-kube-01_kube-system_4d99c225ec157dc715c26b59313aeac8_1
1c4c7b69a3eb        gcr.io/google_containers/kube-scheduler-arm<strong i="9">@sha256</strong>:827449ef1f3d8c0a54d842af9d6528217ccd2d36cc2b49815d746d41c7302050            "kube-scheduler --kub"   13 minutes ago      Up 13 minutes                           k8s_kube-scheduler_kube-scheduler-kube-01_kube-system_3ef1979df7569495bb727d12ac1a7a6f_0
4fd0635f9439        gcr.io/google_containers/pause-arm:3.0                                                                                         "/pause"                 14 minutes ago      Up 14 minutes                           k8s_POD_kube-controller-manager-kube-01_kube-system_d44abf63e3ab24853ab86643e0b96d81_0
cfb4a758ad96        gcr.io/google_containers/pause-arm:3.0                                                                                         "/pause"                 14 minutes ago      Up 14 minutes                           k8s_POD_etcd-kube-01_kube-system_90ab26991bf9ad676a430c7592d08bee_0
a631d8b6c11c        gcr.io/google_containers/pause-arm:3.0                                                                                         "/pause"                 14 minutes ago      Up 14 minutes                           k8s_POD_kube-scheduler-kube-01_kube-system_3ef1979df7569495bb727d12ac1a7a6f_0
309b62fff122        gcr.io/google_containers/pause-arm:3.0                                                                                         "/pause"                 14 minutes ago      Up 14 minutes                           k8s_POD_kube-apiserver-kube-01_kube-system_4d99c225ec157dc715c26b59313aeac8_0

J'ai copié l'administrateur kubeconfig sur ma machine locale et utilisé kubectl (1.6.0) pour voir ce qui se passait avec le nœud que kubeadm prétendait être enregistré :

$ kubectl describe node kube-01
Name:           kube-01
Role:
Labels:         beta.kubernetes.io/arch=arm
            beta.kubernetes.io/os=linux
            kubernetes.io/hostname=kube-01
Annotations:        node.alpha.kubernetes.io/ttl=0
            volumes.kubernetes.io/controller-managed-attach-detach=true
Taints:         <none>
CreationTimestamp:  Tue, 28 Mar 2017 22:06:40 -0700
Phase:
Conditions:
  Type          Status  LastHeartbeatTime           LastTransitionTime          Reason              Message
  ----          ------  -----------------           ------------------          ------              -------
  OutOfDisk         False   Tue, 28 Mar 2017 22:17:24 -0700     Tue, 28 Mar 2017 22:06:40 -0700     KubeletHasSufficientDisk    kubelet has sufficient disk space available
  MemoryPressure    False   Tue, 28 Mar 2017 22:17:24 -0700     Tue, 28 Mar 2017 22:06:40 -0700     KubeletHasSufficientMemory  kubelet has sufficient memory available
  DiskPressure      False   Tue, 28 Mar 2017 22:17:24 -0700     Tue, 28 Mar 2017 22:06:40 -0700     KubeletHasNoDiskPressure    kubelet has no disk pressure
  Ready         False   Tue, 28 Mar 2017 22:17:24 -0700     Tue, 28 Mar 2017 22:06:40 -0700     KubeletNotReady         runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
Addresses:      10.0.1.101,10.0.1.101,kube-01
Capacity:
 cpu:       4
 memory:    882632Ki
 pods:      110
Allocatable:
 cpu:       4
 memory:    780232Ki
 pods:      110
System Info:
 Machine ID:            9989a26f06984d6dbadc01770f018e3b
 System UUID:           9989a26f06984d6dbadc01770f018e3b
 Boot ID:           7a77e2e8-dd62-4989-b9e7-0fb52747162a
 Kernel Version:        4.4.50-hypriotos-v7+
 OS Image:          Raspbian GNU/Linux 8 (jessie)
 Operating System:      linux
 Architecture:          arm
 Container Runtime Version: docker://1.12.6
 Kubelet Version:       v1.6.0
 Kube-Proxy Version:        v1.6.0
PodCIDR:            10.244.0.0/24
ExternalID:         kube-01
Non-terminated Pods:        (4 in total)
  Namespace         Name                        CPU Requests    CPU Limits  Memory Requests Memory Limits
  ---------         ----                        ------------    ----------  --------------- -------------
  kube-system           etcd-kube-01                0 (0%)      0 (0%)      0 (0%)      0 (0%)
  kube-system           kube-apiserver-kube-01          250m (6%)   0 (0%)      0 (0%)      0 (0%)
  kube-system           kube-controller-manager-kube-01     200m (5%)   0 (0%)      0 (0%)      0 (0%)
  kube-system           kube-scheduler-kube-01          100m (2%)   0 (0%)      0 (0%)      0 (0%)
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  CPU Requests  CPU Limits  Memory Requests Memory Limits
  ------------  ----------  --------------- -------------
  550m (13%)    0 (0%)      0 (0%)      0 (0%)
Events:
  FirstSeen LastSeen    Count   From            SubObjectPath   Type        Reason          Message
  --------- --------    -----   ----            -------------   --------    ------          -------
  14m       14m     1   kubelet, kube-01            Normal      Starting        Starting kubelet.
  14m       10m     55  kubelet, kube-01            Normal      NodeHasSufficientDisk   Node kube-01 status is now: NodeHasSufficientDisk
  14m       10m     55  kubelet, kube-01            Normal      NodeHasSufficientMemory Node kube-01 status is now: NodeHasSufficientMemory
  14m       10m     55  kubelet, kube-01            Normal      NodeHasNoDiskPressure   Node kube-01 status is now: NodeHasNoDiskPressure

Cela a permis de découvrir la raison pour laquelle le kubelet n'était pas prêt :

"réseau d'exécution non prêt : NetworkReady=false Reason :NetworkPluginNotReady message :docker : le plug-in réseau n'est pas prêt : cni config"

Dans mes expériences avec kubeadm 1.5, CNI n'était pas nécessaire pour faire apparaître le nœud maître, c'est donc surprenant. Même le guide de démarrage suggère que kubeadm init devrait se terminer avec succès avant de passer au déploiement d'un plugin CNI.

Quoi qu'il en soit, j'ai déployé la flanelle en utilisant kubectl depuis ma machine locale :

$ kubectl apply -f kube-flannel.yml

Où se trouvait le contenu du fichier :

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: flannel
  namespace: kube-system
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: kube-flannel-cfg
  namespace: kube-system
  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
  namespace: kube-system
  labels:
    tier: node
    app: flannel
spec:
  template:
    metadata:
      labels:
        tier: node
        app: flannel
    spec:
      hostNetwork: true
      nodeSelector:
        beta.kubernetes.io/arch: amd64
      tolerations:
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
      serviceAccountName: flannel
      containers:
      - name: kube-flannel
        image: quay.io/coreos/flannel:v0.7.0-amd64
        command: [ "/opt/bin/flanneld", "--ip-masq", "--kube-subnet-mgr" ]
        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

Mais il n'a jamais prévu :

$ kubectl describe ds kube-flannel-ds -n kube-system
Name:       kube-flannel-ds
Selector:   app=flannel,tier=node
Node-Selector:  beta.kubernetes.io/arch=amd64
Labels:     app=flannel
        tier=node
Annotations:    kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"extensions/v1beta1","kind":"DaemonSet","metadata":{"annotations":{},"labels":{"app":"flannel","tier":"node"},"name":"kube-flannel-ds","n...
Desired Number of Nodes Scheduled: 0
Current Number of Nodes Scheduled: 0
Number of Nodes Scheduled with Up-to-date Pods: 0
Number of Nodes Scheduled with Available Pods: 0
Number of Nodes Misscheduled: 0
Pods Status:    0 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:       app=flannel
            tier=node
  Service Account:  flannel
  Containers:
   kube-flannel:
    Image:  quay.io/coreos/flannel:v0.7.0-amd64
    Port:
    Command:
      /opt/bin/flanneld
      --ip-masq
      --kube-subnet-mgr
    Environment:
      POD_NAME:      (v1:metadata.name)
      POD_NAMESPACE:     (v1:metadata.namespace)
    Mounts:
      /etc/kube-flannel/ from flannel-cfg (rw)
      /run from run (rw)
   install-cni:
    Image:  quay.io/coreos/flannel:v0.7.0-amd64
    Port:
    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
    Environment:    <none>
    Mounts:
      /etc/cni/net.d from cni (rw)
      /etc/kube-flannel/ from flannel-cfg (rw)
  Volumes:
   run:
    Type:   HostPath (bare host directory volume)
    Path:   /run
   cni:
    Type:   HostPath (bare host directory volume)
    Path:   /etc/cni/net.d
   flannel-cfg:
    Type:   ConfigMap (a volume populated by a ConfigMap)
    Name:   kube-flannel-cfg
    Optional:   false
Events:     <none>

J'ai quand même essayé de rejoindre l'un des autres serveurs, juste pour voir ce qui se passerait. J'ai utilisé kubeadm token create pour créer manuellement un jeton que je pourrais utiliser à partir d'une autre machine. Sur l'autre machine :

kubeadm join --token $TOKEN 10.0.1.101:6443
[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.
[preflight] Running pre-flight checks
[discovery] Trying to connect to API Server "10.0.1.101:6443"
[discovery] Created cluster-info discovery client, requesting info from "https://10.0.1.101:6443"
[discovery] Failed to request cluster info, will try again: [User "system:anonymous" cannot get configmaps in the namespace "kube-public". (get configmaps cluster-info)]
[discovery] Failed to request cluster info, will try again: [User "system:anonymous" cannot get configmaps in the namespace "kube-public". (get configmaps cluster-info)]
[discovery] Failed to request cluster info, will try again: [User "system:anonymous" cannot get configmaps in the namespace "kube-public". (get configmaps cluster-info)]

Et le message final répété pour toujours.

Ce à quoi vous vous attendiez :

kubeadm init doit se terminer et produire un jeton d'amorçage.

Commentaire le plus utile

Vous devez ajouter des rôles rbac pour autoriser la lecture de flannel à partir de l'API.

Au cas où quelqu'un d'autre se demande ce que cela signifie, il semble que vous deviez créer kube-flannel-rbac.yml avant de créer de la flanelle :

kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel-rbac.yml
kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Tous les 52 commentaires

Il m'arrive exactement la même chose sur Ubuntu 16.04.02, les installations GCE et VMWare locales, Docker version 1.12.6, noyau 4.8.0-44-generic 47~16.04.1-Ubuntu SMP.

Le journal de kubelet affiche un avertissement concernant l'absence de /etc/cni/net.d avant l'erreur que nous voyons dans le rapport de jimmycuadra :

Mar 29 04:43:25 instance-1 kubelet[6800]: W0329 04:43:25.763117    6800 cni.go:157] Unable to update cni config: No networks found in /etc/cni/net.d
Mar 29 04:43:25 instance-1 kubelet[6800]: E0329 04:43:25.763515    6800 kubelet.go:2067] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized

Même problème sur Ubuntu AWS VM. Docker 1.12.5

root@ip-10-43-0-20 :~# version de kubeadm
kubeadm version : version.Info{Major : "1", Minor : "6", GitVersion :"v1.6.0", GitCommit :"fff5156092b56e6bd60fff75aad4dc9de6b6ef37", GitTreeState :"clean", BuildDate : "2017-03-28T16:24 : 30Z", GoVersion:"go1.7.5"

root@ip-10-43-0-20 :~# uname -a
Linux ip-10-43-0-20 4.4.0-45-generic #66-Ubuntu SMP Mer 19 octobre 14:12:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

root@ip-10-43-0-20 :~# kubeadm init --config cfg.yaml
[kubeadm] ATTENTION : kubeadm est en version bêta, veuillez ne pas l'utiliser pour les clusters de production.
[init] Utilisation de la version Kubernetes : v1.6.0
[init] Utilisation du mode d'autorisation : RBAC
[init] AVERTISSEMENT : pour que les intégrations cloudprovider fonctionnent, --cloud-provider doit être défini pour tous les kubelets du cluster.
(/etc/systemd/system/kubelet.service.d/10-kubeadm.conf doit être édité à cet effet)
[preflight] Exécuter des vérifications avant le vol
[vol en amont] Démarrage du service kubelet
[certificats] Certificat et clé CA générés.
[certificats] Certificat et clé de serveur d'API générés.
[certificats] Le certificat de service du serveur API est signé pour les noms DNS [ip-10-43-0-20 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] et les adresses IP [10.96.0.1 10.43.0.20 ]
[certificats] Certificat et clé du client kubelet du serveur API généré.
[certificats] Clé de signature de jeton de compte de service et clé publique générées.
[certificats] Certificat et clé CA de proxy frontal générés.
[certificats] Certificat et clé client du proxy frontal générés.
[certificats] Des certificats et des clés valides existent maintenant dans "/etc/kubernetes/pki"
[kubeconfig] A écrit le fichier KubeConfig sur le disque : "/etc/kubernetes/admin.conf"
[kubeconfig] A écrit le fichier KubeConfig sur le disque : "/etc/kubernetes/kubelet.conf"
[kubeconfig] A écrit le fichier KubeConfig sur le disque : "/etc/kubernetes/controller-manager.conf"
[kubeconfig] A écrit le fichier KubeConfig sur le disque : "/etc/kubernetes/scheduler.conf"
[apiclient] Client API créé, en attente que le plan de contrôle soit prêt
[apiclient] Tous les composants du plan de contrôle sont sains après 16,531681 secondes
[apiclient] Attendre qu'au moins un nœud s'enregistre et soit prêt
[apiclient] Le premier nœud s'est enregistré, mais n'est pas encore prêt
[apiclient] Le premier nœud s'est enregistré, mais n'est pas encore prêt
[apiclient] Le premier nœud s'est enregistré, mais n'est pas encore prêt

++ le même problème (Ubuntu 16.04.1)

Même chose ici sur Ubuntu 16.04

Sur CentOS 7, j'ai rétrogradé le kubelet à 1.5.4 . Cela l'a résolu pour moi. Il semble que la vérification de disponibilité fonctionne différemment dans le 1.6.0 kubelet.

Même problème sur CentOS 7 sur une machine bare metal x64, depuis la mise à niveau vers k8s 1.6.0

Même problème sur Ubuntu 16.04

Même problème sur Ubuntu 16.04, la rétrogradation manuelle du package kubelet résolu le problème.

# apt install kubelet=1.5.6-00

@ctrlaltdel cela n'a pas fonctionné pour moi.

Je soupçonne qu'il s'agit d'un problème de Kubelet. Il ne doit pas marquer le nœud comme non prêt lorsque CNI n'est pas configuré. Seuls les pods qui nécessitent CNI doivent être marqués comme non prêts.

@jbeda Savez-vous quand ce problème sera-t-il résolu ?

@kristiandrucker -- non -- toujours en train de comprendre ce qui se passe. Besoin d'en faire d'abord la cause.

@jbeda D'accord, mais une fois le problème résolu, alors quoi ? Reconstruire kubelet à partir de la source ?

@kristiandrucker Cela devra sortir dans une version ponctuelle de k8s s'il s'agit d'un problème de kubelet.

Je soupçonne que https://github.com/kubernetes/kubernetes/pull/43474 est la cause première. Je vais signaler un bogue et faire le suivi avec les gens du réseau.

@dcbw Vous êtes dans le

On dirait que le problème est qu'un DaemonSet n'est pas planifié sur les nœuds qui ont la condition Net workReady:false , car les vérifications des pods de planification ne sont pas suffisamment précises. Nous devons régler cela; un pod ho stNetwork:true doit être planifié sur un nœud Net workReady:false , mais pas un pod ho

En guise de solution de contournement, l'ajout de l'annotation scheduler.alpha.kubernetes.io/critical-pod sur votre DaemonSet fait-il fonctionner à nouveau les choses ?

@janetkuo @lukaszo pouvez-vous trier le comportement DS ?

Il y a aussi une discussion en cours dans #sig-network sur slack, d'ailleurs.

Même problème CentOS 7 x64

@prapdm, cela semble sans défense de la distribution que vous exécutez.

CentOS Linux version 7.3.1611 (Core)

Je l'ai essayé sur un nœud avec Ubuntu 16.04. Il se bloque avec le message "pas encore prêt". J'ai également créé manuellement le DaemonSet en flanelle, mais dans mon cas, il a programmé un pod sans aucun problème. Le pod démon lui-même est entré dans CrashLoopBackOff avec l'erreur : E0329 22:57:03.065651 1 main.go:127] Failed to create SubnetManager: error retrieving pod spec for 'kube-system/kube-flannel-ds-z3xgn': the server does not allow access to the requested resource (get pods kube-flannel-ds-z3xgn)

Je vais essayer Centos aussi mais je ne pense pas que DaemonSet soit à blâmer ici, kubeadm se bloque ici.

c'est une erreur d'autorisation rbac.

@jimmycuadra Je viens de remarquer que vous l'exécutez sur raspberry pi qui a un processeur de bras.

Pour l'ensemble de démons en flanelle, vous avez :

``` nodeSelector :
beta.kubernetes.io/arch : amd64

but your node is labeled with: 

beta.kubernetes.io/arch=arm
```

Donc DaemonSet ne peut pas déjeuner de pod sur ce nœud, il suffit de changer le sélecteur de nœud et cela fonctionnera.
Vous obtiendrez toujours l'erreur avec l'autorisation rbac mais peut-être que @mikedanese vous dira comment la corriger car je ne le sais pas.

Ah, merci @lukaszo ! Je ne suivais pas le guide spécifique à RPi cette fois (que j'ai utilisé pour k8s 1.5) et j'ai oublié cette étape. Je l'aurais découvert lorsque l'ensemble de démons a fait une erreur, mais il s'avère que je ne suis pas allé aussi loin. :}

Je vois également ce problème lorsque je suis les instructions décrites ici :
https://blog.hypriot.com/post/setup-kubernetes-raspberry-pi-cluster/

réussi à le faire fonctionner après avoir installé le bon pod réseau en flanelle.

Je pense que @jimmycuadra pourrait le faire fonctionner avec le commentaire de @lukaszo .

Lorsque le message [apiclient] First node has registered, but is not ready yet commence à inonder, le serveur d'API kubernetes est en cours d'exécution, vous pouvez donc :

curl -sSL https://rawgit.com/coreos/flannel/master/Documentation/kube-flannel.yml | kubectl create -f -

Pour l'installation de Raspberry Pi :

curl -sSL https://rawgit.com/coreos/flannel/master/Documentation/kube-flannel.yml | sed "s/amd64/arm/g" | kubectl create -f -

Ensuite, il finira :

[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet
[apiclient] First node is ready after 245.050597 seconds
[apiclient] Test deployment succeeded
[token] Using token: 4dc99e............
[apiconfig] Created RBAC rules
[addons] Created essential addon: kube-proxy
[addons] Created essential addon: kube-dns

Your Kubernetes master has initialized successfully!

To start using your cluster, you need to run (as a regular user):

  sudo cp /etc/kubernetes/admin.conf $HOME/
  sudo chown $(id -u):$(id -g) $HOME/admin.conf
  export KUBECONFIG=$HOME/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  http://kubernetes.io/docs/admin/addons/

You can now join any number of machines by running the following on each node
as root:

  kubeadm join --token 4dc99e........... 192.168.1.200:6443

J'ai eu le même problème et j'ai résolu de cette façon :
tu devrais être root

dans la 1.6.0 de kubeadm vous devez supprimer la variable d'environnement $KUBELET_NETWORK_ARGS dans le fichier système : /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

puis redémarrer les démons

systemctl daemon-reload

kubeadm init

cela prend un peu de temps ... après le succès

téléchargez le module complémentaire réseau que vous souhaitez utiliser : http://kubernetes.io/docs/admin/addons/

calico semble être le meilleur, pas sûr mais toujours en test pour moi.

@thelastworm
J'ai juste essayé de le faire et ça n'a pas fonctionné.
Ubuntu 16.04.2 LTS, kubeadm 1.6.0
J'ai fait les étapes suivantes :

  1. éditez /etc/systemd/system/kubelet.service.d/10-kubeadm.conf et supprimez $KUBELET_NETWORK_ARGS
  2. kubeadm reset pour nettoyer la tentative précédente de le démarrer
  3. kubeadm init --token=<VALUE> --apiserver-advertise-address=<IP>

[ÉDITÉ]
Cela a fonctionné après que @srinat999 ait souligné la nécessité d'exécuter systemctl daemon-reload avant kubeadm init

La solution de @jcorral a fonctionné pour moi avec une modification du déploiement de la flanelle puisque le port API non sécurisé n'est plus créé par kubeadm .

curl -sSL https://rawgit.com/coreos/flannel/master/Documentation/kube-flannel.yml | \
kubectl --kubeconfig /etc/kubernetes/admin.conf create -f -

@MaximF Vous devez faire systemctl daemon-reload après avoir modifié le fichier de configuration. A travaillé pour moi.

@jcorral Votre solution fonctionne pour moi. Merci.

@MaximF je viens d'ajouter la ligne de commande du démon de redémarrage

kubeadm init se termine avec succès, mais lorsque je vérifie la version, j'obtiens l'erreur suivante :

Version du client : version.Info{Major:"1", Minor :"6", GitVersion:"v1.6.0", GitCommit:"fff5156092b56e6bd60fff75aad4dc9de6b6ef37", GitTreeState:"clean", BuildDate:"2017-03-28T16:36: 33Z", GoVersion :"go1.7.5", Compilateur :"gc", Plate-forme :"linux/amd64"}
La connexion au serveur localhost:8080 a été refusée - avez-vous spécifié le bon hôte ou le bon port ?

@haribole
Vous devez définir la variable d'environnement KUBECONFIG

Est-ce que quelqu'un a fait exécuter Flannel après les solutions de contournement liées à CNI ? Je peux passer le problème non prêt, mais lorsque j'exécute Flannel, j'obtiens une erreur qui ressemble à ceci :

Failed to create SubnetManager: error retrieving pod spec for 'kube-system/kube-flannel-ds-g5cbj': the server does not allow access to the requested resource (get pods kube-flannel-ds-g5cbj)

L'état des pods indique « CrashLoopBackOff »

Vous devez ajouter des rôles rbac pour autoriser la lecture de flannel à partir de l'API.

Vous devez ajouter des rôles rbac pour autoriser la lecture de flannel à partir de l'API.

Au cas où quelqu'un d'autre se demande ce que cela signifie, il semble que vous deviez créer kube-flannel-rbac.yml avant de créer de la flanelle :

kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel-rbac.yml
kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Je pense qu'un problème racine est résolu et que le ticket associé est fermé , nous devrions également fermer celui-ci :)

Juste pour information : cela fonctionne pour moi maintenant avec les packages mis à jour sous Ubuntu 16.04.

1.6.1 fonctionne pour moi ! Merci à tous ceux qui ont aidé à résoudre ce problème !

J'ai réussi à configurer mon cluster Kubernetes sur centos-release-7-3.1611.el7.centos.x86_64 en procédant comme suit (je suppose que Docker est déjà installé) :

1) (de /etc/yum.repo.d/kubernetes.repo) baseurl=http://yum.kubernetes.io/repos/kubernetes-el7-x86_64-unstable
=> Pour utiliser le référentiel instable pour le dernier Kubernetes 1.6.1
2) miam install -y kubelet kubeadm kubectl kubernetes-cni
3) (/etc/systemd/system/kubelet.service.d/10-kubeadm.conf) ajoutez "--cgroup-driver=systemd" à la fin de la dernière ligne.
=> C'est parce que Docker utilise systemd pour cgroup-driver tandis que kubelet utilise cgroupfs pour cgroup-driver.
4) systemctl activer kubelet && systemctl démarrer kubelet
5) kubeadm init --pod-network-cidr 10.244.0.0/16
=> Si vous aviez l'habitude d'ajouter --api-advertise-addresses, vous devez utiliser --apiserver-advertise-address à la place.
6) cp /etc/kubernetes/admin.conf $HOME/
sudo chown $(id -u):$(id -g) $HOME/admin.conf
export KUBECONFIG=$HOME/admin.conf
=> Sans cette étape, vous pourriez obtenir une erreur avec kubectl get
=> je ne l'ai pas fait avec 1.5.2
7) kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel-rbac.yml
=> 1.6.0 introduit un contrôle d'accès basé sur les rôles, vous devez donc ajouter un ClusterRole et un ClusterRoleBinding avant de créer un démon Flannel
8) kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
=> Créer un démon Flannel
9) (sur chaque nœud esclave) kubeadm join --token (votre jeton) (ip):(port)
=> comme indiqué dans le résultat de kubeadm init

Toutes les étapes ci-dessus sont le résultat de la combinaison de suggestions de divers problèmes autour de Kubernetes-1.6.0, en particulier kubeadm.

J'espère que cela vous fera gagner du temps.

@eastcirclek @Sliim Tu es génial

@eastcirclek ce sont les étapes exactes que je viens d'exécuter en interrogeant également plusieurs forums. Un décalage horaire, peut-être ? Merci à tous, ce sujet m'a beaucoup aidé.

J'ai un serveur Ubuntu 16.04 sur AWS et j'ai suivi les étapes

  1. éditez /etc/systemd/system/kubelet.service.d/10-kubeadm.conf et supprimez $KUBELET_NETWORK_ARGS
  2. kubeadm reset pour nettoyer la tentative précédente de le démarrer
  3. kubeadm init --token=--apiserver-advertise-address=

qui a apparemment fonctionné correctement, mais lorsque j'essaie d'installer Calico en tant que plug-in réseau, j'obtiens l'erreur suivante
La connexion au serveur localhost:8080 a été refusée - avez-vous spécifié le bon hôte ou le bon port ?

L'équipe k8s travaille-t-elle sur un patch ?

Merci

@overip Je ne pense pas qu'un correctif soit requis pour cela... Il vous suffit de spécifier le bon fichier kubeconfig lors de l'utilisation de kubectl. kubeadm aurait dû l'écrire dans /etc/kubernetes/admin.conf .

@jimmycuadra pourriez-vous s'il vous plaît expliquer les étapes pour le faire?

@overip La sortie de kubeadm init a les instructions :

To start using your cluster, you need to run (as a regular user):

  sudo cp /etc/kubernetes/admin.conf $HOME/
  sudo chown $(id -u):$(id -g) $HOME/admin.conf
  export KUBECONFIG=$HOME/admin.conf

Personnellement, je préfère copier le fichier dans $HOME/.kube/config , c'est là que kubectl le recherchera par défaut. Ensuite, vous n'avez pas besoin de définir la variable d'environnement KUBECONFIG.

Si vous prévoyez d'utiliser kubectl depuis votre ordinateur local, vous pouvez utiliser scp (ou même simplement copier-coller le contenu) pour l'écrire sur ~/.kube/config sur votre propre ordinateur.

Recherchez « admin.conf » dans ce problème GitHub pour plus de détails. Cela a été mentionné à quelques reprises.

@eastcirclek - a suivi les étapes, mais pour une raison quelconque, les nœuds ne sont pas en mesure d'installer correctement la flanelle.
(Remarque : sur le maître, tout est fluide.)

Apr 13 22:31:11 node2 kubelet[22893]: I0413 22:31:11.666206   22893 kuberuntime_manager.go:458] Container {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] Args:[] WorkingDir: Ports:[] EnvFrom:[] Env:[] Resources:{Limits:map[] Requests:map[]} VolumeMounts:[{Name:cni ReadOnly:false MountPath:/etc/cni/net.d SubPath:} {Name:flannel-cfg ReadOnly:false MountPath:/etc/kube-flannel/ SubPath:} {Name:flannel-token-g65nf ReadOnly:true MountPath:/var/run/secrets/kubernetes.io/serviceaccount SubPath:}] LivenessProbe:nil ReadinessProbe:nil Lifecycle:nil TerminationMessagePath:/dev/termination-log TerminationMessagePolicy:File ImagePullPolicy:IfNotPresent SecurityContext:nil Stdin:false StdinOnce:false TTY:false} is dead, but RestartPolicy says that we should restart it.
Apr 13 22:31:11 node2 kubelet[22893]: I0413 22:31:11.666280   22893 kuberuntime_manager.go:742] checking backoff for container "install-cni" in pod "kube-flannel-ds-3smf7_kube-system(2e6ad0f9-207f-11e7-8f34-0050569120ff)"
Apr 13 22:31:12 node2 kubelet[22893]: I0413 22:31:12.846325   22893 operation_generator.go:597] MountVolume.SetUp succeeded for volume "kubernetes.io/configmap/2e6ad0f9-207f-11e7-8f34-0050569120ff-flannel-cfg" (spec.Name: "flannel-cfg") pod "2e6ad0f9-207f-11e7-8f34-0050569120ff" (UID: "2e6ad0f9-207f-11e7-8f34-0050569120ff").
Apr 13 22:31:12 node2 kubelet[22893]: I0413 22:31:12.846373   22893 operation_generator.go:597] MountVolume.SetUp succeeded for volume "kubernetes.io/secret/2e6ad0f9-207f-11e7-8f34-0050569120ff-flannel-token-g65nf" (spec.Name: "flannel-token-g65nf") pod "2e6ad0f9-207f-11e7-8f34-0050569120ff" (UID: "2e6ad0f9-207f-11e7-8f34-0050569120ff").

Partagez simplement ma méthode de contournement. Premièrement, $KUBELET_NETWORK_ARGS est requis, sinon CNI n'est pas activé/configuré. Supprimer puis restaurer $KUBELET_NETWORK_ARGS semble trop compliqué.
Lorsque kubeadm init affiche "[apiclient] Le premier nœud s'est enregistré, mais n'est pas encore prêt", le cluster k8s est en fait prêt à répondre à la demande. À ce moment-là, l'utilisateur peut simplement passer à l'étape 3/4 de https://kubernetes.io/docs/getting-started-guides/kubeadm/ comme suit.

To start using your cluster, you need to run (as a regular user):

  sudo cp /etc/kubernetes/admin.conf $HOME/
  sudo chown $(id -u):$(id -g) $HOME/admin.conf
  export KUBECONFIG=$HOME/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:  http://kubernetes.io/docs/admin/addons/

Lorsqu'un utilisateur installe le podnetwork, assurez-vous que le compte de service de la politique podnetwork dispose d'une autorisation suffisante. Prenant la flanelle comme exemple. Je viens de lier le rôle cluster-admin au compte de service de la flanelle comme suit. Ce n'est peut-être pas l'idéal et vous pouvez définir un rôle spécifique pour le compte de service en flanelle. BTW, lorsqu'un utilisateur déploie un autre service complémentaire comme le tableau de bord, il doit également accorder suffisamment d'autorisations au compte de service associé.

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: flannel:daemonset
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: flannel
  namespace:  kube-system

Une fois que le serveur podnetwork est prêt, kubeadm init indique que le nœud est prêt et que l'utilisateur peut continuer avec l'instruction.

Prenant la flanelle comme exemple. Je viens de lier le rôle cluster-admin au compte de service de la flanelle comme suit. Ce n'est peut-être pas l'idéal et vous pouvez définir un rôle spécifique pour le compte de service en flanelle.

Il y a déjà https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel-rbac.yml

Merci à tous pour l'aide.
Enfin, k8s 1.6.1 entièrement fonctionnel avec de la flanelle. Tout est maintenant dans des playbooks ansible.
Testé sur Centos/RHEL. Les préparatifs ont également commencé pour la base de Debian (par exemple, Ubuntu), mais il pourrait avoir besoin d'être affiné.

https://github.com/ReSearchITEng/kubeadm-playbook/blob/master/README.md

PS : travail basé sur sjenning/kubeadm-playbook - Merci beaucoup @sjenning

Obtenir ceci pour rejoindre un cluster :
[discovery] Création d'un client de découverte d'informations sur le cluster, en demandant des informations à " https://10.100.2.158 :6443"
[discovery] Échec de la demande d'informations sur le cluster, je réessayerai : [configmaps "cluster-info" est interdit : l'utilisateur " system:anonymous " ne peut pas obtenir les configmaps dans l'espace de noms "kube-public"]
[discovery] Échec de la demande d'informations sur le cluster, je réessayerai : [configmaps "cluster-info" est interdit : l'utilisateur " system:anonymous " ne peut pas obtenir les configmaps dans l'espace de noms "kube-public"]

J'ai démarré le nœud en tant que SelfHosting.

Cette page vous a été utile?
0 / 5 - 0 notes