Как установить 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, развернуть кластер, состоящий из главного сервера и двух нод.

kubernetes-settup-diagram

Компоненты, которые будут установлены на мастер-сервере:

  • API сервер;
  • Scheduler;
  • Controller Manager;
  • etcd;
  • Kubectl utility.

На рабочих машинах установим:

  • Kubelet;
  • Kube-Proxy;
  • Pod.

Приступаем к установке.

  1. Отключение 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
  1. Добавление и настройка репозитория

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 ~]#
  1. Установка 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
  1. Установка главного сервера (мастера)

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

[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
  1. Развертывание сети pod

Для запуска кластера и контейнеров выполним

kubectl-get-nodes

Далее запускаем команду для развертывания сети

[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 ~]#

Теперь добавляем рабочие ноды.

  1. Отключение 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
  1. Скачивание репозитория К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
  1. Установка 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
  1. Объединение мастер сервера с рабочими нодами

Для присоединения рабочих нод к главному серверу нам необходим токен. При каждом запуске мастера мы получаем команду и токен, которые выглядят примерно так. Скопируем их и запустим сначала на первом узле

[root@worker-node1 ~]# kubeadm join --token a3bd48.1bc42347c3b35851 192.168.1.30:6443

В итоге получаем что-то наподобие этого

kubeadm-node1

Затем на втором

[root@worker-node2 ~]# kubeadm join --token a3bd48.1bc42347c3b35851 192.168.1.30:6443

kudeadm-join-node2

Проверяем статус нод, используя команду 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 с точки зрения системного администрирования»!

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *