<p>kubeadm init atascado en "El primer nodo se ha registrado, pero aún no está listo"</p>

Creado en 29 mar. 2017  ·  52Comentarios  ·  Fuente: kubernetes/kubeadm

¿Qué palabras clave buscó en los problemas de Kubernetes antes de presentar este? (Si ha encontrado duplicados, debe responder allí): kubeadm

¿Es este un INFORME DE ERROR o una SOLICITUD DE FUNCIÓN? (elija uno): informe de error

Versión de Kubernetes (use kubectl version ): 1.6.0

Medio ambiente :

  • Proveedor de nube o configuración de hardware : Raspberry Pi 3 Modelo B
  • SO (por ejemplo, de / etc / os-release): Hypriot 1.4.0 (con Docker rebajado manualmente a 1.12.6, Hypriot 1.4.0 se envía con Docker 17.03.0-ce)
  • Kernel (por ejemplo, uname -a ): 4.4.50-hypriotos-v7 +
  • Instalar herramientas : kubeadm
  • Otros :

Que paso :

Siguiendo exactamente la guía de introducción 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

Ese último mensaje, "El primer nodo se ha registrado, pero aún no está listo" se repite infinitamente y kubeadm nunca termina. Me conecté al servidor maestro en otra sesión para ver si todos los contenedores Docker se estaban ejecutando como se esperaba y son:

$ 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

Copié el administrador kubeconfig en mi máquina local y usé kubectl (1.6.0) para ver qué estaba pasando con el nodo que kubeadm afirmaba que estaba registrado:

$ 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

Esto descubrió la razón por la que el kubelet no estaba listo:

"La red en tiempo de ejecución no está lista: NetworkReady = motivo falso mensaje: docker : el complemento de red no está listo: cni config"

En mis experimentos con kubeadm 1.5, no se necesitaba CNI para abrir el nodo maestro, por lo que esto es sorprendente. Incluso la guía de introducción sugiere que kubeadm init debería finalizar correctamente antes de continuar con la implementación de un complemento CNI.

De todos modos, implementé franela usando kubectl desde mi máquina local:

$ kubectl apply -f kube-flannel.yml

Dónde estaba el contenido del archivo:

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

Pero nunca programó:

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

Intenté unirme a uno de los otros servidores de todos modos, solo para ver qué pasaba. Usé kubeadm token create para crear manualmente un token que podría usar desde otra máquina. En la otra máquina:

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

Y el mensaje final se repite para siempre.

Qué esperabas que sucediera :

kubeadm init debe completar y producir un token de arranque.

Comentario más útil

Debe agregar roles rbac para autorizar a Flannel a leer desde la API.

En caso de que alguien más se pregunte qué significa esto, parece que necesita crear kube-flannel-rbac.yml antes de crear franela:

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

Todos 52 comentarios

Me está sucediendo exactamente lo mismo en Ubuntu 16.04.02, tanto en GCE como en instalaciones locales de VMWare, Docker versión 1.12.6, kernel 4.8.0-44-generic 47 ~ 16.04.1-Ubuntu SMP.

El registro de kubelet muestra una advertencia sobre la falta de /etc/cni/net.d antes del error que vemos en el informe 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

Mismo problema en Ubuntu AWS VM. Docker 1.12.5

