Как установить Kubernetes (k8s) 1.7 на Сentos 7/Rhel 7

Ранее мы уже писали о том, что такое Kubernetes, разбирали архитектуру фреймворка и принцип работы. Основные составляющие системы кластеризации: главный сервер (master server) и рабочие ноды.
Kubernetes инсталлируется с помощью таких утилит:
- Minikube (кластер, состоящий из единой ноды);
- Kops (настройка нескольких узлов Kubernetes в AWS);
- Kubeadm (кластер на своих мощностях).
В статье на примере покажем, как установить Kubernetes 1.7 на CentOS 7/RHEL 7 c утилитой Kubeadm, развернуть кластер, состоящий из главного сервера и двух нод.
Компоненты, которые будут установлены на мастер-сервере:
- API сервер;
- Scheduler;
- Controller Manager;
- etcd;
- Kubectl utility.
На рабочих машинах установим:
- Kubelet;
- Kube-Proxy;
- Pod.
Приступаем к установке.
- Отключение SELinux и настройка правил Firewall
Подключаемся к главному серверу, задаем имя хоста и отключаем SELinux, используя такие команды
~]# hostnamectl set-hostname 'k8s-master' ~]# exec bash ~]# setenforce 0 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinuxУстанавливаем следующие правила Firewall
[root@k8s-master ~]# firewall-cmd --permanent --add-port=6443/tcp [root@k8s-master ~]# firewall-cmd --permanent --add-port=2379-2380/tcp [root@k8s-master ~]# firewall-cmd --permanent --add-port=10250/tcp [root@k8s-master ~]# firewall-cmd --permanent --add-port=10251/tcp [root@k8s-master ~]# firewall-cmd --permanent --add-port=10252/tcp [root@k8s-master ~]# firewall-cmd --permanent --add-port=10255/tcp [root@k8s-master ~]# firewall-cmd –reload [root@k8s-master ~]# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptablesВ случае, если нет собственного DNS-сервера, нужно обновить файл /etc/hosts на главном сервере и рабочих узлах.
192.168.1.30 k8s-master 192.168.1.40 worker-node1 192.168.1.50 worker-node2
- Добавление и настройка репозитория
Kubernetes не включен по умолчанию в CentOS 7 и RHEL 7, поэтому нам нужно скачать репозитории.
[root@k8s-master ~]# 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 [root@k8s-master ~]#
- Установка Kubeadm и Docker
Когда репозитории будут установлены, скачиваем Kubeadm
[root@k8s-master ~]# yum install kubeadm docker -yИ Docker
[root@k8s-master ~]# systemctl restart docker && systemctl enable docker [root@k8s-master ~]# systemctl  restart kubelet && systemctl enable kubelet
- Установка главного сервера (мастера)
Для запуска загрузки мастера вводим команду
[root@k8s-master ~]# kubeadm initЧтобы использовать кластер под root`ом, вводим команды
[root@k8s-master ~]# mkdir -p $HOME/.kube [root@k8s-master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config [root@k8s-master ~]# chown $(id -u):$(id -g) $HOME/.kube/config
- Развертывание сети pod
Для запуска кластера и контейнеров выполним
Далее запускаем команду для развертывания сети
[root@k8s-master ~]# export kubever=$(kubectl version | base64 | tr -d '\n') [root@k8s-master ~]# 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 [root@k8s-master ~]#Для проверки статуса прописываем
[root@k8s-master ~]# kubectl get nodes NAME         STATUS    AGE       VERSION k8s-master   Ready     1h        v1.7.5 [root@k8s-master ~]# kubectl  get pods  --all-namespaces NAMESPACE     NAME                                 READY     STATUS    RESTARTS   AGE kube-system   etcd-k8s-master                      1/1       Running   0          57m kube-system   kube-apiserver-k8s-master            1/1       Running   0          57m kube-system   kube-controller-manager-k8s-master   1/1       Running   0          57m kube-system   kube-dns-2425271678-044ww            3/3       Running   0          1h kube-system   kube-proxy-9h259                     1/1       Running   0          1h kube-system   kube-scheduler-k8s-master            1/1       Running   0          57m kube-system   weave-net-hdjzd                      2/2       Running   0          7m [root@k8s-master ~]#Теперь добавляем рабочие ноды.
- Отключение SELinux и настройка правил Firewall для подчиненных серверов
Перед тем, как отключить SELinux, задаем имя хостов на обоих узлах – «worker node1» и «worker node2» соответственно.
~]# setenforce 0 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux ~]# 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
- Скачивание репозитория Кubernetes и установка на серверах
~]# 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
- Установка Kubeadm и Docker на серверы
Сначала скачиваем Kubeadm
[root@worker-node1 ~]# yum  install kubeadm docker -y[root@worker-node2 ~]# yum  install kubeadm docker -yЗатем Docker
[root@worker-node1 ~]# systemctl restart docker && systemctl enable docker[root@worker-node2 ~]# systemctl restart docker && systemctl enable docker
- Объединение мастер сервера с рабочими нодами
Для присоединения рабочих нод к главному серверу нам необходим токен. При каждом запуске мастера мы получаем команду и токен, которые выглядят примерно так. Скопируем их и запустим сначала на первом узле
[root@worker-node1 ~]# kubeadm join --token a3bd48.1bc42347c3b35851 192.168.1.30:6443В итоге получаем что-то наподобие этого
Затем на втором
[root@worker-node2 ~]# kubeadm join --token a3bd48.1bc42347c3b35851 192.168.1.30:6443
Проверяем статус нод, используя команду kubectl
[root@k8s-master ~]# kubectl get nodes NAME           STATUS    AGE       VERSION k8s-master     Ready     2h        v1.7.5 worker-node1   Ready     20m       v1.7.5 worker-node2   Ready     18m       v1.7.5 [root@k8s-master ~]#Главный сервер и рабочие узлы готовы к работе. Это значит, что установка и настройка kubernetes 1.7 прошла успешно. Мы подключили две ноды к мастеру, теперь можно создавать сервисы и pod-ы.
Возникли вопросы с Kubernetes? Разбираем эту утилиту на нашем авторском курсе «L3-DevOps с точки зрения системного администрирования»!