
В этой статье я решил протестировать установку версии 1.7 и поделиться с вами полученными результатами. Забегая вперед скажу, что в процессе установки Kubernetes на CentOS 7.3 в стандартном мануале по установке присутствует всего одна ошибка, которую мы с вами само собой исправим в процессе демонстрации.
В этот раз для установки кластера Kubernetes нам понадобится сделать очень не много подготовительных шагов.

Минимальные требования к серверам кластера:
Для установки 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. Делается это штатно по официальной инструкции. Не смотря на то, что команда поддержки 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 (предназначена для управления вашим 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 с виртуализацией сети 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 самой последней версии. Далее можно переходить к изучению новых доступных в нем фичей или этой технологии в принципе.