Dokumen ini memberikan contoh cara men-deploy aplikasi di cluster pengguna dibuat dengan Google Distributed Cloud (khusus software) untuk VMware.
Sebelum memulai
Untuk contoh yang diberikan di sini, Anda memerlukan cluster pengguna yang menggunakan load balancing MetalLB yang dipaketkan. Untuk petunjuk tentang cara membuat cluster pengguna minimal yang menggunakan MetalLB, lihat Buat cluster dasar.
Anda dapat menggunakan konsol Google Cloud atau alat command line kubectl
di
komputer admin Anda
untuk men-deploy aplikasi.
Konsol
Di konsol, buka Ringkasan cluster Google Kubernetes Engine kami.
Pada daftar cluster, klik cluster pengguna Anda, dan verifikasi bahwa Anda yang login ke cluster.
Jika Anda belum login ke cluster pengguna, login dengan mengikuti petunjuk di Mengelola cluster dari Konsol Google Cloud.
Container
Di bagian Penampung baru, pilih Image penampung yang ada.
Untuk Image path, masukkan
us-docker.pkg.dev/google-samples/containers/gke/hello-app:2.0
.Klik Lanjutkan.
Konfigurasi
Untuk Deployment name, masukkan
my-deployment
.Untuk Namespace, masukkan
default
.Masukkan dua label berikut:
- Kunci 1:
app
, Nilai 1:metrics
- Kunci 2:
department
, Nilai 2sales
- Kunci 1:
Di drop-down cluster Kubernetes, pilih cluster Anda.
Klik Lanjutkan.
Ekspos
Centang Mengekspos deployment sebagai layanan baru.
Untuk Port 1, masukkan
80
.Untuk Target port 1, masukkan
8080
. Ini adalah nilai yang tepat karena secara default containerhello-app
diproses di TCP port 8080. Anda dapat melihat hal ini dengan melihat Dockerfile dan kode sumbernya untuk aplikasi.Untuk Protocol 1, pilih
TCP
.Untuk Service type, pilih
LoadBalancer
.
Di bagian bawah halaman, klik tombol Deploy.
Melihat detail Deployment dan Layanan
Setelah Deployment siap, halaman Detail deployment akan terbuka di Workload Kubernetes bagian Konsol Google Cloud. Pada halaman ini, Anda dapat melihat detail tentang Deployment dan tiga Pod-nya.
Di bagian Mengekspos, klik nama Layanan yang mengekspos Deployment Anda. Untuk latihan ini, namanya adalah
my-deployment-service
.Halaman Detail layanan akan terbuka. Pada halaman ini, Anda dapat melihat detail tentang Layanan. Misalnya, Anda bisa melihat bahwa setiap Pod yang memiliki label
app: metrics
dandepartment: sales
adalah anggota Layanan. Ingatlah bahwa Pod dimy-deployment
memiliki label ini.
Anda juga dapat melihat nilai untuk IP load balancer. IP load balancer memiliki telah dikonfigurasi secara otomatis di load balancer cluster.
Penerusan untuk Layanan
Misalkan klien di luar cluster mengirimkan permintaan ke IP load balancer
pada porta TCP 80. Permintaan akan dirutekan ke load balancer cluster. Beban
load balancer meneruskan permintaan ke Pod anggota di port TCP 8080. Ingatlah bahwa
setiap Pod di my-deployment
memiliki container yang memproses port TCP 8080.
Menguji Layanan
Buka mesin yang IP load balancer-nya dapat dirutekan.
Untuk memanggil Layanan, masukkan IP load balancer di browser, atau gunakan
seperti curl
. Contoh:
curl [LOAD_BALANCER_IP]:80
Output menampilkan pesan Hello, world!
. Contoh:
curl 203.0.113.1:80 Hello, world! Version: 2.0.0 Hostname: my-deployment-dbd86c8c4-9wpbv
Menghapus Deployment
Buka halaman Workloads di bagian Kubernetes Engine dari konsol.
Dalam daftar Deployment, pilih my-deployment
.
Di bagian atas halaman, klik
Hapus. Tindakan ini akan menghapus Deployment dan Service eksposur.Command line
Menghubungkan ke workstation admin
Dapatkan koneksi SSH ke workstation admin Anda. Lakukan langkah-langkah berikut pada komputer admin Anda.
Membuat Deployment
Berikut manifes untuk Deployment:
apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment spec: selector: matchLabels: app: metrics department: sales replicas: 3 template: metadata: labels: app: metrics department: sales spec: containers: - name: hello image: "us-docker.pkg.dev/google-samples/containers/gke/hello-app:2.0"
Salin manifes ke file bernama my-deployment.yaml
, lalu buat Deployment:
kubectl apply --kubeconfig USER_CLUSTER_KUBECONFIG -f my-deployment.yaml
dengan USER_CLUSTER_KUBECONFIG adalah jalur file kubeconfig untuk cluster pengguna Anda.
Dapatkan informasi dasar tentang Deployment Anda:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get deployment my-deployment
Outputnya menunjukkan bahwa Deployment memiliki tiga Pod yang semuanya tersedia:
NAME READY UP-TO-DATE AVAILABLE AGE my-deployment 3/3 3 3 27s
Tampilkan daftar Pod di Deployment:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get pods
Outputnya menunjukkan bahwa Deployment memiliki tiga Pod yang berjalan:
NAME READY STATUS RESTARTS AGE my-deployment-54944c8d55-4srm2 1/1 Running 0 6s my-deployment-54944c8d55-7z5nn 1/1 Running 0 6s my-deployment-54944c8d55-j62n9 1/1 Running 0 6s
Dapatkan informasi mendetail tentang Deployment Anda:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get deployment my-deployment --output yaml
Outputnya menunjukkan detail tentang spesifikasi dan status Deployment:
kind: Deployment metadata: ... generation: 1 name: my-deployment namespace: default ... spec: ... replicas: 3 revisionHistoryLimit: 10 selector: matchLabels: app: metrics department: sales ... spec: containers: - image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:2.0 imagePullPolicy: IfNotPresent name: hello resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 status: availableReplicas: 3 conditions: ‑ lastTransitionTime: "2019-11-11T18:44:02Z" lastUpdateTime: "2019-11-11T18:44:02Z" message: Deployment has minimum availability. reason: MinimumReplicasAvailable status: "True" type: Available ‑ lastTransitionTime: "2019-11-11T18:43:58Z" lastUpdateTime: "2019-11-11T18:44:02Z" message: ReplicaSet "my-deployment-54944c8d55" has successfully progressed. reason: NewReplicaSetAvailable status: "True" type: Progressing observedGeneration: 1 readyReplicas: 3 replicas: 3 updatedReplicas: 3
Jelaskan Deployment Anda:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG describe deployment my-deployment
Output menunjukkan detail Deployment yang diformat dengan baik, termasuk yang terkait dengan ReplicaSet:
Name: my-deployment Namespace: default CreationTimestamp: Mon, 11 Nov 2019 10:43:58 -0800 Labels:... Selector: app=metrics,department=sales Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: app=metrics department=sales Containers: hello: Image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:2.0 Port: Host Port: Environment: Mounts: Volumes: Conditions: Type Status Reason ---- ------ ------ Available True MinimumReplicasAvailable Progressing True NewReplicaSetAvailable OldReplicaSets: NewReplicaSet: my-deployment-54944c8d55 (3/3 replicas created)
Membuat Layanan jenis LoadBalancer
Salah satu cara untuk mengekspos Deployment ke klien di luar cluster adalah dengan membuat
jenis Service Kubernetes
LoadBalancer
.
Berikut adalah manifes untuk Service jenis LoadBalancer
:
apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: metrics department: sales type: LoadBalancer ports: ‑ port: 80 targetPort: 8080
Hal berikut ini adalah hal penting yang perlu dipahami tentang Layanan:
Semua Pod yang memiliki label
app: metrics
dan labeldepartment: sales
adalah anggota Layanan. Perlu diperhatikan bahwa Pod dimy-deployment
memiliki label.Saat klien mengirim permintaan ke Layanan pada TCP port 80, permintaan tersebut diteruskan ke Pod anggota pada TCP port 8080.
Setiap Pod anggota harus memiliki container yang memantau port TCP 8080.
Secara default, container hello-app
memproses port TCP
8080. Anda dapat mengetahuinya dengan melihat
Dockerfile dan kode sumber untuk aplikasi.
Simpan manifes ke file bernama my-service.yaml
, lalu buat Service:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG apply -f my-service.yaml
dengan USER_CLUSTER_KUBECONFIG adalah jalur file kubeconfig untuk cluster pengguna Anda.
Saat Anda membuat Layanan, Google Distributed Cloud akan otomatis mengonfigurasi
Alamat loadBalancerIP
di load balancer cluster.
Lihat Layanan Anda:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get service my-service --output yaml
Outputnya mirip dengan ini:
kind: Service metadata: ... name: my-service namespace: default ... spec: allocateLoadBalancerNodePorts: true clusterIP: 10.96.1.39 clusterIPs: - 10.96.1.39 externalTrafficPolicy: Cluster internalTrafficPolicy: Cluster ipFamilies: - IPv4 ipFamilyPolicy: SingleStack ports: - nodePort: 31184 port: 80 protocol: TCP targetPort: 8080 selector: app: metrics department: sales sessionAffinity: None type: LoadBalancer status: loadBalancer: ingress: - ip: 203.0.113.1
Pada output sebelumnya, Anda dapat melihat bahwa Layanan Anda memiliki clusterIP
, dan
loadBalancerIP
. Class ini juga memiliki port
dan targetPort
.
clusterIP
tidak relevan dengan latihan ini. loadBalancerIP
adalah
Alamat IP yang dapat digunakan oleh klien di luar cluster untuk memanggil Layanan.
Sebagai contoh, ambil nilai yang ditunjukkan pada output sebelumnya. Yaitu, misalkan
Layanan Anda memiliki loadBalancerIP
= 203.0.113.1, port
= 80, dan
targetPort
= 8.080.
Klien mengirimkan permintaan ke 203.0.113.1 pada TCP port 80. Permintaan mendapatkan yang dirutekan ke load balancer cluster. Load balancer meneruskan permintaan ke Pod anggota di TCP port 8080.
Hubungi Layanan Anda:
curl LOAD_BALANCER_IP
Output menunjukkan pesan Hello, world!
:
curl 203.0.113.1 Hello, world! Version: 2.0.0 Hostname: my-deployment-dbd86c8c4-9wpbv
Hapus Layanan Anda
Hapus Layanan Anda:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG delete service my-service
Verifikasi bahwa Layanan Anda telah dihapus:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get services
Output tidak lagi menampilkan my-service
.
Menghapus Deployment
Hapus Deployment:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG delete deployment my-deployment
Verifikasi bahwa Deployment telah dihapus:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get deployments
Output tidak lagi menampilkan my-deployment
.