Tutorial ini menunjukkan kepada developer dan operator yang men-deploy container ke Kubernetes tentang cara menggunakan ringkasan image container untuk mengidentifikasi image container. Ringkasan image container mengidentifikasi image container secara unik dan tidak dapat diubah.
Men-deploy image container menggunakan ringkasan image memberikan beberapa manfaat dibandingkan dengan menggunakan tag image. Untuk mengetahui informasi selengkapnya tentang ringkasan image, lihat dokumen pendukung tentang menggunakan ringkasan image container sebelum Anda melanjutkan tutorial ini.
Argumen image untuk container dalam spesifikasi Pod Kubernetes menerima
image dengan ringkasan. Argumen ini berlaku di mana pun Anda menggunakan spesifikasi Pod, seperti di bagian template resource Deployment, StatefulSet,
DaemonSet, ReplicaSet, CronJob, dan Job.
Untuk men-deploy image dengan menggunakan ringkasan, gunakan nama image, diikuti dengan @sha256: dan nilai ringkasan. Berikut adalah contoh resource Deployment
yang menggunakan image dengan ringkasan. Deployment adalah objek Kubernetes API yang memungkinkan Anda menjalankan beberapa replika Pod yang didistribusikan di antara node dalam cluster.
apiVersion: apps/v1 kind: Deployment metadata: name: echo-deployment spec: selector: matchLabels: app: echo template: metadata: labels: app: echo spec: containers: - name: echoserver image: gcr.io/google-containers/echoserver@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229 ports: - containerPort: 8080
Satu kelemahan penggunaan ringkasan image adalah Anda tidak mengetahui nilai ringkasan sampai memublikasikan image ke registry. Saat membangun image baru, nilai ringkasan akan berubah, dan Anda memerlukan cara untuk memperbarui manifes Kubernetes setiap kali melakukan deployment.
Tutorial ini menunjukkan cara menggunakan alat seperti
Skaffold,
kpt,
digester,
kustomize,
gke-deploy,
dan
ko
untuk menggunakan ringkasan image di manifes.
Rekomendasi
Dokumen ini menyajikan beberapa cara untuk menggunakan ringkasan image dalam deployment Kubernetes. Alat yang dijelaskan dalam dokumen ini bersifat komplementer.
Misalnya, Anda dapat menggunakan output fungsi kpt dengan kustomize untuk membuat varian bagi lingkungan yang berbeda. Skaffold dapat membangun image menggunakan ko
dan men-deploy image ke cluster Kubernetes menggunakan kubectl atau kpt.
Alasan alat ini saling melengkapi adalah karena dapat melakukan pengeditan terstruktur berdasarkan model resource Kubernetes (KRM). Model ini membuat alat tersebut dapat dicocokkan, dan Anda dapat mengembangkan penggunaan alat tersebut untuk membuat proses dan pipeline yang membantu men-deploy aplikasi dan layanan Anda.
Untuk memulai, sebaiknya gunakan pendekatan yang paling sesuai dengan alat dan proses yang ada:
Skaffold dapat menambahkan ringkasan ke referensi image. Anda dapat mengaktifkan fungsi ini dengan sedikit perubahan konfigurasi. Mengadopsi Skaffold memberikan manfaat tambahan, seperti memisahkan cara berbagai alat membangun dan men-deploy image container.
Dengan menggunakan alat digester sebagai webhook penerimaan yang bermutasi di cluster Kubernetes, Anda dapat menambahkan ringkasan ke semua deployment dengan dampak minimal pada proses saat ini untuk membangun dan men-deploy image container. Webhook digester juga menyederhanakan penerapan Otorisasi Biner, karena hanya memerlukan penambahan label ke namespace.
kpt adalah opsi yang bagus jika Anda membutuhkan alat yang fleksibel untuk memanipulasi manifes Kubernetes. Alat digester dapat digunakan sebagai fungsi KRM sisi klien dalam pipeline kpt.
Jika Anda sudah menggunakan kustomize untuk mengelola manifes Kubernetes di seluruh lingkungan, sebaiknya manfaatkan pengubah image-nya untuk men-deploy image melalui ringkasan.
koadalah cara terbaik untuk membangun dan memublikasikan image untuk aplikasi Go, serta digunakan oleh project open source seperti Knative, Tekton, dan sigstore.
Jika Anda tidak menggunakan salah satu alat yang dijelaskan dalam dokumen ini, sebaiknya mulai dengan Skaffold dan webhook digester. Skaffold adalah alat umum yang digunakan oleh developer dan tim rilis, serta terintegrasi dengan alat lain yang dijelaskan dalam tutorial ini. Anda bisa memanfaatkan opsi integrasi ini ketika kebutuhan Anda terus berkembang. Webhook Kubernetes digester melengkapi Skaffold dengan mengaktifkan deployment berbasis ringkasan untuk seluruh cluster.
Menggunakan Skaffold
Skaffold adalah alat command line untuk pengembangan dan deployment aplikasi yang berkelanjutan ke cluster Kubernetes.
Gunakan Skaffold untuk membangun image, mengirim image ke Artifact Registry, dan mengganti nilai placeholder image dalam template manifes Kubernetes dengan nama, tag, dan ringkasan image yang dikirim:
Di Cloud Shell, buat dan buka direktori untuk menyimpan file yang Anda buat di bagian ini:
mkdir -p ~/container-image-digests-tutorial/skaffold cd ~/container-image-digests-tutorial/skaffoldBuat clone repositori Git Skaffold:
git clone https://github.com/GoogleContainerTools/skaffold.gitBuka direktori contoh
getting-started:cd skaffold/examples/getting-startedLihat tag Git yang cocok dengan versi Skaffold Anda:
git checkout $(skaffold version)Lihat file konfigurasi
skaffold.yaml:cat skaffold.yamlFilenya terlihat seperti ini:
apiVersion: skaffold/v4beta6 kind: Config build: artifacts: - image: skaffold-example manifests: rawYaml: - k8s-pod.yaml
Bagian
build.artifactsberisi nama image placeholder. Skaffold mencari placeholder ini dalam file manifes input.Bagian
manifestsmemberi tahu Skaffold untuk membaca manifes input dari direktori saat ini dengan namak8s-pod.yaml.Untuk ringkasan semua opsi yang tersedia, lihat dokumentasi referensi
skaffold.yaml.Lihat template manifes Kubernetes:
cat k8s-pod.yamlFile tersebut adalah sebagai berikut:
apiVersion: v1 kind: Pod metadata: name: getting-started spec: containers: - name: getting-started image: skaffold-example
Nilai placeholder
skaffold-exampledi kolomimagecocok dengan nilai kolomimagedi fileskaffold.yaml. Skaffold mengganti nilai placeholder ini dengan nama image lengkap dan ringkasan dalam output yang dirender.Bangun dan kirim image ke Artifact Registry:
skaffold build \ --default-repo=LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY \ --file-output=artifacts.json \ --interactive=false \ --push=true \ --update-check=falsePerintah ini menggunakan flag berikut:
- Flag
--file-outputmenentukan file tempat Skaffold menyimpan informasi tentang image yang dibangun, termasuk nilai ringkasan. - Flag
--pushmemerintahkan Skaffold untuk mengirim image yang telah dibangun ke registry image container yang ditentukan oleh flag--default-repo. - Flag
--interactivedan--update-checkditetapkan kefalse. Tetapkan flag ini kefalsedi lingkungan non-interaktif, seperti pipeline build, tetapi biarkan sebagai nilai default (trueuntuk kedua flag) untuk pengembangan lokal.
Jika Anda menggunakan Cloud Deploy untuk men-deploy ke GKE, gunakan file dari flag
--file-outputsebagai nilai flag--build-artifactssaat membuat rilis.- Flag
Render manifes Kubernetes yang diperluas dengan nama, tag, dan ringkasan image container dari langkah sebelumnya:
skaffold render \ --build-artifacts=artifacts.json \ --digest-source=none \ --interactive=false \ --offline=true \ --output=rendered.yaml \ --update-check=falsePerintah ini menggunakan flag berikut:
- Flag
--build-artifactsmereferensikan file output dari perintahskaffold builddi langkah sebelumnya. - Flag
--digest-source=noneberarti bahwa Skaffold menggunakan nilai ringkasan dari file yang diberikan dalam flag--build-artifacts, bukan me-resolve ringkasan dari registry image container. - Flag
--offline=trueberarti Anda dapat menjalankan perintah tanpa memerlukan akses ke cluster Kubernetes. - Flag
--outputmenentukan file output untuk manifes yang dirender.
- Flag
Lihat manifes yang dirender:
cat rendered.yamlOutputnya akan terlihat seperti berikut:
apiVersion: v1 kind: Pod metadata: name: getting-started spec: containers: - image: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/skaffold-example:TAG@sha256:DIGEST name: getting-started
Dalam output ini, Anda akan melihat nilai berikut:
TAG: tag yang ditetapkan Skaffold ke image.DIGEST: nilai ringkasan image
Menggunakan digester
Digester menambahkan ringkasan ke image container dan container init di spesifikasi template Pod dan Pod Kubernetes. Digester menggantikan referensi image container yang menggunakan tag:
spec:
containers:
- image: gcr.io/google-containers/echoserver:1.10
Dengan referensi yang menggunakan ringkasan image:
spec:
containers:
- image: gcr.io/google-containers/echoserver:1.10@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
Digester dapat berjalan sebagai webhook penerimaan yang bermutasi di cluster Kubernetes, atau sebagai fungsi KRM sisi klien dengan alat command line kpt atau kustomize.
Menggunakan fungsi KRM digester
Di Cloud Shell, buat dan buka direktori untuk menyimpan file yang Anda buat di bagian ini:
mkdir -p ~/container-image-digests-tutorial/digester-fn cd ~/container-image-digests-tutorial/digester-fnDownload biner digester:
mkdir -p ${HOME}/bin export PATH=${HOME}/bin:${PATH} DIGESTER_VERSION=$(curl -sL https://api.github.com/repos/google/k8s-digester/releases/latest | jq -r .tag_name) curl -L "https://github.com/google/k8s-digester/releases/download/${DIGESTER_VERSION}/digester_$(uname -s)_$(uname -m)" --output ${HOME}/bin/digester chmod +x ${HOME}/bin/digesterBuat manifes Pod Kubernetes yang merujuk image
gcr.io/google-containers/echoservermenggunakan tag1.10:cat << EOF > pod.yaml apiVersion: v1 kind: Pod metadata: name: echo spec: containers: - name: echoserver image: gcr.io/google-containers/echoserver:1.10 ports: - containerPort: 8080 EOFJalankan fungsi KRM digester menggunakan kpt dengan manifes dalam direktori saat ini (
.):kpt fn eval . --exec digesterSaat Anda menjalankan perintah ini, kpt akan melakukan update manifes di tempat dalam direktori saat ini. Jika Anda ingin kpt menampilkan manifes yang diperbarui di konsol dan tidak mengubah file manifes, tambahkan flag
--output unwrap.Lihat manifes yang diperbarui:
cat pod.yamlFile tersebut adalah sebagai berikut:
apiVersion: v1 kind: Pod metadata: name: echo spec: containers: - name: echoserver image: gcr.io/google-containers/echoserver:1.10@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229 ports: - containerPort: 8080
Menggunakan webhook penerimaan digester
Di Cloud Shell, buat dan buka direktori untuk menyimpan file yang Anda buat di bagian ini:
mkdir -p ~/container-image-digests-tutorial/digester-webhook cd ~/container-image-digests-tutorial/digester-webhookBuat cluster Kubernetes lokal menggunakan kind:
kind create clusterkind adalah alat command line untuk menjalankan cluster Kubernetes lokal menggunakan Docker.
Deploy webhook disgester:
DIGESTER_VERSION=$(curl -sL https://api.github.com/repos/google/k8s-digester/releases/latest | jq -r .tag_name) kustomize build "https://github.com/google/k8s-digester.git/manifests?ref=${DIGESTER_VERSION}" | kubectl apply -f -Buat namespace Kubernetes bernama
digester-demodi cluster kind:kubectl create namespace digester-demoTambahkan label
digest-resolution: enabledke namespacedigester-demo:kubectl label namespace digester-demo digest-resolution=enabledWebhook digester menambahkan ringkasan ke Pod dalam namespace dengan label ini.
Buat manifes Deployment Kubernetes yang mereferensikan image
gcr.io/google-containers/echoservermenggunakan tag1.10:cat << EOF > deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: echo-deployment spec: selector: matchLabels: app: echo template: metadata: labels: app: echo spec: containers: - name: echoserver image: gcr.io/google-containers/echoserver:1.10 ports: - containerPort: 8080 EOFTerapkan manifes dalam namespace
digester-demo:kubectl apply --filename deployment.yaml --namespace digester-demo \ --output jsonpath='{.spec.template.spec.containers[].image}{"\n"}'Flag
--outputmenginstruksikankubectluntuk menghasilkan nama image ke konsol, diikuti dengan karakter newline. Outputnya adalah sebagai berikut:gcr.io/google-containers/echoserver:1.10@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229Output ini menunjukkan bahwa webhook digester menambahkan ringkasan image ke spesifikasi template Pod di resource Deployment.
Hapus cluster kind untuk mengosongkan resource di sesi Cloud Shell Anda:
kind delete cluster
Menggunakan penyetel kpt
kpt adalah alat command line untuk mengelola, memanipulasi, menyesuaikan, dan menerapkan manifes resource Kubernetes.
Anda dapat menggunakan fungsi KRM create-setters dan apply-setters dari
Katalog Fungsi kpt
untuk memperbarui ringkasan image dalam manifes Kubernetes saat membangun image baru.
Di Cloud Shell, buat dan buka direktori untuk menyimpan file yang Anda buat di bagian ini:
mkdir -p ~/container-image-digests-tutorial/kpt cd ~/container-image-digests-tutorial/kptBuat paket kpt di direktori saat ini:
kpt pkg init --description "Container image digest tutorial"Buat manifes Pod Kubernetes yang merujuk image
gcr.io/google-containers/echoservermenggunakan tag1.10:cat << EOF > pod.yaml apiVersion: v1 kind: Pod metadata: name: echo spec: containers: - name: echoserver image: gcr.io/google-containers/echoserver:1.10 ports: - containerPort: 8080 EOFGunakan kpt untuk membuat penyetel yang disebut
echoimageuntuk kolom manifes, dengan nilai yang ada adalahgcr.io/google-containers/echoserver:1.10:kpt fn eval . \ --image gcr.io/kpt-fn/create-setters@sha256:0220cc87f29ff9abfa3a3b5643aa50f18d355d5e9dc9e1f518119633ddc4895c \ -- "echoimage=gcr.io/google-containers/echoserver:1.10"Lihat manifes:
cat pod.yamlFile tersebut adalah sebagai berikut:
apiVersion: v1 kind: Pod metadata: name: echo spec: containers: - name: echoserver image: gcr.io/google-containers/echoserver:1.10 # kpt-set: ${echoimage} ports: - containerPort: 8080
Dapatkan nilai ringkasan image container:
DIGEST=$(gcloud container images describe \ gcr.io/google-containers/echoserver:1.10 \ --format='value(image_summary.digest)')Tetapkan nilai kolom baru:
kpt fn eval . \ --image gcr.io/kpt-fn/apply-setters@sha256:4d4295727183396f0c3c6a75d2560254c2f9041a39e95dc1e5beffeb49cc1a12 \ -- "echoimage=gcr.io/google-containers/echoserver:1.10@$DIGEST"Saat Anda menjalankan perintah ini, kpt akan melakukan penggantian langsung untuk nilai kolom
imagedalam manifes.Lihat manifes yang diperbarui:
cat pod.yamlFile tersebut adalah sebagai berikut:
apiVersion: v1 kind: Pod metadata: name: echo spec: containers: - name: echoserver image: gcr.io/google-containers/echoserver:1.10@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229 # kpt-set: ${echoimage} ports: - containerPort: 8080
Menggunakan transformer image kustomize
kustomize adalah alat command line yang memungkinkan Anda menyesuaikan manifes Kubernetes menggunakan overlay, patch, dan transformer.
Anda dapat menggunakan transformer image kustomize untuk memperbarui nama, tag, dan ringkasan image dalam manifes yang ada.
Cuplikan kustomization.yaml berikut menunjukkan cara mengonfigurasi transformer
image agar menggunakan nilai digest transformer untuk image yang mana nilai image
spesifikasi Pod cocok dengan nilai name transformer:
images: - name: gcr.io/google-containers/echoserver digest: sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
Untuk menggunakan transformer image kustomize dengan ringkasan image, lakukan hal berikut:
Di Cloud Shell, buat dan buka direktori untuk menyimpan file yang Anda buat di bagian ini:
mkdir -p ~/container-image-digests-tutorial/kustomize cd ~/container-image-digests-tutorial/kustomizeBuat file
kustomization.yaml:kustomize initBuat manifes Kubernetes dengan spesifikasi Pod yang mereferensikan image
gcr.io/google-containers/echoservermenggunakan tag1.10:cat << EOF > pod.yaml apiVersion: v1 kind: Pod metadata: name: echo spec: containers: - name: echoserver image: gcr.io/google-containers/echoserver:1.10 ports: - containerPort: 8080 EOFTambahkan manifes sebagai resource dalam file
kustomization.yaml:kustomize edit add resource pod.yamlGunakan transformer image untuk memperbarui ringkasan image:
kustomize edit set image \ gcr.io/google-containers/echoserver@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229Lihat transformer image dalam file
kustomization.yaml:cat kustomization.yamlFile tersebut adalah sebagai berikut:
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - pod.yaml images: - digest: sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229 name: gcr.io/google-containers/echoserver
Lihat manifes yang dihasilkan:
kustomize build .Outputnya adalah sebagai berikut:
apiVersion: v1 kind: Pod metadata: name: echo spec: containers: - image: gcr.io/google-containers/echoserver@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229 name: echoserver ports: - containerPort: 8080
Untuk menjalankan transformer kustomize dan menerapkan manifes yang dihasilkan ke cluster Kubernetes dalam satu langkah, Anda dapat menggunakan perintah
kubectl applydengan flag--kustomize:kubectl apply --kustomize .Jika ingin menerapkan output nanti, Anda dapat mengalihkan output perintah
kustomize buildke file.
Menggunakan gke-deploy
gke-deploy
adalah alat command line yang Anda gunakan dengan
Google Kubernetes Engine (GKE).
gke-deploy menggabungkan alat command line kubectl dan dapat mengubah
resource yang Anda buat dengan mengikuti praktik yang direkomendasikan Google.
Jika Anda menggunakan sub-perintah gke-deploy, yakni prepare atau run, gke-deploy
akan me-resolve tag image Anda untuk ringkasan dan menyimpan manifes yang diperluas dengan
ringkasan image dalam file output/expanded/aggregated-resources.yaml secara
default.
Anda dapat menggunakan gke-deploy run untuk mengganti tag image sebagai ringkasan dan menerapkan manifes yang diperluas ke cluster GKE. Meskipun perintah ini praktis, ada kelemahannya: tag image diganti pada saat deployment. Image yang terkait dengan tag mungkin berubah antara saat Anda memutuskan untuk men-deploy, dan saat men-deploy, sehingga terjadi deployment image yang tidak terduga. Untuk deployment produksi, sebaiknya lakukan langkah terpisah untuk membuat dan menerapkan manifes.
Untuk mengganti tag image dalam manifes deployment Kubernetes dengan ringkasan image, lakukan langkah berikut:
Di Cloud Shell, buat dan buka direktori untuk menyimpan file yang Anda buat di bagian ini:
mkdir -p ~/container-image-digests-tutorial/gke-deploy cd ~/container-image-digests-tutorial/gke-deployInstal
gke-deploy:go install github.com/GoogleCloudPlatform/cloud-builders/gke-deploy@latestBuat manifes Deployment Kubernetes yang mereferensikan image
gcr.io/google-containers/echoservermenggunakan tag1.10:cat << EOF > deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: echo-deployment spec: selector: matchLabels: app: echo template: metadata: labels: app: echo spec: containers: - name: echoserver image: gcr.io/google-containers/echoserver:1.10 ports: - containerPort: 8080 EOFBuat manifes yang diperluas berdasarkan manifes
deployment.yaml:gke-deploy prepare \ --filename deployment.yaml \ --image gcr.io/google-containers/echoserver:1.10 \ --version 1.10Lihat manifes yang diperluas:
cat output/expanded/aggregated-resources.yamlOutputnya adalah sebagai berikut:
apiVersion: apps/v1 kind: Deployment metadata: labels: app.kubernetes.io/managed-by: gcp-cloud-build-deploy app.kubernetes.io/version: "1.10" name: echo-deployment namespace: default spec: selector: matchLabels: app: echo template: metadata: labels: app: echo app.kubernetes.io/managed-by: gcp-cloud-build-deploy app.kubernetes.io/version: "1.10" spec: containers: - image: gcr.io/google-containers/echoserver@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229 name: echoserver ports: - containerPort: 8080
Dalam manifes yang diperluas, tag image diganti dengan ringkasan.
Argumen
--versionyang Anda gunakan dengan perintahgke-deploymenetapkan nilai labelapp.kubernetes.io/versiondalam deployment dan metadata template Pod manifes yang diperluas.Untuk mempelajari cara menggunakan
gke-deploydengan Cloud Build, lihat dokumentasi Cloud Build untukgke-deploy.
Menggunakan ko
ko
adalah library dan alat command line untuk membuat
image container Go
dan men-deploy-nya ke cluster Kubernetes. ko mem-build image tanpa menggunakan daemon Docker, sehingga Anda dapat menggunakannya di lingkungan tempat Docker tidak dapat diinstal.
Sub-perintah ko
build
membangun image dan memublikasikannya ke registry image container atau memuatnya ke daemon Docker lokal.
Sub-perintah ko
resolve
melakukan hal berikut:
- Mengidentifikasi image yang akan dibuat dengan menemukan placeholder di kolom
imagepada manifes Kubernetes yang Anda berikan menggunakan argumen--filename. - Membangun dan memublikasikan image Anda.
- Mengganti placeholder nilai
imagedengan nama dan ringkasan image yang dibuatnya. - Mencetak manifes yang diperluas.
Sub-perintah ko
apply,
create,
dan
run
melakukan langkah yang sama seperti resolve, lalu menjalankan kubectl apply,
create, atau run dengan manifes yang diperluas.
Untuk mem-build image dari kode sumber Go dan menambahkan ringkasan image ke manifes deployment Kubernetes, lakukan hal berikut
Di Cloud Shell, buat dan buka direktori untuk menyimpan file yang Anda buat di bagian ini:
mkdir -p ~/container-image-digests-tutorial/ko cd ~/container-image-digests-tutorial/koDownload
kodan tambahkan kePATHAnda:mkdir -p ${HOME}/bin export PATH=${HOME}/bin:${PATH} KO_VERSION=$(curl -sL https://api.github.com/repos/ko-build/ko/releases/latest | jq -r .tag_name | cut -c2-) curl -L "https://github.com/ko-build/ko/releases/download/v${KO_VERSION}/ko_${KO_VERSION}_$(uname -s)_$(uname -m).tar.gz" | tar -zxC ${HOME}/bin koBuat aplikasi Go dengan nama modul
example.com/hello-worlddi direktori baru bernamaapp:mkdir -p app/cmd/ko-example cd app go mod init example.com/hello-world cat << EOF > cmd/ko-example/main.go package main import "fmt" func main() { fmt.Println("hello world") } EOFTentukan repositori image yang digunakan
kountuk memublikasikan image:export KO_DOCKER_REPO=LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORYContoh ini menggunakan Artifact Registry, tetapi Anda dapat menggunakan
kodengan registry image container yang berbeda.Untuk membangun dan memublikasikan image untuk aplikasi Anda, lakukan salah satu langkah berikut:
Bangun dan publikasikan image untuk aplikasi Anda dengan menyediakan jalur ke paket utama Go:
ko build --base-import-paths ./cmd/ko-exampleArgumen opsional
--base-import-pathsberarti bahwakomenggunakan nama pendek direktori paket utama sebagai nama image.komencetak nama image dan ringkasan kestdoutdalam format berikut:LOCATION-docker.pkg.dev/PROJECT_ID/ko-example@sha256:DIGESTDalam output ini,
DIGESTadalah nilai ringkasan image.Gunakan
kountuk mengganti placeholder manifes dengan nama dan ringkasan image yang dibangun dan dipublikasikan:Membuat manifes Pod Kubernetes. Manifes menggunakan
ko://IMPORT_PATH_OF_YOUR_MAIN_PACKAGEplaceholder sebagai nilai kolomimage:cat << EOF > ko-pod.yaml apiVersion: v1 kind: Pod metadata: name: ko-example spec: containers: - name: hello-world image: ko://example.com/hello-world/cmd/ko-example EOFBangun dan publikasikan image untuk aplikasi Anda, dan ganti placeholder manifes dengan nama image dan ringkasan:
ko resolve --base-import-paths --filename ko-pod.yamlkomencetak manifes dengan nama image dan ringkasan kestdout:apiVersion: v1 kind: Pod metadata: name: ko-example spec: containers: - name: hello-world image: LOCATION-docker.pkg.dev/PROJECT_ID/ko-example@sha256:DIGEST
Dalam output ini,
DIGESTadalah nilai ringkasan image.