Постоянный том для Jenkins в Kubernetes

Я пытаюсь развернуть образ Jenkins в локальном кластере Kubernetes. Развертывание выполнено успешно, но я не могу заставить работать данные о постоянстве. Ошибок не возникает, и новые поды запускаются успешно, единственная проблема в том, что это непостоянно.

Файл Dockerfile Дженкинса:

FROM jenkins/jenkins:lts

ENV JENKINS_USER admin
ENV JENKINS_PASS admin

# Skip initial setup
ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false


COPY plugins.txt /usr/share/jenkins/plugins.txt
RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/plugins.txt
USER root
RUN apt-get update \
  && apt-get install -qqy apt-transport-https ca-certificates curl gnupg2 software-properties-common 
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
RUN add-apt-repository \
  "deb [arch=amd64] https://download.docker.com/linux/debian \
  $(lsb_release -cs) \
  stable"
RUN apt-get update  -qq \
  && apt-get install docker-ce -y
RUN usermod -aG docker jenkins
RUN apt-get clean
RUN curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose
USER jenkins

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

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      containers:
        - name: jenkins
          image: mikemanders/my-jenkins-image:1.1
          env:
            - name: JAVA_OPTS
              value: -Djenkins.install.runSetupWizard=false
          ports:
            - name: http-port
              containerPort: 8080
            - name: jnlp-port
              containerPort: 50000
          volumeMounts:
            - name: jenkins-home
              mountPath: /var/lib/jenkins
              subPath: jenkins
      volumes:
        - name: jenkins-home
          persistentVolumeClaim:
            claimName: jenkins-pv-claim

Постоянный том Kubernetes:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: jenkins-pv
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 6Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/var/lib"

Требование постоянного объема

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jenkins-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi

Я использую Minikube для локальной разработки. И, конечно же, Kubectl.

Не понимаю, что я делаю неправильно. Любая помощь приветствуется.


person Mike Manders    schedule 04.05.2020    source источник


Ответы (1)


Обычный образ dockerhub jenkins использует путь /var/jenkins_home, а не /var/lib/jenkins для постоянных данных. Поэтому вы должны использовать этот путь для монтирования постоянного тома.

person Thomas    schedule 04.05.2020
comment
Я попробовал ваше предложение. Статус модуля - CrashLoopBackOff. Когда я смотрю журналы, я получаю следующее сообщение: touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? . Я предполагаю, что путь к хосту постоянного тома также неверен. - person Mike Manders; 04.05.2020
comment
Я нашел для этого решение. initContainers: - name: set-jenkins-home-permissions image: alpine:3.11 command: - chown - -R - 1000:1000 - /var/jenkins_home volumeMounts: - name: jenkins-home mountPath: /var/jenkins_home Не уверен, что это хороший способ решить эту проблему, но пока он решает ее, так что я могу двигаться дальше. Но любое лучшее предложение всегда приветствуется. - person Mike Manders; 04.05.2020
comment
Вы можете использовать securityContext и установить fsGroup на 1000, хотя я не тестировал его, он должен дать вам тот же результат, что и ваш контейнер инициализации. Дополнительные сведения: kubernetes.io/docs/tasks/configure-pod- контейнер / - person Thomas; 04.05.2020
comment
@MikeManders, пожалуйста, опубликуйте свое решение в качестве ответа, чтобы другим можно было помочь в будущем, если они столкнутся с аналогичной проблемой. - person Mark Watney; 05.05.2020
comment
да, @Thomas верен, вы можете увидеть пример с fsGroup: 1000 здесь medium.com/swlh/ - person Britt Kelly; 05.10.2020