Проблема с извлечением образа при развертывании в Kubernetes из реестра Dockerhub - PullRequest
1 голос
/ 30 октября 2019

В настоящее время я пытаюсь реализовать конвейер CI / CD с использованием Docker, Kubernetes и Jenkins. Когда я создавал YAML-файл развертывания Kubernetes для конвейера, у меня не было отметки времени. Только я использовал imagePullPolicy как latest в файле YAML. Что касается последней версии, у меня уже было одно обсуждение здесь. Ниже приведена ссылка для этого обсуждения,

Изображение Docker не получает последние данные из реестра dockerhub.com

После этогоВ обсуждении я включил отметку времени в YAML своего развертывания, как показано ниже:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-kube-deployment
  labels:
   app: test-kube-deployment
spec:
 replicas: 3
 selector:
  matchLabels:
    app: test-kube-deployment
 template:
  metadata:
    labels:
      app: test-kube-deployment
    annotations: 
     date: "+%H:%M:%S %d/%m/%y"
  spec:
    imagePullSecrets:
      - name: "regcred"
    containers:
     - name: test-kube-deployment-container
       image: spacestudymilletech010/spacestudykubernetes:latest
       imagePullPolicy: Always
       ports:
         - name: http
           containerPort: 8085
           protocol: TCP

Здесь я изменил свой сценарий, добавив отметку времени, добавив в шаблон следующее:

annotations: 
    date: "+%H:%M:%S %d/%m/%y"

Мой служебный файл, подобный следующему,

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: NodePort
  ports:
   - port: 8085
     targetPort: 8085
     protocol: TCP
     name: http
 selector:
    app: test-kube-deployment

Мой jenkinsfile содержит следующее:

stage ('imagebuild')
            {
                steps
                    {                               
 sh 'docker build -f /var/lib/jenkins/workspace/jpipeline/pipeline/Dockerfile -t spacestudymilletech010/spacestudykubernetes:latest /var/lib/jenkins/workspace/jpipeline/pipeline'
 sh 'docker login --username=<my-username> --password=<my-password>' 
 sh 'docker push spacestudymilletech010/spacestudykubernetes:latest'
                    }
            }

  stage ('Test Deployment')
            {
                 steps
                    {
                        sh 'kubectl apply -f deployment/testdeployment.yaml'
                        sh 'kubectl apply -f deployment/testservice.yaml'
                    }
            }

Но все равно развертывание не извлекает последнюю из реестра dockerhub. Как я могу изменить эти сценарии для решения последней проблемы вытягивания? Может кто-нибудь помочь мне решить эту проблему, пожалуйста? Пожалуйста, поправьте меня, если я пошел в неправильном направлении.

Спасибо.

Ответы [ 2 ]

1 голос
/ 30 октября 2019
The default pull policy is IfNotPresent which causes the Kubelet to skip pulling an image if it already exists. If you would like to always force a pull, you can do one of the following:

set the imagePullPolicy of the container to Always.

omit the imagePullPolicy and use :latest as the tag for the image to use.

omit the imagePullPolicy and the tag for the image to use.

enable the AlwaysPullImages admission controller.

Как правило, либо используйте :latest, либо используйте imagePullPolicy: Always

Попробуйте и дайте мне знать, как это происходит!

Ссылка от здесь

0 голосов
/ 15 ноября 2019

Существует множество статей и документов, в которых объясняется, как правильно создавать и публиковать образ докера с помощью Jenkins. Сначала вы должны прочитать Использование Docker с конвейером , который показывает вам пример с переменной среды ${env.BUILD_ID}

node {
   checkout scm

   docker.withRegistry('https://registry.example.com', 'credentials-id') {

       def customImage = docker.build("my-image:${env.BUILD_ID}")

       /* Push the container to the custom Registry */
       customImage.push()
   }
}

Или поместить его в качестве этапа:

    stage('Push image') {
        docker.withRegistry('https://registry.hub.docker.com', 'docker-hub-credentials') {
            app.push("${env.BUILD_NUMBER}")
            app.push("latest")
        }
    }

Я действительно рекомендую прочитать Создание вашего первого образа Docker с помощью Jenkins 2: Руководство для разработчиков , которое, я думаю, ответит на многие, если не на все ваши вопросы.

...