Menyebarkan contoh aplikasi pada Windows - Amazon EKS

Bantu tingkatkan halaman ini

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

Untuk berkontribusi pada panduan pengguna ini, pilih Edit halaman ini pada GitHub tautan yang terletak di panel kanan setiap halaman.

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

Menyebarkan contoh aplikasi pada Windows

Dalam topik ini, Anda menyebarkan aplikasi sampel ke cluster Anda di node Windows.

Prasyarat

  • Cluster Kubernetes yang sudah ada dengan setidaknya satu node. Jika Anda tidak memiliki kluster Amazon EKS yang ada, Anda dapat menerapkannya menggunakan salah satu panduan diMemulai dengan Amazon EKS. Anda harus mengaktifkan dukungan Windows untuk cluster Anda dan setidaknya satu node Amazon EC2 Windows.

  • Kubectldiinstal pada komputer Anda. Untuk informasi selengkapnya, lihat Mengatur kubectl dan eksctl.

  • Kubectldikonfigurasi untuk berkomunikasi dengan cluster Anda. Untuk informasi selengkapnya, lihat Connect kubectl ke kluster EKS dengan membuat file kubeconfig.

  • Jika Anda berencana untuk menyebarkan beban kerja sampel Anda ke Fargate, maka Anda harus memiliki profil Fargate yang ada yang menyertakan namespace yang sama yang dibuat dalam tutorial ini, yaitu, kecuali Anda mengubah nama. eks-sample-app Jika Anda membuat cluster dengan salah satu panduan masukMemulai dengan Amazon EKS, maka Anda harus membuat profil baru, atau menambahkan namespace ke profil Anda yang ada, karena profil yang dibuat dalam panduan memulai tidak menentukan namespace yang digunakan dalam tutorial ini. VPC Anda juga harus memiliki setidaknya satu subnet pribadi.

Meskipun banyak variabel yang dapat diubah dalam langkah-langkah berikut, kami sarankan hanya mengubah nilai variabel jika ditentukan. Setelah Anda memiliki pemahaman yang lebih baik tentang Pod, penerapan, dan layanan Kubernetes, Anda dapat bereksperimen dengan mengubah nilai lainnya.

Buat namespace

Namespace memungkinkan Anda untuk mengelompokkan sumber daya di Kubernetes. Untuk informasi selengkapnya, lihat Ruang nama dalam dokumentasi Kubernetes. Jika Anda berencana untuk menerapkan aplikasi sampel Anda untuk Menyederhanakan manajemen komputasi dengan AWS Fargate, pastikan bahwa nilai untuk namespace Define Pod mana yang menggunakan AWS Fargate saat diluncurkan adalah. eks-sample-app

kubectl create namespace eks-sample-app

Buat penerapan Kubernetes

Contoh penerapan ini menarik image kontainer dari repositori publik dan menyebarkan tiga replika (masing-masing Pod) ke klaster Anda. Untuk mempelajari lebih lanjut, lihat Deployment di dokumentasi Kubernetes.

  1. Simpan konten berikut ini ke file bernama eks-sample-deployment.yaml. Kontainer dalam aplikasi sampel tidak menggunakan penyimpanan jaringan, tetapi Anda mungkin memiliki aplikasi yang perlu. Untuk informasi selengkapnya, lihat Menyimpan data aplikasi untuk klaster Anda.

    • kubernetes.io/os: windowsnodeSelectorArtinya jika Anda memiliki node Windows dan Linux (misalnya) di cluster Anda, gambar hanya akan digunakan ke node Windows. Untuk informasi selengkapnya, lihat Label Terkenal, Anotasi, dan Taints di dokumentasi Kubernetes.

      apiVersion: apps/v1 kind: Deployment metadata: name: eks-sample-windows-deployment namespace: eks-sample-app labels: app: eks-sample-windows-app spec: replicas: 3 selector: matchLabels: app: eks-sample-windows-app template: metadata: labels: app: eks-sample-windows-app spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: beta.kubernetes.io/arch operator: In values: - amd64 containers: - name: windows-server-iis image: mcr.microsoft.com/windows/servercore:ltsc2019 ports: - name: http containerPort: 80 imagePullPolicy: IfNotPresent 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'; " nodeSelector: kubernetes.io/os: windows
  2. Terapkan manifes penerapan ke klaster Anda.

    kubectl apply -f eks-sample-deployment.yaml

