Pada hari -hari awal itu, kami mengonfigurasi server secara manual – masing -masing kepingan salju yang berharga, dipelihara dengan penuh kasih dan didokumentasikan. Tetapi ukuran infrastruktur tumbuh, dan pendekatan ini tidak bisa skala. Chef dan Puppet mempopulerkan gagasan infrastruktur-sebagai-kode: Insinyur akan menentukan keadaan mesin dalam file teks, disimpan dalam git-karena itu namanya. Node global akan membaca file -file ini untuk membuat registri. Kemudian, agen lokal pada setiap mesin akan memeriksa keadaan yang diinginkan secara berkala dan mendamaikan keadaan saat ini dengan registri.
Generasi pertama infrastruktur-sebagai-kode mengelola keadaan mesin yang ada tetapi menganggap mesin itu sudah ada. Migrasi ke cloud menciptakan masalah lain: Bagaimana Anda membuat mesin di tempat pertama? Alat IAC lainnya muncul dalam bentuk terraform Hashicorp. Terraform datang dengan bahasa deskriptif sepenuhnya, dengan tepat bernama bahasa Terraform.
Namun, itu tidak menawarkan pendaftaran pusat, dan Anda perlu menjalankan perintah untuk mendamaikan keadaan yang diinginkan dengan keadaan saat ini. Terraform sukses besar. Ketika Hashicorp menjauh dari lisensi sumber terbuka murni, komunitas itu membayar dan membaptisnya OpenTofu. Selain itu, IBM baru -baru ini mengakuisisi Hashicorp.
Terraform bukan tanpa masalah. Beberapa merasa bahwa bahasa konfigurasi deskriptif membatasi. Pulumi menawarkan untuk menggambarkan infrastruktur dalam beberapa bahasa pemrograman yang ada, misalnyaPython, Javascript, dan Kotlin. Alih -alih mengulangi sepuluh baris konfigurasi dengan hanya satu parameter yang diubah, Anda dapat menulis fungsi dan loop.
Masalah lain adalah kurangnya registri pusat dan koreksi penyimpangan otomatis. Dalam lanskap teknologi saat ini, alat mana yang menawarkan fitur seperti itu? Kubernet! Sangat masuk akal untuk menggunakan Kubernetes untuk mengatasi batas Terraform; Itulah pendekatan Crossplane dengan Upbound.
Saya sedang mengerjakan Kubernetes hari ini. Baru-baru ini, saya menulis serangkaian tentang bagaimana seseorang dapat merancang pipa pengujian penuh yang menargetkan mesin Google Kubernetes. Bagian kedua menyebutkan membuat instance mesin Google Kubernetes dalam konteks alur kerja GitHub. Dalam posting ini, saya ingin menilai crossplane dengan membuat contoh seperti itu.
Tampaknya aneh bahwa membuat kluster Kubernetes baru, orang membutuhkan kluster Kubernetes. Saya akui kasus penggunaan saya agak aneh, tetapi saya pikir jika saya dapat mencapai kasus tepi ini, saya dapat mencapai lebih banyak nominal.
Crossplane 101
Crossplane seperti mesin, menggunakan registri Kubernetes dan rekonsiliasi perilaku untuk mengelola sumber daya. Sumber daya termasuk hampir semua hal: sumber daya cloud, proyek gitub, dan organisasi, terraform (!), Atau tumpukan perangkat lunak, seperti kafka dan keycloak, dll. Secara default, tidak tahu tentang sumber daya ini, tetapi Anda dapat memperluas kemampuannya melalui paket. Paket ada dua jenis:
- Konfigurasi Paket: Paket konfigurasi mendefinisikan abstraksi tingkat lebih tinggi atas objek Kubernetes. Anda mungkin telah memperhatikan bahwa menggunakan aplikasi di Kubernete mengikuti pola yang sama: Tentukan a
Deployment
(atau objek lain yang relevan) dan aService
. Dalam kebanyakan kasus, Anda lebih suka menawarkan satuApplication
Abstraksi untuk pengembang. Crossplane memungkinkan Anda untuk menyusun objek untuk membuat abstraksi dan mengirimkannya dalam paket konfigurasi.
-
Penyedia: Penyedia terintegrasi dengan sistem pihak ketiga, apakah penyedia cloud atau sistem lainnya. Misalnya, CrossPlane menawarkan penyedia platform cloud Google. Crossplane menawarkan tiga kategori penyedia:
-
Resmi, dikembangkan, dan didukung oleh Upbound
-
Pasangan, dikembangkan oleh pihak ketiga
-
Komunitas, dikembangkan oleh komunitas secara umum
Upbound menawarkan penyedia untuk hiperscaler utama, sementara komunitas telah menciptakan pasangan untuk yang lebih kecil, misalnyaSkaleway atau ovh.
-
Langkah Pertama dengan Crossplane
Langkah pertama adalah menginstal crossplane itu sendiri. Saya menggunakan grafik helm sederhana dengan konfigurasi default. Saya mengikuti saran untuk menginstalnya di namespace khususnya, crossplane-system
.
helm repo add crossplane-stable https://charts.crossplane.io/stable
helm repo update
helm install crossplane --create-namespace --namespace crossplane-system crossplane-stable/crossplane
Anda harus melihat dua polong berjalan di crossplane-system
Namespace:
NAME READY STATUS RESTARTS AGE
crossplane-6f88554645-b2xng 1/1 Running 1 (1h ago) 1h
crossplane-rbac-manager-75bc66d6b7-8p2fh 1/1 Running 1 (1h ago) 1h
Kami sekarang siap untuk memulai pekerjaan nyata. Kami menargetkan Google Cloud Platform, karenanya, kami perlu menginstal penyedia GCP. Marketplace menawarkan banyak penyedia yang tersedia. Tantangan pertama adalah menemukan salah satu yang berisi abstraksi yang ingin kami buat. Karena kami ingin membuat a Cluster
kita membutuhkan penyedia-gcp-container.
Cluster adalah skema untuk API cluster. Membuat cluster Google Kubernetes Engine (GKE).
– Sumber Daya yang dikelola cluster
Kami membuat a Provider
Objek yang menunjuk ke paket penyedia:
apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
name: provider-gcp #1
spec:
package: xpkg.upbound.io/upbound/provider-gcp-container:v1 #2
- Penyedia adalah cluster-wide.
- Upbound membutuhkan langganan berbayar untuk versi tertentu. Karena saya tidak memilikinya, saya hanya bisa menggunakan versi utama, dengan semua masalah stabilitas yang menyertainya.
Kami dapat membuat daftar penyedia yang diinstal:
kubectl get providers
Hasilnya seharusnya terlihat seperti berikut:
NAME INSTALLED HEALTHY PACKAGE AGE
provider-gcp True True xpkg.upbound.io/upbound/provider-gcp-container:v1 28m
upbound-provider-family-gcp True True xpkg.upbound.io/upbound/provider-family-gcp:v1.12.1 28m
Pada tahap ini, kita dapat mengelola instance GKE dengan crossplane.
Google menawarkan beberapa cara untuk mengotentikasi. Di sini, saya akan menggunakan kredensial JSON langsung yang terkait dengan akun layanan. Dapatkan JSON dari Google Cloud Console, lalu impor sebagai rahasia di Kubernetes:
kubectl create secret generic gcp-creds -n crossplane-system --from-file=creds=./gcp-credentials.json
Dalam model crossplane, a Provider
Objek bersifat generik dan relevan dengan satu penyedia. Di sisi lain, a ProviderConfig
relevan dengan suatu proyek, termasuk kredensialnya.
apiVersion: gcp.upbound.io/v1beta1
kind: ProviderConfig
metadata:
name: gcp-provider
spec:
projectID: xplane-demo #1
credentials:
source: Secret
secretRef: #2
namespace: crossplane-system
name: gcp-creds
key: credentials.json
- ID Proyek yang ingin kami kelola sumber daya.
- Referensi ke rahasia yang dibuat sebelumnya yang berisi kredensial yang diperlukan.
Langkah terakhir terdiri dari menciptakan cluster. Saya mencoba mengatur konfigurasi yang sama seperti pada baris perintah dari posting asli, tetapi saya harus mengakui bahwa saya tidak dapat memetakan setiap opsi.
apiVersion: container.gcp.upbound.io/v1beta1
kind: Cluster
metadata:
name: minimal-cluster
spec:
forProvider:
initialNodeCount: 1 #1
location: europe-west9 #1
nodeLocations: [ "europe-west9-a" ] #1
network: projects/xplane-demo/global/networks/default #1
subnetwork: projects/xplane-demo/regions/europe-west9/subnetworks/default #1
ipAllocationPolicy:
- clusterIpv4CidrBlock: "/17" #1
resourceLabels:
provisioner: crossplane #2
providerConfigRef:
name: gcp-provider #3
writeConnectionSecretToRef: #4
namespace: default
name: kubeconfig
- Parameter yang sama seperti di baris perintah
- Tetapkan label untuk mendokumentasikan siapa manajer sumber daya. Tergantung pada konteks Anda, Anda dapat menambahkan lebih banyak, misalnya,
environment
- Nama
ProviderConfig
Kami dibuat di atas - Menulis
kubeconfig
untuk terhubung ke GKE yang dibuat
Anda dapat mengikuti pembuatan cluster GKE baik di google cloud console dan via kubectl
.
kubectl get cluster
Kita dapat melihat di sini bahwa cluster belum siap:
NAME SYNCED READY EXTERNAL-NAME AGE
minimal-cluster True False minimal-cluster 2m46s
Kita bisa menggunakan kubeconfig
Secret
Crossplane yang dibuat bersama dengan Cluster
untuk terhubung ke yang terakhir. Pertama, mari kita buang Secret
Nilai ke file:
kubectl get secret kubeconfig -o jsonpath="{.data.kubeconfig}" | base64 --decode > kube.config
Pada titik ini, kami dapat menggunakannya untuk mengirim permintaan ke yang baru dibuat Cluster
:
kubectl --kubeconfig ./kube.config get pods
Untuk menghapus instance GKE, itu cukup untuk menghapus lokal Cluster
. Kubernetes dan crossplane akan mengurus pengiriman DELETE
Permintaan ke Google Cloud.
kubectl delete cluster.container.gcp.upbound.io minimal-cluster
Perintah ini sinkron: Anda tidak akan mendapatkan prompt kembali sampai instance GKE dihapus.
Dalam posting ini, saya menggunakan crossplane untuk membuat cluster GKE sederhana. Menggunakan Kubernetes untuk registri dan perilaku rekonsiliasi sangat cerdik. Tentu saja, crossplane sama baiknya dengan jumlah integrasi yang ditawarkannya. Saat ini, ia sudah dapat mengelola semua hiperscaler utama, ditambah beberapa yang lebih kecil.
Untuk melangkah lebih jauh:
Awalnya diterbitkan di java geek pada 4 Mei 2025