Halaman ini menjelaskan cara mengatur konfigurasi dalam sumber tepercaya.
Seiring berkembangnya organisasi Anda, Anda mungkin perlu mengelola konfigurasi di seluruh fleet cluster dan mendukung beberapa tim yang bekerja di repositori yang sama. Bagian penting dari strategi GitOps yang berhasil adalah memastikan bahwa konfigurasi diterapkan ke cluster yang benar dan tim dapat bekerja tanpa saling mengganggu.
Tentang file konfigurasi
Config Sync dirancang untuk operator cluster yang mengelola banyak cluster. Anda dapat memastikan bahwa cluster Anda memenuhi standar bisnis dan kepatuhan dengan mengizinkan Config Sync mengelola namespace, Role, RoleBinding, ResourceQuota, dan objek Kubernetes penting lainnya, di seluruh armada Anda.
Saat mengelola resource ini, Config Sync akan menjaga cluster terdaftar Anda tetap sinkron menggunakan konfigurasi. Konfigurasi adalah file YAML atau JSON di sumber
tepercaya. Config Sync mendukung repositori Git, image OCI, dan diagram Helm
sebagai sumber tepercaya. Konfigurasi
berisi jenis detail konfigurasi yang sama yang dapat Anda
terapkan secara manual ke cluster menggunakan perintah kubectl apply. Anda dapat membuat
konfigurasi untuk objek Kubernetes apa pun yang dapat ada dalam cluster. Namun, beberapa objek Kubernetes, seperti Secret, berisi informasi sensitif yang mungkin tidak sesuai untuk disimpan dalam sumber tepercaya. Pertimbangkan dengan cermat apakah akan mengelola jenis objek ini menggunakan Config Sync.
Persyaratan dan batasan
Beberapa resource Kubernetes berisi kolom yang tidak dapat diubah, seperti pemilih Pod dalam objek Deployment. Anda tidak dapat mengubah kolom yang tidak dapat diubah dalam konfigurasi dengan mengubah nilai dalam sumber tepercaya. Mencoba melakukan perubahan tersebut akan menyebabkan error
KNV2009. Jika Anda perlu mengubah kolom yang tidak dapat diubah, hapus objek dari sumber tepercaya Anda, tunggu hingga Config Sync menghapus objek dari cluster, lalu buat ulang objek di sumber tepercaya Anda dengan pembaruan Anda.Jika Anda menggunakan submodul Git, Anda harus memberi akses Config Sync ke semua repositori, termasuk submodul apa pun.
Anda tidak dapat menggunakan Config Sync untuk mengelola ClusterRole Kubernetes bawaan secara langsung. GKE dilengkapi dengan beberapa peran yang dapat diakses pengguna bawaan, seperti
cluster-admin,admin,edit, danview. Anda tidak dapat mengelola ClusterRole ini secara langsung dengan Config Sync, karena Config Sync akan berkonflik dengan GKE. Untuk menambahkan izin ke ClusterRole bawaan, gunakan penggabungan peran untuk mengubahnya secara tidak langsung. Untuk mengubah peran, buat ClusterRole dengan nama unik di sumber tepercaya Anda dengan anotasi yang sesuai.
Mengatur sumber tepercaya Anda
Anda dapat mengonfigurasi Config Sync untuk menyinkronkan dari seluruh repositori, atau dari folder atau cabang tertentu. Karena fleksibilitas ini, susun file konfigurasi Anda berdasarkan kebutuhan tim atau organisasi Anda.
Sebaiknya saat mengonfigurasi Config Sync, Anda menetapkan sourceFormat
ke unstructured. Jenis sumber terstruktur (hierarkis) memerlukan struktur folder yang sangat spesifik agar dapat menyinkronkan konfigurasi Anda dengan benar dan menambahkan kompleksitas yang tidak perlu dalam sebagian besar kasus.
Sebagian besar dokumentasi Config Sync, termasuk halaman ini, menggunakan format tidak terstruktur secara default, tetapi Anda dapat menemukan informasi tentang format hierarkis, jika diperlukan, di Menggunakan repositori hierarkis.
Saat menggunakan sumber yang tidak terstruktur, Anda memiliki fleksibilitas untuk mengatur konfigurasi agar sesuai dengan alur kerja tim Anda. Bagian ini memberikan beberapa pola umum untuk menyusun repositori Anda.
Tata letak berbasis lingkungan
Pendekatan umum adalah mengatur repositori Anda berdasarkan lingkungan.
├── cluster-essentials/
│ ├── crds/
│ └── namespace.yaml
├── environments/
│ ├── dev/
│ │ ├── backend/
│ │ └── frontend/
│ ├── staging/
│ │ ├── backend/
│ │ └── frontend/
│ └── prod/
│ ├── backend/
│ └── frontend/
└── system/
└── monitoring/
Dalam contoh ini, sumber tepercaya disusun sebagai berikut:
cluster-essentials/: berisi konfigurasi yang berlaku untuk semua cluster, terlepas dari lingkungannya. Hal ini dapat mencakup resource seperti Definisi Resource Kustom (CRD) dan namespace penting.environments/: direktori induk untuk semua konfigurasi khusus lingkungan.system/: berisi konfigurasi untuk layanan tingkat sistem seperti pemantauan.
Pendekatan ini mudah dipahami dan dinavigasi serta memberikan jalur promosi yang jelas untuk perubahan dari satu lingkungan ke lingkungan lainnya.
Saat menyiapkan Config Sync dalam skenario ini, Anda akan membuat beberapa objek RootSync di setiap cluster. Misalnya, cluster pengembangan memiliki RootSync
objek yang disinkronkan dari cluster-essentials/, system/, dan environments/dev/.
Tata letak berbasis cluster
Jika fokus Anda adalah mengelola fleet cluster individual dengan konfigurasi yang berbeda, tata letak berbasis cluster mungkin lebih cocok.
├── clusters/
│ ├── cluster-a/
│ │ ├── apps/
│ │ └── networking/
│ ├── cluster-b/
│ │ ├── apps/
│ │ └── networking/
│ └── cluster-c/
│ ├── apps/
│ └── networking/
└── shared/
├── roles/
└── policies/
Dalam contoh ini, sumber tepercaya disusun sebagai berikut:
clusters/: berisi direktori untuk setiap cluster yang Anda kelola.shared/: menyimpan konfigurasi yang umum di semua cluster, seperti peran RBAC dan kebijakan keamanan.
Pendekatan ini efektif untuk mengelola banyak cluster jika semua cluster tersebut memiliki konfigurasi unik, karena memberikan kepemilikan dan isolasi konfigurasi yang jelas. Pendekatan ini bisa lebih rumit untuk dikelola jika Anda memiliki banyak konfigurasi cluster bersama.
Saat menyiapkan Config Sync dalam skenario ini, Anda dapat menggunakan RepoSync untuk mengonfigurasi setiap cluster agar disinkronkan dari shared dan direktori khusus cluster.
Tata letak berbasis tim
Untuk organisasi yang timnya berbeda-beda mengelola aplikasi atau layanan yang berbeda-beda, tata letak berbasis tim dapat efektif. Pendekatan ini menyelaraskan struktur sumber tepercaya dengan struktur organisasi Anda.
├── teams/
│ ├── team-alpha/
│ │ ├── app-one/
│ │ └── app-two/
│ ├── team-beta/
│ │ ├── service-a/
│ │ └── service-b/
│ └── team-gamma/
│ ├── data-pipeline/
│ └── dashboard/
└── platform/
├── cluster-roles/
└── storage-classes/
Dalam contoh ini, sumber tepercaya disusun dengan cara berikut:
teams/: mengatur konfigurasi menurut tim, dengan setiap tim mengelola konfigurasi aplikasi dan layanan mereka sendiri.platform/: berisi konfigurasi seluruh cluster yang dikelola oleh tim platform pusat dan digunakan oleh semua tim.
Pendekatan ini memungkinkan tim mengelola siklus rilis dan konfigurasi mereka sendiri serta mengurangi kemungkinan perubahan yang dilakukan satu tim memengaruhi tim lain secara tidak sengaja. Namun, pendekatan ini memerlukan pengelolaan dependensi yang cermat antara tim aplikasi dan tim platform.
Saat Anda menyiapkan Config Sync, untuk skenario ini, setiap tim
menggunakan objek RootSync untuk menyinkronkan konfigurasi, misalnya team-alpha menyinkronkan
dari teams/team-alpha/.
Memvalidasi file konfigurasi
Setelah membuat, mengatur, dan menambahkan file konfigurasi ke sumber kebenaran, gunakan
perintah nomos vet --source-format=unstructured
untuk memeriksa sintaks dan validitas konfigurasi Anda. Tindakan ini membantu Anda menghindari error
selama atau setelah sinkronisasi.
Mengabaikan mutasi objek
Jika Anda tidak ingin Config Sync mempertahankan status objek di cluster setelah objek tersebut ada, tambahkan anotasi client.lifecycle.config.k8s.io/mutation: ignore ke objek yang mutasinya ingin diabaikan oleh Config Sync.
Contoh berikut menunjukkan cara menambahkan anotasi ke objek:
metadata:
annotations:
client.lifecycle.config.k8s.io/mutation: ignore
Anda tidak dapat mengubah anotasi ini secara manual pada objek terkelola di cluster.
Mengonversi repositori hierarkis menjadi repositori tidak terstruktur
Jika Anda menggunakan repositori hierarkis dan ingin mengonversinya menjadi repositori tidak terstruktur, jalankan perintah berikut:
nomos hydrate PATH
Ganti PATH dengan jalur ke direktori Anda.
Perintah ini akan membuat direktori compiled/ di direktori kerja saat ini. Dalam
direktori tersebut, subdirektori dibuat untuk setiap cluster yang terdaftar. Subdirektori
ini berisi konfigurasi yang telah sepenuhnya diselesaikan dan dapat digunakan di repositori
yang tidak terstruktur.
Untuk mengetahui detail selengkapnya, lihat perintah nomos.
Jika Anda lebih suka mengonversi repositori secara manual, selesaikan petunjuk berikut:
Hapus konfigurasi
Repodi direktorisystem/dari repositori Git Anda. ResourceRepotidak diperlukan untuk repositori tidak terstruktur.Direktori namespace abstrak tidak didukung di repositori tidak terstruktur. Oleh karena itu, deklarasikan namespace semua resource yang awalnya disertakan dalam direktori
namespaces/dan subdirektorinya.Pewarisan namespace tidak didukung di repositori tidak terstruktur. Oleh karena itu, deklarasikan semua resource yang awalnya diwarisi di namespace turunan (yang awalnya berada di direktori
namespaces/).