Membuat layanan

Sebuah layanan memungkinkan Anda untuk mengakses semua replika melalui satu alamat IP atau nama. Untuk informasi selengkapnya, lihat Layanan di dokumentasi Kubernetes. Meskipun tidak diimplementasikan dalam aplikasi sampel, jika Anda memiliki aplikasi yang perlu berinteraksi dengan AWS layanan lain, sebaiknya Anda membuat akun layanan Kubernetes untuk Pod Anda, dan mengaitkannya ke AWS akun IAM. Dengan menentukan akun layanan, Pod Anda hanya memiliki izin minimum yang Anda tentukan untuk berinteraksi dengan layanan lain. Untuk informasi selengkapnya, lihat IAM role untuk akun layanan.

  1. Simpan konten berikut ini ke file bernama eks-sample-service.yaml. Kubernetes memberikan layanan alamat IP sendiri yang hanya dapat diakses dari dalam cluster. Untuk mengakses layanan dari luar klaster Anda, gunakan AWS Load Balancer Controller untuk memuat aplikasi keseimbangan atau lalu lintas jaringan ke layanan.

    apiVersion: v1 kind: Service metadata: name: eks-sample-windows-service namespace: eks-sample-app labels: app: eks-sample-windows-app spec: selector: app: eks-sample-windows-app ports: - protocol: TCP port: 80 targetPort: 80
  2. Terapkan manifes layanan ke cluster Anda.

    kubectl apply -f eks-sample-service.yaml

