Поскольку вы ничего не изменяете в образе, вам не нужно создавать для этого собственный docker образ, вы можете просто запустить 2 развертывания в кубернетах, передав переменные среды с помощью Kubernetes Secret.
См. Этот пример развертывания обоих приложений в Kubernetes:
Создайте секрет Kubernetes с данными вашего подключения:
cat <<EOF >./kustomization.yaml
secretGenerator:
- name: database-conn
literals:
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_PORT=${MYSQL_PORT}
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
EOF
Применить сгенерированный файл:
kubectl apply -k .
secret/database-conn-mm8ck2296m created
Развертывание phpMyAdmin и Adminer:
Вам необходимо создать два развертывания, первое для phpMyAdmin и другое для Adminer, используя созданные секреты выше в контейнерах, например:
Создайте файл с именем phpmyadmin-deploy.yml
:
Примечание. Измените секретное имя с database-conn-mm8ck2296m
на сгенерированное имя в приведенной выше команде.
apiVersion: apps/v1
kind: Deployment
metadata:
name: phpmyadmin
spec:
selector:
matchLabels:
app: phpmyadmin
template:
metadata:
labels:
app: phpmyadmin
spec:
containers:
- name: phpmyadmin
image: phpmyadmin/phpmyadmin
env:
- name: MYSQL_DATABASE
valueFrom:
secretKeyRef:
name: database-conn-mm8ck2296m
key: MYSQL_DATABASE
- name: MYSQL_USER
valueFrom:
secretKeyRef:
name: database-conn-mm8ck2296m
key: MYSQL_USER
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: database-conn-mm8ck2296m
key: MYSQL_ROOT_PASSWORD
- name: MYSQL_PORT
valueFrom:
secretKeyRef:
name: database-conn-mm8ck2296m
key: MYSQL_PORT
- name: PMA_HOST
value: mysql.host
- name: PMA_USER
valueFrom:
secretKeyRef:
name: database-conn-mm8ck2296m
key: MYSQL_USER
- name: PMA_PASSWORD
valueFrom:
secretKeyRef:
name: database-conn-mm8ck2296m
key: MYSQL_ROOT_PASSWORD
- name: PMA_PORT
valueFrom:
secretKeyRef:
name: database-conn-mm8ck2296m
key: MYSQL_PORT
ports:
- name: http
containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: phpmyadmin-svc
spec:
selector:
app: phpmyadmin
ports:
- protocol: TCP
port: 80
targetPort: 80
Администратор:
Создайте другой файл с именем adminer-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: adminer
spec:
selector:
matchLabels:
app: adminer
template:
metadata:
labels:
app: adminer
spec:
containers:
- name: adminer
image: adminer:4
env:
- name: POSTGRES_DB
valueFrom:
secretKeyRef:
name: database-conn-mm8ck2296m
key: POSTGRES_DB
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: database-conn-mm8ck2296m
key: POSTGRES_USER
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: database-conn-mm8ck2296m
key: POSTGRES_PASSWORD
ports:
- name: http
containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: adminer-svc
spec:
selector:
app: adminer
ports:
- protocol: TCP
port: 8080
targetPort: 8080
Разверните файлы yaml с помощью kubectl apply -f *-deploy.yaml
, через несколько секунд введите kubectl get pods && kubectl get svc
, чтобы проверить, все ли в порядке.
Примечание: Обе службы будут созданы как ClusterIP
, это означает, что они будут доступны только внутренне. Если вы используете облачного провайдера, вы можете использовать тип службы LoadBalancer
, чтобы получить внешний IP-адрес. Или вы можете использовать команду kubectl port-forward
( см. Здесь ) для доступа к вашей службе с вашего компьютера.
Доступ к приложению с использованием переадресации портов:
phpMyadmin:
# This command will map the port 8080 from your localhost to phpMyadmin application:
kubectl port-forward svc/phpmyadmin-svc 8080:80
Adminer
# This command will map the port 8181 from your localhost to Adminer application:
kubectl port-forward svc/adminer-svc 8181:8080
И попробуйте получить доступ:
http://localhost: 8080 <= phpMyAdmin <a href="http://localhost:8181" rel="nofollow noreferrer">http://localhost: 8181 <= Adminer </p>
Ссылки:
Kubernetes Secrets
Переменные среды Kubernetes
Kubernetes port forward