AMcoder - javascript, python, java, html, php, sql

Kubernetes-ը չի կարողանում տեղակայել վավեր կոնտեյների պատկերը

Ես ունեմ Docker պատկեր, որը պարունակում է NodeJS հավելված: Dockerfile-ը հետևյալն է.

FROM node:8
WORKDIR /app
ADD . /app
RUN npm install
EXPOSE 80
ENTRYPOINT [ "/bin/sh", "./start.sh" ]

start.sh սցենարը հետևյալն է.

#!/bin/bash
...
echo "Starting application"
npm start

Ես կարող եմ գործարկել և փորձարկել պատկերը ձեռքով.

$ gcloud docker -- run -it --rm my-container
...
Starting application
...
> node index.js
...

Նույն կոնտեյները օգտագործվում է kubernetes տեղակայման միջոցով.

apiVersion: extensions/v1beta1
kind: Deployment
...
spec:
  ...
  template:
    ...
    spec:
      containers:
      - image: my-container
...

Կոնտեյները սկսվում է, start.sh սկրիպտը ճիշտ է կատարվում, բայց այն ավարտվում է, և կոնտեյները անցնում է CrashLoopBackOff հանգույց:

Պատիճը ձեռքով ստուգելուց հետո.

kubectl exec -ti my-pod -- bash
I have no name!@my-pod:/app# cat /etc/passwd
... empty response

-> Տպավորություն է ստեղծվում, որ ինչ-որ կերպ բեռնարկղում չկան համակարգի օգտատերեր, ինչը հանգեցնում է նրան, որ հրամանների մեծ մասը (ինչպես npm) անաղմուկ ձախողվում է և դադարեցնում բեռնարկղը

Ես նույնպես փորձել եմ, անհաջող.

  • պատիճը ջնջելը
  • տեղակայման ջնջում և վերստեղծում
  • գործարկել node պատկերը node օգտագործողի հետ -> unable to find user node: no matching entries in passwd file

Վերջին նշում. Ես իրականում ունեմ բազմաթիվ տեղակայումներ (օգտագործելով նույն ձևանմուշը պարզապես այլ անունով), որոնք լավ են աշխատում մի քանի օր առաջ ստեղծված պատկերով նույն սկզբնական կոդով.

Որոշ տեղակայումների համար այն իրականում աշխատել է այն բանից հետո, երբ ձեռքով ջնջել է pod-ը և թույլ տալով kubernetes-ին վերստեղծել այն:

Կա՞ն գաղափարներ:

Խմբագրել 18/01/2018 Ես փորձել եմ վերականգնել պատկերը նույն սկզբնաղբյուրով, որն օգտագործում են հին աշխատանքային պատկերները, առանց հաջողության: Ես նաև փորձել եմ ավելի պարզ Dockerfile.

FROM node:8
USER node

Բայց ես դեռ սխալ եմ ստանում, կապված այն փաստի հետ, որ ոչ մի օգտվող կարծես այնտեղ չկա.

Error response from daemon: {"message":"linux spec user: unable to find user node: no matching entries in passwd file"}

Ես ստուգել եմ docker-node-ի տղաների հետ, վերջերս պատկերը չի փոխվել: Կարո՞ղ է դա կապված լինել kubernetes փոփոխությունների հետ: Նկատի ունեցեք, որ իմ պատկերները գործարկվում են, երբ ես դրանք գործարկում եմ ձեռքով docker հրամանով:


  • ինչ են ասում տեղեկամատյանները 17.01.2018
  • @DavidSteiman Պատիճների տեղեկամատյանները ցուցադրում են Starting application, բայց ոչինչ չի պատահում, քանի որ պատիճն ավարտվում է: Ինչպես ես բացատրեցի, ուղղակիորեն կոնտեյների մեջ նայելիս տեսնում եմ, որ համակարգի օգտատերեր չկան, հետևաբար npm start կամ node --version-ի նման հրամաններն ընդհանրապես ազդեցություն չունեն (նույնիսկ ելքի վրա սխալ չկա): 17.01.2018
  • ինչ վերաբերում է սցենարը ուղղակիորեն սկսելուն, ինչպես նշված է այստեղ՝ kubernetes.io/docs/tutorials/stateless-application/ 18.01.2018
  • Ես պետք է որոշակի տրամաբանություն գործադրեմ npm start-ից առաջ, որպեսզի չկարողանամ ուղղակիորեն օգտագործել CMD հրահանգը, եթե դա այն է, ինչ դուք առաջարկում եք: 18.01.2018
  • ինչու՞ այդ տրամաբանությունը չիրականացնում npm առաջադրանքի ներսում: 18.01.2018
  • @DavidSteiman Իրականում CMD ["npm", "start"]-ով ես ստանում եմ standard_init_linux.go:178: exec user process caused "exec format error" 18.01.2018

