استخدام حاويات Windows HostProcess

تقوم HostProcess / الحاويات المميزة بتوسيع نموذج حاوية Windows لتمكين مجموعة أوسع من سيناريوهات إدارة نظام مجموعة Kubernetes. تعمل حاويات HostProcess مباشرة على المضيف، وتحافظ على السلوك والوصول المشابهين لعملية عادية. حاويات HostProcess تسمح للمستخدمين بحزم وتوزيع عمليات الإدارة والوظائف التي تتطلب وصول المضيف مع الاحتفاظ بأساليب الإصدار والتوزيع التي توفرها الحاويات.

يمكن لـ DaemonSet المميز إجراء تغييرات أو مراقبة مضيف Linux على Kubernetes، ولكن ليس مضيفي Windows. حاويات HostProcess هي مكافئ Windows لرفع المضيف.

القيود

  • حاويات HostProcess Kubernetes تتطلب الإصدار 1.23 أو أحدث.
  • containerd حاويات HostProcess تتطلب وقت تشغيل حاوية 1.6 أو أعلى.
  • يمكن أن تحتوي حاويات HostProcess على حاويات HostProcess فقط بسبب وجود قيود على نظام التشغيل Windows. حاويات Windows غير المميزة لا يمكنها مشاركة vNIC باستخدام مساحة اسم IP المضيف.
  • حاويات HostProcess تعمل كعملية على المضيف. العزل الوحيد الذي تتمتع به هذه الحاويات من المضيف هو قيود الموارد المفروضة على حساب مستخدم HostProcess.
  • عزل نظام الملفات وعزل Hyper-V غير مدعومين لحاويات HostProcess.
  • عمليات تحميل وحدة التخزين يتم دعمها وتحميلها ضمن وحدة تخزين الحاوية. راجع تحميلات وحدة التخزين.
  • مجموعة محدودة من حسابات المستخدمين المضيفين تتوفر لحاويات عملية المضيف بشكل افتراضي. راجع اختيار حساب مستخدم.
  • حدود الموارد، مثل القرص والذاكرة وعدد وحدات المعالجة المركزية، تعمل بنفس طريقة عمل العمليات على المضيف.
  • لا يتم دعم عمليات تحميل الأنابيب المسماة ومآخذ توصيل مجال Unix مباشرة، ولكن يمكن الوصول إليها على مسار المضيف الخاص بها، على سبيل المثال \\.\pipe\*.

قم بتشغيل حمل العمل HostProcess

لاستخدام ميزات HostProcess مع التوزيع الخاص بك، قم بتعيين hostProcess: true و hostNetwork : true:

    spec:
      ...
      securityContext:
         windowsOptions:
           hostProcess: true
           ...
      hostNetwork: true
      containers:
      ...

لتشغيل مثال حمل العمل الذي يستخدم ميزات HostProcess على نظام مجموعة AKS موجود مع عقد Windows، قم بإنشاء hostprocess.yaml بالمحتويات التالية:

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

استخدم kubectl لتشغيل مثال على حمل العمل:

kubectl apply -f hostprocess.yaml

ينبغي أن تشاهد المخرج التالي:

$ kubectl apply -f hostprocess.yaml
daemonset.apps/privileged-daemonset created

تحقق من أن حمل العمل الخاص بك يستخدم ميزات حاويات HostProcess عن طريق عرض سجلات الجراب.

استخدم kubectl للعثور على اسم الجراب في مساحة الاسم kube-system.

$ kubectl get pods --namespace kube-system

NAME                                  READY   STATUS    RESTARTS   AGE
...
privileged-daemonset-12345            1/1     Running   0          2m13s

استخدم kubectl log لعرض سجلات الجراب والتحقق من أن للجراب حقوق المسؤول:

$ kubectl logs privileged-daemonset-12345 --namespace kube-system
InvalidOperation: Unable to find type [Security.Principal.WindowsPrincipal].
Process has admin rights:

الخطوات التالية

لمزيد من المعلومات حول حاويات HostProcess ومساهمة Microsoft في المنبع Kubernetes، راجع Alpha in v1.22: Windows HostProcess Containers.