

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Opsi penyimpanan persisten
<a name="windows-storage"></a>

## Apa itu plugin volume in-tree vs. out-of-tree?
<a name="_what_is_an_in_tree_vs_out_of_tree_volume_plugin"></a>

Sebelum pengenalan Container Storage Interface (CSI), semua plugin volume di-tree yang berarti mereka dibangun, ditautkan, dikompilasi, dan dikirimkan dengan binari inti Kubernetes dan memperluas inti Kubernetes API. Ini berarti bahwa menambahkan sistem penyimpanan baru ke Kubernetes (plugin volume) memerlukan pemeriksaan kode ke dalam repositori kode Kubernetes inti.

Out-of-tree plugin volume dikembangkan secara independen dari basis kode Kubernetes, dan digunakan (diinstal) pada klaster Kubernetes sebagai ekstensi. Ini memberi vendor kemampuan untuk memperbarui driver out-of-band, yaitu secara terpisah dari siklus rilis Kubernetes. Hal ini sebagian besar dimungkinkan karena Kubernetes telah menciptakan antarmuka penyimpanan atau CSI yang menyediakan vendor cara standar untuk berinteraksi dengan k8s.

Anda dapat memeriksa lebih lanjut tentang kelas penyimpanan Amazon Elastic Kubernetes Services (EKS) dan Driver CSI https://docs.aws.amazon.com/eks/latest/userguide/storage.html

## In-tree Plugin Volume untuk Windows
<a name="_in_tree_volume_plugin_for_windows"></a>

