Какие ключевые слова вы искали в выпусках Kubernetes перед тем, как подать это? (Если вы нашли какие-либо дубликаты, вы должны вместо этого ответить там.): Kubeadm
Это ОТЧЕТ ОБ ОШИБКЕ или ЗАПРОС О ФУНКЦИОНИРОВАНИИ? (выберите один): отчет об ошибке
Версия Kubernetes (используйте kubectl version
): 1.6.0
Окружающая среда :
uname -a
): 4.4.50-hypriotos-v7 +Что случилось :
Точно следуя руководству по 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
Последнее сообщение «Первый узел зарегистрирован, но еще не готов» повторяется бесконечно, и kubeadm никогда не завершает работу. Я подключился к главному серверу в другом сеансе, чтобы проверить, все ли контейнеры Docker работают должным образом, и они:
$ 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
Я скопировал admin kubeconfig на свой локальный компьютер и использовал kubectl (1.6.0), чтобы увидеть, что происходит с узлом, который, как утверждал kubeadm, был зарегистрирован:
$ 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
Это раскрыло причину, по которой кубелет не был готов:
«сеть времени выполнения не готова: NetworkReady = false, причина: NetworkPluginNotReady, сообщение: докер : сетевой плагин не готов: cni config»
В моих экспериментах с kubeadm 1.5 CNI не требовался для запуска главного узла, поэтому это удивительно. Даже в руководстве по началу работы предполагается, что kubeadm init
должен успешно завершиться, прежде чем вы перейдете к развертыванию подключаемого модуля CNI.
В любом случае, я развернул фланель с помощью kubectl со своей локальной машины:
$ kubectl apply -f kube-flannel.yml
Где было содержимое файла:
---
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
Но это никогда не планировалось:
$ 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>
Я все равно попытался присоединиться к одному из других серверов, просто чтобы посмотреть, что произойдет. Я использовал kubeadm token create
чтобы вручную создать токен, который я мог бы использовать с другой машины. На другой машине:
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)]
И последнее сообщение повторяется вечно.
Что вы ожидали :
kubeadm init
должен завершиться и произвести токен начальной загрузки.
Точно то же самое происходит со мной в Ubuntu 16.04.02, как GCE, так и локальные установки VMWare, версия Docker 1.12.6, ядро 4.8.0-44-generic 47 ~ 16.04.1-Ubuntu SMP.
Журнал kubelet показывает предупреждение об отсутствии /etc/cni/net.d перед ошибкой, которую мы видим в отчете 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
Та же проблема на виртуальной машине Ubuntu AWS. Докер 1.12.5
root @ ip-10-43-0-20 : ~ # версия kubeadm
kubeadm version: version.Info {Major: "1", Minor: "6", GitVersion: "v1.6.0", GitCommit: "fff5156092b56e6bd60fff75aad4dc9de6b6ef37", GitTreeState: "clean", BuildDate: "2017-03-28T16 30Z ", GoVersion:" go1.7.5 "
корень @ ip-10-43-0-20 : ~ # uname -a
Linux ip-10-43-0-20 4.4.0-45-generic # 66-Ubuntu SMP среда, 19 октября, 14:12:37 UTC 2016 x86_64 x86_64 x86_64 GNU / Linux
корень @ ip-10-43-0-20 : ~ # kubeadm init --config cfg.yaml
[kubeadm] ВНИМАНИЕ: kubeadm находится на стадии бета-тестирования, пожалуйста, не используйте его для производственных кластеров.
[init] Использование версии Kubernetes: v1.6.0
[init] Использование режима авторизации: RBAC
[init] ВНИМАНИЕ: для работы интеграции с облачным провайдером --cloud-provider должен быть установлен для всех кубелец в кластере.
(Для этого необходимо отредактировать /etc/systemd/system/kubelet.service.d/10-kubeadm.conf)
[предполетная] Проведение предполетных проверок
[предполетная] Запуск сервиса kubelet
[сертификаты] Сгенерированные сертификат CA и ключ.
[сертификаты] Сгенерированные сертификат и ключ сервера API.
[сертификаты] Сервер API, обслуживающий сертификат, подписан для имен DNS [ip-10-43-0-20 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] и IP-адресов [10.96.0.1 10.43.0.20 ]
[сертификаты] Сгенерированы сертификат клиента kubelet сервера API и ключ.
[сертификаты] Сгенерированные ключ подписи токена учетной записи службы и открытый ключ.
[сертификаты] Сгенерированные сертификат и ключ CA внешнего прокси.
[сертификаты] Сгенерированные клиентский сертификат и ключ внешнего прокси.
[сертификаты] Действующие сертификаты и ключи теперь находятся в "/ etc / kubernetes / pki"
[kubeconfig] Записал файл KubeConfig на диск: "/etc/kubernetes/admin.conf"
[kubeconfig] Записал файл KubeConfig на диск: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Записал файл KubeConfig на диск: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Записал файл KubeConfig на диск: "/etc/kubernetes/scheduler.conf"
[apiclient] Создан клиент API, ожидает готовности уровня управления
[apiclient] Все компоненты уровня управления исправны через 16,531681 секунды
[apiclient] Ожидает, пока хотя бы один узел зарегистрируется и станет готовым
[apiclient] Первый узел зарегистрирован, но еще не готов
[apiclient] Первый узел зарегистрирован, но еще не готов
[apiclient] Первый узел зарегистрирован, но еще не готов
++ та же проблема (Ubuntu 16.04.1)
То же самое и здесь, в Ubuntu 16.04
На CentOS 7 я понизил версию kubelet до 1.5.4
. Это решило проблему для меня. Кажется, что проверка готовности работает иначе в кубеле 1.6.0
.
Та же проблема с CentOS 7 на машине x64 с голым железом после обновления до k8s 1.6.0
Та же проблема в Ubuntu 16.04
Та же проблема в Ubuntu 16.04, ручной переход на более раннюю версию пакета kubelet
решил проблему.
# apt install kubelet=1.5.6-00
@ctrlaltdel у меня не сработало.
Я подозреваю, что это проблема Kubelet. Он не должен помечать узел как не готовый, когда CNI не настроен. Только модули, требующие CNI, должны быть помечены как неготовые.
@jbeda Знаете ли вы, когда эта проблема будет решена?
@kristiandrucker - нет - все еще выясняю, что происходит. Сначала необходимо устранить причину этого.
@jbeda Хорошо, но после того, как проблема будет решена, что
@kristiandrucker Это должно появиться в точечном выпуске k8s, если это проблема с kubelet.
Я подозреваю, что https://github.com/kubernetes/kubernetes/pull/43474 является основной причиной. Собираюсь сообщить об ошибке и связаться с людьми из сети.
@dcbw Ты здесь?
Похоже, проблема в том, что DaemonSet не запланирован для узлов, у которых есть условие Net stNetwork: true должен быть запланирован на узле Net workReady: false , а модуль ho
В качестве обходного пути добавление аннотации scheduler.alpha.kubernetes.io/critical-pod
к вашему набору DaemonSet снова заставит вас работать?
@janetkuo @lukaszo можете ли вы
Кстати, в # sig-network продолжается обсуждение Slack.
Та же проблема CentOS 7 x64
@prapdm кажется незащищенным от того, какой дистрибутив вы используете.
CentOS Linux версии 7.3.1611 (Core)
Я пробовал это на одном узле с Ubuntu 16.04. Зависает с сообщением "еще не готов". Я также вручную создал фланелевый DaemonSet, но в моем случае он без проблем спланировал один модуль. Сам модуль демона вошел в CrashLoopBackOff с ошибкой: 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)
Еще попробую на Centos, но не думаю, что здесь виноват DaemonSet, здесь зависает kubeadm.
это ошибка разрешения rbac.
@jimmycuadra Я только что заметил, что вы запускаете его на Raspberry Pi с процессором
Для набора фланелевых демонов у вас есть:
nodeSelector:
beta.kubernetes.io/arch: amd64
but your node is labeled with:
beta.kubernetes.io/arch=arm
`` ''
Таким образом, DaemonSet не может обедать модуль на этом узле, просто измените селектор узла, и он будет работать.
Вы все равно получите сообщение об ошибке с разрешением rbac, но, возможно, @mikedanese расскажет вам, как это исправить, потому что я этого не знаю.
Ах, спасибо @lukaszo! В этот раз я не следовал руководству по RPi (которое я использовал для k8s 1.5) и забыл об этом шаге. Я бы обнаружил это, когда в наборе демона возникла ошибка, но, как оказалось, я не зашел так далеко. :}
Я также вижу эту проблему, когда следую инструкциям, описанным здесь:
https://blog.hypriot.com/post/setup-kubernetes-raspberry-pi-cluster/
удалось заставить его работать после установки правильного фланелевого сетевого модуля.
Я думаю, что @jimmycuadra может заставить его работать с комментарием @lukaszo .
Когда появится сообщение [apiclient] First node has registered, but is not ready yet
start flooding, сервер API Kubernetes будет запущен, поэтому вы можете:
curl -sSL https://rawgit.com/coreos/flannel/master/Documentation/kube-flannel.yml | kubectl create -f -
Для установки raspberry pi:
curl -sSL https://rawgit.com/coreos/flannel/master/Documentation/kube-flannel.yml | sed "s/amd64/arm/g" | kubectl create -f -
Тогда он закончится:
[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
У меня была такая же проблема, и я исправил ее следующим образом:
ты должен быть root
в 1.6.0 kubeadm вы должны удалить переменную окружения $ KUBELET_NETWORK_ARGS в системном файле: /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
затем перезапустите демонов
systemctl daemon-reload
kubeadm init
это займет немного времени ... после успеха
загрузите сетевое дополнение, которое хотите использовать: http://kubernetes.io/docs/admin/addons/
ситцевая ткань кажется лучшей, не уверен, но все еще испытываю для меня.
@thelastworm
Я просто пытался это сделать, но ничего не вышло.
Ubuntu 16.04.2 LTS, kubeadm 1.6.0
Я сделал следующие шаги:
kubeadm reset
чтобы очистить предыдущую попытку запустить егоkubeadm init --token=<VALUE> --apiserver-advertise-address=<IP>
[ИЗМЕНИТЬ]
Это сработало после того, как @ srinat999 указал на необходимость запуска systemctl daemon-reload
перед kubeadm init
Решение @jcorral сработало для меня с одним изменением развертывания фланели, поскольку незащищенный порт API больше не создается kubeadm
.
curl -sSL https://rawgit.com/coreos/flannel/master/Documentation/kube-flannel.yml | \
kubectl --kubeconfig /etc/kubernetes/admin.conf create -f -
@MaximF Вы должны сделать systemctl daemon-reload
после изменения файла conf. Работал у меня.
@jcorral У меня работает твое решение. Спасибо.
@MaximF, я просто добавляю командную строку демона перезапуска
kubeadm init завершается успешно, но когда я проверяю версию, получаю следующую ошибку:
Версия клиента: version.Info {Major: «1», Minor: «6», GitVersion: «v1.6.0», GitCommit: «fff5156092b56e6bd60fff75aad4dc9de6b6ef37», GitTreeState: «clean», BuildDate: «2017-03-28T16: 36: 33Z ", GoVersion:" go1.7.5 ", компилятор:" gc ", платформа:" linux / amd64 "}
В соединении с сервером localhost: 8080 было отказано - вы указали правильный хост или порт?
@haribole
Вы должны установить KUBECONFIG env var
Кто-нибудь заставил Flannel искать обходные пути, связанные с CNI? Я могу решить проблему "не готов", но когда я запускаю Flannel, я получаю следующее сообщение об ошибке:
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)
Статус Pods показывает "CrashLoopBackOff"
Вам нужно добавить роли rbac, чтобы разрешить flannel читать из API.
Вам нужно добавить роли rbac, чтобы разрешить flannel читать из API.
Если кому-то еще интересно, что это означает, похоже, вам нужно создать kube-flannel-rbac.yml
прежде чем создавать фланель:
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
Я думаю, поскольку основная проблема решена и соответствующий тикет закрыт , мы должны закрыть и эту :)
Просто для информации: теперь он работает у меня с обновленными пакетами под Ubuntu 16.04.
1.6.1 у меня работает! Спасибо всем, кто помог исправить это исправление!
Я успешно настроил свой кластер Kubernetes на centos-release-7-3.1611.el7.centos.x86_64, выполнив следующие шаги (я предполагаю, что Docker уже установлен):
1) (из /etc/yum.repo.d/kubernetes.repo) baseurl = http: //yum.kubernetes.io/repos/kubernetes-el7-x86_64-unstable
=> Чтобы использовать нестабильный репозиторий для последней версии Kubernetes 1.6.1
2) yum install -y kubelet kubeadm kubectl kubernetes-cni
3) (/etc/systemd/system/kubelet.service.d/10-kubeadm.conf) добавьте "--cgroup-driver = systemd" в конец последней строки.
=> Это потому, что Docker использует systemd для cgroup-driver, а kubelet использует cgroupfs для cgroup-driver.
4) systemctl включить kubelet && systemctl start kubelet
5) kubeadm init --pod-network-cidr 10.244.0.0/16
=> Если вы раньше добавляли --api-Advertise-addresses, вам нужно вместо этого использовать --apiserver-Advertise-address.
6) cp /etc/kubernetes/admin.conf $ HOME /
sudo chown $ (идентификатор -u): $ (идентификатор -g) $ HOME / admin.conf
экспорт KUBECONFIG = $ HOME / admin.conf
=> Без этого шага вы можете получить ошибку с помощью kubectl get
=> Я этого не делал с 1.5.2
7) kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel-rbac.yml
=> 1.6.0 вводит управление доступом на основе ролей, поэтому вы должны добавить ClusterRole и ClusterRoleBinding перед созданием демона Flannel
8) kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
=> Создать демон Flannel
9) (на каждом подчиненном узле) kubeadm join --token (ваш токен) (ip) :( порт)
=> как показано в результате kubeadm init
Все вышеперечисленные шаги являются результатом объединения предложений из различных проблем, связанных с Kubernetes-1.6.0, особенно с kubeadm.
Надеюсь, это сэкономит ваше время.
@eastcirclek @Sliim Ты
@eastcirclek, это были именно те шаги, которые я только что выполнил, запросив также несколько форумов. Может быть, разница в часовых поясах? Спасибо всем, эта тема была действительно полезной.
У меня есть сервер Ubuntu 16.04 на AWS, и я выполнил шаги
который, по-видимому, работал правильно, но затем, когда я пытаюсь установить Calico в качестве сетевого плагина, я получаю следующую ошибку
В соединении с сервером localhost: 8080 было отказано - вы указали правильный хост или порт?
Команда k8s работает над патчем?
Спасибо
@overip Я не думаю, что для этого требуется какой-либо патч ... Вам просто нужно указать правильный файл kubeconfig при использовании kubectl. kubeadm должен был записать его в /etc/kubernetes/admin.conf
.
@jimmycuadra, не могли бы вы объяснить, как это сделать?
@overip В выводе kubeadm init
есть инструкции:
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
Лично я предпочитаю копировать файл в $HOME/.kube/config
, где kubectl будет искать его по умолчанию. Тогда вам не нужно устанавливать переменную окружения KUBECONFIG.
Если вы планируете использовать kubectl со своего локального компьютера, вы можете использовать scp
(или даже просто скопировать и вставить содержимое), чтобы записать его в ~/.kube/config
на вашем собственном компьютере.
Поищите "admin.conf" в этом выпуске GitHub для получения дополнительных сведений. Об этом упоминалось несколько раз.
@eastcirclek - выполнил шаги, но по какой-то причине узлы не могут правильно установить фланель.
(Примечание: на мастере все гладко.)
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").
Просто поделитесь моим методом обхода. Во-первых, требуется $ KUBELET_NETWORK_ARGS, иначе CNI не будет включен / настроен. Удаление и последующее восстановление $ KUBELET_NETWORK_ARGS кажется слишком сложным.
Когда kubeadm init показывает «[apiclient] Первый узел зарегистрирован, но еще не готов», кластер k8s фактически готов обслуживать запрос. В то время пользователь мог просто перейти к шагу 3/4 https://kubernetes.io/docs/getting-started-guides/kubeadm/ следующим образом.
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/
Когда пользователь устанавливает podnetwork, убедитесь, что сервисному аккаунту политики podnetwork предоставлено достаточно прав. Возьмем, к примеру, фланель. Я просто привязываю роль администратора кластера к служебной учетной записи flannel следующим образом. Это может быть не идеально, и вы могли бы определить конкретную роль для фланелевого сервисного аккаунта. Кстати, когда пользователь развертывает другую дополнительную службу, такую как панель инструментов, также требуется предоставить достаточно разрешений для связанной учетной записи службы.
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
После того, как сервер podnetwork будет готов, kubeadm init покажет, что узел готов, и пользователь может продолжить выполнение инструкций.
Возьмем, к примеру, фланель. Я просто привязываю роль администратора кластера к служебной учетной записи flannel следующим образом. Это может быть не идеально, и вы могли бы определить конкретную роль для фланелевого сервисного аккаунта.
Уже есть https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel-rbac.yml
Спасибо всем за помощь.
Наконец-то полностью рабочий k8s 1.6.1 с фланелью. Все теперь в доступных плейбуках.
Проверено на Centos / RHEL. Началась подготовка и для Debian на основе (например, Ubuntu), но может потребоваться некоторая доработка.
https://github.com/ReSearchITEng/kubeadm-playbook/blob/master/README.md
PS: работа на основе sjenning / kubeadm-playbook - Большое спасибо @sjenning
Приготовление для присоединения к кластеру:
[обнаружение] Создан клиент обнаружения информации о кластере, запрашивающий информацию с " https://10.100.2.158 : 6443"
[обнаружение] Не удалось запросить информацию о кластере, попытаюсь снова: [configmaps "cluster-info" запрещен: пользователь " system: anonymous " не может получить configmaps в пространстве имен "kube-public"]
[обнаружение] Не удалось запросить информацию о кластере, попытаюсь снова: [configmaps "cluster-info" запрещен: пользователь " system: anonymous " не может получить configmaps в пространстве имен "kube-public"]
Я запустил узел как SelfHosting.
Самый полезный комментарий
Если кому-то еще интересно, что это означает, похоже, вам нужно создать
kube-flannel-rbac.yml
прежде чем создавать фланель: