Используем 2 ноды (хоста) в кластере.
Вначале нам необходимо установить Docker:
$ sudo apt-get update \
&& sudo apt-get install -qy docker.io
Устанавливаем Kubernetes:
$ sudo apt-get update \
&& sudo apt-get install -y apt-transport-https \
&& curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
$ echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" \
| sudo tee -a /etc/apt/sources.list.d/kubernetes.list \
&& sudo apt-get update
Обновляем репозиторий и устанавливаем утилиты Kubernetes:
$ sudo apt-get update \
&& sudo apt-get install -y \
kubelet \
kubeadm \
kubernetes-cni
Для ускорения вышеприведенные операции можно выполнить одним скриптом:
$ curl -sL https://gist.githubusercontent.com/alexellis/7315e75635623667c32199368aa11e95/raw/b025dfb91b43ea9309ce6ed67e24790ba65d7b67/kube.sh | sudo sh
Подготовка хостов для работы в кластере:
На дисках нужно отключить Swap и переименовать слейв хост если у них одинаковые имена (у хостов должны быть разные имена):
$ swapoff -a -отключение swap
$ vi /etc/fstab -закомментировать строку со swap
Переименование хоста:
$ sudo hostnamectl set-hostname linuxhost
Добавляем запись в sudo nano /etc/hosts
127.0.1.1 linuxhost
Изменяем параметр в файле cloud.cfg
nano /etc/cloud/cloud.cfg
preserve_hostname: true
Создадим не root пользователя packet для работы с kubernetes:
$ sudo useradd packet -G sudo -m -s /bin/bash
$ sudo passwd packet
$ sudo cp /etc/kubernetes/admin.conf $HOME/
$ sudo chown $(id -u):$(id -g) $HOME/admin.conf
$ export KUBECONFIG=$HOME/admin.conf
$ echo "export KUBECONFIG=$HOME/admin.conf" | tee -a ~/.bashrc
Для работы кластера установим software defined network (SDN) Flannel
$ 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
Flannel корректно работает с подсетью 10.244.0.0/16
Инициализируем кластер (ip адрес мастер ноды 192.168.56.110)
$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.56.110
На выводе получим команду типа такой:
kubeadm join 192.168.56.110:6443 --token t6fcr7.aq9a29kduilvuh3i --discovery-token-ca-cert-hash sha256:e91f2ba86dd6c45f43742a8c096883ee9eb1d9cae69a5f3e384eb21dc1caed5b
Эта команда выполняется на slave-нодах для присоединения к кластеру.
Разрешаем работу однонодового кластера
$ kubectl taint nodes --all node-role.kubernetes.io/master-
Выводим инфу о кластерах:
kubectl get all --namespace=kube-system
Запускаем контейнер с приложением:
$ kubectl get pods
$ kubectl run guids --image=alexellis2/guid-service:latest --port 9000
deployment "guids" created
$ kubectl get pods
В выводе получим контейнер с именем на подобие этого
guids-2617315942-lzwdh
Команда для получения описания настроек контейнера
$ kubectl describe pod guids-2617315942-lzwdh
Посмотеть логи:
$ kubectl logs guids-2617315942-lzwdh
Зайти в контейнер
$ kubectl exec -t -i guids-2617315942-lzwdh sh
Для проверки работы запустим контейнер Apache (httpd)
$ kubectl run apache --image=httpd --port=80
$ kubectl expose deployment apache --type=NodePort --name=apache
Теперь с браузера со слейв ноды нам будет доступен apache на порту полученному по команде kubectl get services (порт назначается рандомно):
http://192.168.56.111:31132/
Остановить сервис и удалить деплой контейнера в кластере:
$ kubectl delete service apache
$ kubectl delete deployment apache
Deploying the Dashboard UI (графическое отображение посредством браузера)
Установим Dashboard и запустим прокси на порту 44333
$ kubectl create -f https://git.io/kube-dashboard
$ kubectl proxy --address="192.168.56.104" -p 44133 --accept-hosts='^*$'
Теперь наш Dashboard UI будет доступен с браузера по адресу:
http://192.168.56.110:44133/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
Замечание!
По умолчанию через http по токену невозможно зайти в Dashboard при нажатии на "sign in" ничего не произойдет, только через https. Чтобы зайти через skip и получить все права, выполняем следующую команду (т.е. даем админские права):
$ kubectl apply -f dashboard-adminuser.yaml
Содержание файла dashboard-adminuser.yaml:
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard
labels:
k8s-app: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard
namespace: kube-system
# link from this (https://stackoverflow.com/questions/51907168/not-able-to-login-to-kubernetes-dashboard-using-token-with-service-account)
По материалам:
https://blog.alexellis.io/kubernetes-in-10-minutes/
https://www.admintome.com/blog/install-kubernetes-ubuntu/
|