การทำให้แอปพลิเคชัน Cloud Run ใช้งานได้ด้วย Cloud Deployment

1. ภาพรวม

ในแล็บนี้ คุณจะทําให้แอปพลิเคชัน .Net ใช้งานได้ใน Cloud Run โดยใช้ Cloud Deploy คุณจะต้องสร้างอิมเมจคอนเทนเนอร์ด้วย Cloud Build โดยไม่ใช้ Dockerfile คุณจะต้องตั้งค่าไปป์ไลน์ที่มีสภาพแวดล้อมเป้าหมาย 3 รายการด้วย Cloud Deploy และทําตามขั้นตอนเพื่อโปรโมตรุ่นผ่านสภาพแวดล้อม สุดท้าย คุณจะต้องอนุมัติรุ่นเพื่อนำไปใช้งานในสภาพแวดล้อมที่ใช้งานจริง

916a54f51af5ee54.png

Cloud Build คืออะไร

Cloud Build ช่วยให้คุณสร้างซอฟต์แวร์ได้อย่างรวดเร็วในทุกภาษาโปรแกรม

Cloud Deploy คืออะไร

Cloud Deploy เป็นบริการการนำส่งแบบต่อเนื่องที่มีการจัดการครบวงจร Cloud Deploy ช่วยให้คุณสร้างไปป์ไลน์การทำให้ใช้งานได้สำหรับ GKE, Anthos และ Cloud Run

Cloud Run คืออะไร

Cloud Run ช่วยให้คุณทำให้แอปพลิเคชันคอนเทนเนอร์ที่ปรับขนาดได้ซึ่งเขียนด้วยภาษาใดก็ได้ (รวมถึง Go, Python, Java, Node.js, .NET และ Ruby) ใช้งานได้บนแพลตฟอร์มที่มีการจัดการอย่างเต็มรูปแบบ

Skaffold คืออะไร

Skaffold เป็นเครื่องมือบรรทัดคำสั่งที่ช่วยให้การพัฒนาแอปพลิเคชันแบบเนทีฟของ Kubernetes เป็นไปอย่างต่อเนื่อง Cloud Deploy ใช้ Skaffold สำหรับการดำเนินการแสดงผลและทำให้ใช้งานได้

สิ่งที่คุณจะได้เรียนรู้

ในบทแนะนำนี้ คุณจะได้เรียนรู้วิธีดำเนินการต่อไปนี้

  • สร้างไปป์ไลน์ Cloud Deploy
  • สร้างอิมเมจคอนเทนเนอร์สําหรับแอปพลิเคชัน .Net ด้วย Cloud Build โดยไม่ใช้ Dockerfile
  • ทำให้แอปพลิเคชันใช้งานได้ใน Cloud Run ด้วย Cloud Deploy
  • โปรโมตรุ่น Cloud Deploy

ข้อกำหนดเบื้องต้น

  • กิจกรรมนี้ถือว่าคุณคุ้นเคยกับ Cloud Console และสภาพแวดล้อมเชลล์

2. การตั้งค่าและข้อกําหนด

การตั้งค่าโปรเจ็กต์ที่อยู่ในระบบคลาวด์

  1. ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ โดยคุณจะอัปเดตได้ทุกเมื่อ
  • รหัสโปรเจ็กต์จะต้องไม่ซ้ำกันสำหรับโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) คอนโซล Cloud จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นจะเป็นอะไร ในโค้ดแล็บส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น PROJECT_ID) หากไม่ชอบรหัสที่สร้างขึ้น คุณก็สร้างรหัสอื่นแบบสุ่มได้ หรือจะลองใช้อุปกรณ์ของคุณเองเพื่อดูว่าฟีเจอร์นี้พร้อมใช้งานหรือไม่ก็ได้ คุณจะเปลี่ยนแปลงชื่อหลังจากขั้นตอนนี้ไม่ได้ และชื่อดังกล่าวจะคงอยู่ตลอดระยะเวลาของโปรเจ็กต์
  • โปรดทราบว่ามีค่าที่ 3 ซึ่งเป็นหมายเลขโปรเจ็กต์ที่ API บางรายการใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 รายการนี้ได้ในเอกสารประกอบ
  1. ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตามโค้ดแล็บนี้ไม่น่าจะเสียค่าใช้จ่ายมากนัก หากต้องการปิดใช้ทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินหลังจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างไว้หรือลบทั้งโปรเจ็กต์ได้ ผู้ใช้ใหม่ของ Google Cloud มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

การตั้งค่าสภาพแวดล้อม

เปิดใช้งาน Cloud Shell โดยคลิกไอคอนทางด้านขวาของแถบค้นหา

