Тема
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
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'
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 для пода local-nginx-sboard
apiVersion: v1
kind: Service
metadata:
name: sboard-lb
namespace: sboard-k8s-deploy
spec:
selector:
app: local-nginx-sboard
ports:
- protocol: TCP
port: 80
targetPort: 80
---
# Сервис, обеспечивающий доступность sboard в local-nginx-sboard
apiVersion: v1
kind: Service
metadata:
name: sboard
namespace: sboard-k8s-deploy
spec:
selector:
app: sboard-dev
ports:
- name: auth-web
protocol: TCP
port: 8080
targetPort: 8080
- name: auth-service
protocol: TCP
port: 3000
targetPort: 3000
- name: whiteboard-api
protocol: TCP
port: 3001
targetPort: 3001
- name: api-gateway
protocol: TCP
port: 3002
targetPort: 3002
- name: dashboard
protocol: TCP
port: 8081
targetPort: 8081
- name: admin-dashboard
protocol: TCP
port: 8082
targetPort: 8082
- name: whiteboard
protocol: TCP
port: 8083
targetPort: 8083
---
# 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:
imagePullSecrets:
- name: sboard-custom-registry
containers:
- name: sboard
image: cr.yandex/crpqnc9iiqap7fs19jhl/sboard:latest
imagePullPolicy: Always
envFrom:
- secretRef:
name: env-secret
restartPolicy: Always
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: local-nginx-sboard
namespace: sboard-k8s-deploy
spec:
replicas: 1
selector:
matchLabels:
app: local-nginx-sboard
template:
metadata:
labels:
app: local-nginx-sboard
spec:
imagePullSecrets:
- name: sboard-custom-registry
containers:
- name: nginx
image: cr.yandex/crpqnc9iiqap7fs19jhl/nginx-http:latest
ports:
- containerPort: 80
imagePullPolicy: Always
envFrom:
- secretRef:
name: env-secret
restartPolicy: Always
Service
Важно, чтобы сервис, обеспечивающий доступность sboard в local-nginx-sboard назывался строго "sboard"
yml
apiVersion: v1
kind: Service
metadata:
name: sboard
namespace: sboard-k8s-deploy
spec:
selector:
app: sboard-dev
ports:
- name: auth-web
protocol: TCP
port: 8080
targetPort: 8080
...
- Примените файлы
sboard_namespace.yml
,sboard_env.yml
,sboard_tls.yml
,sboard_registry.yml
sboard_app.yml
в кластере Kubernetes:
shell
kubectl apply -f sboard_namespace.yml
kubectl apply -f sboard_env.yml
kubectl apply -f sboard_tls.ym
kubectl apply -f sboard_app.yml