Meninjau sumber daya yang dibuat

  1. Lihat semua sumber daya yang ada di namespace eks-sample-app.

    kubectl get all -n eks-sample-app

    Contoh output adalah sebagai berikut.

    NAME READY STATUS RESTARTS AGE pod/eks-sample-windows-deployment-65b7669776-m6qxz 1/1 Running 0 27m pod/eks-sample-windows-deployment-65b7669776-mmxvd 1/1 Running 0 27m pod/eks-sample-windows-deployment-65b7669776-qzn22 1/1 Running 0 27m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/eks-sample-windows-service ClusterIP 10.100.74.8 <none> 80/TCP 32m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/eks-sample-windows-deployment 3/3 3 3 27m NAME DESIRED CURRENT READY AGE replicaset.apps/eks-sample-windows-deployment-776d8f8fd8 3 3 3 27m

    Dalam output, Anda melihat layanan dan penerapan yang ditentukan dalam manifes sampel yang diterapkan pada langkah sebelumnya. Anda juga melihat tiga Pod. Ini karena 3 replicas ditentukan dalam manifes sampel. Untuk informasi selengkapnya tentang Pod, lihat Pod di dokumentasi Kubernetes. Kubernetes secara otomatis membuat replicaset sumber daya, meskipun tidak ditentukan dalam manifes sampel. Untuk informasi selengkapnyaReplicaSets, lihat ReplicaSetdi dokumentasi Kubernetes.

  2. Lihat detail layanan yang di-deploy.

    kubectl -n eks-sample-app describe service eks-sample-windows-service

    Contoh output adalah sebagai berikut.

    Name: eks-sample-windows-service Namespace: eks-sample-app Labels: app=eks-sample-windows-app Annotations: <none> Selector: app=eks-sample-windows-app Type: ClusterIP IP Families: <none> IP: 10.100.74.8 IPs: 10.100.74.8 Port: <unset> 80/TCP TargetPort: 80/TCP Endpoints: 192.168.24.212:80,192.168.50.185:80,192.168.63.93:80 Session Affinity: None Events: <none>

    Pada output sebelumnya, nilai untuk IP: adalah alamat IP unik yang dapat dicapai dari node atau Pod mana pun di dalam cluster, tetapi tidak dapat dijangkau dari luar cluster. Nilai untuk Endpoints adalah alamat IP yang ditetapkan dari dalam VPC Anda ke Pod yang merupakan bagian dari layanan.

  3. Lihat detail salah satu Pod yang tercantum dalam output saat Anda melihat namespace pada langkah sebelumnya. Ganti 776d8f8fd8-78w66 dengan nilai yang dikembalikan untuk salah satu Pod Anda.

    kubectl -n eks-sample-app describe pod eks-sample-windows-deployment-65b7669776-m6qxz

    Output contoh disingkat

    Name: eks-sample-windows-deployment-65b7669776-m6qxz Namespace: eks-sample-app Priority: 0 Node: ip-192-168-45-132.us-west-2.compute.internal/192.168.45.132 [...] IP: 192.168.63.93 IPs: IP: 192.168.63.93 Controlled By: ReplicaSet/eks-sample-windows-deployment-65b7669776 [...] Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True [...] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 3m20s default-scheduler Successfully assigned eks-sample-app/eks-sample-windows-deployment-65b7669776-m6qxz to ip-192-168-45-132.us-west-2.compute.internal [...]

    Pada output sebelumnya, nilai untuk IP: adalah IP unik yang ditetapkan ke Pod dari blok CIDR yang ditetapkan ke subnet tempat node berada. Jika Anda memilih untuk menetapkan alamat IP Pod dari blok CIDR yang berbeda, Anda dapat mengubah perilaku default. Untuk informasi selengkapnya, lihat Menerapkan Pod di subnet alternatif dengan jaringan khusus. Anda juga dapat melihat bahwa penjadwal Kubernetes menjadwalkan Pod Node dengan alamat IP. 192.168.45.132

    Tip

    Daripada menggunakan baris perintah, Anda dapat melihat banyak detail tentang Pod, layanan, penerapan, dan sumber daya Kubernetes lainnya di file. AWS Management Console Untuk informasi selengkapnya, lihat Lihat sumber daya Kubernetes di AWS Management Console.

Jalankan shell pada Pod

  1. Jalankan shell pada Pod yang Anda jelaskan pada langkah sebelumnya, ganti 65b7669776-m6qxz dengan ID salah satu Pod Anda.

    kubectl exec -it eks-sample-windows-deployment-65b7669776-m6qxz -n eks-sample-app -- powershell.exe
  2. Dari shell Pod, lihat output dari server web yang diinstal dengan deployment Anda pada langkah sebelumnya. Anda hanya perlu menentukan nama layanan. Ini diselesaikan ke alamat IP layanan oleh CoreDNS, yang digunakan dengan cluster Amazon EKS, secara default.

    Invoke-WebRequest -uri eks-sample-windows-service/default.html -UseBasicParsing

    Contoh output adalah sebagai berikut.

    StatusCode : 200 StatusDescription : OK Content : < h t m l > < b o d y > < b r / > < b r / > < m a r q u e e > < H 1 > H e l l o E K S ! ! ! < H 1 > < m a r q u e e > < / b o d y > < h t m l >
  3. Dari shell Pod, lihat server DNS untuk Pod.

    Get-NetIPConfiguration

    Output dipersingkat

    InterfaceAlias : vEthernet [...] IPv4Address : 192.168.63.14 [...] DNSServer : 10.100.0.10

    Pada output sebelumnya, secara otomatis 10.100.0.10 ditetapkan sebagai server DNS untuk semua Pod yang di-deploy ke cluster.

  4. Putuskan sambungan dari Pod dengan mengetikexit.

  5. Setelah selesai dengan aplikasi sampel, Anda dapat menghapus contoh namespace, layanan, dan deployment dengan perintah berikut.

    kubectl delete namespace eks-sample-app

Langkah Berikutnya

Setelah Anda menerapkan aplikasi sampel, Anda mungkin ingin mencoba beberapa latihan berikut: