Docker контейнер работает / не работает внутри kubernetes - PullRequest
1 голос
/ 20 июня 2019

Я немного запутался здесь. Он работает как обычный докер-контейнер, но когда он входит внутрь контейнера, он не работает. Вот как я это делаю.

Dockerfile на моем локальном компьютере для создания образа и публикации в реестре Docker

FROM alpine:3.7
COPY . /var/www/html
CMD tail -f /dev/null

Теперь, если я просто вытяну изображение (после удаления локального) и запустлю как контейнер. Это работает, и я могу видеть мои файлы в /var/www/html.

Теперь я хочу использовать это внутри моего кластера kubernetes.

Def: Minikube --vm-driver = нет

Я запускаю kube внутри миникуба с драйвером без опции Так для кластера с одним узлом.

EDIT

Я могу видеть свои данные в / var / www / html, если я удалю монтирования томов и заявку из файла развертывания.

Файл развертывания

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    io.kompose.service: app
  name: app
spec:
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      creationTimestamp: null
      labels:
        io.kompose.service: app
    spec:
      securityContext:
        runAsUser: 1000
        runAsGroup: 1000
      containers:
      - image: kingshukdeb/mycode
        name: pd-mycode
        resources: {}
        volumeMounts:
        - mountPath: /var/www/html
          name: claim-app-storage
      restartPolicy: Always
      volumes:
      - name: claim-app-storage
        persistentVolumeClaim:
          claimName: claim-app-nginx
status: {}

ПВХ файл

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  creationTimestamp: null
  labels:
    io.kompose.service: app-nginx1
  name: claim-app-nginx
spec:
  storageClassName: testmanual
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 100Mi
status: {}

PV файл

apiVersion: v1
kind: PersistentVolume
metadata:
  name: app-nginx1
  labels:
    type: local
spec:
  storageClassName: testmanual
  capacity:
    storage: 100Mi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/data/volumes/app"

Теперь, когда я запускаю эти файлы, он создает pv, pvc, и pvc привязан к pv. Но если я захожу внутрь своего контейнера, я не вижу свои файлы. hostpath - это / data / объемы / приложение . Любые идеи будут оценены.

1 Ответ

0 голосов
/ 04 июля 2019

Когда PVC привязан к модулю, том монтируется в месте, описанном в файле yaml модуля / развертывания. В вашем случае: mountPath: /var/www/html. Вот почему файлы, «запеченные» в изображении контейнера, недоступны (простое объяснение, почему здесь )

Вы можете подтвердить это, выполнив команду exec для контейнера, запустив kubectl exec YOUR_POD -i -t -- /bin/sh и запустив mount | grep "/var/www/html".

Решение

Вы можете решить это многими способами. Рекомендуется хранить ваши статические данные отдельно (то есть в PV) и сохранять изображение контейнера как можно меньшим и быстрым.

Если вы передадите файлы, которые вы хотите смонтировать в PV, на путь вашего хоста /data/volumes/app, они будут доступны в вашем модуле, тогда вы можете создать новый образ, исключив операцию COPY. Таким образом, даже в случае сбоя pod изменения в файлах, созданных вашим приложением, будут сохранены.

Если PV будет востребован более чем одним модулем, вам нужно изменить accessModes, как описано здесь :

Режимы доступа:

  • ReadWriteOnce - том может монтироваться как чтение-запись одним узлом
  • ReadOnlyMany - том может быть подключен только для чтения многими узлами
  • ReadWriteMany - том можно монтировать как чтение-запись многими узлами

Подробное объяснение томов в Kubernetes docs: https://kubernetes.io/docs/concepts/storage/persistent-volumes/

...