Solucionado (ver solução)
Solucionado
(ver solução)
9
respostas

Erro ao subir um Deployment

Olá, estou tentando subir de deployment com uma imagem do php, mas sempre da erro, segue resultado do kubectl describe pods:

Events:
  Type     Reason     Age               From               Message
  ----     ------     ----              ----               -------
  Normal   Scheduled  3m43s             default-scheduler  Successfully assigned default/back-crud-deploy-5544b5b7cc-2cmwb to minikube
  Normal   Pulling    3m42s             kubelet            Pulling image "php:7.4-cli"
  Normal   Pulled     24s               kubelet            Successfully pulled image "php:7.4-cli" in 3m18.17806603s
  Normal   Created    8s (x3 over 24s)  kubelet            Created container back-crud-container
  Normal   Started    8s (x3 over 24s)  kubelet            Started container back-crud-container
  Normal   Pulled     8s (x2 over 23s)  kubelet            Container image "php:7.4-cli" already present on machine
  Warning  BackOff    8s (x3 over 22s)  kubelet            Back-off restarting failed container

Segue deployment.yml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: back-crud-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: back-crud
  template:
    metadata:
      name: back-crud
      labels:
        app: back-crud
    spec:
      containers:
        - name: back-crud-container
          image: php:7.4-cli
          ports:
            - containerPort: 80

9 respostas

Olá Francisco, boa tarde. Tudo bem?

O problema nesse caso é que você está subindo apenas uma imagem do php, sem nenhuma aplicação em execução. Dessa maneira, o container criado dentro do pod é inicializado, porém como não tem nenhum processo que o mantenha em execução, o mesmo é encerrado.

E se eu usasse o Dockerfile abaixo:

FROM php:7.4-alpine

EXPOSE 80
COPY .  /api
WORKDIR /api
RUN apk update && apk add composer
RUN wget https://phar.phpunit.de/phpunit-6.4.phar
RUN chmod +x phpunit-6.4.phar
RUN mv phpunit-6.4.phar /usr/local/bin/phpunit
RUN composer install
ENTRYPOINT [ "php -S 0.0.0.0:80 -t public" ]

Estou tentando subir um Deployment com Persistent Volume Claim mas ta dando erro, segue arquivos:

Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: back-crud-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: back-crud
  template:
    metadata:
      name: back-crud
      labels:
        app: back-crud
    spec:
      containers:
        - name: back-crud-container
          image: f0junior/php:latest
          ports:
            - containerPort: 80
          volumeMounts:
            - name: back-crud-volume
              mountPath: /api
      volumes:
        - name: back-crud-volume
          persistentVolumeClaim:
            claimName: back-crud-pvc

Persistent Volume Claim:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: back-crud-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
  storageClassName: standard

Persistent Volume:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: back-crud-pv
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /home/junior/Documentos/Projects/crud/PHP
    type: DirectoryOrCreate
  storageClassName: standard

Service:

apiVersion: v1
kind: Service
metadata:
  name: svc-back-crud
spec:
  type: NodePort
  ports:
    - port: 80
      nodePort: 31000
  selector:
    app: back-crud

Eu faço uso do linux mint.

Qual erro está ocorrendo? O mesmo?

O mesmo erro.

O código da API está em algum lugar? Posso testar aqui a execução completa se for o caso.

solução!

Opa Francisco, tudo bem? Eu consegui executar aqui. Fiz a seguinte modificação no YAML do deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: back-crud-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: back-crud
  template:
    metadata:
      name: back-crud
      labels:
        app: back-crud
    spec:
      containers:
        - name: back-crud-container
          image: php-teste:1.0
          ports:
            - containerPort: 80

Além disso, sugiro remover todas as imagens que você tem localmente com o comando docker rmi -f $(docker images -aq).

O Dockerfile eu deixei da seguinte maneira:

FROM php:7.4-alpine

EXPOSE 80
COPY api_crud-main/  /api
WORKDIR /api
RUN apk update && apk add composer
RUN wget https://phar.phpunit.de/phpunit-6.4.phar
RUN chmod +x phpunit-6.4.phar
RUN mv phpunit-6.4.phar /usr/local/bin/phpunit
RUN composer install
ENTRYPOINT php -S 0.0.0.0:80 -t public

Construí a imagem com o comando docker build -t php-teste:1.0 .

Daniel, funcionou. Agora tenho que estudar Volumes. Obrigado.