CrashloopBackOff на Pod в Кубернетесе (на GCP с Дженкинсом) - PullRequest
0 голосов
/ 26 октября 2018

Мои модули находятся в состоянии "CrashloopBackOff" , настройка Jenkins с Kubernetes на GCP .

Я нашел несколько ответовгде это указывает, что мой Dockerfile не подходит и что он должен находиться в бесконечном состоянии .

Но я запускаю команду в production.yaml ["sh "," -c "," app -port = 8080 "] , чтобы получить его в этом состоянии.

Точно такой же Dockerfile был использован, и он работал, когда яразвернул проект вручную в kubernetes.

Проект, который я пытаюсь представить, выглядит следующим образом:


Dockerfile

FROM php:7.2.4-apache

COPY apache_default /etc/apache2/sites-available/000-default.conf
RUN a2enmod rewrite

COPY src /var/www/html/src
COPY public /var/www/html/public
COPY config /var/www/html/config
ADD composer.json /var/www/html
ADD composer.lock /var/www/html

# Install software
RUN apt-get update && apt-get install -y git
# Install unzip
RUN apt-get install -y unzip
# Install curl
RUN apt-get install -y curl

# Install dependencies
RUN php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer

RUN cd /var/www/html && composer install --no-dev --no-interaction --optimize-autoloader
# install pdo for mysql
RUN docker-php-ext-install pdo pdo_mysql

COPY "memory-limit-php.ini" "/usr/local/etc/php/conf.d/memory-limit-php.ini"

RUN chmod 777 -R /var/www

# Production envivorment
ENV ENVIVORMENT=prod  

EXPOSE 80

CMD apachectl -D FOREGROUND

CMD ["app"]

Файл Jenkins

def project = '****'
def  appName = 'wobbl-mobile-backend'
def  imageTag = "gcr.io/${project}/${appName}"
def  feSvcName = "wobbl-main-backend-service"

pipeline {
  agent {
    kubernetes {
      label 'sample-app'
      defaultContainer 'jnlp'
      yamlFile 'k8s/pod/pod.yaml'
  }
  }
  stages {
    // Deploy Image and push with image container builder
    stage('Build and push image with Container Builder') {
      steps {
        container('gcloud') {
          sh "PYTHONUNBUFFERED=1 gcloud container builds submit -t ${imageTag} ."
        }
      }
    }
    // Deploy to production
    stage('Deploy Production') {
      // Production branch
      steps{
        container('kubectl') {
        // Change deployed image in canary to the one we just built
          sh("sed -i.bak 's#gcr.io/cloud-solutions-images/wobbl-main:1.0.0#${imageTag}#' ./k8s/production/*.yaml")
          sh("kubectl --namespace=production apply -f k8s/services/")
          sh("kubectl --namespace=production apply -f k8s/production/")
          sh("echo http://`kubectl --namespace=production get service/${feSvcName} -o jsonpath='{.status.loadBalancer.ingress[0].ip}'` > ${feSvcName}")
        }
      }
    }
  }
}

Чем конфигурации yaml kubernetes:

pod.yaml

apiVersion: v1
kind: Pod
metadata:
labels:
  component: ci
spec:
  # Use service account that can deploy to all namespaces
  serviceAccountName: default
  containers:
  - name: gcloud
    image: gcr.io/cloud-builders/gcloud
    command:
    - cat
    tty: true
  - name: kubectl
    image: gcr.io/cloud-builders/kubectl
    command:
    - cat
    tty: true

Используемая служба backend.yaml

kind: Service
apiVersion: v1
metadata:
  name: wobbl-main-backend-service
spec:
  ports:
  - name: http
    port: 8080
    targetPort: 8080
    protocol: TCP
  selector:
    role: backend
    app: wobbl-main

Развертывание production.yaml

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: wobbl-main-backend-production
spec:
  replicas: 1
  template:
    metadata:
      name: backend
      labels:
        app: wobbl-main
        role: backend
        env: production
    spec:
      containers:
      - name: backend
        image: gcr.io/cloud-solutions-images/wobbl-main:1.0.0
        resources:
          limits:
            memory: "500Mi"
            cpu: "100m"
        imagePullPolicy: Always
        readinessProbe:
          httpGet:
            path: /healthz
            port: 8080
        command: ["sh", "-c", "app -port=8080"]
        ports:
        - name: backend
          containerPort: 8080

Когда я запускаю kubernetes, опишитепод ****-н производства яполучить следующий ответ:

Обычный Создан 3м (x4 на 4м) kubelet, gke-jenkins-cd-default-pool-83e2f18e-hvwp Создан контейнер Нормальный старт 3м (x4 на 4м) kubelet, gke-jenkins-cd-default-pool-83e2f18e-hvwp Запущенный контейнер Предупреждение BackOff 2 м (x8 более 4 м) kubelet, gke-jenkins-cd-default-pool-83e2f18e-hvwp Сбой при перезапуске при перезапуске контейнера

Любые советы о том, как это отладить?

1 Ответ

0 голосов
/ 26 октября 2018

Сначала ваш файл Docker гласит:

CMD ["app"]

А затем в вашем определении развертывания у вас есть:

command: ["sh", "-c", "app -port=8080"]

Это повторение.Я предлагаю вам использовать один из них.

Во-вторых, я предполагаю, что одна из команд install даст вам двоичный файл app.Убедитесь, что в вашей $PATH

Plus есть пакет и манифест развертывания.Надеюсь, вы используете один из них и не используете оба.

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