

 **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 di Linux
<a name="sample-deployment"></a>

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

## Prasyarat
<a name="_prerequisites"></a>
+ 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 di[Memulai dengan Amazon EKS](getting-started.md).
+  `Kubectl`diinstal pada komputer Anda. Untuk informasi selengkapnya, lihat [Mengatur `kubectl` dan `eksctl`](install-kubectl.md).
+  `Kubectl`dikonfigurasi untuk berkomunikasi dengan cluster Anda. Untuk informasi selengkapnya, lihat [Connect kubectl ke kluster EKS dengan membuat file kubeconfig](create-kubeconfig.md).
+ Jika Anda berencana untuk menyebarkan beban kerja sampel Anda ke Fargate, maka Anda harus memiliki [profil Fargate](fargate-profile.md) 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 masuk[Memulai dengan Amazon EKS](getting-started.md), 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
<a name="_create_a_namespace"></a>

Namespace memungkinkan Anda mengelompokkan sumber daya di Kubernetes. Untuk informasi selengkapnya, lihat [Ruang nama dalam dokumentasi](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/) Kubernetes. Jika Anda berencana untuk menerapkan aplikasi sampel Anda untuk [Menyederhanakan manajemen komputasi dengan AWS Fargate](fargate.md), pastikan bahwa nilai untuk `namespace` Define [Pod mana yang menggunakan AWS Fargate](fargate-profile.md) saat diluncurkan adalah. `eks-sample-app`

```
kubectl create namespace eks-sample-app
```

## Buat penerapan Kubernetes
<a name="_create_a_kubernetes_deployment"></a>

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](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/) 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 [Gunakan penyimpanan data aplikasi untuk klaster Anda](storage.md).
   + `amd64`Atau di `arm64` `values` bawah `kubernetes.io/arch` kunci berarti bahwa aplikasi dapat digunakan untuk salah satu arsitektur perangkat keras (jika Anda memiliki keduanya di cluster Anda). Ini dimungkinkan karena gambar ini adalah gambar multi-arsitektur, tetapi tidak semuanya. Anda dapat menentukan arsitektur perangkat keras tempat gambar didukung dengan melihat [detail gambar](https://gallery.ecr.aws/nginx/nginx) di repositori tempat Anda menariknya. Saat menerapkan gambar yang tidak mendukung jenis arsitektur perangkat keras, atau yang Anda tidak ingin gambar disebarkan, hapus jenis itu dari manifes. Untuk informasi selengkapnya, lihat [Label Terkenal, Anotasi, dan Taints di dokumentasi](https://kubernetes.io/docs/reference/labels-annotations-taints/) Kubernetes.
   + `kubernetes.io/os: linux``nodeSelector`Artinya jika Anda memiliki node Linux dan Windows (misalnya) di cluster Anda, gambar hanya akan digunakan ke node Linux. Untuk informasi selengkapnya, lihat [Label Terkenal, Anotasi, dan Taints di dokumentasi](https://kubernetes.io/docs/reference/labels-annotations-taints/) Kubernetes.

     ```
     apiVersion: apps/v1
     kind: Deployment
     metadata:
       name: eks-sample-linux-deployment
       namespace: eks-sample-app
       labels:
         app: eks-sample-linux-app
     spec:
       replicas: 3
       selector:
         matchLabels:
           app: eks-sample-linux-app
       template:
         metadata:
           labels:
             app: eks-sample-linux-app
         spec:
           affinity:
             nodeAffinity:
               requiredDuringSchedulingIgnoredDuringExecution:
                 nodeSelectorTerms:
                 - matchExpressions:
                   - key: kubernetes.io/arch
                     operator: In
                     values:
                     - amd64
                     - arm64
           containers:
           - name: nginx
             image: public.ecr.aws/nginx/nginx:1.23
             ports:
             - name: http
               containerPort: 80
             imagePullPolicy: IfNotPresent
           nodeSelector:
             kubernetes.io/os: linux
     ```

1. Terapkan manifes penerapan ke cluster Anda.

   ```
   kubectl apply -f eks-sample-deployment.yaml
   ```

## Membuat layanan
<a name="_create_a_service"></a>

Sebuah layanan memungkinkan Anda untuk mengakses semua replika melalui satu alamat IP atau nama. Untuk informasi selengkapnya, lihat [Layanan](https://kubernetes.io/docs/concepts/services-networking/service/) 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](iam-roles-for-service-accounts.md).

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](aws-load-balancer-controller.md) Controller untuk memuat aplikasi [keseimbangan](alb-ingress.md) [atau](network-load-balancing.md) lalu lintas jaringan ke layanan.

   ```
   apiVersion: v1
   kind: Service
   metadata:
     name: eks-sample-linux-service
     namespace: eks-sample-app
     labels:
       app: eks-sample-linux-app
   spec:
     selector:
       app: eks-sample-linux-app
     ports:
       - protocol: TCP
         port: 80
         targetPort: 80
   ```

1. Terapkan manifes layanan ke cluster Anda.

   ```
   kubectl apply -f eks-sample-service.yaml
   ```

## Meninjau sumber daya yang dibuat
<a name="sample-app-view-namespace"></a>

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-linux-deployment-65b7669776-m6qxz   1/1     Running   0          27m
   pod/eks-sample-linux-deployment-65b7669776-mmxvd   1/1     Running   0          27m
   pod/eks-sample-linux-deployment-65b7669776-qzn22   1/1     Running   0          27m
   
   NAME                               TYPE         CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
   service/eks-sample-linux-service   ClusterIP    10.100.74.8     <none>        80/TCP    32m
   
   NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
   deployment.apps/eks-sample-linux-deployment 3/3     3            3           27m
   
   NAME                                                      DESIRED   CURRENT   READY   AGE
   replicaset.apps/eks-sample-linux-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](https://kubernetes.io/docs/concepts/workloads/pods/pod/) di dokumentasi Kubernetes. Kubernetes secara otomatis membuat `replicaset` sumber daya, meskipun tidak ditentukan dalam manifes sampel. Untuk informasi selengkapnya`ReplicaSets`, lihat [ReplicaSet](https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/)di dokumentasi Kubernetes.
**catatan**  
Kubernetes mempertahankan jumlah replika yang ditentukan dalam manifes. [Jika ini adalah penerapan produksi dan Anda ingin Kubernetes menskalakan jumlah replika secara horizontal atau menskalakan sumber daya komputasi untuk Pod secara vertikal, gunakan [penerapan pod Scale dengan Horizontal Pod Autoscaler dan sumber daya Adjust pod dengan Vertical Pod Autoscaler](horizontal-pod-autoscaler.md) untuk melakukannya.](vertical-pod-autoscaler.md)

1. Lihat detail layanan yang di-deploy.

   ```
   kubectl -n eks-sample-app describe service eks-sample-linux-service
   ```

   Contoh output adalah sebagai berikut.

   ```
   Name:              eks-sample-linux-service
   Namespace:         eks-sample-app
   Labels:            app=eks-sample-linux-app
   Annotations:       <none>
   Selector:          app=eks-sample-linux-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.

1. Lihat detail salah satu Pod yang tercantum dalam output saat Anda [melihat namespace](#sample-app-view-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-linux-deployment-65b7669776-m6qxz
   ```

   Output contoh disingkat

   ```
   Name:         eks-sample-linux-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-linux-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-linux-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](cni-custom-network.md). 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. Konsol Manajemen AWS Untuk informasi selengkapnya, lihat [Lihat sumber daya Kubernetes di Konsol Manajemen AWS](view-kubernetes-resources.md).

## Jalankan shell pada Pod
<a name="_run_a_shell_on_a_pod"></a>

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-linux-deployment-65b7669776-m6qxz -n eks-sample-app -- /bin/bash
   ```

1. 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.

   ```
   curl eks-sample-linux-service
   ```

   Contoh output adalah sebagai berikut.

   ```
   <!DOCTYPE html>
   <html>
   <head>
   <title>Welcome to nginx!</title>
   [...]
   ```

1. Dari shell Pod, lihat server DNS untuk Pod.

   ```
   cat /etc/resolv.conf
   ```

   Contoh output adalah sebagai berikut.

   ```
   nameserver 10.100.0.10
   search eks-sample-app.svc.cluster.local svc.cluster.local cluster.local us-west-2.compute.internal
   options ndots:5
   ```

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

1. Putuskan sambungan dari Pod dengan mengetik`exit`.

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

   ```
   kubectl delete namespace eks-sample-app
   ```

## Langkah Berikutnya
<a name="sample-deployment-next-steps"></a>

Setelah menerapkan aplikasi sampel, Anda mungkin ingin mencoba beberapa latihan berikut:
+  [Rute aplikasi dan lalu lintas HTTP dengan Application Load Balancers](alb-ingress.md) 
+  [Rute lalu lintas TCP dan UDP dengan Network Load Balancers](network-load-balancing.md) 