root @ ip-10-43-0-20 : ~ # versión kubeadm
kubeadm version: version.Info {Major: "1", Minor: "6", GitVersion: "v1.6.0", GitCommit: "fff5156092b56e6bd60fff75aad4dc9de6b6ef37", GitTreeState: "clean", BuildDate: "2017: 24-03-28T16: 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 Mié 19 de octubre 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] ADVERTENCIA: kubeadm está en versión beta, no lo use para clústeres de producción.
[init] Con la versión de Kubernetes: v1.6.0
[init] Usando el modo de autorización: RBAC
[init] ADVERTENCIA: Para que las integraciones de proveedor de nube funcionen, se debe configurar el proveedor de nube para todos los kubelets del clúster.
(/etc/systemd/system/kubelet.service.d/10-kubeadm.conf debe editarse para este propósito)
[Preflight] Ejecución de comprobaciones previas al vuelo
[Preflight] Iniciando el servicio de kubelet
[certificados] Certificado y clave de CA generados.
[certificados] Certificado y clave de servidor API generados.
[certificados] El certificado de servicio del servidor API está firmado para nombres DNS [ip-10-43-0-20 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] e IP [10.96.0.1 10.43.0.20 ]
[certificados] Certificado y clave del cliente kubelet del servidor API generado.
[certificados] Clave de firma de token de cuenta de servicio generada y clave pública.
[certificados] Certificado y clave de CA de proxy frontal generados.
[certificados] Certificado y clave de cliente de proxy frontal generados.
[certificados] Los certificados y claves válidos ahora existen en "/ etc / kubernetes / pki"
[kubeconfig] Escribió el archivo KubeConfig en el disco: "/etc/kubernetes/admin.conf"
[kubeconfig] Escribió el archivo KubeConfig en el disco: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Escribió el archivo KubeConfig en el disco: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Escribió el archivo KubeConfig en el disco: "/etc/kubernetes/scheduler.conf"
[apiclient] Cliente de API creado, esperando que el plano de control esté listo
[apiclient] Todos los componentes del plano de control están en buen estado después de 16.531681 segundos
[apiclient] Esperando que al menos un nodo se registre y esté listo
[apiclient] El primer nodo se ha registrado, pero aún no está listo
[apiclient] El primer nodo se ha registrado, pero aún no está listo
[apiclient] El primer nodo se ha registrado, pero aún no está listo

++ el mismo problema (Ubuntu 16.04.1)

Lo mismo aquí en Ubuntu 16.04

En CentOS 7, bajé el kubelet a 1.5.4 . Eso me resolvió. Parece que el cheque listo funciona de manera diferente en el kubelet 1.6.0 .

El mismo problema en CentOS 7 en una máquina x64 bare metal, desde la actualización a k8s 1.6.0

Mismo problema en Ubuntu 16.04

El mismo problema en Ubuntu 16.04, la degradación manual del paquete kubelet resolvió el problema.

# apt install kubelet=1.5.6-00

@ctrlaltdel no funcionó para mí.

Sospecho que se trata de un problema de Kubelet. No debería marcar el nodo como no listo cuando CNI no está configurado. Solo las vainas que requieren CNI deben marcarse como no listas.

@jbeda ¿Sabes cuándo se resolverá este problema?

@kristiandrucker - no - todavía

@jbeda Ok, pero después de que se resuelva el problema, ¿entonces qué? ¿Reconstruir kubelet desde la fuente?

@kristiandrucker Esto tendrá que salir en una versión puntual de k8s si se trata de un problema de kubelet.

Sospecho que https://github.com/kubernetes/kubernetes/pull/43474 es la causa principal. Ir a presentar un error y hacer un seguimiento con la gente de la red.

@dcbw ¿ Estás por aquí?

Parece que el problema es que un DaemonSet no está programado para los nodos que tienen la condición Net stNetwork: true debe programarse en un nodo que es Net workReady: false , pero un pod ho

Como solución alternativa, ¿agregar la anotación scheduler.alpha.kubernetes.io/critical-pod en su DaemonSet hace que las cosas funcionen nuevamente?

@janetkuo @lukaszo ¿puedes clasificar el comportamiento de DS?

También hay una discusión en curso en # sig-network sobre la holgura, por cierto.

Mismo problema CentOS 7 x64

@prapdm esto parece indefenso de la distribución que está ejecutando.

Versión 7.3.1611 de CentOS Linux (núcleo)

Lo probé en un nodo con Ubuntu 16.04. Se cuelga con el mensaje "aún no está listo". También creé manualmente Flannel DaemonSet pero en mi caso programé un pod sin ningún problema. El mismo pod daemon entró en CrashLoopBackOff con el error: 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)

También probaré Centos, pero no creo que DaemonSet tenga la culpa aquí, kubeadm se cuelga aquí.

eso es un error de permiso rbac.

@jimmycuadra Acabo de notar que lo estás ejecutando en raspberry pi que tiene un procesador de brazo.

Para el conjunto de demonios de franela tienes:

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

but your node is labeled with: 

beta.kubernetes.io/arch=arm
''

Entonces, DaemonSet no puede almorzar en este nodo, simplemente cambie el selector de nodo y funcionará.
Seguirá recibiendo el error con el permiso rbac, pero tal vez @mikedanese le diga cómo solucionarlo porque no lo sé.

¡Ah, gracias @lukaszo! Esta vez no estaba siguiendo la guía específica de RPi (que usé para k8s 1.5) y olvidé ese paso. Lo habría descubierto cuando el daemon set erró, pero resulta que no llegué tan lejos. :}

También veo este problema cuando sigo las instrucciones que se describen aquí:
https://blog.hypriot.com/post/setup-kubernetes-raspberry-pi-cluster/

logró que funcionara después de instalar el módulo de red de franela correcto.

Creo que @jimmycuadra podría hacerlo funcionar con el comentario de @lukaszo .

Cuando el mensaje [apiclient] First node has registered, but is not ready yet comience a inundar, el servidor de la API de kubernetes se ejecutará para que pueda:

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

Para la instalación de raspberry pi:

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

Entonces terminará:

