Где находится куб-аписервер

Базовый вопрос: когда я пытаюсь использовать 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"}}}'
Другие вопросы по тегам