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 :
uname -a
): 4.4.50-hypriotos-v7+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.
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 :
kubeadm reset
pour nettoyer la tentative précédente de le démarrerkubeadm 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
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.
Commentaire le plus utile
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 :