Как использовать PersistentVolume для данных PostgreSQL в Kubernetes - PullRequest
0 голосов
/ 16 мая 2018

Мы разрабатываем веб-сервер Flask и DB-сервер PostgreSQL в Кубернетесе и рассматриваем возможность использования PersistentVolume для обеспечения постоянства данных.

Однако для каталога, указанного в качестве тома, владелец вынужден стать пользователем «root».

В PostgreSQL, если пользователь и владелец не совпадают, сервер не может быть настроен. И мы не можем настроить сервер под пользователем = «root». Таким образом, мы не можем сделать данные сервера PostgreSQL постоянными.

Dockerfile

FROM ubuntu:latest

ARG project_dir=/app/

WORKDIR $project_dir

RUN apt update
RUN apt install --yes python3 python3-pip postgresql-9.5
RUN apt clean
RUN ln -s /usr/bin/python3 /usr/bin/python
RUN ln -s /usr/bin/pip3 /usr/bin/pip

RUN pip install flask
RUN pip install flask_sqlalchemy
RUN pip install psycopg2

ADD app.py $project_dir
ADD templates/ $project_dir/templates/

USER postgres

RUN /etc/init.d/postgresql start && \
  psql --command "CREATE USER docker WITH SUPERUSER PASSWORD 'docker';" && \
  createdb -O docker docker

RUN echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/9.5/main/pg_hba.conf
RUN echo "listen_addresses='*'" >> /etc/postgresql/9.5/main/postgresql.conf

EXPOSE 5000

CMD /usr/lib/postgresql/9.5/bin/postgres -D /var/lib/postgresql/9.5/main -c config_file=/etc/postgresql/9.5/main/postgresql.conf & python /app/app.py

development.yaml

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: dummyproject
  labels:
    app: dummyproject
spec:
  replicas: 1
  selector:
    matchLabels:
      app: dummyproject
  template:
    metadata:
      labels:
        app: dummyproject
    spec:
      containers:
      - name: dummyproject
        image: dummyproject:0.1.0
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 5000
        volumeMounts:
        - mountPath: /var/lib/postgresql/
          name: mydata
      volumes:
        - name: mydata
          persistentVolumeClaim:
            claimName: nfs-claim1

Пожалуйста, дайте мне знать, если вы знаете решение.

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

У вас есть 2 варианта:

  1. Установите UID на 0 в контейнере, как сказал @Alexandr Lurye выше.Теперь это более или менее безопасно.
  2. Вы можете использовать InitContainer, чтобы сменить владельца.Вот мой ответ, как это сделать - https://serverfault.com/questions/906083/how-to-mount-volume-with-specific-uid-in-kubernetes-pod/907160#907160
0 голосов
/ 16 мая 2018

Не стесняйтесь запускать PostgreSQL от имени пользователя root.Root в контейнере не совпадает с root на голой машине с Linux.UID == 0 больше не подразумевает сверхспособности.В настоящее время доступ пользователей контролируется с помощью механизма возможностей, и ваш контейнер по умолчанию не будет иметь никаких опасных возможностей (если вы явно не попросите Kubernetes о некоторых).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...