- Что такое Minio?
- Перед тем, как начнем
- Установка Ansible
- Дополнительная установка
- Измените конфигурацию Kubespray
- Подготовьте хосты для Ansible
- Создайте безпарольный sudo на нодах
- Отключите swap
- Запустите Ansible Playbook
- Как добавить или удалить узлы
- Minio на Kubernetes
- Создайте постоянный том
- Создайте развертывание
- Создайте развертывание
- Создайте сервис
Что такое Minio?
Minio – это S3-совместимое хранилище объектов с открытым исходным кодом, которое можно разместить на Linode.
Развертывание в кластере Kubernetes поддерживается как в автономном, так и в распределенном режимах.
В этом руководстве Kubespray используется для развертывания кластера Kubernetes на трех серверах под управлением Ubuntu 16.04.
Kubespray поставляется с Ansible playbooks, которые упрощают настройку в кластере.
Затем Minio мы установим в кластере в автономном режиме, чтобы продемонстрировать вам, как создать службу.
Перед тем, как начнем
В демонстрационных целях это руководство устанавливает etcd и мастер Kubernetes на одном узле.
Для кластеров высокой доступности потребуется другая конфигурация, которая выходит за рамки данного руководства.
Должен быть пользователь с привилегиями sudo.
Кластер можно моделировать локально, используя Minikube, чтобы освоиться Kubernetes.
☸️ Kubectl Шпаргалка всех необходимых команд Kubernetes часть 1
IP-адреса каждого узла в кластере и их роли будут представлены как kubernetes-master-ip, etcd-ip и slave-ip
Если вы не хотите устанавливать Ansible и другое программное обеспечение локально, рассмотрите возможность использования другого сервера в качестве переключателя, который будет использоваться для соединения с главным узлом.
Установка Ansible
Обновитесь при необходимости.
sudo apt-get update
sudo apt-get install software-properties-common
sudo apt-add-repository ppa:ansible/ansible
sudo apt-get update
sudo apt-get install ansible
Дополнительная установка
Kubespray существует как репозиторий Git и требует python-netaddr для манипулирования сетевым адресом.
- Установите Git:
sudo apt install git
- Установите python-netaddr:
sudo apt install python-netaddr
Измените конфигурацию Kubespray
Kubespray поставляется с несколькими вариантами конфигурации, не показанными в этом руководстве.
Обратитесь к документации для получения дополнительной информации по таким темам, как сетевое взаимодействие с Flannel, установка Helm и крупномасштабные развертывания.
☸️ Разверните готовый кластер Kubernetes с помощью Ansible & Kubespray
git clone https://github.com/kubernetes-incubator/kubespray.git
cd kubespray
git checkout -b tag/v.2.4.0
[ssh_connection]
pipelining=True
ssh_args = -o ControlMaster=auto -o ControlPersist=30m -o ConnectionAttempts=100 -o UserKnownHostsFile=/dev/null
#control_path = ~/.ssh/ansible-%%r@%%h:%%p
[defaults]
host_key_checking=False
gathering = smart
fact_caching = jsonfile
fact_caching_connection = /tmp
stdout_callback = skippy
library = ./library
callback_whitelist = profile_tasks
roles_path = roles:$VIRTUAL_ENV/usr/local/share/kubespray/roles:$VIRTUAL_ENV/usr/local/share/ansible/roles:/usr/share/kubespray/roles
deprecation_warnings=False
remote_user=username
cp -r inventory/sample inventory/minio
declare -a IPS=(kubernetes-master-ip etcd-ip slave-ip)
CONFIG_FILE=inventory/minio/hosts.ini python3 contrib/inventory_builder/inventory.py ${IPS[@]}
Не используйте имена хостов при объявлении $IPS. В настоящее время генератор инвентаризации поддерживает только IP-адреса.
[all]
node1 ansible_host=kubernetes-master-ip ip=kubernetes-master-ip
node2 ansible_host=etcd-ip ip=etcd-ip
node3 ansible_host=slave-ip ip=slave-ip
[kube-master]
node1
[kube-node]
node2
node3
[etcd]
node1
[k8s-cluster:children]
kube-node
kube-master
[calico-rr]
[vault]
node1
node2
node3
Подготовьте хосты для Ansible
Прежде чем Ansible сможет правильно запустить Playbooks Kubespray, на хостах должен быть включен безпарольный вход для пользователя sudo и отключен swap.
Убедитесь, что указанный пользователь существует на каждом сервер до начала этих шагов.
В этом разделе показано, как скопировать ключи SSH на каждый сервер и изменить файл sudoers через SSH.
Создайте закрытый ключ, если у вас его нет:
ssh-keygen -b 4096
for IP in ${IPS[@]}; do ssh-copy-id username@$IP; done
Создайте безпарольный sudo на нодах
Ниже приведен цикл, который добавляет строку username ALL = (ALL: ALL) NOPASSWD: ALL в последнюю строку файла sudoers.
Вам будет предложено ввести пароль для каждого сервера.
for IP in ${IPS[@]}; do ssh -t username@$IP "echo 'username ALL=(ALL:ALL) NOPASSWD: ALL' | sudo EDITOR='tee -a' visudo"; done
Отключите swap
Добавьте этот фрагмент ниже в конец ~/kubespray/role/bootstrap-os/tasks/main.yml, чтобы отключить swap с помощью Ansible.
- name: Remove swapfile from /etc/fstab
mount:
name: swap
fstype: swap
state: absent
- name: Disable swap
command: swapoff -a
Запустите Ansible Playbook
Перед запуском Ansible playbook убедитесь, что брандмауэры отключены, чтобы избежать непредвиденных ошибок.
Запустите cluster.yml.
Если ваш закрытый ключ назван по-другому или находится в другом месте, добавьте –private-key = /path/to/id_rsa
ansible-playbook -i inventory/minio/hosts.ini cluster.yml -b -v
Это может занять до 20 минут.
Как добавить или удалить узлы
Перейдите в ~/kubespray/inventory/minio/hosts.ini и добавьте IP-адрес нового узла.
Запустите ssh-copy-id, чтобы скопировать ваш SSH-ключ на новый узел:
ssh-copy-id username@new-node-ip
Запустите scale.yml
:
ansible-playbook -i inventory/minio/hosts.ini scale.yml -b -v
kubectl get nodes
Чтобы удалить узел, просто выключите сервер и очистите мастер-узел с помощью:
kubectl delete node <ip-of-node>
Minio на Kubernetes
Команды в этом разделе должны быть выполнены на узле kubernetes-master
Создайте постоянный том
Постоянные тома (PV) – это абстракция в Kubernetes, представляющая единицу хранения, выделенную в кластере.
PersistentVolumeClaim (PVC) позволит модулю использовать хранилище, выделенное PV.
Этот раздел создает PV 15Gi (гибибайт), а затем позволяет Minio затребовать 10Gi пространства.
На главном узле Kubernetes создайте файл с именем minio-volume.yaml со следующим YAML, отображенным ниже.
Замените имя пользователя на hostPath на соответствующий путь.
kind: PersistentVolume
apiVersion: v1
metadata:
name: minio-pv-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 15Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/home/username"
kubectl create -f minio-volume.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: minio-pv-claim
labels:
app: minio-storage-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
kubectl create -f minio-pvc.yaml
Создайте развертывание
Создайте конфигурацию развертывания в minio-deploy.yaml и подставьте имя пользователя в последнюю строку.
Доступ и секретный ключ находятся в файле YAML.
apiVersion: apps/v1 # for k8s versions before 1.9.0 use apps/v1beta2 and before 1.8.0 use extensions/v1beta1
kind: Deployment
metadata:
# This name uniquely identifies the Deployment
name: minio-deployment
spec:
selector:
matchLabels:
app: minio
strategy:
type: Recreate
template:
metadata:
labels:
# Label is used as selector in the service.
app: minio
spec:
# Refer to the PVC created earlier
volumes:
- name: storage
persistentVolumeClaim:
# Name of the PVC created earlier
claimName: minio-pv-claim
containers:
- name: minio
# Pulls the default Minio image from Docker Hub
image: minio/minio:latest
args:
- server
- /storage
env:
# Minio access key and secret key
- name: MINIO_ACCESS_KEY
value: "minio"
- name: MINIO_SECRET_KEY
value: "minio123"
ports:
- containerPort: 9000
hostPort: 9000
# Mount the volume into the pod
volumeMounts:
- name: storage # must match the volume name, above
mountPath: "/home/username"
Создайте развертывание
kubectl create -f minio-deploy.yaml
Создайте сервис
vim Minio-svc.yml
Добавьте в файл следующие строки:
vim Minio-svc.yml
Add the lines below to the file.
apiVersion: v1
kind: Service
metadata:
# This name uniquely identifies the service
name: minio-service
spec:
type: LoadBalancer
ports:
- name: http
port: 9000
targetPort: 9000
protocol: TCP
selector:
# Looks for labels `app:minio` in the namespace and applies the spec
app: minio
kubectl create -f Minio-svc.yml
kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.233.0.1 443/TCP 1d
minio-service LoadBalancer 10.233.28.163 9000:30593/TCP 20m

Добрый день, я так понимаю команду создания сервиса пропустили?
Создайте сервис
а команды нет.
И еще есть ошибка:
Создайте конфигурацию развертывания в minio-deploy.yaml
Создайте развертывание kubectl create -f minio-deployment.yaml
те имена файлов не совпадают
Добрый день, спасибо поправили
UPD ну и соответственно нет config файла для service
configmap?
Спасибо за оперативность) с k8s только знакомлюсь поэтому точно сказать не могу, видимо да configmap.