Установка кластера Kubernetes 1.7 на CentOS 7
В этой статье я решил протестировать установку версии 1.7 и поделиться с вами полученными результатами. Забегая вперед скажу, что в процессе установки Kubernetes на CentOS 7.3 в стандартном мануале по установке присутствует всего одна ошибка, которую мы с вами само собой исправим в процессе демонстрации.
Подготовка к установке
В этот раз для установки кластера Kubernetes нам понадобится сделать очень не много подготовительных шагов.
Минимальные требования к серверам кластера:
- CentOS 7 или Ubuntu 16.04
- Один или несколько серверов с памятью от 1 Гб RAM
- Полная сетевая связность между всеми серверами кластера
Подготовка ОС
Для установки Kubernetes на всех серверах вам потребуется отключить SELinux:
$ sudo setenforce 0
$ sudo sed -i --follow-symlinks 's/^SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux
А также правильно настроенный DNS (все хосты кластера должны иметь возможность обращаться друг к другу по имени). В нашем случае будет достаточно внести следующие записи в /etc/hosts
на каждом сервере:
$ sudo bash -c 'cat <> /etc/hosts
192.168.0.4 master
192.168.0.5 node-1
192.168.0.6 node-2
EOF'
И конечно же установить для каждого сервера свой hostname. Для ноды с ролью и именем master:
$ sudo hostnamectl set-hostname master
Для вычислительных узлов node-1 и node-2 сделайте по аналогии самостоятельно. Также будет правильно настроить синхронизацию времени:
$ sudo yum -y install ntp
$ sudo systemctl enable ntpd
$ sudo systemctl start ntpd
Установка Docker
Далее на каждый сервер необходимо установить Docker. Делается это штатно по официальной инструкции. Не смотря на то, что команда поддержки Kubernetes не заявляет поддержку Docker 17.x, у меня все отлично заработало. На каждом сервере кластера выполните следующие команды:
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum makecache fast
$ sudo yum install docker-ce
$ sudo systemctl start docker
Проверить работоспособность Docker можно простой командой:
$ sudo docker ps -a
Установка Kubectl и Kubeadm
Установка утилиты kubectl (предназначена для управления вашим Kubernetes кластером) выполняется следующим образом:
$ curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.7.0/bin/linux/amd64/kubectl
$ chmod +x ./kubectl
$ sudo mv ./kubectl /usr/local/bin/kubectl
Удобно будет также подключить автодополнение kubectl команд в Bash:
$ echo "source > ~/.bashrc
Установка kubeadm выполняется так же легко. Подключаем репозиторий:
$ cat < /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
Выполняем установку:
$ sudo yum install -y kubelet kubeadm
$ sudo systemctl enable kubelet && systemctl start kubelet
Т.к. в процессе установки kubelet все еще присутствует ошибка, то нам необходимо дополнительно отредактировать файл /etc/systemd/system/kubelet.service.d/10-kubeadm.conf, обновив строку KUBELET_CGROUP_ARGS=--cgroup-driver=systemd на KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs. А далее выполнить следующие команды:
$ sudo systemctl daemon-reload
$ sudo systemctl restart kubelet
Убедитесь, что после выполнения этой команды сервис запустился и работает:
$ sudo systemctl status kubelet
Все, можно переходить к установке кластера.
Установка кластера Kubernetes 1.7
Далее мы установим кластер Kubernetes с виртуализацией сети flannel. Вы можете выбрать любой другой способ виртуализировать сеть в официальной документации по установке.
Как обычно, если у вас что-то пошло не так, вы можете сбросить установку и начать заново, выполнив команду:
$ sudo kubeadm reset
Прежде всего необходимо инициализировать и установить master сервер:
$ sudo kubeadm init --apiserver-advertise-address=192.168.0.4 --pod-network-cidr=10.244.0.0/16
Здесь ключ --apiserver-advertise-address=192.168.0.4 явно указывает мастеру на IP адрес, который нужно сообщать клиентам для подключения, а ключ --pod-network-cidr=10.244.0.0/16 используется для установки адресного пространства для ваших pod-ов в flannel.
Вывод команды будет примерно следующий:
[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.
[init] Using Kubernetes version: v1.7.0
[init] Using Authorization modes: [Node RBAC]
[preflight] Running pre-flight checks
[preflight] Starting the kubelet service
[certificates] Generated CA certificate and key.
[certificates] Generated API server certificate and key.
[certificates] API Server serving cert is signed for DNS names [kubeadm-master kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 10.138.0.4]
[certificates] Generated API server kubelet client certificate and key.
[certificates] Generated service account token signing 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: "/etc/kubernetes/admin.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/scheduler.conf"
[apiclient] Created API client, waiting for the control plane to become ready
[apiclient] All control plane components are healthy after 16.502136 seconds
[token] Using token:
[apiconfig] Created RBAC rules
[addons] Applied essential addon: kube-proxy
[addons] Applied essential addon: kube-dns
Your Kubernetes master has initialized successfully!
To start using your cluster, you need to run (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:
http://kubernetes.io/docs/admin/addons/
You can now join any number of machines by running the following on each node
as root:
kubeadm join --token :
Выполним настройку параметров подключения к кластеру, как посоветовал нам установщик:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Далее установим для наших pod-ов сеть:
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
Все, теперь можно начать подключать к кластеру вычислительные узлы. Kubeadm уже сказал нам, как это сделать:
$ kubeadm join --token :
После выполнения этих команд, убедитесь, что вычислительные узлы подключились и доступны для размещения pod-ов:
kubectl get nodes
Поздравляю, вы только что выполнили установку кластера Kubernetes самой последней версии. Далее можно переходить к изучению новых доступных в нем фичей или этой технологии в принципе.