Gyakorlat – A ratings API üzembe helyezése

Befejeződött

A Fruit Smoothies értékelési webhelye több összetevőből áll. A szolgáltatás tartalmaz egy webes elő felületet, egy rögzített adatokat tároló dokumentum-adatbázist, valamint egy RESTful ratings API-t, amely lehetővé teszi, hogy a webes előlap kommunikáljon az adatbázissal. A fejlesztői csapat a MongoDB-t választotta az értékelési webhely dokumentumtároló adatbázisának.

Az előző egységben üzembe helyezte a MongoDB-t a Helm segítségével. Itt folytathatja az üzembe helyezést, és üzembe helyezheti a ratings API-t. A ratings API egy, az Express keretrendszer használatával írt Node.js-alkalmazás. Az elemeket és a hozzájuk tartozó értékeléseket egy MongoDB-adatbázisban tárolja, és onnan kéri le. Már létrehozott egy Azure Container Registry-példányt.

Ebben a gyakorlatban a következőket fogja végrehajtani:

  • Egy Kubernetes-üzem létrehozása a RESTful API-hoz
  • Egy Kubernetes-szolgáltatás létrehozása a RESTful API a hálózaton való közzétételéhez

Az Azure Kubernetes Service-fürtön üzembe helyezett erőforrásokat megjelenítő diagram.

Egy Kubernetes-üzem létrehozása a ratings API-hoz

A Kubernetes üzemelő példánya lehetővé teszi a podok deklaratív frissítését. A számítási feladat kívánt állapotát egy üzembe helyezési jegyzékfájlban adhatja meg, a kubectl segítségével pedig ezt elküldheti a telepítésvezérlőnek. Az üzembe helyezési vezérlő pedig a meghatározott számítási feladat kívánt állapotát határozza meg, például üzembe helyez egy új podot, növeli a podok számát, vagy csökkenti a podok számát.

  1. Hozzon létre egy nevű jegyzékfájlt a Kubernetes üzemelő példányhoz ratings-api-deployment.yaml az integrált szerkesztő futtatásával.

    code ratings-api-deployment.yaml
    

    Tipp

    Az Azure Cloud Shell tartalmaz egy integrált fájlszerkesztőt. Cloud Shell szerkesztő támogatja az olyan funkciókat, mint a nyelvkiemelő, a parancskatapaletta és a fájlkezelő. Egyszerű fájl létrehozásához és szerkesztéséhez indítsa el a szerkesztőt a code . terminálban Cloud Shell futtatásával. Ez a művelet a terminálon beállított aktív munkakönyvtárral nyitja meg a szerkesztőt. Ha közvetlenül szeretne megnyitni egy fájlt gyorsszerkesztéshez, futtassa a code <filename> parancsot a szerkesztő fájlkezelő nélküli megnyitásához. A szerkesztő a felhasználói felület gombjával való megnyitásához kattintson az eszköztáron a {} szerkesztő ikonra. Ez a művelet megnyitja a szerkesztőt, és alapértelmezés szerint a könyvtár /home/<user> fájlkezelőjét használja.

  2. Illessze a fájlba a következő szöveget.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ratings-api
    spec:
      selector:
        matchLabels:
          app: ratings-api
      template:
        metadata:
          labels:
            app: ratings-api # the label for the pods and the deployments
        spec:
          containers:
          - name: ratings-api
            image: <acrname>.azurecr.io/ratings-api:v1 # IMPORTANT: update with your own repository
            imagePullPolicy: Always
            ports:
            - containerPort: 3000 # the application listens to this port
            env:
            - name: MONGODB_URI # the application expects to find the MongoDB connection details in this environment variable
              valueFrom:
                secretKeyRef:
                  name: mongosecret # the name of the Kubernetes secret containing the data
                  key: MONGOCONNECTION # the key inside the Kubernetes secret containing the data
            resources:
              requests: # minimum resources required
                cpu: 250m
                memory: 64Mi
              limits: # maximum resources allocated
                cpu: 500m
                memory: 256Mi
            readinessProbe: # is the container ready to receive traffic?
              httpGet:
                port: 3000
                path: /healthz
            livenessProbe: # is the container healthy?
              httpGet:
                port: 3000
                path: /healthz
    
  3. A fájlban frissítse aimage kulcsban lévő <acrname> értéket a saját Azure Container Registry-példányának nevével.

  4. Tekintse át a fájlt a következő szempontok figyelembe vételével:

    • image: Létre fog hozni egy üzemelő példányt egy replikával, amely a korábban létrehozott Azure Container Registry-példányba leküldött rendszerképet futtatja (példa: acr4229.azurecr.io/ratings-api:v1). A tároló a 3000-es portot figyeli. Az üzemelő példány és a pod az app=ratings-api címkével van ellátva.

    • secretKeyRef: A ratings API arra számít, hogy a MongoDB-adatbázis kapcsolati adatait egy MONGODB_URI nevű környezeti változóban találja meg. A valueFrom és a secretKeyRef használatával hivatkozhat a MongoDB üzembe helyezése során létrehozott mongosecret Kubernetes titkos kódban tárolt értékekre.

    • resources: Minden egyes tárolópéldány számára legalább 0,25 mag és 64 MB memória van lefoglalva. A Kubernetes-ütemező olyan csomópontot keres, amely esetében rendelkezésre áll kellő kapacitás egy ilyen pod ütemezéséhez. Az engedélyezési állapottól függ, hogy egy tároló túllépheti-e hosszabb ideig a processzorkorlátot. Túlzott processzorhasználat miatt azonban a tároló nem lesz leállítva. Ha egy tároló túllépi a memóriakorlátot, leállíthatják.

    • readinessProbe és livenessProbe: Az alkalmazás egy állapotellenőrzési végpontot tesz elérhetővé itt: /healthz. Ha az API nem tud csatlakozni a MongoDB-hez, az állapotellenőrzési végpont hibát fog visszaadni. Ezekkel a mintavételekkel konfigurálhatja a Kubernetes-t, és ellenőrizheti, hogy a tároló kifogástalan állapotú-e, és készen áll-e a forgalom fogadására.

  5. A fájl mentéshez nyomja le a Ctrl+S billentyűkombinációt. A szerkesztőt a Ctrl+Q billentyűkombinációval zárja be. A ... műveleti panelt a szerkesztő jobb felső sarkában is megnyithatja. Kattintson a Mentés gombra, majd válassza a Szerkesztő bezárása lehetőséget.

  6. Alkalmazza a konfigurációt az parancs kubectl apply futtatásával. A MongoDB-kiadást a ratingsapp névtérben helyezte üzembe, így az API-t is a ratingsapp névtérben fogja.

    kubectl apply \
        --namespace ratingsapp \
        -f ratings-api-deployment.yaml
    

    Az alábbi példához hasonló kimenet fog megjelenni.

    deployment.apps/ratings-api created
    
  7. A kubectl get pods paranccsal és a -w jelölővel megtekintheti a podok megjelenését. A app=ratings-api címkével ellátott podokat kérdezze le a ratingsapp névtérben.

    kubectl get pods \
        --namespace ratingsapp \
        -l app=ratings-api -w
    

    Néhány másodpercen belül láthatja, hogy a pod a Running állapotra vált. A figyelés leállításhoz nyomja le a Ctrl+C billentyűkombinációt.

    NAME                           READY   STATUS    RESTARTS   AGE
    ratings-api-564446d9c4-6rvvs   1/1     Running   0          42s
    

    Ha a podok nem indulnak el, nem állnak készen vagy összeomlanak, a kubectl logs <pod name> --namespace ratingsapp és a kubectl describe pod <pod name> --namespace ratingsapp parancs használatával tekintheti meg a naplóikat.

  8. Ellenőrizze a telepítés állapotát.

    kubectl get deployment ratings-api --namespace ratingsapp
    

    Az üzemelő példánynak meg kell jelenítenie egy készen álló replikát.

    NAME          READY   UP-TO-DATE   AVAILABLE   AGE
    ratings-api   1/1     1            1           2m
    

