Dokumen ini memberikan contoh cara men-deploy aplikasi di cluster pengguna yang 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 Membuat cluster dasar.
Anda dapat menggunakan konsol Google Cloud atau alat command line kubectl di
workstation admin untuk men-deploy aplikasi.
Konsol
Di konsol, buka halaman ringkasan cluster Google Kubernetes Engine.
Di daftar cluster, klik cluster pengguna Anda, dan pastikan Anda sudah login ke cluster.
Jika Anda belum login ke cluster pengguna, login dengan mengikuti petunjuk di Mengelola cluster dari Google Cloud konsol.
Container
Di bagian New container, pilih Existing container image.
Untuk Jalur image, 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 ini:
- Kunci 1:
app, Nilai 1:metrics - Kunci 2:
department, Nilai 2sales
- Kunci 1:
Di drop-down Kubernetes cluster, pilih cluster Anda.
Klik Lanjutkan.
Expose
Centang Ekspos deployment sebagai layanan baru.
Untuk Port 1, masukkan
80.Untuk Target port 1, masukkan
8080. Ini adalah nilai yang sesuai karena penampunghello-appmemproses port TCP 8080 secara default. Anda dapat melihatnya dengan melihat Dockerfile dan kode sumber untuk aplikasi tersebut.Untuk Protokol 1, pilih
TCP.Untuk Jenis layanan, pilih
LoadBalancer.
Di bagian bawah halaman, klik tombol Deploy.
Melihat detail Deployment dan Layanan
Jika Deployment sudah siap, halaman Deployment details akan terbuka di bagian Kubernetes workloads di konsol Google Cloud . Di halaman ini, Anda dapat melihat detail tentang Deployment dan tiga Pod-nya.
Di bagian Mengekspos layanan, klik nama Layanan yang mengekspos Deployment Anda. Untuk latihan ini, namanya adalah
my-deployment-service.Halaman Detail layanan akan terbuka. Di halaman ini, Anda dapat melihat detail tentang Layanan. Misalnya, Anda dapat melihat bahwa setiap Pod yang memiliki label
app: metricsdandepartment: salesadalah anggota Layanan. Ingat bahwa Pod dimy-deploymentmemiliki label ini.
Anda juga dapat melihat nilai untuk IP load balancer. IP load balancer telah dikonfigurasi secara otomatis di load balancer cluster.
Penerusan untuk Layanan
Misalkan klien di luar cluster mengirim permintaan ke IP load balancer di port TCP 80. Permintaan akan dirutekan ke load balancer cluster. Load
balancer meneruskan permintaan ke Pod anggota di port TCP 8080. Ingat bahwa
setiap Pod di my-deployment memiliki container yang memproses port TCP 8080.
Menguji Layanan Anda
Buka komputer tempat IP load balancer dapat dirutekan.
Untuk memanggil Layanan, masukkan IP load balancer di browser, atau gunakan perintah seperti curl. Contoh:
curl [LOAD_BALANCER_IP]:80
Output akan 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 di konsol.
Dalam daftar Deployment, pilih my-deployment.
Di bagian atas halaman, klik Hapus. Tindakan ini akan menghapus Deployment dan Layanan yang diekspos.
Command line
Menghubungkan ke workstation admin
Dapatkan koneksi SSH ke workstation admin Anda. Lakukan langkah-langkah berikut di workstation 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
Output menunjukkan bahwa Deployment memiliki tiga Pod yang semuanya tersedia:
NAME READY UP-TO-DATE AVAILABLE AGE my-deployment 3/3 3 3 27s
Cantumkan Pod di Deployment Anda:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get pods
Output menunjukkan bahwa Deployment Anda memiliki tiga Pod yang sedang 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
Output menampilkan 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 akan menampilkan detail Deployment yang diformat dengan baik, termasuk ReplicaSet terkait:
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 Service jenis LoadBalancer
Salah satu cara untuk mengekspos Deployment ke klien di luar cluster adalah dengan membuat
Layanan Kubernetes jenis
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
Untuk tujuan latihan ini, berikut adalah hal-hal penting yang perlu dipahami tentang Layanan:
Setiap Pod yang memiliki label
app: metricsdan labeldepartment: salesadalah anggota Layanan. Perhatikan bahwa Pod dimy-deploymentmemiliki label ini.Saat klien mengirim permintaan ke Layanan di port TCP 80, permintaan tersebut akan diteruskan ke Pod anggota di port TCP 8080.
Setiap Pod anggota harus memiliki container yang memproses port TCP 8080.
Secara default, container hello-app memproses port TCP
8080. Anda dapat melihatnya dengan melihat
Dockerfile dan kode sumber untuk aplikasi tersebut.
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
Dalam output sebelumnya, Anda dapat melihat bahwa Layanan Anda memiliki clusterIP, dan
loadBalancerIP. File ini juga memiliki port, dan targetPort.
clusterIP tidak relevan dengan latihan ini. loadBalancerIP adalah alamat IP yang dapat digunakan klien di luar cluster untuk memanggil Layanan.
Sebagai contoh, ambil nilai yang ditampilkan dalam output sebelumnya. Artinya, misalkan
Layanan Anda memiliki loadBalancerIP = 203.0.113.1, port = 80, dan
targetPort = 8080.
Klien mengirimkan permintaan ke 203.0.113.1 di port TCP 80. Permintaan akan dirutekan ke load balancer cluster. Load balancer meneruskan permintaan ke Pod anggota di port TCP 8080.
Panggil Layanan Anda:
curl LOAD_BALANCER_IP
Output menampilkan pesan Hello, world!:
curl 203.0.113.1 Hello, world! Version: 2.0.0 Hostname: my-deployment-dbd86c8c4-9wpbv
Menghapus Service Anda
Menghapus Service Anda:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG delete service my-service
Pastikan bahwa Layanan Anda telah dihapus:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get services
Output tidak lagi menampilkan my-service.
Menghapus Deployment
Hapus Deployment Anda:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG delete deployment my-deployment
Pastikan Deployment Anda telah dihapus:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get deployments
Output tidak lagi menampilkan my-deployment.