Volume Kubernetes memungkinkan aplikasi, dengan persyaratan persistensi data, untuk diterapkan di Kubernetes. Pengelolaan volume persisten terdiri provisioning/resizing dari provisioning/de - volume, volume attaching/detaching to/from sebuah node Kubernetes, dan volume kontainer to/from individual dalam mounting/dismounting sebuah pod. **Kode untuk mengimplementasikan tindakan manajemen volume ini untuk back-end atau protokol penyimpanan tertentu dikirimkan dalam bentuk plugin volume Kubernetes (Plugin Volume). In-tree ** Di Amazon Elastic Kubernetes Services (EKS) kelas berikut dari plugin volume Kubernetes didukung pada Windows:

 *In-tree Plugin Volume:* [aws ElasticBlockStore](https://kubernetes.io/docs/concepts/storage/volumes/#awselasticblockstore) 

Untuk menggunakan plugin In-tree volume pada node Windows, perlu untuk membuat tambahan StorageClass untuk menggunakan NTFS sebagai FSType. Pada EKS, default StorageClass menggunakan ext4 sebagai fSType default.

A StorageClass menyediakan cara bagi administrator untuk menggambarkan “kelas” penyimpanan yang mereka tawarkan. Kelas yang berbeda mungkin memetakan ke tingkat kualitas layanan, kebijakan cadangan, atau kebijakan arbitrer yang ditentukan oleh administrator klaster. Kubernetes tidak beropini tentang apa yang diwakili kelas. Konsep ini kadang-kadang disebut “profil” dalam sistem penyimpanan lain.

Anda dapat memeriksanya dengan menjalankan perintah berikut:

```
kubectl describe storageclass gp2
```

Output:

```
Name:            gp2
IsDefaultClass:  Yes
Annotations:     kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"storage.k8s.io/v1","kind":"StorageClas
","metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"true"},"name":"gp2"},"parameters":{"fsType"
"ext4","type":"gp2"},"provisioner":"kubernetes.io/aws-ebs","volumeBindingMode":"WaitForFirstConsumer"}
,storageclass.kubernetes.io/is-default-class=true
Provisioner:           kubernetes.io/aws-ebs
Parameters:            fsType=ext4,type=gp2
AllowVolumeExpansion:  <unset>
MountOptions:          <none>
ReclaimPolicy:         Delete
VolumeBindingMode:     WaitForFirstConsumer
Events:                <none>
```

Untuk membuat yang baru StorageClass untuk mendukung **NTFS, gunakan manifes** berikut:

```
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: gp2-windows
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
  fsType: ntfs
volumeBindingMode: WaitForFirstConsumer
```

Buat StorageClass dengan menjalankan perintah berikut:

```
kubectl apply -f NTFSStorageClass.yaml
```

Langkah selanjutnya adalah membuat Persistent Volume Claim (PVC).

A PersistentVolume (PV) adalah bagian penyimpanan dalam cluster yang telah disediakan oleh administrator atau secara dinamis disediakan menggunakan PVC. Ini adalah sumber daya di cluster seperti node adalah sumber daya cluster. Objek API ini menangkap detail implementasi penyimpanan, baik itu NFS, iSCSI, atau sistem penyimpanan khusus penyedia cloud.

A PersistentVolumeClaim (PVC) adalah permintaan penyimpanan oleh pengguna. Klaim dapat meminta ukuran dan mode akses tertentu (misalnya, mereka dapat dipasang ReadWriteOnce, ReadOnlyMany atau ReadWriteMany).

Pengguna membutuhkan atribut PersistentVolumes yang berbeda, seperti kinerja, untuk kasus penggunaan yang berbeda. Administrator cluster harus dapat menawarkan variasi PersistentVolumes yang berbeda dalam lebih dari sekadar ukuran dan mode akses, tanpa mengekspos pengguna pada detail tentang bagaimana volume tersebut diimplementasikan. Untuk kebutuhan ini, ada StorageClass sumber daya.

Dalam contoh di bawah ini, PVC telah dibuat di dalam jendela namespace.

```
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ebs-windows-pv-claim
  namespace: windows
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: gp2-windows
  resources:
    requests:
      storage: 1Gi
```

Buat PVC dengan menjalankan perintah berikut:

```
kubectl apply -f persistent-volume-claim.yaml
```

Manifes berikut membuat Pod Windows, mengatur VolumeMount as `C:\Data` dan menggunakan PVC sebagai penyimpanan terpasang`C:\Data`.

```
apiVersion: apps/v1
kind: Deployment
metadata:
  name: windows-server-ltsc2019
  namespace: windows
spec:
  selector:
    matchLabels:
      app: windows-server-ltsc2019
      tier: backend
      track: stable
  replicas: 1
  template:
    metadata:
      labels:
        app: windows-server-ltsc2019
        tier: backend
        track: stable
    spec:
      containers:
      - name: windows-server-ltsc2019
        image: mcr.microsoft.com/windows/servercore:ltsc2019
        ports:
        - name: http
          containerPort: 80
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - mountPath: "C:\\data"
          name: test-volume
      volumes:
        - name: test-volume
          persistentVolumeClaim:
            claimName: ebs-windows-pv-claim
      nodeSelector:
        kubernetes.io/os: windows
        node.kubernetes.io/windows-build: '10.0.17763'
```

Uji hasilnya dengan mengakses pod Windows melalui PowerShell:

```
kubectl exec -it podname powershell -n windows
```

Di dalam Pod Windows, jalankan: `ls` 

Output:

```
PS C:\> ls


    Directory: C:\


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----          3/8/2021   1:54 PM                data
d-----          3/8/2021   3:37 PM                inetpub
d-r---          1/9/2021   7:26 AM                Program Files
d-----          1/9/2021   7:18 AM                Program Files (x86)
d-r---          1/9/2021   7:28 AM                Users
d-----          3/8/2021   3:36 PM                var
d-----          3/8/2021   3:36 PM                Windows
-a----         12/7/2019   4:20 AM           5510 License.txt
```

**Direktori data** disediakan oleh volume EBS.

## Out-of-tree untuk Windows
<a name="_out_of_tree_for_windows"></a>

Kode yang terkait dengan plugin CSI dikirimkan sebagai skrip dan binari out-of-tree yang biasanya didistribusikan sebagai image kontainer dan digunakan menggunakan konstruksi Kubernetes standar seperti dan. DaemonSets StatefulSets Plugin CSI menangani berbagai tindakan manajemen volume di Kubernetes. Plugin CSI biasanya terdiri dari plugin node (yang berjalan pada setiap node sebagai a DaemonSet) dan plugin controller.

Plugin node CSI (terutama yang terkait dengan volume persisten yang diekspos sebagai perangkat blok atau melalui sistem file bersama) perlu melakukan berbagai operasi istimewa seperti pemindaian perangkat disk, pemasangan sistem file, dll. Operasi ini berbeda untuk setiap sistem operasi host. Untuk node pekerja Linux, plugin node CSI kontainer biasanya digunakan sebagai wadah istimewa. Untuk node pekerja Windows, operasi istimewa untuk plugin node CSI kontainer didukung menggunakan [csi-proxy](https://github.com/kubernetes-csi/csi-proxy), biner mandiri yang dikelola komunitas yang perlu diinstal sebelumnya pada setiap node Windows.

 [Amazon EKS Optimized Windows AMI](https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-windows-ami.html) termasuk CSI-proxy mulai dari April 2022. Pelanggan dapat menggunakan [Driver SMB CSI](https://github.com/kubernetes-csi/csi-driver-smb) pada node Windows untuk mengakses Amazon FSx for [Windows File Server, Amazon FSx NetApp untuk](https://aws.amazon.com/fsx/windows/) [ONTAP SMB Shares,](https://aws.amazon.com/fsx/netapp-ontap/) AWS and/or [Storage](https://aws.amazon.com/storagegateway/file/) Gateway — File Gateway.

[Blog](https://aws.amazon.com/blogs/modernizing-with-aws/using-smb-csi-driver-on-amazon-eks-windows-nodes/) berikut memiliki detail implementasi tentang cara mengatur Driver SMB CSI untuk menggunakan Amazon FSx for Windows File Server sebagai penyimpanan persisten untuk Pod Windows.

## Amazon FSx for Windows File Server
<a name="_amazon_fsx_for_windows_file_server"></a>

Pilihannya adalah menggunakan Amazon FSx untuk Windows File Server melalui fitur SMB yang [disebut SMB Global](https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/persistent-storage) Mapping yang memungkinkan untuk memasang berbagi SMB di host, lalu meneruskan direktori pada bagian itu ke dalam wadah. Wadah tidak perlu dikonfigurasi dengan server, berbagi, nama pengguna, atau kata sandi tertentu - itu semua ditangani di host sebagai gantinya. Wadah akan bekerja sama seperti jika memiliki penyimpanan lokal.

**Pemetaan Global SMB transparan bagi orkestrator, dan dipasang di mana dapat menyiratkan masalah HostPath yang aman.**

Pada contoh di bawah ini, jalurnya `G:\Directory\app-state` adalah berbagi SMB di Windows Node.

```
apiVersion: v1
kind: Pod
metadata:
  name: test-fsx
spec:
  containers:
  - name: test-fsx
    image: mcr.microsoft.com/windows/servercore:ltsc2019
    command:
      - powershell.exe
      - -command
      - "Add-WindowsFeature Web-Server; Invoke-WebRequest -UseBasicParsing -Uri 'https://dotnetbinaries.blob.core.windows.net/servicemonitor/2.0.1.6/ServiceMonitor.exe' -OutFile 'C:\\ServiceMonitor.exe'; echo '<html><body><br/><br/><marquee><H1>Hello EKS!!!<H1><marquee></body><html>' > C:\\inetpub\\wwwroot\\default.html; C:\\ServiceMonitor.exe 'w3svc'; "
    volumeMounts:
      - mountPath: C:\dotnetapp\app-state
        name: test-mount
  volumes:
    - name: test-mount
      hostPath:
        path: G:\Directory\app-state
        type: Directory
  nodeSelector:
      beta.kubernetes.io/os: windows
      beta.kubernetes.io/arch: amd64
```

[Blog](https://aws.amazon.com/blogs/containers/using-amazon-fsx-for-windows-file-server-on-eks-windows-containers/) berikut memiliki detail implementasi tentang cara mengatur Amazon FSx untuk Windows File Server sebagai penyimpanan persisten untuk Pod Windows.