Где находится куб-аписервер
Базовый вопрос: когда я пытаюсь использовать kube-apiserver на своем главном узле, я получаю команду not found. Как я могу установить / настроить kube-apiserver? Любая ссылка на пример поможет.
$ kube-apiserver --enable-admission-plugins DefaultStorageClass
-bash: kube-apiserver: command not found
Подробности: я новичок в Kubernetes и Docker и пытался создать StatefulSet с помощью volumeClaimTemplates. Моя проблема заключается в том, что автоматические PV не создаются, и я получаю следующее сообщение в журнале PVC: "persistentvolume-controller ожидает создания тома". Я не уверен, нужно ли мне определять DefaultStorageClass и поэтому нужен kube-apiserver для его определения.
Name: nfs
Namespace: default
StorageClass: example-nfs
Status: Pending
Volume:
Labels: <none>
Annotations: volume.beta.kubernetes.io/storage-provisioner=example.com/nfs
Finalizers: [kubernetes.io/pvc-protection]
Capacity:
Access Modes:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ExternalProvisioning 3m (x2401 over 10h) persistentvolume-controller waiting for a volume to be created, either by external provisioner "example.com/nfs" or manually created by system administrator
Вот получить результат ПВХ:
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
nfs Pending example-nfs 10h
И получить класс хранения:
$ kubectl describe storageclass example-nfs
Name: example-nfs
IsDefaultClass: No
Annotations: <none>
Provisioner: example.com/nfs
Parameters: <none>
AllowVolumeExpansion: <unset>
MountOptions: <none>
ReclaimPolicy: Delete
VolumeBindingMode: Immediate
Events: <none>
Как я могу устранить эту проблему (например, журналы, почему хранилище не было создано)?
1 ответ
Здесь вы задаете два разных вопроса, один о конфигурации kube-apiserver, другой о поиске и устранении неисправностей вашего StorageClass
,
Вот ответ на ваш первый вопрос:
kube-apiserver
работает как контейнер Docker на вашем главном узле. Поэтому бинарный файл находится внутри контейнера, а не в вашей хост-системе. Это запускается магистром kubelet
из файла, расположенного в /etc/kubernetes/manifests
, kubelet
наблюдает за этим каталогом и запустит любой Pod, определенный здесь как "static pods".
Настроить kube-apiserver
аргументы командной строки, которые нужно изменить /etc/kubernetes/manifests/kube-apiserver.yaml
на вашем хозяине.
Сошлюсь на вопрос о местонахождении api-сервера.
Основной ответ (конкретный для заголовка вопроса):
Kube apiserver расположен на главном узле (известном как плоскость управления).
Это может быть выполнено:
1) Через систему инициализации хоста (например, systemd).
2) Как капсула (я объясню ниже).
В обоих случаях он будет расположен на плоскости управления (слева внизу):
Если он работает под systemD, вы можете запустить:
systemctl status api-server
чтобы увидеть путь к файлу конфигурации (drop-in).
Если он запущен как модуль, вы можете просмотреть его под
kube-system
пространство имен со всеми другими компонентами панели управления (плюс kube-proxy и, возможно, сетевое решение, подобное плетению ниже):
$ kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-f9fd979d6-lpdlc 1/1 Running 1 2d22h
coredns-f9fd979d6-vcs7g 1/1 Running 1 2d22h
etcd-my-master 1/1 Running 1 2d22h
kube-apiserver-my-master 1/1 Running 1 2d22h #<----Here
kube-controller-manager-my-master 1/1 Running 1 2d22h
kube-proxy-kh2lc 1/1 Running 1 2d22h
kube-scheduler-my-master 1/1 Running 1 2d22h
weave-net-59r5b 2/2 Running 3 2d22h
Вы можете запустить:
kubectl describe pod/kube-apiserver-my-master -n kube-system
Чтобы получить более подробную информацию о pod.
Немного более продвинутый ответ:
(относительно расположения /etc/kubernetes/manifest)
Допустим, мы не знаем, где найти соответствующий путь для файла конфигурации kube-api-server.
Но нам нужно помнить две важные вещи:
1) На главном узле запущен kube-api-server.
2) Kubelet не работает как под, и когда компоненты уровня управления (плюс kube-proxy) выполняются как статические поды, это выполняется Kubelet на главном узле.
Итак, мы можем начать наше путешествие по пути манифестов, исследуя логи Kubelet.
Если Kubelet работает долгое время, это будет очень большой файл, и нам нужно будет его куда-то сбросить и перейти к попрошайничеству - или, если Kubelet был запущен 5 минут назад, мы можем запустить:
sudo journalctl -u kubelet --since -5m >> kubelet_5_minutes.log
И быстрый поиск по запросу "api-server" приведет нас к двум строкам ниже, где указан путь к указанному пути:
my-master kubelet[71..]: 00:03:21 kubelet.go:261] Adding pod path: /etc/kubernetes/manifests
my-master kubelet[71..]: 00:03:21 kubelet.go:273] Watching apiserver
А также мы видим, что Kubelet пытается создать модуль kube-apiserver под
my-master
узел и внутри
kube-system
пространство имен:
my-master kubelet[71..]: 00:03:29.05 kubelet.go:1576] ..
Creating a mirror pod for "kube-apiserver-my-master_kube-system
Чтобы сделать класс хранилища "example-nfs" по умолчанию, вам необходимо выполнить следующую команду:
kubectl patch storageclass example-nfs -p '{"metadata":
{"annotations": {"storageclass.kubernetes.io/is-default-class": "true"}}}'