Как установить 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
[[email protected] ~]# firewall-cmd --permanent --add-port=6443/tcp [[email protected] ~]# firewall-cmd --permanent --add-port=2379-2380/tcp [[email protected] ~]# firewall-cmd --permanent --add-port=10250/tcp [[email protected] ~]# firewall-cmd --permanent --add-port=10251/tcp [[email protected] ~]# firewall-cmd --permanent --add-port=10252/tcp [[email protected] ~]# firewall-cmd --permanent --add-port=10255/tcp [[email protected] ~]# firewall-cmd –reload [[email protected] ~]# 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, поэтому нам нужно скачать репозитории.
[[email protected] ~]# 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 [[email protected] ~]#
- Установка Kubeadm и Docker
Когда репозитории будут установлены, скачиваем Kubeadm
[[email protected] ~]# yum install kubeadm docker -yИ Docker
[[email protected] ~]# systemctl restart docker && systemctl enable docker [[email protected] ~]# systemctl  restart kubelet && systemctl enable kubelet
- Установка главного сервера (мастера)
Для запуска загрузки мастера вводим команду
[[email protected] ~]# kubeadm initЧтобы использовать кластер под root`ом, вводим команды
[[email protected] ~]# mkdir -p $HOME/.kube [[email protected] ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config [[email protected] ~]# chown $(id -u):$(id -g) $HOME/.kube/config
- Развертывание сети pod
Для запуска кластера и контейнеров выполним
Далее запускаем команду для развертывания сети
[[email protected] ~]# export kubever=$(kubectl version | base64 | tr -d '\n') [[email protected] ~]# 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 [[email protected] ~]#Для проверки статуса прописываем
[[email protected] ~]# kubectl get nodes NAME         STATUS    AGE       VERSION k8s-master   Ready     1h        v1.7.5 [[email protected] ~]# 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 [[email protected] ~]#Теперь добавляем рабочие ноды.
- Отключение 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
[[email protected] ~]# yum  install kubeadm docker -y[[email protected] ~]# yum  install kubeadm docker -yЗатем Docker
[[email protected] ~]# systemctl restart docker && systemctl enable docker[[email protected] ~]# systemctl restart docker && systemctl enable docker
- Объединение мастер сервера с рабочими нодами
Для присоединения рабочих нод к главному серверу нам необходим токен. При каждом запуске мастера мы получаем команду и токен, которые выглядят примерно так. Скопируем их и запустим сначала на первом узле
[[email protected] ~]# kubeadm join --token a3bd48.1bc42347c3b35851 192.168.1.30:6443В итоге получаем что-то наподобие этого
Затем на втором
[[email protected] ~]# kubeadm join --token a3bd48.1bc42347c3b35851 192.168.1.30:6443
Проверяем статус нод, используя команду kubectl
[[email protected] ~]# 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 [[email protected] ~]#Главный сервер и рабочие узлы готовы к работе. Это значит, что установка и настройка kubernetes 1.7 прошла успешно. Мы подключили две ноды к мастеру, теперь можно создавать сервисы и pod-ы.
Возникли вопросы с Kubernetes? Разбираем эту утилиту на нашем авторском курсе «L3-DevOps с точки зрения системного администрирования»!