[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

Tuve el mismo problema y lo solucioné de esta manera:
deberías ser root

en 1.6.0 de kubeadm debe eliminar la variable de entorno $ KUBELET_NETWORK_ARGS en el archivo del sistema: /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

luego reinicia los demonios

systemctl daemon-reload

kubeadm init

esto toma un poco de tiempo ... después del éxito

descargue el complemento de red que desea utilizar: http://kubernetes.io/docs/admin/addons/

Calico parece ser el mejor, no estoy seguro, pero todavía está en prueba para mí.

@thelastworm
Intenté hacerlo y no funcionó.
Ubuntu 16.04.2 LTS, kubeadm 1.6.0
Hice los siguientes pasos:

  1. edite /etc/systemd/system/kubelet.service.d/10-kubeadm.conf y elimine $ KUBELET_NETWORK_ARGS
  2. kubeadm reset para limpiar el intento anterior de iniciarlo
  3. kubeadm init --token=<VALUE> --apiserver-advertise-address=<IP>

[EDITADO]
Funcionó después de que @ srinat999 señalara la necesidad de ejecutar systemctl daemon-reload antes de kubeadm init

La solución de @jcorral funcionó para mí con un cambio en la implementación de franela, ya que kubeadm ya no crea el puerto API inseguro.

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

@MaximF Tienes que hacer systemctl daemon-reload después de cambiar el archivo conf. Trabajó para mi.

@jcorral Tu solución me funciona. Gracias.

@MaximF acabo de agregar la línea de comando reiniciar demonio

kubeadm init se completa correctamente, pero cuando verifico la versión, aparece el siguiente error:

Versión del cliente: version.Info {Major: "1", Minor: "6", GitVersion: "v1.6.0", GitCommit: "fff5156092b56e6bd60fff75aad4dc9de6b6ef37", GitTreeState: "clean", BuildDate: "2017-03-28T16: 36: 33Z ", GoVersion:" go1.7.5 ", Compilador:" gc ", Plataforma:" linux / amd64 "}
La conexión al servidor localhost: 8080 fue rechazada. ¿Especificó el host o puerto correcto?

@haribole
Debe configurar la var env KUBECONFIG

¿Alguien ha conseguido que Flannel se ejecute después de las soluciones alternativas relacionadas con la CNI? Puedo pasar el problema de no estar listo, pero cuando ejecuto Flannel, aparece un error que se ve así:

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)

El estado de los pods muestra "CrashLoopBackOff"

Debe agregar roles rbac para autorizar a Flannel a leer desde la API.

Debe agregar roles rbac para autorizar a Flannel a leer desde la API.

En caso de que alguien más se pregunte qué significa esto, parece que necesita crear kube-flannel-rbac.yml antes de crear franela:

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

Creo que debido a que se resuelve un problema de raíz y se cierra el ticket relacionado , deberíamos cerrar este también :)

Solo para información: ahora me está funcionando con los paquetes actualizados en Ubuntu 16.04.

1.6.1 ¡funciona para mí! ¡Gracias a todos los que ayudaron a solucionar este problema!

Configuré con éxito mi clúster de Kubernetes en centos-release-7-3.1611.el7.centos.x86_64 siguiendo los siguientes pasos (supongo que Docker ya está instalado):

1) (de /etc/yum.repo.d/kubernetes.repo) baseurl = http: //yum.kubernetes.io/repos/kubernetes-el7-x86_64-unstable
=> Para usar el repositorio inestable para la última versión de Kubernetes 1.6.1
2) yum install -y kubelet kubeadm kubectl kubernetes-cni
3) (/etc/systemd/system/kubelet.service.d/10-kubeadm.conf) agregue "--cgroup-driver = systemd" al final de la última línea.
=> Esto se debe a que Docker usa systemd para cgroup-driver mientras que kubelet usa cgroupfs para cgroup-driver.
4) systemctl enable kubelet && systemctl start kubelet
5) kubeadm init --pod-network-cidr 10.244.0.0/16
=> Si solía agregar --api-publicidad-direcciones, necesita usar --apiserver-publicidad-dirección en su lugar.
6) cp /etc/kubernetes/admin.conf $ INICIO /
sudo chown $ (id -u): $ (id -g) $ HOME / admin.conf
exportar KUBECONFIG = $ HOME / admin.conf
=> Sin este paso, es posible que obtenga un error con kubectl get
=> No lo hice con 1.5.2
7) kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel-rbac.yml
=> 1.6.0 introduce un control de acceso basado en roles, por lo que debe agregar un ClusterRole y un ClusterRoleBinding antes de crear un daemonset Flannel
8) kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
=> Crear un conjunto de demonios de franela
9) (en cada nodo esclavo) kubeadm join --token (su token) (ip) :( puerto)
=> como se muestra en el resultado de kubeadm init

