Установка Kubernetes в Unix/Linux

Установка Kubernetes в Unix/Linux

Kubernetes — это предназначенный для контейнерной оркестровки фреймворк с открытым исходным кодом. Он был создан с учетом богатейшего опыта Google в области создания сред управления контейнерами и позволяет выполнять контейнеризованные приложения в готовом к промышленной эксплуатации кластере.

Разработанный на тех же принципах, что позволяет Google запускать миллиарды контейнеров в неделю, Kubernetes может масштабироваться без увеличения вашей команды ops.

Независимо от того, тестируете ли вы локально или работает с PROD, гибкость Kubernetes растет с вами, чтобы обеспечить бесперебойную доставку ваших приложений независимо от сложности вашей потребностей.

Kubernetes — предоставляет вам свободу использовать инфраструктуру на местах, гибридную или общественную облачную инфраструктуру, позволяя вам легко перемещать рабочие нагрузки туда, где это важно.

Концепции Kubernetes

  • Nodes (node.md): Нода это машина в кластере Kubernetes.
  • Pods (pods.md): Pod это группа контейнеров с общими разделами, запускаемых как единое целое.
  • Replication Controllers (replication-controller.md): replication controller гарантирует, что определенное количество «реплик» pod’ы будут запущены в любой момент времени.
  • Services (services.md): Сервис в Kubernetes это абстракция которая определяет логический объединённый набор pod и политику доступа к ним.
  • Volumes (volumes.md): Volume(раздел) это директория, возможно, с данными в ней, которая доступна в контейнере.
  • Labels (labels.md): Label’ы это пары ключ/значение которые прикрепляются к объектам, например pod’ам. Label’ы могут быть использованы для создания и выбора наборов объектов.
  • Kubectl Command Line Interface (kubectl.md): kubectl интерфейс командной строки для управления Kubernetes.

Архитектура Kubernetes

Работающий кластер Kubernetes включает в себя агента, запущенного на нодах (kubelet) и компоненты мастера (APIs, scheduler, etc), поверх решения с распределённым хранилищем. Приведённая схема показывает желаемое, в конечном итоге, состояние, хотя все ещё ведётся работа над некоторыми вещами, например: как сделать так, чтобы kubelet (все компоненты, на самом деле) самостоятельно запускался в контейнере, что сделает планировщик на 100% подключаемым.

Архитектура Kubernetes

Архитектура Kubernete

Нода Kubernetes

При взгляде на архитектуру системы мы можем разбить его на сервисы, которые работают на каждой ноде и сервисы уровня управления кластера. На каждой ноде Kubernetes запускаются сервисы, необходимые для управления нодой со стороны мастера и для запуска приложений. Конечно, на каждой ноде запускается Docker. Docker обеспечивает загрузку образов и запуск контейнеров.

Kubelet

Kubelet управляет pod’ами их контейнерами, образами, разделами, etc.

Kube-Proxy

Также на каждой ноде запускается простой proxy-балансировщик. Этот сервис запускается на каждой ноде и настраивается в Kubernetes API. Kube-Proxy может выполнять простейшее перенаправление потоков TCP и UDP (round robin) между набором бэкендов.

Компоненты управления Kubernetes

Система управления Kubernetes разделена на несколько компонентов. В данный момент все они запускаются на мастер-ноде, но в скором времени это будет изменено для возможности создания отказоустойчивого кластера. Эти компоненты работают вместе, чтобы обеспечить единое представление кластера.

etcd

Состояние мастера хранится в экземпляре etcd. Это обеспечивает надёжное хранение конфигурационных данных и своевременное оповещение прочих компонентов об изменении состояния.

Kubernetes API Server

Kubernetes API обеспечивает работу api-сервера. Он предназначен для того, чтобы быть CRUD сервером со встроенной бизнес-логикой, реализованной в отдельных компонентах или в плагинах. Он, в основном, обрабатывает REST операции, проверяя их и обновляя соответствующие объекты в etcd (и событийно в других хранилищах).

Scheduler

Scheduler привязывает незапущенные pod’ы к нодам через вызов /binding API. Scheduler подключаем; планируется поддержка множественных scheduler’ов и пользовательских scheduler’ов.

Kubernetes Controller Manager Server

Все остальные функции уровня кластера представлены в Controller Manager. Например, ноды обнаруживаются, управляются и контролируются средствами node controller. Эта сущность в итоге может быть разделена на отдельные компоненты, чтобы сделать их независимо подключаемыми.

