Menyesuaikan penempatan node Pod sistem Config Sync

Dokumen ini menjelaskan cara mengonfigurasi penempatan node untuk Pod sistem Config Sync yang berjalan di cluster Anda. Mengonfigurasi penempatan node dapat berguna dalam situasi seperti mengisolasi Pod sistem Config Sync ke node tertentu untuk tujuan keamanan, atau menjadwalkan Config Sync di node yang lebih murah untuk tujuan penghematan biaya.

Tentang MutatingAdmissionPolicy

MutatingAdmissionPolicy adalah fitur Kubernetes yang tersedia di Kubernetes versi 1.34. Jika MutatingAdmissionPolicy tersedia di cluster Anda, Anda dapat menyesuaikan perilaku setiap kali seseorang menulis perubahan ke Kubernetes API.

Dalam konteks Config Sync, Anda dapat menggunakan MutatingAdmissionPolicy untuk menambahkan parameter penempatan node ke dalam Pod yang berjalan di namespace sistem Config Sync. Parameter ini mencakup kolom spesifikasi Pod seperti nodeSelector dan afinitas. Dokumen ini memberikan contoh cara menggunakan MutatingAdmissionPolicy dengan Config Sync, dan Anda dapat menemukan contoh lainnya di repositori open source Config Sync.

Menetapkan nodeSelector

Contoh berikut menunjukkan cara menggunakan MutatingAdmissionPolicy untuk menambahkan nodeSelector secara otomatis ke setiap Pod yang berjalan di setiap namespace sistem Config Sync dengan label configmanagement.gke.io/system: "true". Namespace sistem Config Sync mencakup config-management-system, config-management-monitoring, dan resource-group-system.

apiVersion: admissionregistration.k8s.io/v1beta1
kind: MutatingAdmissionPolicy
metadata:
  name: "my-pod-node-selector"
spec:
  matchConstraints:
    resourceRules:
    - apiGroups:   [""]
      apiVersions: ["v1"]
      operations:  ["CREATE", "UPDATE"]
      resources:   ["pods"]
  failurePolicy: Fail
  reinvocationPolicy: IfNeeded
  mutations:
  # Basic example of adding nodeSelector: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
  # Similar mutations can be applied for affinities, tolerations, and so on
  - patchType: "JSONPatch"
    jsonPatch:
      expression: >
        [
          JSONPatch{
            op: "add", path: "/spec/nodeSelector",
            value: {
              "LABEL_KEY": "LABEL_VALUE",
            }
          }
        ]
---
apiVersion: admissionregistration.k8s.io/v1beta1
kind: MutatingAdmissionPolicyBinding
metadata:
  name: "configsync-node-selector"
spec:
  policyName: "my-pod-node-selector"
  matchResources:
    namespaceSelector:
      matchLabels:
        # This namespace selector only selects Config Sync system namespaces
        configmanagement.gke.io/system: "true"
  • Ganti LABEL_KEY dengan kunci label yang akan digunakan oleh pemilih node.
  • Ganti LABEL_VALUE dengan nilai label yang akan digunakan oleh pemilih node.

Setelah menerapkan konfigurasi ini ke cluster, semua Pod sistem Config Sync dijadwalkan ke node dengan label LABEL_KEY=LABEL_VALUE.