Результаты развертывания Kubernetes приводят к CrashLoopBackOff и Error - PullRequest
0 голосов
/ 18 марта 2020

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

Я создал небольшое Flask приложение для целей тестирования:

from flask import Flask
app = Flask(__name__)
@app.route("/")
def test():
    return {"Hello": "World"}
if __name__ == "__main__":
    app.run(debug=True, host="0.0.0.0")

Dockerfile для него:

FROM python:3.8-alpine
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
CMD ["python", "app.py"]

Я собираю его и помещаю в реестр в DockerHub.

Затем я настраиваю файл deploy.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-api
spec:
  replicas: 3
  selector:
    matchLabels:
      app: test-api
  template:
    metadata:
      labels:
        app: test-api
    spec:
      containers:
        - name: test-api
          image: gurkmeja101/pi:latest
          resources:
            limits:
              memory: "128Mi"
              cpu: "500m"
          ports:
            - containerPort: 5000

---
apiVersion: v1
kind: Service
metadata:
  name: test-api
spec:
  selector:
    app: test-api
  ports:
    - port: 5000
      targetPort: 5000
  type: NodePort

Запуск kubectl apply -f deployment.yaml Я получаю следующие выходные данные:

deployment.apps/test-api created
service/test-api created

PS C:\projects\Python\test> kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP          40h
test-api     NodePort    10.105.100.68   <none>        5000:31409/TCP   45s
PS C:\projects\Python\test> kubectl get deployments
NAME       READY   UP-TO-DATE   AVAILABLE   AGE
test-api   0/3     3            0           50s
PS C:\projects\Python\test> kubectl get pods
NAME                        READY   STATUS             RESTARTS   AGE
test-api-649b447666-97x2r   0/1     CrashLoopBackOff   3          88s
test-api-649b447666-bmmld   0/1     CrashLoopBackOff   3          88s
test-api-649b447666-scnzz   0/1     CrashLoopBackOff   3          88s

Описание неисправного модуля дает мне:

Name:         test-api-649b447666-97x2r
Namespace:    default
Priority:     0
Node:         k8s-worker-02/192.168.1.102
Start Time:   Wed, 18 Mar 2020 09:05:34 +0100
Labels:       app=test-api
              pod-template-hash=649b447666
Annotations:  <none>
Status:       Running
IP:           10.244.2.18
IPs:
  IP:           10.244.2.18
Controlled By:  ReplicaSet/test-api-649b447666
Containers:
  test-api:
    Container ID:   docker://1418404c27fc5a1a8ef7b557c495a7fbf8f8907ef1dd4d09b4ad5dae02d98b33
    Image:          gurkmeja101/pi:latest
    Image ID:       docker-pullable://gurkmeja101/pi@sha256:c2bca364aab8f583c3ed0e64514112475d3e8c77f5dfab979929c5e4b8adb43b
    Port:           5000/TCP
    Host Port:      0/TCP
    State:          Waiting
      Reason:       CrashLoopBackOff
    Last State:     Terminated
      Reason:       Error
      Exit Code:    1
      Started:      Wed, 18 Mar 2020 09:07:10 +0100
      Finished:     Wed, 18 Mar 2020 09:07:10 +0100
    Ready:          False
    Restart Count:  4
    Limits:
      cpu:     500m
      memory:  128Mi
    Requests:
      cpu:        500m
      memory:     128Mi
    Environment:  <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-7rmwv (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  default-token-7rmwv:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-7rmwv
    Optional:    false
QoS Class:       Guaranteed
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type     Reason     Age                  From                    Message
  ----     ------     ----                 ----                    -------
  Normal   Scheduled  119s                 default-scheduler       Successfully assigned default/test-api-649b447666-97x2r to k8s-worker-02
  Normal   Pulled     24s (x5 over 116s)   kubelet, k8s-worker-02  Container image "gurkmeja101/pi:latest" already present on machine
  Normal   Created    24s (x5 over 116s)   kubelet, k8s-worker-02  Created container test-api
  Normal   Started    23s (x5 over 115s)   kubelet, k8s-worker-02  Started container test-api
  Warning  BackOff    21s (x10 over 112s)  kubelet, k8s-worker-02  Back-off restarting failed container

Я могу запустить контейнер без проблем использование docker run -d -p 5000:5000 pi:latest.

Любая и вся помощь в этом отношении приветствуется!

logs running kubectl logs test-api-649b447666-97x2r приводит к: standard_init_linux.go:211: exec user process caused "exec format error"

Ответы [ 2 ]

3 голосов
/ 18 марта 2020

RaspberryPis использует процессоры ARM. Изображения вашего контейнера созданы для x86_64. Они не совместимы. Вам нужно будет специально создавать свои изображения для ARM. Есть много способов сделать это, я думаю, официальный инструмент Docker - это buildx. Проверьте https://www.docker.com/blog/multi-arch-images/ для их руководства или просто ищите, если вы хотите использовать другой набор инструментов.

0 голосов
/ 18 марта 2020

Благодаря @coderanger я успешно выполнил развертывание.

Мне нужно было обновить Docker, а затем обязательно выполнить команду buildx для Docker build. Вот что мне нужно было сделать, чтобы сделать его совместимым с архитектурой ARM на RPi: docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t gurkmeja101/pi:latest . --push.

...