eb0157a992f16fa3.png

จาก Cloud Shell ให้เรียกใช้คำสั่งต่อไปนี้เพื่อตั้งค่าตัวแปรสภาพแวดล้อมของโปรเจ็กต์

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
--format='value(projectNumber)')
export REGION=us-central1

เปิดใช้ API

gcloud services enable \
  run.googleapis.com \
  cloudbuild.googleapis.com \
  clouddeploy.googleapis.com \
  artifactregistry.googleapis.com

สร้างที่เก็บ Artifact Registry เพื่อจัดเก็บอิมเมจคอนเทนเนอร์ของแอปพลิเคชัน

gcloud artifacts repositories create containers-repo \
  --repository-format=docker \
  --location=${REGION} \
  --description="Containers repository"

3. ตรวจสอบไฟล์การกําหนดค่า

29c2533441779de0.png

โคลนซอร์สโค้ดของแอปพลิเคชัน

git clone https://github.com/gitrey/deploy-cloudrun-app-with-clouddeploy.git
cd deploy-cloudrun-app-with-clouddeploy

ตรวจสอบการกําหนดค่าไปป์ไลน์ Cloud Deploy

clouddeploy.yaml

apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
 name: cloud-run-pipeline
description: application deployment pipeline
serialPipeline:
 stages:
 - targetId: dev-env
   profiles: [dev]
 - targetId: qa-env
   profiles: [qa]
 - targetId: prod-env
   profiles: [prod]
---

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: dev-env
description: Cloud Run development service
run:
 location: projects/_PROJECT_ID/locations/us-west1
---

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: qa-env
description: Cloud Run QA service
run:
 location: projects/_PROJECT_ID/locations/us-central1
---

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: prod-env
description: Cloud Run PROD service
run:
 location: projects/_PROJECT_ID/locations/us-south1

ตรวจสอบไฟล์ skaffold.yaml ที่กําหนดสภาพแวดล้อม 3 รายการและใช้ Cloud Run เป็นบริการเป้าหมาย

skaffold.yaml

apiVersion: skaffold/v3alpha1
kind: Config
metadata: 
  name: cloud-run-app
profiles:
- name: dev
  manifests:
    rawYaml:
    - deploy-dev.yaml
- name: qa
  manifests:
    rawYaml:
    - deploy-qa.yaml
- name: prod
  manifests:
    rawYaml:
    - deploy-prod.yaml
deploy:
  cloudrun: {}

ตรวจสอบไฟล์การกําหนดค่าบริการ

deploy-dev.yaml

kind: Service
metadata:
  name: app-dev
spec:
  template:
    spec:
      containers:
      - image: app
        resources:
          limits:
            cpu: 1000m
            memory: 128Mi

deploy-qa.yaml

kind: Service
metadata:
  name: app-dev
spec:
  template:
    spec:
      containers:
      - image: app

deploy-prod.yaml

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: app-prod
spec:
  template:
    spec:
      containers:
      - image: app

ตรวจสอบไฟล์ cloudbuild.yaml ที่มีขั้นตอนการสร้างอิมเมจคอนเทนเนอร์และสร้างรุ่น Cloud Deploy

cloudbuild.yaml

steps:
- name: 'gcr.io/k8s-skaffold/pack'
  entrypoint: 'pack'
  args: ['build',
         '--builder=gcr.io/buildpacks/builder',
         '--publish', '${_REGION}-docker.pkg.dev/${PROJECT_ID}/containers-repo/app:$BUILD_ID']
  id: Build and package .net app
- name: gcr.io/google.com/cloudsdktool/cloud-sdk:slim
  args: 
      [
        "deploy", "releases", "create", "release-$_RELEASE_TIMESTAMP",
        "--delivery-pipeline", "cloud-run-pipeline",
        "--region", "${_REGION}",
        "--images", "app=${_REGION}-docker.pkg.dev/${PROJECT_ID}/containers-repo/app:$BUILD_ID"
      ]
  entrypoint: gcloud

4. สร้างไปป์ไลน์การทําให้ใช้งานได้ในระบบคลาวด์

แทนที่ค่า _PROJECT_ID ใน clouddeploy.yaml

sed -i "s/_PROJECT_ID/$PROJECT_ID/g" clouddeploy.yaml

สร้างไปป์ไลน์ Cloud Deploy

gcloud deploy apply \
  --file=clouddeploy.yaml \
  --region=${REGION} \
  --project=${PROJECT_ID}

ตรวจสอบไปป์ไลน์ที่สร้างใน Cloud Deploy

5. สร้างอิมเมจคอนเทนเนอร์และสร้างรุ่น