Todos los pasos anteriores son el resultado de combinar sugerencias de varios problemas relacionados con Kubernetes-1.6.0, especialmente kubeadm.

Espero que esto le ahorre tiempo.

@eastcirclek @Sliim Eres genial

@eastcirclek, estos fueron los pasos exactos que acabo de ejecutar consultando varios foros también. ¿Una diferencia de zona horaria, tal vez? Gracias a todos, este tema fue realmente útil.

Tengo el servidor Ubuntu 16.04 en AWS y seguí los pasos

  1. edite /etc/systemd/system/kubelet.service.d/10-kubeadm.conf y elimine $ KUBELET_NETWORK_ARGS
  2. kubeadm restablece para limpiar el intento anterior de iniciarlo
  3. kubeadm init --token =--apiserver-publicidad-dirección =

que aparentemente funcionó correctamente, pero luego, cuando intento instalar Calico como complemento de red, aparece el siguiente error
La conexión al servidor localhost: 8080 fue rechazada. ¿Especificó el host o puerto correcto?

¿El equipo de k8s está trabajando en un parche?

Gracias

@overip No creo que se requiera ningún parche para eso ... Solo necesita especificar el archivo kubeconfig correcto cuando use kubectl. kubeadm debería haberlo escrito en /etc/kubernetes/admin.conf .

@jimmycuadra, ¿ podrías explicar los pasos para hacerlo?

@overip La salida de kubeadm init tiene las instrucciones:

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

Personalmente, prefiero copiar el archivo en $HOME/.kube/config , que es donde kubectl lo buscará de forma predeterminada. Entonces no es necesario configurar la variable de entorno KUBECONFIG.

Si planea usar kubectl desde su máquina local, puede usar scp (o incluso simplemente copiar y pegar el contenido) para escribirlo en ~/.kube/config en su propia computadora.

Busque "admin.conf" en este problema de GitHub para obtener más detalles. Se ha mencionado varias veces.

@eastcirclek : siguió los pasos, pero por alguna razón los nodos no pueden instalar la franela correctamente.
(Nota: en el maestro todo es fluido).

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").

Solo comparte mi método de solución. En primer lugar, se requiere $ KUBELET_NETWORK_ARGS; de lo contrario, CNI no está habilitado / configurado. Eliminar y luego restaurar $ KUBELET_NETWORK_ARGS parece demasiado complicado.
Cuando kubeadm init muestra "[apiclient] El primer nodo se ha registrado, pero aún no está listo", el clúster k8s está realmente listo para atender la solicitud. En ese momento, el usuario simplemente puede pasar al paso 3/4 de https://kubernetes.io/docs/getting-started-guides/kubeadm/ de la siguiente manera.

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/

Cuando un usuario instala podnetwork, asegúrese de que la cuenta de servicio de la política de podnetwork tenga el permiso suficiente. Tomando la franela como ejemplo. Solo vinculo el rol de administrador de clúster a la cuenta de servicio de franela de la siguiente manera. Puede que no sea lo ideal, y podría definir un rol específico para la cuenta de servicio de franela. Por cierto, cuando un usuario implementa otro servicio complementario como el tablero, también requiere otorgar suficiente permiso a la cuenta de servicio relacionada.

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

Una vez que el servidor de podnetwork esté listo, kubeadm init mostrará que el nodo está listo y el usuario podrá continuar con la instrucción.

Tomando la franela como ejemplo. Solo vinculo el rol de administrador de clúster a la cuenta de servicio de franela de la siguiente manera. Puede que no sea lo ideal, y podría definir un rol específico para la cuenta de servicio de franela.

Ya existe https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel-rbac.yml

Gracias a todos por la ayuda.
Finalmente k8s 1.6.1 completamente funcional con franela. Todo está ahora en libros de jugadas ansible.
Probado en Centos / RHEL. También comenzaron los preparativos para Debian (por ejemplo, Ubuntu), pero es posible que sea necesario perfeccionarlo.

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

PD: trabajo basado en sjenning / kubeadm-playbook - Muchas gracias @sjenning

Obteniendo esto para unirse a un clúster:
[descubrimiento] Se creó el cliente de descubrimiento de información de clúster, solicitando información de " https://10.100.2.158 : 6443"
[descubrimiento] No se pudo solicitar la información del clúster, lo intentaremos de nuevo: [configmaps "cluster-info" está prohibido: el usuario " system: anonymous " no puede obtener configmaps en el espacio de nombres "kube-public"]
[descubrimiento] No se pudo solicitar la información del clúster, lo intentaremos de nuevo: [configmaps "cluster-info" está prohibido: el usuario " system: anonymous " no puede obtener configmaps en el espacio de nombres "kube-public"]

Comencé el nodo como SelfHosting.

¿Fue útil esta página
0 / 5 - 0 calificaciones