1. Ringkasan
Pengantar
Dalam codelab ini, Anda akan mempelajari cara men-deploy layanan Cloud Run yang menggunakan beberapa container. Anda akan membuat aplikasi node.js yang akan digunakan sebagai container masuk Cloud Run dan aplikasi node.js tambahan yang akan digunakan sebagai file bantuan.
Ringkasan teknis
Saat menggunakan beberapa container dalam instance Cloud Run, satu container digunakan sebagai container utama untuk traffic masuk web. Satu atau beberapa penampung tambahan disebut sebagai file bantuan.
Ada dua cara bagi beberapa container untuk berkomunikasi satu sama lain:
- Container membagikan antarmuka jaringan localhost, sehingga semua container dapat memproses port, misalnya localhost:port.
- Anda juga dapat menggunakan volume dalam memori dan memasangnya di container untuk berbagi file.
Kasus penggunaan
Karena semua container dalam instance Cloud Run berbagi antarmuka jaringan localhost, Anda dapat menggunakan file bantuan di depan container utama untuk permintaan proxy. Proxy tersebut dapat memberikan lapisan abstraksi tambahan untuk aliran traffic yang lebih efisien ke aplikasi antara klien dan server dengan mencegat permintaan dan meneruskannya ke endpoint yang sesuai. Sebagai contoh, Anda dapat menggunakan image Nginx resmi dari DockerHub (seperti yang ditunjukkan di sini).
Karena beberapa penampung dapat berkomunikasi dengan berbagi file melalui volume bersama, Anda menambahkan berbagai aplikasi bantuan ke layanan Anda. Misalnya, Anda dapat menginstrumentasikan layanan Cloud Run untuk menggunakan agen kustom seperti OpenTelemetry guna mengekspor log, metrik, dan trace (contoh OpenTelemetry). Contoh lainnya adalah menggunakan file bantuan yang terhubung ke database PostgreSQL Cloud Spanner (contoh Postgress Cloud Spanner).
Contoh dalam codelab ini
Dalam codelab ini, pertama-tama Anda akan men-deploy layanan Cloud Run tempat container masuknya berkomunikasi dengan file bantuan melalui port localhost. Kemudian, Anda akan memperbarui penampung masuk dan file bantuan untuk membagikan file melalui pemasangan volume.
Yang akan Anda pelajari
- Cara membuat penampung yang menggunakan file bantuan
- Cara container masuk dapat berkomunikasi dengan file bantuan menggunakan localhost
- Cara container masuk dan file bantuan dapat berbagi file melalui volume yang terpasang
2. Penyiapan dan Persyaratan
Prasyarat
- Anda sudah login ke Konsol Cloud.
- Anda sebelumnya telah men-deploy layanan Cloud Run. Misalnya, Anda dapat mengikuti men-deploy layanan web dari panduan memulai kode sumber untuk memulai.
Mengaktifkan Cloud Shell
- Dari Cloud Console, klik Aktifkan Cloud Shell .
Jika ini pertama kalinya Anda memulai Cloud Shell, Anda akan melihat layar perantara yang menjelaskan apa itu Cloud Shell. Jika Anda melihat layar perantara, klik Lanjutkan.
Perlu waktu beberapa saat untuk penyediaan dan terhubung ke Cloud Shell.
Mesin virtual ini dimuat dengan semua alat pengembangan yang diperlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Sebagian besar pekerjaan Anda dalam codelab ini dapat dilakukan dengan browser.
Setelah terhubung ke Cloud Shell, Anda akan melihat bahwa Anda telah diautentikasi dan project sudah ditetapkan ke project ID Anda.
- Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa Anda telah diautentikasi:
gcloud auth list
Output perintah
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa perintah gcloud mengetahui project Anda:
gcloud config list project
Output perintah
[core] project = <PROJECT_ID>
Jika tidak, Anda dapat menyetelnya dengan perintah ini:
gcloud config set project <PROJECT_ID>
Output perintah
Updated property [core/project].
3. Membuat aplikasi masuk
Menetapkan Variabel Lingkungan
Dalam codelab ini, Anda akan membuat beberapa variabel lingkungan untuk meningkatkan keterbacaan perintah gcloud
yang digunakan dalam codelab ini.
REGION=<YOUR-REGION> PROJECT_ID=<YOUR-PROJECT-ID> SERVICE_NAME=sidecar-codelab REPO_NAME=sidecar-codelab
Membuat repositori ArtifactRegistry untuk menyimpan image container
Anda dapat membuat repositori di Artifact Registry untuk menyimpan image container Anda untuk codelab ini.
gcloud artifacts repositories create $REPO_NAME --repository-format=docker \ --location=$REGION --description="sidecar codelab"
Lalu, buat file package.json
dengan konten berikut:
{ "name": "sidecar-codelab", "version": "1.0.0", "private": true, "description": "demonstrates how to use sidecars in cloud run", "main": "index.js", "author": "Google LLC", "license": "Apache-2.0", "scripts": { "start": "node ingress.js" }, "dependencies": { "axios": "^1.6.2", "express": "^4.18.2" } }
Sekarang, buat file bernama ingress.js
dengan konten berikut:
const express = require('express'); const app = express(); const axios = require("axios"); app.get('/', async (req, res) => { let response = await axios.get("http://localhost:5000"); res.send("The sidecar says: " + response.data); }); const port = parseInt(process.env.PORT) || 8080; app.listen(port, () => { console.log(`Ingress container listening on port ${port}`); });
Membuat dockerfile untuk container masuk
FROM node:20.10.0-slim WORKDIR /usr/src/app COPY package*.json ./ RUN npm install --production # Copy local code to the container image. COPY . . # Run the web service on container startup. ENV PORT=8080 CMD [ "npm", "start" ]
Dan buat file ``.dockerignore` untuk penampung masuk.
# Exclude locally installed dependencies node_modules/ # Exclude "build-time" ignore files. .dockerignore .gcloudignore # Exclude git history and configuration. .gitignore
Sekarang, Anda dapat membangun image untuk container masuk dengan menjalankan perintah berikut:
gcloud builds submit --tag $REGION-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/ingress:latest
4. Membuat aplikasi file bantuan
Di bagian ini, Anda akan membuat aplikasi node.js kedua yang akan digunakan sebagai file bantuan di layanan Cloud Run.
Buka direktori file bantuan.
cd ../sidecar
Buat file package.json
dengan konten berikut:
{ "name": "sidecar-codelab", "version": "1.0.0", "private": true, "description": "demonstrates how to use sidecars in cloud run", "main": "index.js", "author": "Google LLC", "license": "Apache-2.0", "scripts": { "start": "node sidecar.js" }, "dependencies": { "axios": "^1.6.2", "express": "^4.18.2" } }
Sekarang, buat file bernama sidecar.js
dengan konten berikut:
const express = require('express'); const app = express(); app.get('/', async (req, res) => { res.send("Hello ingress container! I'm the sidecar."); }); const port = parseInt(process.env.PORT || 5000); app.listen(port, () => { console.log(`Sidecar container listening on port ${port}`); });
Membuat Dockerfile untuk container file bantuan
FROM node:20.10.0-slim WORKDIR /usr/src/app COPY package*.json ./ RUN npm install --production # Copy local code to the container image. COPY . . # Run the web service on container startup. ENV PORT=5000 CMD [ "npm", "start" ]
Kemudian, buat file ``.dockerignore` untuk penampung file bantuan.
# Exclude locally installed dependencies node_modules/ # Exclude "build-time" ignore files. .dockerignore .gcloudignore # Exclude git history and configuration. .gitignore
Sekarang, Anda dapat membangun image untuk container masuk dengan menjalankan perintah berikut:
gcloud builds submit --tag $REGION-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/sidecar:latest
Men-deploy layanan Cloud Run
Anda akan men-deploy layanan Cloud Run menggunakan file yaml.
Buka direktori induk.
cd ..
Buat file bernama sidecar-codelab.yaml
dengan konten berikut:
apiVersion: serving.knative.dev/v1 kind: Service metadata: annotations: name: sidecar-codelab labels: cloud.googleapis.com/location: "<YOUR_REGION>" spec: template: spec: containers: - image: "<YOUR_REGION>-docker.pkg.dev/<YOUR_PROJECT_ID>/sidecar-codelab/ingress:latest" ports: - containerPort: 8080 - image: "<YOUR_REGION>-docker.pkg.dev/<YOUR_PROJECT_ID>/sidecar-codelab/sidecar:latest" env: - name: PORT value: "5000"
Kemudian, deploy layanan menggunakan perintah berikut. Anda perlu menggunakan gcloud beta karena pemasangan volume sedang dalam pratinjau publik.
gcloud beta run services replace sidecar-codelab.yaml
Setelah di-deploy, simpan URL layanan di variabel lingkungan.
SERVICE_URL=$(gcloud run services describe $SERVICE_NAME --platform managed --region $REGION --format 'value(status.url)')
5. Memanggil layanan Cloud Run
Sekarang Anda dapat memanggil layanan dengan memberikan token identitas.
curl -X GET -H "Authorization: Bearer $(gcloud auth print-identity-token)" ${SERVICE_URL}
Hasilnya akan terlihat seperti contoh output di bawah ini:
The sidecar says: Hello ingress container! I'm the sidecar.
6. Membagikan file melalui pemasangan volume
Di bagian ini, Anda akan memperbarui container untuk membagikan file melalui pemasangan volume. Dalam contoh ini, penampung masuk akan menulis ke file pada volume bersama. File bantuan akan membaca file tersebut dan mengembalikan isinya ke container masuk.
Pertama, Anda akan memperbarui kode container masuk. Buka direktori masuk.
cd ../ingress
lalu ganti konten file ingress.js
dengan kode berikut:
const express = require('express'); const app = express(); const fs = require('fs'); const axios = require("axios"); const filename = "test.txt" let path = "/my-volume-mount"; app.use(path, express.static(path)); try { fs.writeFileSync(`${path}/${filename}`, "The ingress container created this file."); } catch (err) { console.error(err); } app.get('/', async (req, res) => { let response = await axios.get("http://localhost:5000"); res.send("The sidecar says: " + response.data); }); const port = parseInt(process.env.PORT) || 8080; app.listen(port, () => { console.log(`Ingress container listening on port ${port}`); });
Dan bangun image baru untuk container masuk Anda dengan menjalankan perintah berikut:
gcloud builds submit --tag $REGION-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/ingress:latest
Sekarang buka direktori file bantuan:
cd ../sidecar
Kemudian, update sidecar.js
dengan konten berikut:
const express = require('express'); const app = express(); const fs = require('fs'); const filename = "test.txt" let path = "/my-volume-mount"; app.use(path, express.static(path)); async function readFile() { try { return await fs.readFileSync(`${path}/${filename}`, { encoding: 'utf8' }); } catch (err) { console.log(err); } } app.get('/', async (req, res) => { let contents = await readFile(); res.send(contents); }); const port = parseInt(process.env.PORT || 5000); app.listen(port, () => { console.log(`Sidecar container listening on port ${port}`); });
Dan, bangun image baru untuk container file bantuan dengan menjalankan perintah berikut:
gcloud builds submit --tag $REGION-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/sidecar:latest
Update sidecar-codelab.yaml
dengan kode berikut untuk berbagi volume:
apiVersion: serving.knative.dev/v1 kind: Service metadata: annotations: name: sidecar-codelab labels: cloud.googleapis.com/location: "<YOUR_REGION>" spec: template: spec: containers: - image: "<YOUR_REGION>-docker.pkg.dev/<YOUR_PROJECT_ID>/sidecar-codelab/ingress:latest" ports: - containerPort: 8080 volumeMounts: - mountPath: /my-volume-mount name: in-memory-1 - image: "<YOUR_REGION>-docker.pkg.dev/<YOUR_PROJECT_ID>/sidecar-codelab/sidecar:latest" env: - name: PORT value: "5000" volumeMounts: - mountPath: /my-volume-mount name: in-memory-1 volumes: - emptyDir: medium: Memory name: in-memory-1
Men-deploy file sidecar-codelab.yaml
yang diupdate
gcloud beta run services replace sidecar-codelab.yaml
Sekarang Anda dapat memanggil layanan dengan memberikan token identitas.
curl -X GET -H "Authorization: Bearer $(gcloud auth print-identity-token)" ${SERVICE_URL}
Hasilnya akan terlihat seperti contoh output di bawah ini:
The sidecar says: the ingress container created this file.
7. Selamat!
Selamat, Anda telah menyelesaikan codelab!
Sebaiknya tinjau dokumentasi tentang Cloud Run, khususnya men-deploy multicontainer dan menggunakan pasangan volume dalam memori.
Yang telah kita bahas
- Cara membuat penampung yang menggunakan file bantuan
- Cara container masuk dapat berkomunikasi dengan file bantuan menggunakan localhost
- Bagaimana container masuk dan file bantuan dapat berbagi volume yang terpasang
8. Pembersihan
Untuk menghindari tagihan yang tidak disengaja, (misalnya, jika Cloud Function ini secara tidak sengaja dipanggil lebih sering daripada alokasi panggilan Cloud Run bulanan Anda di paket gratis), Anda dapat menghapus layanan Cloud Run atau menghapus project yang Anda buat di Langkah 2.
Untuk menghapus Cloud Function, buka Konsol Cloud Cloud Function di https://console.cloud.google.com/run/ dan hapus layanan sidecar-codelab
(atau $SERVICE_NAME jika Anda menggunakan nama yang berbeda).
Jika memilih untuk menghapus seluruh project, Anda dapat membuka https://console.cloud.google.com/cloud-resource-manager, pilih project yang dibuat pada Langkah 2, lalu pilih Hapus. Jika project dihapus, Anda harus mengubah project di Cloud SDK. Anda dapat melihat daftar semua project yang tersedia dengan menjalankan gcloud projects list
.