Langkah Pertama Saya Dengan Crossplane: Crossplane 101

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 a Service. Dalam kebanyakan kasus, Anda lebih suka menawarkan satu Application 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 Clusterkita 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
  1. Penyedia adalah cluster-wide.
  2. 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
  1. ID Proyek yang ingin kami kelola sumber daya.
  2. 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
  1. Parameter yang sama seperti di baris perintah
  2. Tetapkan label untuk mendokumentasikan siapa manajer sumber daya. Tergantung pada konteks Anda, Anda dapat menambahkan lebih banyak, misalnya, environment
  3. Nama ProviderConfig Kami dibuat di atas
  4. 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