Menggunakan kontainer Windows HostProcess
Kontainer HostProcess / Privileged memperluas model kontainer Windows untuk mengaktifkan berbagai skenario manajemen kluster Kubernetes. Kontainer HostProcess berjalan langsung di host dan mempertahankan perilaku dan akses yang mirip dengan proses reguler. Kontainer HostProcess memungkinkan pengguna untuk mengemas dan mendistribusikan operasi dan fungsionalitas manajemen yang memerlukan akses host sekaligus mempertahankan metode penerapan versi dan penyebaran yang disediakan oleh kontainer.
DaemonSet hak istimewa dapat melakukan perubahan atau memantau host Linux di Kubernetes tetapi tidak host Windows. Kontainer HostProcess adalah elevasi host setara Windows.
- Kontainer HostProcess memerlukan Kubernetes 1.23 atau yang lebih tinggi.
- Kontainer HostProcess memerlukan runtime kontainer
containerd
1.6 atau lebih tinggi. - Pod HostProcess hanya dapat berisi kontainer HostProcess karena batasan pada sistem operasi Windows. Kontainer Windows non-hak istimewa tidak dapat berbagi vNIC dengan namespace layanan IP host.
- Kontainer HostProcess berjalan sebagai proses di host. Satu-satunya isolasi yang dimiliki kontainer dari host adalah batasan sumber daya yang diberlakukan pada akun pengguna HostProcess.
- Isolasi Filesystem dan isolasi Hyper-V tidak didukung untuk kontainer HostProcess.
- Pemasangan volume didukung dan dipasang di bawah volume kontainer. Lihat Pemasangan Volume.
- Serangkaian akun pengguna host terbatas tersedia untuk kontainer HostProcess secara default. Lihat Memilih Akun Pengguna.
- Batas sumber daya seperti disk, memori, dan jumlah CPU, bekerja seperti halnya proses di host.
- Pemasangan pipa bernama dan soket domain Unix tidak didukung secara langsung, tetapi dapat diakses di jalur host mereka, misalnya
\\.\pipe\*
.
Untuk menggunakan fitur HostProcess dengan penyebaran Anda, atur hostProcess: true dan hostNetwork: true: true:
spec:
...
securityContext:
windowsOptions:
hostProcess: true
...
hostNetwork: true
containers:
...
Untuk menjalankan contoh beban kerja yang menggunakan fitur HostProcess pada kluster AKS yang ada dengan simpul Windows, buat hostprocess.yaml
dengan konten berikut:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: privileged-daemonset
namespace: kube-system
labels:
app: privileged-daemonset
spec:
selector:
matchLabels:
app: privileged-daemonset
template:
metadata:
labels:
app: privileged-daemonset
spec:
nodeSelector:
kubernetes.io/os: windows
securityContext:
windowsOptions:
hostProcess: true
runAsUserName: "NT AUTHORITY\\SYSTEM"
hostNetwork: true
containers:
- name: powershell
image: mcr.microsoft.com/powershell:lts-nanoserver-1809 # or lts-nanoserver-ltsc2022
command:
- powershell.exe
- -Command
- Start-Sleep -Seconds 2147483
terminationGracePeriodSeconds: 0
Gunakan kubectl
untuk menjalankan contoh beban kerja:
kubectl apply -f hostprocess.yaml
Anda akan menemukan output berikut:
$ kubectl apply -f hostprocess.yaml
daemonset.apps/privileged-daemonset created
Verifikasi bahwa beban kerja Anda menggunakan fitur kontainer HostProcess dengan melihat log pod.
Gunakan kubectl
untuk menemukan nama pod di namespace layanan kube-system
.
$ kubectl get pods --namespace kube-system
NAME READY STATUS RESTARTS AGE
...
privileged-daemonset-12345 1/1 Running 0 2m13s
Gunakan kubectl log
untuk melihat log pod dan pastikan pod memiliki hak administrator:
$ kubectl logs privileged-daemonset-12345 --namespace kube-system
InvalidOperation: Unable to find type [Security.Principal.WindowsPrincipal].
Process has admin rights:
Untuk informasi selengkapnya tentang kontainer HostProcess dan kontribusi Microsoft ke kubernetes upstream, lihat Alpha di v1.22: Windows HostProcess Containers.
Umpan balik Azure Kubernetes Service
Azure Kubernetes Service adalah proyek sumber terbuka. Pilih tautan untuk memberikan umpan balik: