Установка и настройка Kubernetes

Добро пожаловать в подробное руководство по установке и настройке Kubernetes в НАЙС ОС. В этом документе мы рассмотрим процесс установки, настройки и управления Kubernetes. Kubernetes — это система оркестрации контейнеров с открытым исходным кодом, которая автоматизирует развертывание, масштабирование и управление контейнеризованными приложениями. Понимание его установки и конфигурации является важным навыком для системных администраторов.

Установка Kubernetes

Для установки Kubernetes в НАЙС ОС используйте пакетный менеджер tdnf. Сначала добавьте репозиторий Kubernetes и установите ключ GPG:

sudo rpm --import https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg

Добавьте репозиторий Kubernetes в файл /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
  

Теперь установите Kubernetes (kubeadm, kubelet и kubectl) с помощью команды:

sudo tdnf install -y kubelet kubeadm kubectl

Включите автозапуск kubelet:

sudo systemctl enable kubelet

Настройка Kubernetes

Перед началом настройки кластера Kubernetes необходимо настроить рабочую среду. Убедитесь, что на всех узлах кластера выключен swap:

sudo swapoff -a

Для отключения swap на постоянной основе отредактируйте файл /etc/fstab и закомментируйте строку, содержащую запись swap.

Инициализация Kubernetes кластера

Инициализация кластера Kubernetes выполняется на мастер-узле. Выполните команду kubeadm init с указанием IP-адреса мастер-узла:

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

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

Настройка kubectl

Для управления кластером с помощью kubectl настройте конфигурацию на мастер-узле:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Установка сети для кластера

Установите сетевой плагин для кластера. В данном примере используется Flannel:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Подключение рабочих узлов к кластеру

Подключите рабочие узлы к кластеру с помощью команды, выведенной в конце процесса инициализации мастер-узла. Пример команды:

sudo kubeadm join node-ip>:6443 --token  --discovery-token-ca-cert-hash sha256:

Основные команды для работы с Kubernetes

Рассмотрим основные команды для работы с Kubernetes. Эти команды помогут вам управлять кластерами, развертыванием приложений и диагностикой проблем.

Список узлов кластера

Для просмотра списка узлов кластера используйте команду kubectl get nodes:

kubectl get nodes

Развертывание приложения

Для развертывания приложения используйте команду kubectl create deployment:

kubectl create deployment nginx --image=nginx

Список подов

Для просмотра списка подов используйте команду kubectl get pods:

kubectl get pods

Создание сервиса

Для создания сервиса, который позволяет доступ к приложению, используйте команду kubectl expose:

kubectl expose deployment nginx --port=80 --type=NodePort

Удаление развертывания

Для удаления развертывания используйте команду kubectl delete deployment:

kubectl delete deployment nginx

Настройка безопасности Kubernetes

Обеспечение безопасности Kubernetes является важной задачей. Рассмотрим несколько основных настроек для повышения безопасности Kubernetes.

Настройка RBAC (Role-Based Access Control)

RBAC позволяет контролировать доступ к ресурсам Kubernetes. Рассмотрим пример создания роли и привязки роли для пользователя.

Создайте файл role.yaml со следующим содержимым:


apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]
  

Создайте роль с помощью команды:

kubectl apply -f role.yaml

Создайте файл rolebinding.yaml со следующим содержимым:


apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: default
subjects:
- kind: User
  name: "johndoe"
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io
  

Создайте привязку роли с помощью команды:

kubectl apply -f rolebinding.yaml

Использование Network Policies

Network Policies позволяют контролировать сетевой трафик между подами. Рассмотрим пример создания сетевой политики, которая позволяет доступ к подам только с определенных подов.

Создайте файл networkpolicy.yaml со следующим содержимым:


apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-nginx
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: nginx
  ingress:
  - from:
    - podSelector:
        matchLabels:
          access: "true"
    ports:
    - protocol: TCP
      port: 80
  

Создайте сетевую политику с помощью команды:

kubectl apply -f networkpolicy.yaml

Мониторинг и обслуживание Kubernetes

Мониторинг и обслуживание Kubernetes являются важными задачами для обеспечения его стабильной работы. Рассмотрим основные методы мониторинга и обслуживания Kubernetes.

Мониторинг состояния кластера

Используйте команду kubectl get componentstatuses для получения информации о состоянии основных компонентов кластера:

kubectl get componentstatuses

Просмотр логов подов

Для просмотра логов подов используйте команду kubectl logs:

kubectl logs POD_NAME

Замените POD_NAME на имя пода, для которого вы хотите просмотреть логи.

Мониторинг метрик кластера

Для мониторинга метрик кластера используйте Metrics Server. Установите Metrics Server с помощью следующей команды:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

После установки Metrics Server используйте команду kubectl top для просмотра использования ресурсов:

kubectl top nodes
kubectl top pods

Резервное копирование и восстановление данных кластера

Резервное копирование и восстановление данных кластера являются важными задачами для обеспечения безопасности данных. Рассмотрим основные методы резервного копирования и восстановления данных кластера.

Резервное копирование и восстановление ETCD

ETCD — это распределенное хранилище данных, которое используется Kubernetes для хранения конфигурации кластера и состояния. Для резервного копирования ETCD используйте следующую команду:

ETCDCTL_API=3 etcdctl snapshot save snapshot.db

Для восстановления ETCD из резервной копии используйте следующую команду:

ETCDCTL_API=3 etcdctl snapshot restore snapshot.db

Настройка высокодоступного кластера Kubernetes

Для обеспечения высокой доступности кластера Kubernetes настройте несколько мастер-узлов. Рассмотрим процесс настройки высокодоступного кластера Kubernetes.

Настройка мастер-узлов

Убедитесь, что все мастер-узлы настроены с одинаковой конфигурацией и имеют доступ к общему распределенному хранилищу ETCD. Инициализируйте первый мастер-узел с помощью команды kubeadm init:

sudo kubeadm init --control-plane-endpoint "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT" --upload-certs

Сохраните вывод команды, включающий токен и команду для присоединения дополнительных мастер-узлов. На каждом дополнительном мастер-узле выполните команду:

sudo kubeadm join LOAD_BALANCER_DNS:LOAD_BALANCER_PORT --token  --discovery-token-ca-cert-hash sha256: --control-plane --certificate-key 

Заключение

Мы рассмотрели основные аспекты установки, настройки и управления Kubernetes в НАЙС ОС. Kubernetes предоставляет мощные возможности для оркестрации контейнеров, а понимание его настройки является важным навыком для системных администраторов. Продолжайте изучать и применять эти знания на практике для создания стабильных и эффективных кластеров Kubernetes.