Ringkasan
Dokumen ini menunjukkan cara men-deploy daemonset istimewa di setiap node GKE di VMware untuk memodifikasi parameter kubelet guna menonaktifkan port hanya baca.
Prasyarat
Pastikan GKE Anda di VMware responsif sebelum menjalankan skrip patch berikut. Solusi ini dapat digunakan untuk mem-patch cluster admin dan cluster pengguna. Platform ini juga harus berfungsi untuk semua GKE pada versi VMware.
Simpan YAML Daemonset berikut ke file lokal Anda (misalnya patch.yaml)
apiVersion: apps/v1 kind: DaemonSet metadata: name: onprem-node-patcher namespace: kube-system spec: selector: matchLabels: name: onprem-node-patcher updateStrategy: type: RollingUpdate template: metadata: labels: name: onprem-node-patcher spec: tolerations: - operator: Exists volumes: - name: host hostPath: path: / hostPID: true initContainers: - name: read-only-patcher image: "ubuntu" env: - name: KUBELET_READONLY_PORT value: "0" # Number of 1G hugepages. Update the value as desired. command: - /bin/bash - -c - | set -xeuo pipefail configfile="/host/var/lib/kubelet/config.yaml" kubeletservice="/host/etc/systemd/system/kubelet.service" # $1: The read-only port for the kubelet to serve on with no # authentication/authorization (set to 0 to disable) function set-readonly-port-in-config() { [[ "$#" -eq 1 ]] || return local readonlyport; readonlyport="$1" local actual; actual="$(grep readOnlyPort "${configfile}")" if [[ "${actual}" == "" ]]; then echo "readOnlyPort: ${readonlyport}" >> "${configfile}" else sed -E -i 's/readOnlyPort: [0-9]+/readOnlyPort: 0/g' ${configfile} fi echo "Successfully append readOnlyPort: ${readonlyport} to ${configfile}" } sed -E -i 's/--read-only-port=[0-9]+/--read-only-port='"${KUBELET_READONLY_PORT}"'/g' ${kubeletservice} [[ -f ${configfile} ]] && set-readonly-port-in-config "${KUBELET_READONLY_PORT}" echo "Restarting kubelet..." chroot /host nsenter -a -t1 -- systemctl daemon-reload chroot /host nsenter -a -t1 -- systemctl restart kubelet.service echo "Success!" volumeMounts: - name: host mountPath: /host resources: requests: memory: 5Mi cpu: 5m securityContext: privileged: true containers: - image: gcr.io/google-containers/pause:3.2 name: pause # Ensures that the pods will only run on the nodes having the correct # label. nodeSelector: "kubernetes.io/os": "linux"
Patch pada cluster admin
kubectl apply -f patch.yaml \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
Patch pada cluster pengguna
kubectl apply -f patch.yaml \ --kubeconfig USER_CLUSTER_KUBECONFIG
Pulihkan
Untuk mengaktifkan kembali port hanya baca, edit variabel lingkungan
KUBELET_READONLY_PORT
secara manual di YAML Daemonset.Setelah Anda menyimpan perubahan, daemonset akan dijalankan kembali untuk mengubah kubelet sebagaimana mestinya.
Peringatan
Patch ini memiliki siklus proses yang sama dengan aplikasi pihak ketiga yang Anda instal. Anda dapat menjalankannya kapan saja sebagai operasi hari ke-2. Tetapi error mungkin tidak bertahan setelah Anda membuat ulang cluster. Agar perubahan ini persisten, deploy daemonset ini sebagai langkah di GKE pada tindakan pasca-inisialisasi VMware.
Setelah berjalan sekali, file konfigurasi Kubelet harus diubah dan dimuat ulang. Anda dapat menjalankan
kubectl delete -f patch.yaml
dengan aman untuk membersihkan resource daemonset.Anthos yang berjalan di Windows saat ini tidak mendukung patch ini.
Metrik berikut hilang untuk versi cluster 1.13 dan yang lebih lama: