Тема
Kubernetes
Необходимо для работы
Установка
- Создайте в корне папку
/sboard
shell
mkdir "/sboard"- Создайте в новой папке файл
sboard_namespace.yml
Уточнение
В этом пункте описано создание отдельного пространства имен для деплоя(namespace), в котором будет происходить дальнейшая настройка.
shell
nano sboard_namespace.ymlСодержимое sboard_namespace.yml
yml
kind: Namespace
apiVersion: v1
metadata:
name: sboard-k8s-deploy
labels:
kubernetes.io/metadata.name: sboard-k8s-deploy
node-local-dns-injection: enabled
annotations:
namespaceDesc: Namespace for sboard deploy- Создайте файл
sboard_env.yml. Он послужит для указания переменных окружения.
shell
nano sboard_env.ymlСодержимое sboard_env.yml
yml
kind: Secret
apiVersion: v1
metadata:
name: env-secret
namespace: sboard-k8s-deploy
stringData:
DOMAIN_NAME: sboard.mycompany.com # доменное имя, на котором развернется сервис
POSTGRES_URL: postgresql://user:password@host:5432/db # url подключения к базе данных postgresql, содержит в себе root user, пароль и хост базы
REDIS_HOST: redis # хост для базы данных redis
REDIS_PORT: 6379 # порт для базы данных redis
REDIS_PASS: pass # пароль для базы данных redis
S3_BUCKET: example-bucket # название бакета в s3 storage
S3_ACCESS_KEY_ID: access_key_id # айди ключа доступа к s3 storage
S3_SECRET_ACCESS_KEY: secret_access_key # ключ доступа к s3 storage
S3_ENDPOINT: https://storage.s3.com # url для s3 storage
REVERSE_PROXY: true # запуск за reverse proxy
type: Opaque- Создайте файл
sboard_tls.yml. Он послужит для настройки ssl соединения.
shell
nano sboard_tls.ymlСодержимое sboard_tls.yml
yml
kind: Secret
apiVersion: v1
metadata:
name: domain-name-secret
namespace: sboard-k8s-deploy
annotations:
description: domain-name-secret for ingres
data:
tls.crt: сертификат в base64
tls.key: ключ в base64
type: kubernetes.io/tls- Авторизуйтесь в Docker registry (запросите ключ авторизации
key.jsonу вашего менеджера)
shell
cat key.json | docker login \
--username json_key \
--password-stdin \
cr.yandex- Убедитесь, что полученный ключ имеет нужный формат.
shell
cat $HOME/.docker/config.jsonРезультат:
json
{
"auths": {
"cr.yandex": {
"auth": "****"
}
}
}- Создайте файл
sboard_registry.yml.
shell
nano sboard_registry.ymlСодержимое sboard_registry.yml
yml
apiVersion: v1
kind: Secret
metadata:
name: sboard-custom-registry
namespace: sboard-k8s-deploy
data:
.dockerconfigjson: $HOME/.docker/config.json
type: kubernetes.io/dockerconfigjson- Создайте файл
sboard_app.yml. Он послужит для деплоя приложения и сервисов.
shell
nano sboard_app.ymlСодержимое sboard_app.yml
yml
# Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sboard-ingress
namespace: sboard-k8s-deploy
annotations:
kubernetes.io/ingress.class: 'nginx'
nginx.ingress.kubernetes.io/proxy-body-size: '100m'
spec:
tls:
- hosts:
- sboard.mycompany.com # доменное имя, на котором развернется сервис
secretName: domain-name-secret
rules:
- host: sboard.mycompany.com # доменное имя, на котором развернется сервис
http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
service:
name: sboard-lb
port:
number: 80
---
# Service для пода sboard-dev
apiVersion: v1
kind: Service
metadata:
name: sboard-lb
namespace: sboard-k8s-deploy
spec:
selector:
app: sboard-dev
ports:
- protocol: TCP
port: 80
targetPort: 80
---
# Deployment docker
apiVersion: apps/v1
kind: Deployment
metadata:
name: sboard-dev
namespace: sboard-k8s-deploy
spec:
replicas: 1
selector:
matchLabels:
app: sboard-dev
template:
metadata:
labels:
app: sboard-dev
spec:
containers:
- name: sboard
image: cr.yandex/crpqnc9iiqap7fs19jhl/sboard:latest
imagePullPolicy: Always
envFrom:
- secretRef:
name: env-secret
restartPolicy: Always- Примените файлы
sboard_namespace.yml,sboard_env.yml,sboard_tls.yml,sboard_registry.ymlsboard_app.ymlв кластере Kubernetes:
shell
kubectl apply -f sboard_namespace.yml
kubectl apply -f sboard_env.yml
kubectl apply -f sboard_tls.yml
kubectl apply -f sboard_app.yml