Q&A
【概要】
dockerのimageについて不具合が発生しておりkubernetesのnodesが起動できず困っています。
【目的】
現在Docker for Macのkubernetesにてローカル環境でハンズオン練習を行っています。
コンテナはGoサーバーが2台とDBサーバーが1台です。
Goのサーバー1
FROM golang:latest COPY . . WORKDIR /go/src/shopping/backend/server/shopping CMD ["go", "run", "main.go"] EXPOSE 8080
Goのサーバー2
FROM golang:latest COPY . . WORKDIR /go/src/shopping/backend/server/gateway CMD ["go", "run", "main.go"] EXPOSE 9999
version: '3' services: shop: build: context: ./backend/server/shopping dockerfile: Dockerfile stdin_open: true tty: true ports: - 8080:8080 depends_on: - shopdb volumes: - ./backend/server:/go/src/shopping/backend/server shopdb: build: context: ./backend/server/shopping/config/db dockerfile: Dockerfile restart: always container_name: shopdb environment: - POSTGRES_USER=%%%%%% - POSTGRES_PASSWORD=%%%%%% - POSTGRES_DB=%%%%%% ports: - 5432:5432 volumes: - data:/var/lib/postgresql/data - ./backend/server/shopping/config/db/init/:/docker-entrypoint-initdb.d gateway: build: context: ./backend/server/gateway dockerfile: ./Dockerfile container_name: gateway ports: - 9999:9999 volumes: - ./backend/server:/go/src/shopping/backend/server volumes: data: driver: local
docker-composeでは特にエラーなく起動できたため、buildしたimageをkubernetesでも同様に使おうとしたところ、Goサーバーの2台がCrashLoopBackOffエラーとなってしまいました。
エラー文は
stat main.go: no such file or directory
のみがでています。
% kubectl get pods NAME READY STATUS RESTARTS AGE gateway-74d8c5c497-ppvbq 0/1 CrashLoopBackOff 9 25m shop-79976f6cc-8cmxl 0/1 CrashLoopBackOff 9 25m shopdb-55f55c9788-rqnmb 1/1 Running 0 25m
Goのサーバー1(manifestfile)
apiVersion: apps/v1 kind: Deployment metadata: name: shop spec: replicas: 1 strategy: type: Recreate selector: matchLabels: app: shop template: metadata: labels: app: shop spec: containers: - name: shop image: shopping_shop imagePullPolicy: Never env: - name: DB_HOST value: shopdb.default.svc.cluster.local - name: DB_USER value: %%%%%% - name: DB_PASSWORD value: %%%%%% - name: DB_NAME value: %%%%%% - name: ENV value: local ports: - containerPort: 8080 resources: {} stdin: true tty: true volumeMounts: - mountPath: /go/src/shopping/backend/server name: shop-volume restartPolicy: Always volumes: - name: shop-volume persistentVolumeClaim: claimName: shop-volume
MacBook-Pro k8s % kubectl describe pod shop-79976f6cc-8cmxl Name: shop-79976f6cc-8cmxl Namespace: default Priority: 0 Node: docker-desktop/192.168.65.4 Start Time: Mon, 28 Feb 2022 17:18:06 +0900 Labels: app=shop pod-template-hash=79976f6cc Annotations: <none> Status: Running IP: 10.1.1.43 IPs: IP: 10.1.1.43 Controlled By: ReplicaSet/shop-79976f6cc Containers: shop: Container ID: docker://b45115663f35f07830300e6fc02b3a50b7006e17f12b26e1a676b9a70ac5b134 Image: shopping_shop Image ID: docker://sha256:04cb40368c0913295b75dafb729d472ee223745cdad6b2e5c5340721a3c908d8 Port: 8080/TCP Host Port: 0/TCP State: Waiting Reason: CrashLoopBackOff Last State: Terminated Reason: Error Exit Code: 1 Started: Mon, 28 Feb 2022 17:44:14 +0900 Finished: Mon, 28 Feb 2022 17:44:14 +0900 Ready: False Restart Count: 10 Environment: DB_HOST: shopdb.default.svc.cluster.local DB_USER: shimo0108 DB_PASSWORD: password DB_NAME: shopping_db ENV: local Mounts: /go/src/shopping/backend/server from shop-volume (rw) /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-bfj4z (ro) Conditions: Type Status Initialized True Ready False ContainersReady False PodScheduled True Volumes: shop-volume: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: shop-volume ReadOnly: false kube-api-access-bfj4z: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: <nil> DownwardAPI: true QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 29m default-scheduler Successfully assigned default/shop-79976f6cc-8cmxl to docker-desktop Normal Pulled 28m (x5 over 29m) kubelet Container image "shopping_shop" already present on machine Normal Created 28m (x5 over 29m) kubelet Created container shop Normal Started 28m (x5 over 29m) kubelet Started container shop Warning BackOff 4m20s (x116 over 29m) kubelet Back-off restarting failed container
Goのサーバー2(manifestfile)
apiVersion: apps/v1 kind: Deployment metadata: name: gateway spec: replicas: 1 strategy: type: Recreate selector: matchLabels: app: gateway template: metadata: labels: app: gateway spec: containers: - name: gateway image: shopping_gateway imagePullPolicy: Never ports: - containerPort: 9999 volumeMounts: - mountPath: /go/src/shopping/backend/server name: gateway-volume restartPolicy: Always volumes: - name: gateway-volume persistentVolumeClaim: claimName: gateway-volume
MacBook-Pro k8s % kubectl describe pod gateway-74d8c5c497-ppvbq Name: gateway-74d8c5c497-ppvbq Namespace: default Priority: 0 Node: docker-desktop/192.168.65.4 Start Time: Mon, 28 Feb 2022 17:18:08 +0900 Labels: app=gateway pod-template-hash=74d8c5c497 Annotations: <none> Status: Running IP: 10.1.1.45 IPs: IP: 10.1.1.45 Controlled By: ReplicaSet/gateway-74d8c5c497 Containers: gateway: Container ID: docker://a7dfb85fa5bb2c5a2d5ce145e94728da864d356c3371349d02b2b6cac7a60fdc Image: shopping_gateway Image ID: docker://sha256:8cfc32922e170a5764a3262ff4fafb1f59422ef8c8f3d014993958507c762bc9 Port: 9999/TCP Host Port: 0/TCP State: Waiting Reason: CrashLoopBackOff Last State: Terminated Reason: Error Exit Code: 1 Started: Mon, 28 Feb 2022 17:44:23 +0900 Finished: Mon, 28 Feb 2022 17:44:23 +0900 Ready: False Restart Count: 10 Environment: <none> Mounts: /go/src/shopping/backend/server from gateway-volume (rw) /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-dqfwg (ro) Conditions: Type Status Initialized True Ready False ContainersReady False PodScheduled True Volumes: gateway-volume: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: gateway-volume ReadOnly: false kube-api-access-dqfwg: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: <nil> DownwardAPI: true QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedScheduling 27m default-scheduler 0/1 nodes are available: 1 pod has unbound immediate PersistentVolumeClaims. Normal Scheduled 27m default-scheduler Successfully assigned default/gateway-74d8c5c497-ppvbq to docker-desktop Normal Pulled 26m (x5 over 27m) kubelet Container image "shopping_gateway" already present on machine Normal Created 26m (x5 over 27m) kubelet Created container gateway Normal Started 26m (x5 over 27m) kubelet Started container gateway Warning BackOff 2m26s (x118 over 27m) kubelet Back-off restarting failed container
ちなみに同じ内容のimageをdocker-composeで起動したところ期待通りの挙動が確認できています。
その後調査を続け、kubernetes上でpodsを起動した時のみimageはPULLできているものの中身が空となっている事が発覚しました。(main.goファイルだけでなくすべてのファイルが存在していない)
kompose等を使用し自動生成しても同じ内容のエラーが発生、エラー解決を試みましたが2日ほどこの状態が続いておりトラブルシューティングの協力をお願いしたくこの度募集させていただきました。
どんな些細な事でも結構ですのでご教授いただけると幸いです。
よろしくお願いいたします。