ReplicationController — это механизм, основывающийся на pod API. В конечном счете планируется перевести её на общий механизм plug-in, когда он будет реализован.

Сеть в kubernetes

Flannel — сетевой оверлей, который позволит контейнерам связываться через несколько хостов.

Calico — это система с открытым исходным кодом, обеспечивающая взаимодействие с облачными приложениями и политикой.

Canal — это инициатива, основанная на сообществах, которая позволяет пользователям легко развертывать сети Calico и flannel вместе (как единое сетевое решение), сочетающее в себе ведущие в отрасли сетевые политики Calico с богатым набором опций Calico и фланцевого наложения и опциями без подключения к сети.

Kube-route — построен вокруг концепции наблюдателей и контроллеров. Наблюдатели используют API-интерфейс Kubernetes для получения уведомлений о событиях, связанных с созданием, обновлением и удалением объектов Kubernetes. Каждый наблюдатель получает уведомление, относящееся к определенному объекту API. При получении события от сервера API наблюдатель передает события. Контроллер регистрируется, чтобы получать обновления от наблюдателей и действовать на события.

Romana — это решение для автоматизации сетей и безопасности для облачных приложений. Romana автоматизирует создание изолированных облачных сетей, защищает приложения, использующие микросегментацию, и применяет политики контроля доступа на всех конечных точках, где бы они ни запускались.

Weave Net — еще одно решение для реализации сети в Kubernetes с поддержкой CNI.

Установка Kubernetes в Unix/Linux

Для работы с кубернетисом, нужен — докер (Ого — нежданчик! Да? 🙂 ). Начнем с установки docker-а, у меня уже имеется документация по этому можете ознакомится тут:

Установка Docker на Debian/Ubuntu

Установка Docker на CentOS/RedHat/Fedora

Вспомогательная информация, возможно — будет полезна:

Установка docker-compose в Unix/Linux

Создание docker с nginx + lua на CentOS7

Создание docker контейнера в Unix/Linux

Остановить/Удалить все Docker контейнеры/images

Ну что, перейдем к установке самого кубирнетиса…

Установка Kubernetes в CenOS/Fedora/RedHat

В настройке Kubernetes у нас есть главный узел (master) и дочерние узлы (minions). Для управления кластером (мастером и миньенами) можно используя команды «kubeadm» и «kubectl».

Kubernetes можно установить и развернуть, используя следующие методы:

  • Minikube (это единичный кластер — single node kubernetes cluster).
  • Kops (настройка нескольких серверов (Multi node kubernetes) в AWS)
  • Kubeadm (кластер Multi Node в наших собственных помещениях)

Для примера, я возьму три сервера ( Пример: CentOS с минимальной установкой). Один сервер будет работать как мастер, а остальные два сервера — будут миньонами или рабочими узлами. Диаграмма будет такая:

Kubernetes диаграмма

На главном узле (он же мастер) будут установлены следующие компоненты:

  • API Server, Scheduler, Controller Manager, etcd, Kubectl utility — Описание данных сервисов/служб, я описывал выше.

На рабочих узлах (они же миньйоны) будут установлены следующие компоненты:

  • Kubelet, Kube-Proxy, Pod — Описание данных сервисов/служб, я описывал выше.

Установка и настройка kubernetes master ноды в CentOS

Начем с того, что выключим SELinux — у меня есть статья Как отключить SELinux на CentOS но для выстроты, я все таки напишу команды:

# setenforce 0 && sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

Так же, если используете фаервол, то стоит пробросить порты (пример для CentOS 7):

 # firewall-cmd --permanent --add-port=6443/tcp
 # firewall-cmd --permanent --add-port=2379-2380/tcp
 # firewall-cmd --permanent --add-port=10250/tcp
 # firewall-cmd --permanent --add-port=10251/tcp
 # firewall-cmd --permanent --add-port=10252/tcp
 # firewall-cmd --permanent --add-port=10255/tcp
 # firewall-cmd --reload
 # modprobe br_netfilter
 # echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

PS: Можно выключить службу:

# systemctl stop firewalld.service

ИЛИ:

$ systemctl stop firewalld && systemctl disable firewalld

Так же, я хотел бы отметить то, что кубик не поддерживает SWAP. По этому, его можно проигнорировать или выключить вообще (swapoff -a).

Не забываем о том, что если вы не юзаете DNS сервер, то стоит прописать /etc/hosts файл все ваши хосты, например:

