digitalocean-cloud-controller-manager
adalah implementasi Cloud Controller Manager Kubernetes untuk Digitalocean. Baca lebih lanjut tentang manajer pengontrol cloud di sini. Menjalankan digitalocean-cloud-controller-manager
memungkinkan Anda untuk memanfaatkan banyak fitur penyedia cloud yang ditawarkan oleh Digitalocean pada kluster Kubernetes Anda.
Cloud Controller Manager mengikuti versi semantik. Meskipun versinya masih di bawah V1, proyek ini dianggap siap produksi.
Karena siklus pelepasan Kubernet yang cepat, CCM (Cloud Controller Manager) hanya akan mendukung versi yang juga didukung pada produk Digitalocean Kubernetes. Rilis lain tidak akan secara resmi didukung oleh kami.
Pelajari lebih lanjut tentang menjalankan DigitalOcean Cloud Controller Manager di sini!
Perhatikan bahwa CCM ini diinstal secara default pada DOKS (Digitalocean dikelola Kubernetes), Anda tidak perlu melakukannya sendiri.
Berikut adalah beberapa contoh bagaimana Anda dapat memanfaatkan digitalocean-cloud-controller-manager
:
Saat Anda membuat balancer beban melalui CCM (melalui layanan yang dimedulasikan LoadBalancer
), sangat penting bagi Anda untuk tidak mengubah konfigurasi Do Load-Balancer secara manual. Perubahan seperti itu pada akhirnya akan dikembalikan oleh loop rekonsiliasi yang dibangun ke dalam CCM. Ada satu pengecualian dalam nama balancer beban yang dapat diubah (lihat juga dokumentasi anotasi ID Balancer Load-Balancer).
Selain itu, satu-satunya tempat yang aman untuk membuat perubahan konfigurasi load-balancer adalah melalui objek layanan.
Untuk alasan teknis, port 50053, 50054, dan 50055 tidak dapat digunakan sebagai port entri balancer beban (yaitu, port yang didengarkan oleh balancer beban untuk permintaan). Mencoba menggunakan salah satu port yang terkena dampak sebagai port layanan menyebabkan port entri 422 tidak valid respons kesalahan HTTP dikembalikan oleh DO API (dan muncul sebagai acara Kubernetes).
Solusinya adalah mengubah port layanan menjadi yang berbeda, tidak bertentangan.
v1.17.x
Proyek ini menggunakan modul GO untuk manajemen ketergantungan dan menggunakan vendoring. Harap pastikan untuk menjalankan make vendor
setelah modifikasi ketergantungan apa pun.
Setelah membuat perubahan kode Anda, jalankan tes dan cek CI:
make ci
Jika Anda ingin menjalankan digitalocean-cloud-controller-manager
secara lokal terhadap cluster tertentu, siapkan KubeConfig Anda dan mulai biner di direktori yang dihosting paket utama seperti ini:
cd cloud-controller-manager/cmd/digitalocean-cloud-controller-manager
REGION=fra1 DO_ACCESS_TOKEN=your_access_token go run main.go
--kubeconfig < path to your kubeconfig file >
--leader-elect=false --v=5 --cloud-provider=digitalocean
Variabel lingkungan REGION
mengambil wilayah DigitalOcean yang valid. Ini dapat diatur untuk menjaga digitalocean-cloud-controller-manager
dari mencoba mengakses layanan metadata DigitalOcean yang hanya tersedia di tetesan. Jika variabel wilayah ditetapkan, maka Layanan DO Wilayah akan digunakan untuk memvalidasi wilayah yang ditentukan. Ini juga dapat ditetapkan untuk tujuan pengembangan lokal. Secara keseluruhan, wilayah mana yang Anda pilih seharusnya tidak terlalu penting selama Anda memilih satu.
Anda mungkin juga perlu memberikan token akses DigitalOcean Anda di variabel lingkungan DO_ACCESS_TOKEN
. Token tidak perlu valid untuk cloud controller untuk memulai, tetapi dalam hal ini, Anda tidak akan dapat memvalidasi integrasi dengan API Digitalocean.
Harap dicatat bahwa jika Anda menggunakan kluster Kubernetes yang dibuat di DigitalOcean, akan ada manajer pengontrol cloud yang sudah berjalan di cluster, jadi yang lokal Anda akan bersaing untuk akses API dengannya.
Anda dapat memiliki digitalocean-cloud-controller-manager
mengelola firewall Digitalocean yang secara dinamis akan menyesuaikan aturan untuk mengakses nodeport: Setelah layanan tipe NodePort
dibuat, pengontrol firewall akan memperbarui firewall ke publik memungkinkan akses ke nodeport itu. Demikian juga, akses secara otomatis ditarik kembali jika layanan dihapus atau diubah ke jenis yang berbeda.
Contoh Doa:
cd cloud-controller-manager/cmd/digitalocean-cloud-controller-manager
DO_ACCESS_TOKEN= < your_access_token >
PUBLIC_ACCESS_FIREWALL_NAME=firewall_name
PUBLIC_ACCESS_FIREWALL_TAGS=worker-droplet
digitalocean-cloud-controller-manager
--kubeconfig < path to your kubeconfig file >
--leader-elect=false --v=5 --cloud-provider=digitalocean
Variabel lingkungan PUBLIC_ACCESS_FIREWALL_NAME
mendefinisikan nama firewall. Firewall dibuat jika tidak ada firewall dengan nama itu ditemukan.
Variabel lingkungan PUBLIC_ACCESS_FIREWALL_TAGS
mengacu pada tag yang terkait dengan tetesan yang harus diterapkan oleh firewall. Biasanya, ini adalah tag yang terpasang pada tetesan simpul pekerja. Beberapa tag diterapkan secara logis atau mode.
Dalam beberapa kasus, manajemen firewall untuk layanan tertentu mungkin tidak diinginkan. Salah satu contohnya adalah bahwa nodeport seharusnya hanya dapat diakses lebih dari VPC. Dalam kasus seperti itu, anotasi layanan kubernetes.digitalocean.com/firewall-managed
dapat digunakan untuk secara selektif mengecualikan layanan yang diberikan dari manajemen firewall. Jika diatur ke "false"
, tidak ada aturan masuk yang akan dibuat untuk layanan, secara efektif menonaktifkan akses publik ke Nodeport. (Perhatikan kutipan yang harus disertakan dengan nilai anotasi "boolean".) Perilaku default berlaku jika anotasi dihilangkan, diatur ke "true
", atau berisi nilai yang tidak valid.
Tidak ada firewall yang dikelola jika variabel lingkungan hilang atau dibiarkan kosong. Setelah firewall dibuat, tidak ada akses publik selain ke nodeports diizinkan. Pengguna harus membuat firewall tambahan untuk memperluas akses lebih lanjut.
Jika Anda tertarik untuk mengekspos metrik Prometheus, Anda dapat melewati titik akhir metrik yang akan mengeksposnya. Perintah akan terlihat mirip dengan ini:
cd cloud-controller-manager/cmd/digitalocean-cloud-controller-manager
DO_ACCESS_TOKEN=your_access_token
METRICS_ADDR= < host > : < port >
digitalocean-cloud-controller-manager
--kubeconfig < path to your kubeconfig file >
--leader-elect=false --v=5 --cloud-provider=digitalocean
Variabel lingkungan METRICS_ADDR
mengambil titik akhir yang valid yang ingin Anda gunakan untuk melayani metrik Prometheus Anda. Agar valid, itu harus ada dalam formulir <host>:<port>
.
Setelah Anda memulai digitalocean-cloud-controller-manager
, jalankan perintah CURL berikut untuk melihat output metrik Prometheus:
curl < host > : < port > /metrics
Server penerimaan adalah komponen opsional yang bertujuan mengurangi perubahan konfigurasi yang buruk untuk objek yang dikelola (lbs, dll). Jika Anda ingin tahu lebih banyak tentang itu, baca dokumen.
Do API Penggunaan tunduk pada batas tingkat tertentu. Untuk melindungi dari kehabisan kuota untuk penggunaan atau kasus patologis yang sangat berat (misalnya, bug atau API meronta-ronta karena pengontrol pihak ketiga yang mengganggu), batas tarif khusus dapat dikonfigurasi melalui variabel lingkungan DO_API_RATE_LIMIT_QPS
. Ia menerima nilai float, misalnya, DO_API_RATE_LIMIT_QPS=3.5
untuk membatasi penggunaan API menjadi 3,5 kueri per detik.
Jika Anda ingin menguji perubahan Anda di lingkungan yang dimasukkan, buat gambar baru dengan versi yang disetel ke dev
:
VERSION=dev make publish
Ini akan membuat biner dengan gambar versi dev
dan docker yang didorong ke digitalocean/digitalocean-cloud-controller-manager:dev
.
go get -u ./...
go mod tidy
go mod vendor
Untuk membuat gambar Docker dan menghasilkan manifes, buka halaman Tindakan di GitHub dan klik "Jalankan alur kerja". Tentukan github <tag>
yang ingin Anda buat, pastikan itu diawali dengan v
Menjalankan alur kerja juga mengharuskan Anda untuk sementara mematikan "memerlukan permintaan tarik sebelum menggabungkan" pengaturan aturan aturan perlindungan cabang master. Jangan lupa untuk menyalakannya kembali setelah rilis selesai!
Alur kerja melakukan hal berikut:
make bump-version
dengan <tag>
<tag>.yaml
releases/
direktori di repo<tag>
yang ditentukan saat alur kerja dipicudigitalocean/digitalocean-cloud-controller-manager:<tag>
digitalocean/digitalocean-cloud-controller-manager:<tag>
ke DockerhubCATATAN: Alur kerja ini sudah usang, silakan lebih suka alur kerja aksi GitHub yang dijelaskan di atas.
Untuk merilis versi baru secara manual, tabrakan versi pertama:
make NEW_VERSION=v1.0.0 bump-version
Pastikan semuanya terlihat bagus. Buat cabang baru dengan semua perubahan:
git checkout -b release- < new version > origin/master
git commit -a -v
git push origin release- < new version >
Setelah bergabung untuk menguasai, beri tag komit dan dorong:
git checkout master
git pull
git tag < new version >
git push origin < new version >
Akhirnya, buat rilis github dari master dengan versi baru dan publikasikan:
make publish
Ini akan mengkompilasi biner yang berisi versi baru yang dibundel dalam gambar Docker yang didorong ke digitalocean/digitalocean-cloud-controller-manager:<new version>
Di Digitalocean kami menghargai dan mencintai komunitas kami! Jika Anda memiliki masalah atau ingin berkontribusi, jangan ragu untuk membuka masalah/PR dan CC salah satu pengelola di bawah ini.