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 ingress Cloud Run dan aplikasi node.js tambahan yang akan digunakan sebagai sidecar.
Ringkasan teknis
Saat menggunakan beberapa container dalam instance Cloud Run, satu container digunakan sebagai container utama untuk ingress web. Satu atau beberapa container tambahan ini disebut sebagai sidecar.
Ada dua cara agar beberapa penampung dapat berkomunikasi satu sama lain:
- Container berbagi 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 memproksi permintaan. 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 container dapat berkomunikasi dengan berbagi file melalui volume bersama, Anda menambahkan berbagai aplikasi pendamping ke layanan Anda. Misalnya, Anda dapat melakukan instrumentasi pada layanan Cloud Run untuk menggunakan agen kustom seperti OpenTelemetry guna mengekspor log, metrik, dan rekaman aktivitas (contoh OpenTelemetry). Contoh lainnya adalah menggunakan sidecar untuk terhubung ke database PostgreSQL Cloud Spanner (contoh PostgreSQL Cloud Spanner).
Contoh dalam codelab ini
Dalam codelab ini, Anda akan men-deploy layanan Cloud Run terlebih dahulu yang container ingress-nya berkomunikasi dengan sidecar melalui port localhost. Kemudian, Anda akan memperbarui container ingress dan file bantuan untuk berbagi file melalui pemasangan volume.
Yang akan Anda pelajari
- Cara membuat container yang menggunakan sidecar
- Cara container ingress dapat berkomunikasi dengan file bantuan menggunakan localhost
- Cara container ingress dan sidecar dapat berbagi file melalui volume yang di-mount
2. Penyiapan dan Persyaratan
Prasyarat
- Anda login ke Konsol Cloud.
- Anda telah men-deploy layanan Cloud Run sebelumnya. Misalnya, Anda dapat mengikuti panduan memulai deployment layanan web dari kode sumber untuk memulai.
Mengaktifkan Cloud Shell
- Dari Cloud Console, klik Aktifkan Cloud Shell
.

Jika ini adalah pertama kalinya Anda memulai Cloud Shell, Anda akan melihat layar perantara yang menjelaskan apa itu Cloud Shell. Jika Anda melihat layar perantara, klik Continue.

Perlu waktu beberapa saat untuk menyediakan dan terhubung ke Cloud Shell.

Virtual machine ini dilengkapi dengan semua alat pengembangan yang diperlukan. VM 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 telah 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. Buat aplikasi ingress
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
Buat repositori ArtifactRegistry untuk menyimpan image container Anda
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"
Kemudian, 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}`);
});
Buat dockerfile untuk container ingress
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" ]
Buat file ``.dockerignore` untuk container ingress.
# 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 ingress dengan menjalankan perintah berikut:
gcloud builds submit --tag $REGION-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/ingress:latest
4. Membuat aplikasi sidecar
Di bagian ini, Anda akan membuat aplikasi node.js kedua yang akan digunakan sebagai sidecar di layanan Cloud Run.
Buka direktori sidecar.
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}`);
});
Buat Dockerfile untuk container sidecar
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" ]
Buat file ``.dockerignore` untuk container sidecar.
# 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 ingress 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 harus menggunakan gcloud beta karena pemasangan volume dalam pratinjau publik.
gcloud beta run services replace sidecar-codelab.yaml
Setelah di-deploy, simpan URL layanan dalam 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 Anda.
curl -X GET -H "Authorization: Bearer $(gcloud auth print-identity-token)" ${SERVICE_URL}
Hasil Anda akan terlihat mirip dengan contoh output di bawah:
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, container ingress akan menulis ke file pada volume bersama. Sidecar akan membaca file dan menampilkan isinya kembali ke container ingress.
Pertama, Anda akan memperbarui kode penampung ingress. Buka direktori ingress.
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}`);
});
Bangun image baru untuk container ingress Anda dengan menjalankan perintah berikut:
gcloud builds submit --tag $REGION-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/ingress:latest
Sekarang buka direktori sidecar:
cd ../sidecar
Lalu, perbarui 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}`);
});
Bangun image baru untuk container sidecar Anda dengan menjalankan perintah berikut:
gcloud builds submit --tag $REGION-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/sidecar:latest
Perbarui sidecar-codelab.yaml dengan kode berikut untuk membagikan 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
Deploy file sidecar-codelab.yaml yang diperbarui
gcloud beta run services replace sidecar-codelab.yaml
Sekarang Anda dapat memanggil layanan dengan memberikan token identitas Anda.
curl -X GET -H "Authorization: Bearer $(gcloud auth print-identity-token)" ${SERVICE_URL}
Hasil Anda akan terlihat mirip dengan contoh output di bawah:
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 multi-penampung dan menggunakan pemasangan volume dalam memori.
Yang telah kita bahas
- Cara membuat penampung yang menggunakan sidecar
- Cara container ingress dapat berkomunikasi dengan file bantuan menggunakan localhost
- Cara container ingress dan sidecar dapat berbagi volume yang di-mount
8. Pembersihan
Untuk menghindari biaya yang tidak disengaja (misalnya, jika Cloud Function ini tidak sengaja dipanggil lebih banyak daripada alokasi pemanggilan Cloud Run bulanan Anda di tingkat 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 Anda memilih untuk menghapus seluruh project, Anda dapat membuka https://console.cloud.google.com/cloud-resource-manager, memilih project yang Anda buat di Langkah 2, lalu memilih Hapus. Jika menghapus project, Anda harus mengubah project di Cloud SDK. Anda dapat melihat daftar semua project yang tersedia dengan menjalankan gcloud projects list.