администратор в модуле кубернетов - PullRequest
1 голос
/ 30 мая 2020

Я пытаюсь создать модуль с phpmyadmin и adminer в нем. У меня есть файл Dockerfile, но я не уверен, какая точка входа нужна.

Кто-нибудь делал это раньше? Я все понял, но точка входа ...

FROM phpmyadmin/phpmyadmin

ENV MYSQL_DATABASE=${MYSQL_DATABASE}
ENV MYSQL_USER=${MYSQL_USERNAME}
ENV MYSQL_ROOT_PASSWORD=${MYSQL_PASSWORD}
ENV MYSQL_PORT=3381
ENV PMA_USER=${MYSQL_USER}
ENV PMA_PORT=3381
ENV PMA_PASSWORD=${MYSQL_PASSWORD}
ENV PMA_HOST=${MYSQL_HOST}

EXPOSE 8081
ENTRYPOINT [ "executable" ]

FROM adminer:4

ENV POSTGRES_DB=${POSTGRES_DATABASE}
ENV POSTGRES_USER=${POSTGRES_USER}
ENV POSTGRES_PASSWORD=${POSTGRES_PASSWORD}

EXPOSE 8082
ENTRYPOINT [ "?" ]

------ ОБНОВЛЕНИЕ 1 ---------- после прочтения некоторых комментариев я пролил свои файлы Docker и создам yml для модуля kube

FROM phpmyadmin/phpmyadmin

ENV MYSQL_DATABASE=${MYSQL_DATABASE}
ENV MYSQL_USER=${MYSQL_USERNAME}
ENV MYSQL_ROOT_PASSWORD=${MYSQL_PASSWORD}
ENV MYSQL_PORT=3381
ENV PMA_USER=${MYSQL_USER}
ENV PMA_PORT=3381
ENV PMA_PASSWORD=${MYSQL_PASSWORD}
ENV PMA_HOST=${MYSQL_HOST}

EXPOSE 8081
ENTRYPOINT [ "executable" ]

контейнер 2

FROM adminer:4

ENV POSTGRES_DB=${POSTGRES_DATABASE}
ENV POSTGRES_USER=${POSTGRES_USER}
ENV POSTGRES_PASSWORD=${POSTGRES_PASSWORD}

EXPOSE 8082
ENTRYPOINT [ "?" ]

Я все еще не уверен, каким должен быть сценарий точки входа

Ответы [ 3 ]

0 голосов
/ 30 мая 2020

Вы почти всегда запускаете это в двух отдельных развертываниях. Поскольку единственное, что вы делаете в этом настраиваемом файле Dockerfile, - это устанавливаете переменные среды, вам даже не нужен настраиваемый образ; вы можете использовать часть env: модуля pod spe * от c до для определения переменных среды во время развертывания.

image: adminer:4 # without PHPMyAdmin
env:
  - name: POSTGRES_DB
    value: [...]       # fixed value in pod spec
    # valueFrom: ...   # or get it from a ConfigMap or Secret

Запустите два развертывания, с одним контейнером в каждом, и Служба сопоставления для каждого. (Не запускайте пустые модули и не поддавайтесь соблазну разместить оба контейнера в одном развертывании.) Если базы данных тоже находятся внутри Kubernetes, используйте имена и порты их Сервисов; Обычно я ожидал, что это будут «обычные» порты 3306/5432.

0 голосов
/ 01 июня 2020

Поскольку вы ничего не изменяете в образе, вам не нужно создавать для этого собственный docker образ, вы можете просто запустить 2 развертывания в кубернетах, передав переменные среды с помощью Kubernetes Secret.

См. Этот пример развертывания обоих приложений в Kubernetes:

  1. Создайте секрет 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

0 голосов
/ 30 мая 2020

Вы не можете так объединить два docker изображения. То, что вы создали, представляет собой многоступенчатую сборку, и только последний этап - это то, что заканчивается в окончательном изображении. И даже если вы использовали многоэтапные копии, чтобы аккуратно сложить оба изображения в одно, вам нужно будет продумать, как вы будете запускать обе вещи одновременно. Образ администратора восходящего потока использует php -S под капотом.

...