# bash -c 'cat <> /etc/hosts
192.168.13.10 master
192.168.13.20 node-1
192.168.13.30 node-2
EOF'

Скачаем утилиту kubectl (на момент написания статьи, использовалась самая новая версия ПО):

# curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl

Перенесем файл:

$ chmod +x ./kubectl
$ sudo mv ./kubectl /usr/local/bin/kubectl

Добавим репозиторий с kubernetes:

# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

Собственно, выполняем установку:

# yum install ebtables ethtool kubeadm etcd kubectl -y

Вы должны убедиться, что net.bridge.bridge-nf-call-iptables установлен в 1 в вашей конфигурации sysctl, например:

# cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

и применяем:

# sysctl --system

Добавялем службу в автозагрузку ОС и запускаем сервис:

# systemctl enable kubelet && systemctl restart kubelet

Так же, стоит запустить докер!

На какой-то ноде получил ошибку:

Mar  2 13:02:31 localhost systemd: kubelet.service holdoff time over, scheduling restart.
Mar  2 13:02:31 localhost systemd: Started kubelet: The Kubernetes Node Agent.
Mar  2 13:02:31 localhost systemd: Starting kubelet: The Kubernetes Node Agent...
Mar  2 13:02:31 localhost kubelet: I0302 13:02:31.294420    1907 feature_gate.go:226] feature gates: &{{} map[]}
Mar  2 13:02:31 localhost kubelet: I0302 13:02:31.294496    1907 controller.go:114] kubelet config controller: starting controller
Mar  2 13:02:31 localhost kubelet: I0302 13:02:31.294500    1907 controller.go:118] kubelet config controller: validating combination of defaults and flags
Mar  2 13:02:31 localhost kubelet: error: unable to load client CA file /etc/kubernetes/pki/ca.crt: open /etc/kubernetes/pki/ca.crt: no such file or directory
Mar  2 13:02:31 localhost systemd: kubelet.service: main process exited, code=exited, status=1/FAILURE
Mar  2 13:02:31 localhost systemd: Unit kubelet.service entered failed state.
Mar  2 13:02:31 localhost systemd: kubelet.service failed.

Решение:

# kubeadm reset && systemctl restart kubelet && kubeadm init --skip-preflight-checks --pod-network-cidr=10.244.0.0/16

Собственно, можно пропустить данный фикс. Оно исправится с инициализацией кластера…..

Запустите команду чтобы инициализировать и настроить kubernetes мастер ноду:

# kubeadm init

Примерный вывод:

[init] Using Kubernetes version: v1.9.3
[init] Using Authorization modes: [Node RBAC]
[preflight] Running pre-flight checks.
	[WARNING FileExisting-crictl]: crictl not found in system path
[certificates] Generated ca certificate and key.
[certificates] Generated apiserver certificate and key.
[certificates] apiserver serving cert is signed for DNS names [localhost.localdomain kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 192.168.13.219]
[certificates] Generated apiserver-kubelet-client certificate and key.
[certificates] Generated sa 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: "admin.conf"
[kubeconfig] Wrote KubeConfig file to disk: "kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "controller-manager.conf"
[kubeconfig] Wrote KubeConfig file to disk: "scheduler.conf"
[controlplane] Wrote Static Pod manifest for component kube-apiserver to "/etc/kubernetes/manifests/kube-apiserver.yaml"
[controlplane] Wrote Static Pod manifest for component kube-controller-manager to "/etc/kubernetes/manifests/kube-controller-manager.yaml"
[controlplane] Wrote Static Pod manifest for component kube-scheduler to "/etc/kubernetes/manifests/kube-scheduler.yaml"
[etcd] Wrote Static Pod manifest for a local etcd instance to "/etc/kubernetes/manifests/etcd.yaml"
[init] Waiting for the kubelet to boot up the control plane as Static Pods from directory "/etc/kubernetes/manifests".
[init] This might take a minute or longer if the control plane images have to be pulled.
[apiclient] All control plane components are healthy after 49.503153 seconds
[uploadconfig] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
[markmaster] Will mark node localhost.localdomain as master by adding a label and a taint
[markmaster] Master localhost.localdomain tainted and labelled with key/value: node-role.kubernetes.io/master=""
[bootstraptoken] Using token: b8e1bf.c8828a7e32947b5e
[bootstraptoken] Configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstraptoken] Configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstraptoken] Configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstraptoken] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
[addons] Applied essential addon: kube-dns
[addons] Applied essential addon: kube-proxy