Պատասխանները:


1

Ես փորձեցի վերարտադրել ձեր խնդիրը, բայց չստացվեց, որ այն նույն ձևով ձախողվեց: Ես ստեղծել եմ dummy express հավելված և ամրացրել եմ այն ​​github-ի վրա, որը համապատասխանում է ձեր վերը նշված օրինակին, և այնուհետև կանչել եմ այն տեղական minikube օրինակ ես ունեի: Հիմնական պատկերի չափը ողջամտորեն մեծ է, բայց այն լավ սկսվեց:

Ես ստիպված էի մեկնաբանել, թե ինչ է տեղի ունենում npm start-ում ձեր օրինակի համար, քանի որ դուք չեք նշել, բայց դուք կարող եք տեսնել իմ package.json, որը, կարծում եմ, բավականին մոտ է նրան, ինչ դուք անում եք՝ հիմնվելով նկարագրության վրա:

Երբ ես բացում եմ սա.

git clone https://github.com/heckj/dummyexpress
cd dummyexpress
kubectl apply -f deploy/

The I has a running instance անմիջապես չղջիկից:

NAME                            READY     STATUS    RESTARTS   AGE
dummynodeapp-7788b95497-tkw2s   1/1       Running   0          1d

Եվ տեղեկամատյանները ցույց են տալիս, թե ինչ եք ակնկալում.

**kubectl log dummynodeapp-7788b95497-tkw2s**
W0117 19:41:00.986498   20648 cmd.go:353] log is DEPRECATED and will be removed in a future version. Use logs instead.
Starting application

> [email protected] start /app
> node index.js

Example app listening on port 3000!

Իմ ենթադրությունն այն է, որ ձեր npm start կատարման ընթացքում ինչ-որ բան սխալ է տեղի ունենում, ուստի ես խորհուրդ կտամ զբաղվել ձեր տեղակայման այդ ասպեկտով և տեսնել, թե արդյոք չեք կարող լուծել այն այդ կերպ:

18.01.2018
  • Ողջույն @heckj, շնորհակալություն ժամանակ հատկացնելու համար: Տեսեք իմ խմբագրված հարցը, ես դեռ խնդիր ունեմ առանց սցենարի, և այն կարծես թե կապված չէ իմ հավելվածի սկզբնական կոդի հետ: 18.01.2018
  • Ես ստեղծեցի տեղաբաշխում՝ օգտագործելով ձեր ճշգրիտ dummynodeapp.yaml-ը, և ես դեռ ստանում եմ CrashLoopBackOff՝ Starting applicationով՝ որպես միակ տեղեկամատյաններ: 18.01.2018
  • Քննելով ձեր տեսած կոնկրետ սխալը՝ այն համընկնում է փակ մոբբի սխալի հետ - #22323, բայց դա հստակորեն արտացոլում է դոկերի խնդրի հետ: Ես կասկածում եմ, որ ինչ-որ բան լրջորեն խառնվել է ձեր kubernetes կլաստերի դոկերի վրա՝ դրա հիման վրա: Դուք հաստատել եք, որ docker-ը աշխատում է լոկալ, բայց փորձե՞լ եք նույն բանը docker-ի վրա այն մերկ հանգույցում, որը ձեր կլաստերում է: 19.01.2018

  • 2

    Ինչպես @heckj-ն նշեց, դա Docker-ի խնդիր էր իմ kubernetes կլաստերի վրա: Ես թարմացրի կլաստերը 1.6.13-gke.1-ից v1.7.12-gke.0, և պատիճները նորից լավ աշխատեցին: Ես վստահ չեմ, թե Docker-ի որ տարբերակն է օգտագործվել, քանի որ կա մեկ այլ kubernetes վրիպակ, որը կանխում է ես դա տեսնելուց:

    19.01.2018
    Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..


    © 2024 amcode.ru, AMcoder - javascript, python, java, html, php, sql