A ratings API-szolgáltatáshoz tartozó Kubernetes-szolgáltatás létrehozása

A szolgáltatás egy Kubernetes-objektum, amely stabil hálózatépítést biztosít a podok számára azáltal, hogy hálózati szolgáltatásként teszi őket ki. A Kubernetes-szolgáltatásokkal csomópontok, podok és (belső és külső) alkalmazásfelhasználók a fürttel való kommunikációját teheti lehetővé. A csomóponthoz vagy podhoz hasonló szolgáltatások a Kubernetes által a létrehozásukkor hozzárendelt IP-címet kapják meg. A szolgáltatások emellett egy DNS-nevet és egy TCP-portot is kapnak a szolgáltatásnév alapján.

A ClusterIP-vel a fürt egy belső IP-címén tehet közzé egy Kubernetes-szolgáltatást. Ezzel a típussal a szolgáltatás csak a fürtön belülről lesz elérhető.

Ábra, amely bemutatja, hogy egy ClusterIP használatával üzembe helyezett szolgáltatás hogyan teszi elérhetővé egy vagy több podot egy belső fürt IP-címének használatával egy Azure Kubernetes Service fürtön.

A következő lépés az alkalmazás számítási feladataihoz tartozó hálózati konfiguráció leegyszerűsítése. Egy Kubernetes-szolgáltatással csoportosíthatja a podokat, és hálózati kapcsolatot nyújthat.

  1. Az integrált szerkesztővel hozzon létre egy ratings-api-service.yaml nevű jegyzékfájlt a Kubernetes-szolgáltatáshoz.

    code ratings-api-service.yaml
    
  2. Illessze a fájlba a következő szöveget.

    apiVersion: v1
    kind: Service
    metadata:
      name: ratings-api
    spec:
      selector:
        app: ratings-api
      ports:
      - protocol: TCP
        port: 80
        targetPort: 3000
      type: ClusterIP
    
  3. Tekintse át a fájlt a következő szempontok figyelembe vételével:

    • selector: A szolgáltatás által megcélzott podkészletet a szelektor adja meg. A következő példában a Kubernetes elosztja az app: ratings-api címkével ellátott podok forgalmának terhelését. A címke az üzemelő példány létrehozásakor lett megadva. A szolgáltatás vezérlője folyamatosan keresi a címkének megfelelő podokat, és hozzáadja azokat a terheléselosztóhoz.

    • ports: A szolgáltatás leképezhet egy bejövő port portot targetPort portra. A bejövő port az, amelyre a szolgáltatás válaszol. A célport az, amelynek figyelésére a podok konfigurálva lettek. Például a szolgáltatás belső közzététele a fürtön belül a ratings-api.ratingsapp.svc.cluster.local:80 helyen történik, a ratings-api podok forgalmának terheléselosztásához pedig a 3000 portot figyeli.

    • type: Egy ClusterIP típusú szolgáltatás létrehoz egy belső IP-címet a fürtön belüli használatra. Ha ezt az értéket választja, a szolgáltatás csak a fürtön belülről lesz elérhető. Az alapértelmezett szolgáltatástípus a fürt IP-címe.

  4. A fájl mentéshez nyomja le a Ctrl+S billentyűkombinációt. A szerkesztőt a Ctrl+Q billentyűkombinációval zárja be.

  5. Alkalmazza a konfigurációt a parancs kubectl apply futtatásával, és használja a ratingsapp névteret.

    kubectl apply \
        --namespace ratingsapp \
        -f ratings-api-service.yaml
    

    Az alábbi példához hasonló kimenet fog megjelenni.

    service/ratings-api created
    
  6. Ellenőrizze a szolgáltatás állapotát.

    kubectl get service ratings-api --namespace ratingsapp
    

    A szolgáltatásnak meg kell jelenítenie egy belső IP-címet, ahol az elérhető. Alapértelmezés szerint a Kubernetes egy [service name].[namespace].svc.cluster.local formátumra leképező DNS-bejegyzést hoz létre, amely azt jelenti, hogy a szolgáltatás a ratings-api.ratingsapp.svc.cluster.local helyen is elérhető. Figyelje meg, hogy a CLUSTER-IP a fürt létrehozásakor meghatározott Kubernetes szolgáltatási címtartományból lett származtatva.

    NAME          TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
    ratings-api   ClusterIP   10.2.0.102   <none>        80/TCP    60s
    
  7. Végül ellenőrizze a végpontokat. A szolgáltatások a végpontokon keresztül osztják el a terhelést a podok felé. A végpont neve megegyezik a szolgáltatás nevével. Ellenőrizze, hogy a szolgáltatás a podnak megfelelő, egyetlen végpontra mutat-e. További replikák hozzáadásakor, illetve amikor podok jelennek meg és tűnnek el, a Kubernetes automatikusan frissíti a végpontokat. A kubectl get endpoints paranccsal kérje le a végpont-adatokat.

    kubectl get endpoints ratings-api --namespace ratingsapp
    

    Az alábbi példához hasonló kimenetet fog látni. Az ENDPOINTS IP-címek a fürt létrehozásakor meghatározott 10.240.0.0/16 alhálózatból származnak.

    NAME          ENDPOINTS                          AGE
    ratings-api   10.240.0.11:3000                   1h
    

Ezzel létrehozta a ratings-api üzemelő példányát, amelyet belső (ClusterIP) szolgáltatásként tett elérhetővé.

  • Üzemelő példány/ratings-api: Az a replikát futtató API, amely a mongosecret környezeti változóként való csatlakoztatásával olvassa be a MongoDB kapcsolati adatait.
  • Szolgáltatás/ratings-api: Az API belső közzététele a fürtön belül a ratings-api.ratingsapp.svc.cluster.local:80 címen történik.

Összefoglalás

Ebben a gyakorlatban létrehozott egy üzembe helyezési jegyzékfájlt, amelyet a fürtön alkalmazott, és így létrehozott Kubernetes-üzemet a ratings-apihoz. Emellett létrehozott egy jegyzékfájlt, amelyet a fürtön alkalmazott, és így létrehozott Kubernetes-szolgáltatást a ratings-apihoz. Most már rendelkezik egy ratings-api végponttal, amely elérhető a hálózat egy fürtbéli IP-címén keresztül.

A következőkben egy hasonló folyamattal üzembe helyezi a Fruit Smoothies értékelési webhelyét.