Your Kubernetes master has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of machines by running the following on each node
as root:

  kubeadm join --token b8e1bf.c8828a7e32947b5e 192.168.13.219:6443 --discovery-token-ca-cert-hash sha256:2b17b03e16e2a0459abdd05b191abf8c444b264b2f4fe28d44ae2ff6ab7b1837

Внизу имеется токен, он нам понадобится немного позже (когда будем добавлять ноды в кластер). Сохраните его! Если забыли или упустили токен, можно посмотреть токены:

# kubeadm token list
TOKEN                     TTL       EXPIRES                     USAGES                   DESCRIPTION                                                EXTRA GROUPS
c732da.2ee47aa3370b4460   23h       2018-03-03T13:03:19+02:00   authentication,signing   The default bootstrap token generated by 'kubeadm init'.   system:bootstrappers:kubeadm:default-node-token

Для генерации токена, можно использовать:

# kubeadm token generate
2d4041.f36eaef929570488

Для использования сгенерированного токена, служит команда:

# kubeadm token create 2d4041.f36eaef929570488 --print-join-command --ttl=0

Удаляем токен так:

# kubeadm token delete 2d4041.f36eaef929570488

bootstrap token with id "2d4041" deleted

Чтобы сбросить все настройки, используйте:

# kubeadm reset

PS: Так же, можно использовать:

$ sudo kubeadm init --apiserver-advertise-address=192.168.13.10 --pod-network-cidr=10.244.0.0/16

Где:

  • —apiserver-advertise-address=192.168.13.10  — явно указывает мастеру на IP адрес, который нужно сообщать клиентам для подключения
  • —pod-network-cidr=10.244.0.0/16 используется для установки адресного пространства для ваших pod-ов в flannel.

Сейчас стоит выполнить настройку для запуска кластера от определенного пользователя:

# mkdir -p $HOME/.kube && cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && chown $(id -u):$(id -g) $HOME/.kube/config

PS: У меня это будет пользователь — root. Но для удобства использования, можно создать отдельного юзера, например — kubernetes и выставить права на него:

# adduser kubernetes
# passwd kubernetes
# usermod -aG wheel kubernetes
# su - kubernetes

Сейчас, нужно настроить pod network для кластера:

# kubectl get nodes

С самого начала, — сеть будет не доступна. Выполним еще проверку:

# kubectl get pods --all-namespaces

