Kubernetes部署会导致崩溃回退和错误

2024-10-02 22:31:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我在家里用4个RPI设置了一个小型Kubernetes集群。 现在我正处在一个阶段,我想尝试并部署一些东西到它,但它不起作用

我创建了一个用于测试的小烧瓶应用程序:

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的注册中心

然后我将设置一个deployment.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运行容器而不会出现任何问题

非常感谢您对我们的帮助

日志 运行kubectl logs test-api-649b447666-97x2r会导致: standard_init_linux.go:211: exec user process caused "exec format error"


Tags: nametestipnoneapiappdefaultpi
2条回答

多亏了@coderanger,我成功地完成了部署

我需要更新Docker,然后确保为Docker build运行buildx命令。 这就是我需要做的,以使它与RPi上的ARM体系结构兼容:docker buildx build platform linux/amd64,linux/arm64,linux/arm/v7 -t gurkmeja101/pi:latest . push

树莓型使用ARM CPU。您的容器映像是为x86_64构建的。这些是不兼容的。您需要专门为ARM构建图像。有很多方法可以做到这一点,我认为Docker的官方工具是buildx。查看https://www.docker.com/blog/multi-arch-images/以获取他们的指南,或者如果您想使用不同的工具链,只需四处搜索即可

相关问题 更多 >