เพิ่มสิทธิ์ผู้ดำเนินการ Cloud Deploy ลงในบัญชีบริการ Cloud Build โดยทำดังนี้

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
    --member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
    --role=roles/clouddeploy.operator

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
    --member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
    --role=roles/iam.serviceAccountUser

สร้างอิมเมจคอนเทนเนอร์และรุ่น Cloud Deploy โดยทำดังนี้

export RELEASE_TIMESTAMP=$(date '+%Y%m%d-%H%M%S')

gcloud builds submit \
  --config cloudbuild-plus.yaml \
  --substitutions=_REGION=${REGION},_RELEASE_TIMESTAMP=${RELEASE_TIMESTAMP}

ตรวจสอบรุ่นที่สร้างขึ้นในส่วนการทําให้ใช้งานได้ในระบบคลาวด์ รอจนกว่าการติดตั้งใช้งานในสภาพแวดล้อม Dev จะเสร็จสมบูรณ์

6. โปรโมตรุ่นไปยังสภาพแวดล้อม QA และ PROD

ใช้ Cloud Console หรือ Cloud Shell เพื่อโปรโมตรุ่นไปยังเป้าหมายถัดไป(qa-env)

โปรโมตรุ่นด้วย Cloud Shell โดยเรียกใช้คำสั่ง gcloud เพื่อโปรโมตรุ่น

gcloud beta deploy releases promote \
    --release="release-${RELEASE_TIMESTAMP}" \
    --delivery-pipeline=cloud-run-pipeline \
    --region=${REGION} \
    --quiet

รอจนกว่าการติดตั้งใช้งานในสภาพแวดล้อม QA จะเสร็จสิ้น โปรโมตรุ่นไปยังเป้าหมายถัดไป(prod-env)

gcloud beta deploy releases promote \
    --release="release-${RELEASE_TIMESTAMP}" \
    --delivery-pipeline=cloud-run-pipeline \
    --region=${REGION} \
    --quiet

เปิด Cloud Deploy ใน Cloud Console และอนุมัติรุ่นสําหรับการทําให้ใช้งานได้จริง

4c838b60770e9691.png

ตรวจสอบสถานะไปป์ไลน์การทําให้ใช้งานได้ในระบบคลาวด์และเมตริก DORA ที่พร้อมใช้งาน ("จํานวนการทําให้ใช้งานได้" "ความถี่ในการทําให้ใช้งานได้" "อัตราความล้มเหลวในการทําให้ใช้งานได้")

เมตริก

คำอธิบาย

จํานวนการติดตั้งใช้งาน

จํานวนการทําให้ใช้งานได้สําเร็จและล้มเหลวทั้งหมดในเป้าหมายสุดท้ายในไปป์ไลน์การนำส่ง

ความถี่ในการติดตั้งใช้งาน

ความถี่ที่ไปป์ไลน์การนำส่งทําให้การเผยแพร่ไปยังเป้าหมายสุดท้ายในไปป์ไลน์การนำส่งของคุณ เป็นหนึ่งในเมตริกหลัก 4 รายการที่โปรแกรมการวิจัยและการประเมิน DevOps (DORA) กำหนดไว้

อัตราความล้มเหลวของการติดตั้งใช้งาน

เปอร์เซ็นต์ของการเปิดตัวที่ไม่สําเร็จไปยังเป้าหมายสุดท้ายในไปป์ไลน์การนำส่ง

ตรวจสอบแอปพลิเคชันที่ติดตั้งใช้งานใน Cloud Run

d6372b5350f10875.png

7. ยินดีด้วย

ยินดีด้วย คุณทำ Codelab เสร็จแล้ว

สิ่งที่เราได้พูดถึง

  • วิธีสร้างไปป์ไลน์ Cloud Deploy
  • วิธีสร้างอิมเมจคอนเทนเนอร์สําหรับแอปพลิเคชัน .Net ด้วย Cloud Build
  • วิธีทำให้แอปพลิเคชันใช้งานได้ใน Cloud Run ด้วย Cloud Deploy
  • วิธีโปรโมตรุ่น Cloud Deploy

ล้างข้อมูล

โปรดลบโปรเจ็กต์ที่มีทรัพยากรดังกล่าวหรือเก็บโปรเจ็กต์ไว้และลบทรัพยากรแต่ละรายการเพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในบทแนะนำนี้

การลบโปรเจ็กต์

วิธีที่ง่ายที่สุดในการหยุดการเรียกเก็บเงินคือการลบโปรเจ็กต์ที่คุณสร้างสำหรับบทแนะนำ

8. ขั้นตอนถัดไป