Чтобы статус кластера был готов (Было все настроено и так же, имел kube-dns status — running , разверните сеть контейнера, чтобы контейнеры разных хостов обменивались друг с другом. Сеть POD представляет собой оверлейную сеть между рабочими узлами. Запустите команду для развертывания сети:

# export kubever=$(kubectl version | base64 | tr -d '\n')
# kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"
serviceaccount "weave-net" created
clusterrole "weave-net" created
clusterrolebinding "weave-net" created
daemonset "weave-net" created

Различные сети поддерживаются в k8s и зависят от выбора пользователя. Хочу привести еще один пример с сетью, который использует RBAC (Role Based Access Control), поэтому убедитесь, что сеть, которую вы собираетесь использовать, поддерживает RBAC (не проверял работу этого сетевого интерфейса):

# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel-rbac.yml

Думаю что уже все будет работать, но стоит перепроверить это еще 1 раз:

# kubectl get nodes && kubectl  get pods --all-namespaces

Чтобы получить больше полезной информации, выполните:

$ kubectl get pods –all-namespaces -o wide

Поздравляю, — мастер готов!

Установка и настройка kubernetes миньйонов в CentOS

Начем с того, что выключим SELinux — у меня есть статья Как отключить SELinux на CentOS но для выстроты, я все таки напишу команды:

# setenforce 0 && sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

Так же, если используете фаервол, то стоит пробросить порты (пример для CentOS 7):

# firewall-cmd --permanent --add-port=10250/tcp
# firewall-cmd --permanent --add-port=10255/tcp
# firewall-cmd --permanent --add-port=30000-32767/tcp
# firewall-cmd --permanent --add-port=6783/tcp
# firewall-cmd  --reload
# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

Не забываем о том, что если вы не юзаете DNS сервер, то стоит прописать /etc/hosts файл все ваши хосты.

Добавим репозиторий:

# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

Собственно, выполняем установку (на всех воркерах или миньйонах):

# yum install ebtables ethtool kubeadm -y

PS: Добавляем докер в автозагрузку ОС и запускаем его!

Добавляем миньйоны в kubernetis kluster (мастер):

# kubeadm join --token KUBERNETES_MASTER_TOKEN KUBERNETES_MASTER_IP:6443

Где:

  • KUBERNETES_MASTER_TOKEN — Это токен, который служит для добавления рабочих нод в кластер.
  • KUBERNETES_MASTER_IP — Это IP самого кубернетес мастер ноды.
  • 6443 — Порт от мастер-ноды.

Для проверки работоспообности созданного кластера, выполним:

# kubectl get nodes

Для автодополнения команд, можно выполнить следующее:

$ echo "source <(kubectl completion bash)" >> ~/.bashrc

Как-то так!

Установка Kubernetes в Debian/Ubuntu

-=== СПОСОБ 1 ===-

Ставим зависимости:

# apt-get install gcc golang-go curl git apt-transport-https ebtables ethtool

Устанавливаем ETCD:

# curl -L https://github.com/coreos/etcd/releases/download/v2.0.3/etcd-v2.0.3-linux-amd64.tar.gz -o etcd-v2.0.3-linux-amd64.tar.gz && tar xzvf etcd-v2.0.3-linux-amd64.tar.gz && cd etcd-v2.0.3-linux-amd64

Копируем бинарник:

# cp etcd /usr/bin/etcd

Ставим права:

# chmod +x /usr/bin/etcd

Скачиваем и компилируем сам кубик:

# cd /usr/local/src && git clone https://github.com/GoogleCloudPlatform/kubernetes.git
# cd kubernetes && make release

В папке с кубернетесом появятся скрипты для работы с кластером, нодами. Например:

#  hack/local-up-cluster.sh

Для автодополнения команд, можно выполнить следующее:

$ echo "source <(kubectl completion bash)" >> ~/.bashrc

Как-то так!

-=== СПОСОБ 2 ===-

Нужно обновить ОС, и установить вспомогательные пакеты:

# apt-get update && apt-get install -y apt-transport-https ebtables ethtool

Первый шаг — загрузить и добавить ключ для установки Kubernetes:

# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add

Открываем файл:

# vim  /etc/apt/sources.list.d/kubernetes.list

Прописываем в него:

deb http://apt.kubernetes.io/ kubernetes-xenial main

Сохраняем и закрываем файл. Выполняем установку Kubernetes:

# apt-get update && apt-get install -y kubelet kubeadm kubectl kubernetes-cni

Установка и настройка kubernetes мастера в Debian/Ubuntu

На мастер ноде, выполняем инициализацию кластера:

# kubeadm init

Прежде чем присоединить ноды в кластер, необходимо выпустить следующие команды (как обычный пользователь или при необходимости, создать нового юзверя):

# mkdir -p $HOME/.kube
# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# chown $(id -u):$(id -g) $HOME/.kube/config

Кластер уже инициализирован, нужно развернуть сеть:

# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml

Проверим работоспособность клатера (до того как начнем добавлять ноды в кластер):

# kubectl get pods —all-namespaces

Установка и настройка kubernetes миньйонов в Debian/Ubuntu

Точно так же, ставим кубик… после чего, выполняем добавление нод:

# kubeadm join --token KUBERNETES_MASTER_TOKEN KUBERNETES_MASTER_IP:6443

Где:

  • KUBERNETES_MASTER_TOKEN — Это токен, который служит для добавления рабочих нод в кластер.
  • KUBERNETES_MASTER_IP — Это IP самого кубернетес мастер ноды.
  • 6443 — Порт от мастер-ноды.

На мастере, выполняем команду:

# kubectl get nodes

Более понятно было описано в пункте с установкой kubernetes-а для CentOS.

Для автодополнения команд, можно выполнить следующее:

$ echo "source <(kubectl completion bash)" >> ~/.bashrc

Как-то так!

Установка Kubernetes в Mac OS X

Существует пару способов установить кубик на MacOS X.

-=== СПОСОБ 1 — Использовать Docker Edge ===-

Скачиваем Docker Edge образ с официального сайта, нужно установить его (куда же без этого). Запускаем. Во вкладке «kubernetes» нужно включить данную функцию:

Установка Kubernetes в Mac OS X

Нажимаем на «Enable Kubernetes» и потом на «Install». Это запустит кластер Kubernetes для одного узла и установит kubectl утилиту. Это может занять некоторое время….

Через несколько минут, я вижу что у меня кубик запустился «Kubernetes is running» и можно приступить к использованию. Прежде чем продолжить: если вы ранее использовали kubectl, вам, возможно, придется переключить контекст на локальный кластер (local cluster). Выполните следующую команду:

# kubectl config use-context docker-for-desktop

Получаем вывод:

Switched to context "docker-for-desktop".

Нет смысла запускать кластер с kubernetes, если вы не будете с ним работать, не так ли? Начнем с того, что развернем пользовательский интерфейс панели управления Kubernetes, для этого стоит выполнить:

# kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

secret "kubernetes-dashboard-certs" created
serviceaccount "kubernetes-dashboard" created
role "kubernetes-dashboard-minimal" created
rolebinding "kubernetes-dashboard-minimal" created
deployment "kubernetes-dashboard" created
service "kubernetes-dashboard" created

Еще, потребуется запустить прокси:

# kubectl proxy

После этого, открываем:

http://127.0.0.1:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy

И, попадаем в меню первоначальной настройки. Я не стал ничего применять — нажал на «skip» чтобы пропустить. И собственно зашел в админ панель:

first workload на kubernetes

Что это за панель я еще и сам не понял. Но работает!

-=== СПОСОБ 2 — Использовать Homebrew ===-

Как оказалось потом, kubernetes можно установить и через brew. Для начала, стоит установить homebrew.

Выполняем установку Xyve Driver:

$ brew install docker-machine-driver-xhyve
# chown root:wheel $(brew --prefix)/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve
# chmod u+s $(brew --prefix)/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve

Выполняем установку Minikube:

$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64
# chmod +x minikube
# mv minikube /usr/local/bin/

Выполняем установку Kubectl:

$ brew install kubectl

Наконец, пришло время запустить Кубернетес. Ниже приведены две команды для запуска Minikube. Выполните следующую команду, чтобы проверить, имеете ли вы доступ к сайтам за прокси-сервером или нет:

$ curl --proxy "" https://cloud.google.com/container-registry/

No Proxy: Если вы не находитесь за прокси-сервером, выполните следующую команду:

$ minikube start --vm-driver=xhyve

Proxy: Выполните следующую команду, когда вы находитесь за прокси-сервером:

$ minikube start --vm-driver=xhyve --docker-env HTTP_PROXY=http://your-http-proxy-host:your-http-proxy-port  --docker-env HTTPS_PROXY=http(s)://your-https-proxy-host:your-https-proxy-port

Для запуска minikube используйте:

$ minikube start

Для остановки minikube используйте:

$ minikube stop

Выполните следующую команду для доступа к панели управления Kubernetes:

$ minikube dashboard

Открываем ссылку:

http://127.0.0.1:30000/#!/overview?namespace=default

Для автодополнения команд, можно выполнить следующее:

## If running Bash 3.2 included with macOS
$ brew install bash-completion
## or, if running Bash 4.1+
$ brew install bash-completion@2

Как-то так!

Использование Kubernetes в Unix/Linux

Ну что, готовы задеплоить службу на своем Kubernetes кластере? Возьму пример с nginx:

# kubectl run --image=nginx nginx-app --port=80 --env="DOMAIN=cluster"
# kubectl expose deployment nginx-app --port=80 --name=nginx-http

Если вы перейдете на ноду и выполните команду:

# docker ps -a

То вы увидите, что указанная служба запустилась на кластере. Я пока что не буду заострять внимание на деплое приложенек, все будет, но не сразу. 🙂 В новой теме, я расскажу как развернуть полноценный kubernetes кластер с «блэкджеком и куртизанками».

Возможно я не затронул какие-то моменты, но я на данную статью потратил довольно много времени. Если появится что дополнить, обязательно добавлю. При желании, любой желающий может помогать мне в этом.

Вот и все, статья «Установка Kubernetes в Unix/Linux» подошла к завершению.

2 thoughts on “Установка Kubernetes в Unix/Linux

  1. Есть статья настройки nginx ingress для кубера?

    Я вроде установил ингресс но service не получает IP адрес.

    # kubectl get ing --all-namespaces
    
    NAMESPACE   NAME            HOSTS           ADDRESS   PORTS   AGE
    default     ing.web.kz   ing.web.kz             80      3h52m
    
  2. спасибо за подробный мануал.
    интересно на текущий момент также актуальна установка docker при установке kubernetes?

Добавить комментарий

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.