Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
Halaman ini menjelaskan cara menggunakan KubernetesPodOperator untuk men-deploy Pod Kubernetes dari Cloud Composer ke cluster Google Kubernetes Engine yang merupakan bagian dari lingkungan Cloud Composer Anda.
KubernetesPodOperator meluncurkan Kubernetes Pod di cluster lingkungan Anda. Sebagai perbandingan, operator Google Kubernetes Engine menjalankan Pod Kubernetes di cluster tertentu, yang dapat berupa cluster terpisah yang tidak terkait dengan lingkungan Anda. Anda juga dapat membuat dan menghapus cluster menggunakan operator Google Kubernetes Engine.
KubernetesPodOperator adalah opsi yang baik jika Anda memerlukan:
- Dependensi Python kustom yang tidak tersedia melalui repositori PyPI publik.
- Dependensi biner yang tidak tersedia di image pekerja Cloud Composer stock.
Sebelum memulai
Periksa daftar perbedaan berikut antara KubernetesPodOperator di Cloud Composer 3 dan Cloud Composer 2, dan pastikan DAG Anda kompatibel:
Anda tidak dapat membuat namespace kustom di Cloud Composer 3. Pod selalu berjalan di namespace
composer-user-workloads
, meskipun namespace yang berbeda ditentukan. Pod di namespace ini memiliki akses ke resource project dan jaringan VPC Anda (jika diaktifkan) tanpa konfigurasi tambahan.Secret dan ConfigMap Kubernetes tidak dapat dibuat menggunakan Kubernetes API. Sebagai gantinya, Cloud Composer menyediakan perintah Google Cloud CLI, resource Terraform, dan Cloud Composer API untuk mengelola Kubernetes Secrets dan ConfigMap. Untuk informasi selengkapnya, lihat Menggunakan Secret dan ConfigMap Kubernetes.
Sama seperti di Cloud Composer 2, konfigurasi afinitas Pod tidak tersedia. Jika Anda ingin menggunakan afinitas Pod, gunakan operator GKE untuk meluncurkan Pod di cluster lain.
Tentang KubernetesPodOperator di Cloud Composer 3
Bagian ini menjelaskan cara kerja KubernetesPodOperator di Cloud Composer 3.
Penggunaan resource
Di Cloud Composer 3, cluster lingkungan Anda diskalakan secara otomatis. Beban kerja tambahan yang Anda jalankan menggunakan KubernetesPodOperator diskalakan secara independen dari lingkungan Anda. Lingkungan Anda tidak terpengaruh oleh peningkatan permintaan resource, tetapi cluster lingkungan Anda diskalakan naik dan turun bergantung pada permintaan resource.
Harga untuk beban kerja tambahan yang Anda jalankan di cluster lingkungan mengikuti model penetapan harga Cloud Composer 3 dan menggunakan SKU Cloud Composer 3.
Cloud Composer 3 menggunakan cluster Autopilot yang memperkenalkan konsep class komputasi:
Cloud Composer hanya mendukung class komputasi
general-purpose
.Secara default, jika tidak ada class yang dipilih, class
general-purpose
akan diasumsikan saat Anda membuat Pod menggunakan KubernetesPodOperator.Setiap class dikaitkan dengan properti dan batas resource tertentu. Anda dapat membacanya di dokumentasi Autopilot. Misalnya, Pod yang berjalan dalam class
general-purpose
dapat menggunakan memori hingga 110 GiB.
Akses ke resource project
Di Cloud Composer 3, cluster lingkungan Anda berada di project tenant, Pod dijalankan di cluster lingkungan, dalam namespace terisolasi.
Di Cloud Composer 3, Pod selalu berjalan di namespace composer-user-workloads
, meskipun namespace yang berbeda ditentukan.
Pod di namespace ini dapat mengakses resource Google Cloud
di project Anda dan jaringan VPC Anda (jika
diaktifkan) tanpa konfigurasi tambahan.
Akun layanan lingkungan Anda digunakan untuk mengakses resource
ini. Anda tidak dapat menentukan akun layanan yang berbeda.
Konfigurasi minimal
Untuk membuat KubernetesPodOperator, hanya parameter name
, image
Pod yang akan digunakan, dan
task_id
yang diperlukan. /home/airflow/composer_kube_config
berisi kredensial untuk mengautentikasi ke GKE.
Konfigurasi tambahan
Contoh ini menunjukkan parameter tambahan yang dapat Anda konfigurasikan di KubernetesPodOperator.
Untuk informasi selengkapnya tentang parameter, lihat referensi Airflow untuk KubernetesPodOperator. Untuk informasi tentang cara menggunakan Secret dan ConfigMap Kubernetes, lihat Menggunakan Secret dan ConfigMap Kubernetes. Untuk mengetahui informasi selengkapnya tentang cara menggunakan template Jinja dengan KubernetesPodOperator, lihat Menggunakan template Jinja.
Menggunakan template Jinja
Airflow mendukung template Jinja di DAG.
Anda harus mendeklarasikan parameter Airflow yang diperlukan (task_id
, name
, dan
image
) dengan operator. Seperti yang ditunjukkan dalam contoh berikut,
Anda dapat membuat template semua parameter lainnya dengan Jinja, termasuk cmds
,
arguments
, env_vars
, dan config_file
.
Parameter env_vars
dalam contoh ditetapkan dari
Variabel Airflow bernama my_value
. Contoh DAG
mendapatkan nilainya dari variabel template vars
di Airflow. Airflow memiliki lebih banyak variabel yang memberikan akses ke berbagai jenis informasi. Misalnya,
Anda dapat menggunakan variabel template conf
untuk mengakses nilai
opsi konfigurasi Airflow. Untuk informasi selengkapnya dan
daftar variabel yang tersedia di Airflow, lihat
Referensi template dalam dokumentasi
Airflow.
Tanpa mengubah DAG atau membuat variabel env_vars
, tugas ex-kube-templates
dalam contoh akan gagal karena variabel tidak
ada. Buat variabel ini di UI Airflow atau dengan Google Cloud CLI:
UI Airflow
Buka UI Airflow.
Di toolbar, pilih Admin > Variables.
Di halaman List Variable, klik Add a new record.
Di halaman Tambahkan Variabel, masukkan informasi berikut:
- Kunci:
my_value
- Val:
example_value
- Kunci:
Klik Simpan.
gcloud
Masukkan perintah berikut:
gcloud composer environments run ENVIRONMENT \
--location LOCATION \
variables set -- \
my_value example_value
Ganti:
ENVIRONMENT
dengan nama lingkungan.LOCATION
dengan region tempat lingkungan tersebut berada.
Contoh berikut menunjukkan cara menggunakan template Jinja dengan KubernetesPodOperator:
Menggunakan Secret dan ConfigMap Kubernetes
Secret Kubernetes adalah objek yang berisi data sensitif. ConfigMap Kubernetes adalah objek yang berisi data non-rahasia dalam key-value pair.
Di Cloud Composer 3, Anda dapat membuat Secret dan ConfigMap menggunakan Google Cloud CLI, API, atau Terraform, lalu mengaksesnya dari KubernetesPodOperator:
- Dengan Google Cloud CLI dan API, Anda menyediakan file konfigurasi YAML.
- Dengan Terraform, Anda menentukan Secrets dan ConfigMaps sebagai resource terpisah dalam file konfigurasi Terraform.
Tentang file konfigurasi YAML
Saat membuat Secret atau ConfigMap Kubernetes menggunakan Google Cloud CLI dan API, Anda harus menyediakan file dalam format YAML. File ini harus mengikuti format yang sama seperti yang digunakan oleh Secret dan ConfigMap Kubernetes. Dokumentasi Kubernetes menyediakan banyak contoh kode ConfigMap dan Secret. Untuk memulai, Anda dapat melihat halaman Mendistribusikan Kredensial dengan Aman Menggunakan Secret dan ConfigMaps.
Sama seperti di Kubernetes Secrets, gunakan representasi base64 saat Anda menentukan nilai di Secret.
Untuk mengenkode nilai, Anda dapat menggunakan perintah berikut (ini adalah salah satu dari banyak cara untuk mendapatkan nilai yang dienkode base64):
echo "postgresql+psycopg2://root:example-password@127.0.0.1:3306/example-db" -n | base64
Output:
cG9zdGdyZXNxbCtwc3ljb3BnMjovL3Jvb3Q6ZXhhbXBsZS1wYXNzd29yZEAxMjcuMC4wLjE6MzMwNi9leGFtcGxlLWRiIC1uCg==
Dua contoh file YAML berikut akan digunakan dalam contoh di bagian selanjutnya dalam panduan ini. Contoh file konfigurasi YAML untuk Secret Kubernetes:
apiVersion: v1
kind: Secret
metadata:
name: airflow-secrets
data:
sql_alchemy_conn: cG9zdGdyZXNxbCtwc3ljb3BnMjovL3Jvb3Q6ZXhhbXBsZS1wYXNzd29yZEAxMjcuMC4wLjE6MzMwNi9leGFtcGxlLWRiIC1uCg==
Contoh lain yang menunjukkan cara menyertakan file. Sama seperti pada contoh
sebelumnya, pertama-tama encode konten file (cat ./key.json | base64
), lalu
berikan nilai ini dalam file YAML:
apiVersion: v1
kind: Secret
metadata:
name: service-account
data:
service-account.json: |
ewogICJ0eXBl...mdzZXJ2aWNlYWNjb3VudC5jb20iCn0K
Contoh file konfigurasi YAML untuk ConfigMap. Anda tidak perlu menggunakan representasi base64 di ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:
name: example-configmap
data:
example_key: example_value
Mengelola Secret Kubernetes
gcloud
Membuat Secret
Untuk membuat Secret Kubernetes, jalankan perintah berikut:
gcloud beta composer environments user-workloads-secrets create \
--environment ENVIRONMENT_NAME \
--location LOCATION \
--secret-file-path SECRET_FILE
Ganti kode berikut:
ENVIRONMENT_NAME
: nama lingkungan Anda.LOCATION
: region tempat lingkungan berada.SECRET_FILE
: jalur ke file YAML lokal yang berisi konfigurasi Secret.
Contoh:
gcloud beta composer environments user-workloads-secrets create \
--environment example-environment \
--location us-central1 \
--secret-file-path ./secrets/example-secret.yaml
Memperbarui Secret
Untuk memperbarui Secret Kubernetes, jalankan perintah berikut. Nama secret akan diambil dari file YAML yang ditentukan dan konten Secret akan diganti.
gcloud beta composer environments user-workloads-secrets update \
--environment ENVIRONMENT_NAME \
--location LOCATION \
--secret-file-path SECRET_FILE
Ganti kode berikut:
ENVIRONMENT_NAME
: nama lingkungan Anda.LOCATION
: region tempat lingkungan berada.SECRET_FILE
: jalur ke file YAML lokal yang berisi konfigurasi Secret. Tentukan nama Secret di kolommetadata
>name
dalam file ini.
Mencantumkan Secret
Untuk mendapatkan daftar Secret dan kolomnya untuk lingkungan, jalankan perintah berikut. Nilai kunci dalam output akan diganti dengan tanda bintang.
gcloud beta composer environments user-workloads-secrets list \
--environment ENVIRONMENT_NAME \
--location LOCATION
Ganti kode berikut:
ENVIRONMENT_NAME
: nama lingkungan Anda.LOCATION
: region tempat lingkungan berada.
Mendapatkan detail Secret
Untuk mendapatkan informasi mendetail tentang Secret, jalankan perintah berikut. Nilai kunci dalam output akan diganti dengan tanda bintang.
gcloud beta composer environments user-workloads-secrets describe \
SECRET_NAME \
--environment ENVIRONMENT_NAME \
--location LOCATION
Ganti kode berikut:
SECRET_NAME
: nama Secret, seperti yang ditentukan di kolommetadata
>name
dalam file YAML dengan konfigurasi Secret.ENVIRONMENT_NAME
: nama lingkungan Anda.LOCATION
: region tempat lingkungan berada.
Menghapus Secret
Untuk menghapus Secret, jalankan perintah berikut:
gcloud beta composer environments user-workloads-secrets delete \
SECRET_NAME \
--environment ENVIRONMENT_NAME \
--location LOCATION
SECRET_NAME
: nama Secret, seperti yang ditentukan di kolommetadata
>name
dalam file YAML dengan konfigurasi Secret.ENVIRONMENT_NAME
: nama lingkungan Anda.LOCATION
: region tempat lingkungan berada.
API
Membuat Secret
Buat permintaan API
environments.userWorkloadsSecrets.create
.Dalam permintaan ini:
- Dalam isi permintaan, di kolom
name
, tentukan URI untuk Secret baru. - Dalam isi permintaan, di kolom
data
, tentukan kunci dan nilai yang dienkode base64 untuk Secret.
- Dalam isi permintaan, di kolom
Contoh:
// POST https://composer.googleapis.com/v1beta1/projects/example-project/
// locations/us-central1/environments/example-environment/userWorkloadsSecrets
{
"name": "projects/example-project/locations/us-central1/environments/example-environment/userWorkloadsSecrets/example-secret",
"data": {
"example": "ZXhhbXBsZV92YWx1ZSAtbgo="
}
}
Memperbarui Secret
Buat permintaan API
environments.userWorkloadsSecrets.update
.Dalam permintaan ini:
- Dalam isi permintaan, di kolom
name
, tentukan URI Secret. - Dalam isi permintaan, di kolom
data
, tentukan kunci dan nilai yang dienkode base64 untuk Secret. Nilai akan diganti.
- Dalam isi permintaan, di kolom
Contoh:
// PUT https://composer.googleapis.com/v1beta1/projects/example-project/
// locations/us-central1/environments/example-environment/userWorkloadsSecrets/example-secret
{
"name": "projects/example-project/locations/us-central1/environments/example-environment/userWorkloadsSecrets/example-secret",
"data": {
"example": "ZXhhbXBsZV92YWx1ZSAtbgo=",
"another-example": "YW5vdGhlcl9leGFtcGxlX3ZhbHVlIC1uCg=="
}
}
Mencantumkan Secret
Buat permintaan API
environments.userWorkloadsSecrets.list
. Nilai kunci dalam output akan diganti dengan tanda bintang. Anda
dapat menggunakan penomoran halaman dengan permintaan ini, lihat referensi permintaan untuk
mengetahui detail selengkapnya.
Contoh:
// GET https://composer.googleapis.com/v1beta1/projects/example-project/
// locations/us-central1/environments/example-environment/userWorkloadsSecrets
Mendapatkan detail Secret
Buat permintaan API
environments.userWorkloadsSecrets.get
. Nilai kunci dalam output akan diganti dengan tanda bintang.
Contoh:
// GET https://composer.googleapis.com/v1beta1/projects/example-project/
// locations/us-central1/environments/example-environment/userWorkloadsSecrets/example-secret
Menghapus Secret
Buat permintaan API
environments.userWorkloadsSecrets.delete
.
Contoh:
// DELETE https://composer.googleapis.com/v1beta1/projects/example-project/
// locations/us-central1/environments/example-environment/userWorkloadsSecrets/example-secret
Terraform
Resource google_composer_user_workloads_secret
menentukan Secret Kubernetes, dengan kunci dan nilai yang ditentukan dalam blok data
.
resource "google_composer_user_workloads_secret" "example_secret" {
provider = google-beta
environment = google_composer_environment.ENVIRONMENT_RESOURCE_NAME.name
name = "SECRET_NAME"
region = "LOCATION"
data = {
KEY_NAME: "KEY_VALUE"
}
}
ENVIRONMENT_RESOURCE_NAME
: nama resource lingkungan, yang berisi definisi lingkungan di Terraform. Nama lingkungan yang sebenarnya juga ditentukan dalam resource ini.LOCATION
: region tempat lingkungan berada.SECRET_NAME
: nama Secret.KEY_NAME
: satu atau beberapa kunci untuk Secret ini.KEY_VALUE
: nilai yang dienkode base64 untuk kunci. Anda dapat menggunakan fungsibase64encode
untuk mengenkode nilai (lihat contoh).
Dua contoh Secret Kubernetes berikut akan digunakan dalam contoh di bagian selanjutnya dalam panduan ini.
resource "google_composer_user_workloads_secret" "example_secret" {
provider = google-beta
name = "airflow-secrets"
environment = google_composer_environment.example_environment.name
region = "us-central1"
data = {
sql_alchemy_conn: base64encode("postgresql+psycopg2://root:example-password@127.0.0.1:3306/example-db")
}
}
Contoh lain yang menunjukkan cara menyertakan file. Anda dapat menggunakan fungsi file
untuk membaca konten file sebagai string, lalu mengenkodenya dengan base64:
resource "google_composer_user_workloads_secret" "service_account_secret" {
provider = google-beta
name = "service-account"
environment = google_composer_environment.example_environment.name
region = "us-central1"
data = {
"service-account.json": base64encode(file("./key.json"))
}
}
Menggunakan Secret Kubernetes di DAG
Contoh ini menunjukkan dua cara menggunakan Secret Kubernetes: sebagai variabel lingkungan, dan sebagai volume yang dipasang oleh Pod.
Secret pertama, airflow-secrets
, ditetapkan
ke variabel lingkungan Kubernetes bernama SQL_CONN
(bukan
variabel lingkungan Airflow atau Cloud Composer).
Secret kedua, service-account
, memasang service-account.json
, file
dengan token akun layanan, ke /var/secrets/google
.
Berikut adalah tampilan objek Secret:
Nama Secret Kubernetes pertama ditentukan dalam variabel secret_env
.
Secret ini bernama airflow-secrets
. Parameter deploy_type
menentukan
bahwa parameter tersebut harus diekspos sebagai variabel lingkungan. Nama variabel lingkungannya adalah SQL_CONN
, seperti yang ditentukan dalam parameter deploy_target
. Terakhir, nilai variabel lingkungan SQL_CONN
ditetapkan ke nilai kunci sql_alchemy_conn
.
Nama Kubernetes Secret kedua ditentukan dalam variabel
secret_volume
. Secret ini bernama service-account
. Volume ini diekspos sebagai
volume, seperti yang ditentukan dalam parameter deploy_type
. Jalur file yang akan dipasang, deploy_target
, adalah /var/secrets/google
. Terakhir, key
Secret yang disimpan di deploy_target
adalah service-account.json
.
Berikut adalah tampilan konfigurasi operator:
Mengelola ConfigMaps Kubernetes
gcloud
Membuat ConfigMap
Untuk membuat ConfigMap, jalankan perintah berikut:
gcloud beta composer environments user-workloads-config-maps create \
--environment ENVIRONMENT_NAME \
--location LOCATION \
--config-map-file-path CONFIG_MAP_FILE
Ganti kode berikut:
ENVIRONMENT_NAME
: nama lingkungan Anda.LOCATION
: region tempat lingkungan berada.CONFIG_MAP_FILE
: jalur ke file YAML lokal yang berisi konfigurasi ConfigMap.
Contoh:
gcloud beta composer environments user-workloads-config-maps create \
--environment example-environment \
--location us-central1 \
--config-map-file-path ./configs/example-configmap.yaml
Memperbarui ConfigMap
Untuk mengupdate ConfigMap, jalankan perintah berikut. Nama ConfigMap akan diambil dari file YAML yang ditentukan dan konten ConfigMap akan diganti.
gcloud beta composer environments user-workloads-config-maps update \
--environment ENVIRONMENT_NAME \
--location LOCATION \
--config-map-file-path CONFIG_MAP_FILE
Ganti kode berikut:
ENVIRONMENT_NAME
: nama lingkungan Anda.LOCATION
: region tempat lingkungan berada.CONFIG_MAP_FILE
: jalur ke file YAML lokal yang berisi konfigurasi ConfigMap. Tentukan nama ConfigMap di kolommetadata
>name
dalam file ini.
Membuat daftar ConfigMap
Untuk mendapatkan daftar ConfigMap dan kolomnya untuk lingkungan, jalankan perintah berikut. Nilai kunci dalam output akan ditampilkan apa adanya.
gcloud beta composer environments user-workloads-config-maps list \
--environment ENVIRONMENT_NAME \
--location LOCATION
Ganti kode berikut:
ENVIRONMENT_NAME
: nama lingkungan Anda.LOCATION
: region tempat lingkungan berada.
Mendapatkan detail ConfigMap
Untuk mendapatkan informasi mendetail tentang ConfigMap, jalankan perintah berikut. Nilai kunci dalam output akan ditampilkan apa adanya.
gcloud beta composer environments user-workloads-config-maps describe \
CONFIG_MAP_NAME \
--environment ENVIRONMENT_NAME \
--location LOCATION
Ganti kode berikut:
CONFIG_MAP_NAME
: nama ConfigMap, seperti yang ditentukan di kolommetadata
>name
dalam file YAML dengan konfigurasi ConfigMap.ENVIRONMENT_NAME
: nama lingkungan Anda.LOCATION
: region tempat lingkungan berada.
Menghapus ConfigMap
Untuk menghapus ConfigMap, jalankan perintah berikut:
gcloud beta composer environments user-workloads-config-maps delete \
CONFIG_MAP_NAME \
--environment ENVIRONMENT_NAME \
--location LOCATION
CONFIG_MAP_NAME
: nama ConfigMap, seperti yang ditentukan di kolommetadata
>name
dalam file YAML dengan konfigurasi ConfigMap.ENVIRONMENT_NAME
: nama lingkungan Anda.LOCATION
: region tempat lingkungan berada.
API
Membuat ConfigMap
Buat permintaan API
environments.userWorkloadsConfigMaps.create
.Dalam permintaan ini:
- Dalam isi permintaan, di kolom
name
, tentukan URI untuk ConfigMap baru. - Dalam isi permintaan, di kolom
data
, tentukan kunci dan nilai untuk ConfigMap.
- Dalam isi permintaan, di kolom
Contoh:
// POST https://composer.googleapis.com/v1beta1/projects/example-project/
// locations/us-central1/environments/example-environment/userWorkloadsConfigMaps
{
"name": "projects/example-project/locations/us-central1/environments/example-environment/userWorkloadsConfigMaps/example-configmap",
"data": {
"example_key": "example_value"
}
}
Memperbarui ConfigMap
Buat permintaan API
environments.userWorkloadsConfigMaps.update
.Dalam permintaan ini:
- Dalam isi permintaan, di kolom
name
, tentukan URI ConfigMap. - Dalam isi permintaan, di kolom
data
, tentukan kunci dan nilai untuk ConfigMap. Nilai akan diganti.
- Dalam isi permintaan, di kolom
Contoh:
// PUT https://composer.googleapis.com/v1beta1/projects/example-project/
// locations/us-central1/environments/example-environment/userWorkloadsConfigMaps/example-configmap
{
"name": "projects/example-project/locations/us-central1/environments/example-environment/userWorkloadsConfigMaps/example-configmap",
"data": {
"example_key": "example_value",
"another_key": "another_value"
}
}
Membuat daftar ConfigMap
Buat permintaan API
environments.userWorkloadsConfigMaps.list
. Nilai kunci dalam output akan ditampilkan apa adanya. Anda dapat menggunakan penomoran halaman dengan permintaan ini. Lihat referensi permintaan untuk mengetahui detail selengkapnya.
Contoh:
// GET https://composer.googleapis.com/v1beta1/projects/example-project/
// locations/us-central1/environments/example-environment/userWorkloadsConfigMaps
Mendapatkan detail ConfigMap
Buat permintaan API
environments.userWorkloadsConfigMaps.get
. Nilai kunci dalam output akan ditampilkan apa adanya.
Contoh:
// GET https://composer.googleapis.com/v1beta1/projects/example-project/
// locations/us-central1/environments/example-environment/userWorkloadsConfigMaps/example-configmap
Menghapus ConfigMap
Buat permintaan API
environments.userWorkloadsConfigMaps.delete
.
Contoh:
// DELETE https://composer.googleapis.com/v1beta1/projects/example-project/
// locations/us-central1/environments/example-environment/userWorkloadsConfigMaps/example-configmap
Terraform
Resource
google_composer_user_workloads_config_map
menentukan ConfigMap, dengan kunci dan nilai yang ditentukan dalam
blok data
.
resource "google_composer_user_workloads_config_map" "example_config_map" {
provider = google-beta
environment = google_composer_environment.ENVIRONMENT_RESOURCE_NAME.name
name = "CONFIG_MAP_NAME"
region = "LOCATION"
data = {
KEY_NAME: "KEY_VALUE"
}
}
ENVIRONMENT_RESOURCE_NAME
: nama resource lingkungan, yang berisi definisi lingkungan di Terraform. Nama lingkungan yang sebenarnya juga ditentukan dalam resource ini.LOCATION
: region tempat lingkungan berada.CONFIG_MAP_NAME
: nama ConfigMap.KEY_NAME
: satu atau beberapa kunci untuk ConfigMap ini.KEY_VALUE
: Nilai untuk kunci.
Contoh:
resource "google_composer_user_workloads_config_map" "example_config_map" {
provider = google-beta
name = "example-config-map"
environment = google_composer_environment.example_environment.name
region = "us-central1"
data = {
"example_key": "example_value"
}
}
Menggunakan ConfigMap di DAG
Contoh ini menunjukkan cara menggunakan ConfigMap di DAG Anda.
Dalam contoh berikut, ConfigMap diteruskan dalam parameter configmaps
.
Semua kunci ConfigMap ini tersedia sebagai variabel lingkungan:
import datetime
from airflow import models
from airflow.providers.cncf.kubernetes.operators.pod import KubernetesPodOperator
with models.DAG(
dag_id="composer_kubernetes_pod_configmap",
schedule_interval=None,
start_date=datetime.datetime(2024, 1, 1),
) as dag:
KubernetesPodOperator(
task_id='kpo_configmap_env_vars',
image='busybox:1.28',
cmds=['sh'],
arguments=[
'-c',
'echo "Value: $example_key"',
],
configmaps=["example-configmap"],
config_file="/home/airflow/composer_kube_config",
)
Contoh berikut menunjukkan cara memasang ConfigMap sebagai volume:
import datetime
from airflow import models
from kubernetes.client import models as k8s
from airflow.providers.cncf.kubernetes.operators.pod import KubernetesPodOperator
volume_mount = k8s.V1VolumeMount(name='confmap-example',
mount_path='/config',
sub_path=None,
read_only=False)
volume = k8s.V1Volume(name='confmap-example',
config_map=k8s.V1ConfigMapVolumeSource(name='example-configmap'))
with models.DAG(
dag_id="composer_kubernetes_pod_configmap",
schedule_interval=None,
start_date=datetime.datetime(2024, 1, 1),
) as dag:
KubernetesPodOperator(
task_id='kpo_configmap_volume_mount',
image='busybox:1.28',
cmds=['sh'],
arguments=[
'-c',
'ls /config'
],
volumes=[volume],
volume_mounts=[volume_mount],
configmaps=["example-configmap"],
config_file="/home/airflow/composer_kube_config",
)
Informasi tentang Penyedia Kubernetes CNCF
KubernetesPodOperator diimplementasikan di
penyedia apache-airflow-providers-cncf-kubernetes
.
Untuk mengetahui catatan rilis mendetail bagi penyedia Kubernetes CNCF, lihat situs Penyedia Kubernetes CNCF.
Pemecahan masalah
Bagian ini memberikan saran untuk memecahkan masalah KubernetesPodOperator umum:
Lihat log
Saat memecahkan masalah, Anda dapat memeriksa log dalam urutan berikut:
Log Tugas Airflow:
Di konsol Google Cloud, buka halaman Environments.
Di daftar lingkungan, klik nama lingkungan Anda. Halaman Environment details akan terbuka.
Buka tab DAG.
Klik nama DAG, lalu klik operasi DAG untuk melihat detail dan log.
Log penjadwal Airflow:
Buka halaman Detail lingkungan.
Buka tab Logs.
Periksa log penjadwal Airflow.
Log Workload Pengguna:
Buka halaman Detail lingkungan.
Buka tab Monitoring.
Pilih Beban Kerja Pengguna.
Periksa daftar workload yang dieksekusi. Anda dapat melihat log dan informasi penggunaan resource untuk setiap beban kerja.
Kode return bukan nol
Saat menggunakan KubernetesPodOperator (dan GKEStartPodOperator), kode yang ditampilkan dari titik entri penampung menentukan apakah tugas dianggap berhasil atau tidak. Kode return yang bukan nol menunjukkan kegagalan.
Pola umum adalah menjalankan skrip shell sebagai titik entri penampung untuk menggabungkan beberapa operasi dalam penampung.
Jika Anda menulis skrip tersebut, sebaiknya sertakan
perintah set -e
di bagian atas skrip sehingga perintah yang gagal dalam skrip
akan menghentikan skrip dan menyebarkan kegagalan ke instance tugas Airflow.
Waktu tunggu pod
Waktu tunggu default untuk KubernetesPodOperator adalah 120 detik, yang
dapat menyebabkan waktu tunggu terjadi sebelum download image yang lebih besar. Anda dapat meningkatkan waktu tunggu dengan mengubah parameter startup_timeout_seconds
saat membuat KubernetesPodOperator.
Jika Pod habis waktunya, log khusus tugas akan tersedia di UI Airflow. Contoh:
Executing <Task(KubernetesPodOperator): ex-all-configs> on 2018-07-23 19:06:58.133811
Running: ['bash', '-c', u'airflow run kubernetes-pod-example ex-all-configs 2018-07-23T19:06:58.133811 --job_id 726 --raw -sd DAGS_FOLDER/kubernetes_pod_operator_sample.py']
Event: pod-name-9a8e9d06 had an event of type Pending
...
...
Event: pod-name-9a8e9d06 had an event of type Pending
Traceback (most recent call last):
File "/usr/local/bin/airflow", line 27, in <module>
args.func(args)
File "/usr/local/lib/python2.7/site-packages/airflow/bin/cli.py", line 392, in run
pool=args.pool,
File "/usr/local/lib/python2.7/site-packages/airflow/utils/db.py", line 50, in wrapper
result = func(*args, **kwargs)
File "/usr/local/lib/python2.7/site-packages/airflow/models.py", line 1492, in _run_raw_task
result = task_copy.execute(context=context)
File "/usr/local/lib/python2.7/site-packages/airflow/contrib/operators/kubernetes_pod_operator.py", line 123, in execute
raise AirflowException('Pod Launching failed: {error}'.format(error=ex))
airflow.exceptions.AirflowException: Pod Launching failed: Pod took too long to start
Waktu tunggu Pod juga dapat terjadi saat Akun Layanan Cloud Composer tidak memiliki izin IAM yang diperlukan untuk melakukan tugas yang sedang dilakukan. Untuk memverifikasinya, lihat error tingkat Pod menggunakan Dasbor GKE untuk melihat log Workload tertentu, atau gunakan Cloud Logging.