Halaman ini memberikan strategi deployment yang direkomendasikan untuk membangun aplikasi container Kubernetes yang andal dan memiliki ketersediaan tinggi (HA) di Google Distributed Cloud (GDC) yang terisolasi. Anda harus men-deploy aplikasi penampung di beberapa zona GDC dan mengonfigurasi replikasi penyimpanan asinkron sehingga aplikasi dan datanya dapat dipulihkan jika terjadi periode nonaktif yang tidak terduga atau bencana lokal.
Halaman ini ditujukan bagi developer dalam grup operator aplikasi, yang bertanggung jawab membuat workload aplikasi untuk organisasi mereka. Untuk mengetahui informasi selengkapnya, lihat dokumentasi Audiens untuk GDC yang terisolasi dari internet.
Tujuan
- Buat cluster Kubernetes di dua atau beberapa zona di GDC Anda.
- Konfigurasi load balancing global.
- Deploy workload container ke setiap cluster Kubernetes zonal.
- Sediakan penyimpanan dan lampirkan ke pod Anda.
- Mengonfigurasi replikasi penyimpanan asinkron, menggunakan penyimpanan blok atau penyimpanan objek.
Sebelum memulai
Pastikan Anda bekerja di semesta GDC dengan beberapa zona yang tersedia. Jalankan
gdcloud zones list
untuk mencantumkan zona yang tersedia di semesta Anda. Untuk mengetahui informasi selengkapnya, lihat Mencantumkan zona di semesta.Minta Admin IAM Organisasi Anda untuk memberi Anda peran berikut:
Peran Admin Namespace (
namespace-admin
) untuk membuat dan mengelola beban kerja penampung.Peran Admin Cluster Pengguna (
user-cluster-admin
) dan Developer Cluster Pengguna (user-cluster-developer
) untuk membuat dan mengelola cluster Kubernetes serta kumpulan nodenya.Peran Load Balancer Admin (
load-balancer-admin
) dan Global Load Balancer Admin (global-load-balancer-admin
). Anda harus memiliki peran ini untuk membuat dan mengelola load balancer.Peran Admin Global Replikasi Volume (
app-volume-replication-admin-global
). Anda harus memiliki peran ini untuk mengelola replikasi volume.Peran Global PNP Admin (
global-project-networkpolicy-admin
) untuk membuat dan mengelola kebijakan jaringan project di seluruh zona.Peran Harbor Instance Admin (
harbor-instance-admin
), Harbor Instance Viewer(harbor-instance-viewer
), dan Harbor Project Creator (harbor-project-creator
). Peran ini diperlukan untuk membuat dan mengelola image container di Artifact Registry.Peran Volume Replication Global Admin (
app-volume-replication-admin-global
) untuk mengelola hubungan replikasi volume untuk resource penyimpanan blok.Peran Project Bucket Object Admin (
project-bucket-object-admin
) dan Project Bucket Admin (project-bucket-admin
) untuk membuat dan mengelola bucket penyimpanan.
Lihat deskripsi peran untuk mengetahui informasi selengkapnya.
Instal dan konfigurasi gdcloud CLI, serta konfigurasi konteks zonal dan global Anda. Lihat Mengelola resource di seluruh zona untuk mengetahui informasi selengkapnya.
Instal dan konfigurasi kubectl CLI, dengan file kubeconfig yang sesuai yang ditetapkan untuk server API global, server API Pengelolaan, dan cluster Kubernetes. Lihat Membuat file kubeconfig secara manual untuk mengetahui informasi selengkapnya.
Membuat cluster Kubernetes di beberapa zona
Cluster Kubernetes adalah resource zonal, jadi Anda harus membuat cluster secara terpisah di setiap zona.
Konsol
Di menu navigasi, pilih Kubernetes Engine > Clusters.
Klik Create Cluster.
Di kolom Name, tentukan nama untuk cluster.
Pilih versi Kubernetes untuk cluster.
Pilih zona tempat cluster akan dibuat.
Klik Lampirkan Project dan pilih project yang ada untuk dilampirkan ke cluster Anda. Kemudian, klik Simpan. Anda dapat melampirkan atau melepaskan project setelah membuat cluster dari halaman Project details. Anda harus memiliki project yang dilampirkan ke cluster sebelum men-deploy beban kerja penampung.
Klik Berikutnya.
Konfigurasi setelan jaringan untuk cluster Anda. Anda tidak dapat mengubah setelan jaringan ini setelah membuat cluster. Protokol Internet default dan satu-satunya yang didukung untuk cluster Kubernetes adalah Internet Protocol versi 4 (IPv4).
Tentukan ukuran kumpulan alamat IP Load Balancer, seperti
20
.Pilih CIDR (Classless Inter-Domain Routing) Layanan yang akan digunakan. Layanan yang di-deploy, seperti load balancer, dialokasikan alamat IP dari rentang ini.
Pilih CIDR pod yang akan digunakan. Cluster mengalokasikan alamat IP dari rentang ini ke pod dan VM Anda.
Klik Berikutnya.
Tinjau detail kumpulan node default yang dibuat otomatis untuk cluster. Klik edit Edit untuk mengubah node pool default.
Untuk membuat kumpulan node tambahan, pilih Tambahkan kumpulan node. Saat mengedit node pool default atau menambahkan node pool baru, Anda dapat menyesuaikannya dengan opsi berikut:
- Tetapkan nama untuk kumpulan node. Anda tidak dapat mengubah nama setelah membuat node pool.
- Tentukan jumlah node pekerja yang akan dibuat di node pool.
Pilih kelas mesin yang paling sesuai dengan persyaratan workload Anda. Lihat daftar setelan berikut:
- Jenis mesin
- CPU
- Memori
Klik Simpan.
Klik Create untuk membuat cluster.
Ulangi langkah-langkah ini untuk setiap zona di semesta GDC Anda. Pastikan cluster Kubernetes berada di setiap zona yang Anda inginkan untuk strategi HA Anda.
API
Untuk membuat cluster Kubernetes baru menggunakan API secara langsung, terapkan resource kustom ke setiap zona GDC.
Buat resource kustom
Cluster
dan deploy ke server Management API untuk zona Anda:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF \ apiVersion: cluster.gdc.goog/v1 kind: Cluster metadata: name: CLUSTER_NAME namespace: platform spec: clusterNetwork: podCIDRSize: POD_CIDR serviceCIDRSize: SERVICE_CIDR initialVersion: kubernetesVersion: KUBERNETES_VERSION loadBalancer: ingressServiceIPSize: LOAD_BALANCER_POOL_SIZE nodePools: - machineTypeName: MACHINE_TYPE name: NODE_POOL_NAME nodeCount: NUMBER_OF_WORKER_NODES taints: TAINTS labels: LABELS acceleratorOptions: gpuPartitionScheme: GPU_PARTITION_SCHEME releaseChannel: channel: UNSPECIFIED EOF
Ganti kode berikut:
MANAGEMENT_API_SERVER
: jalur kubeconfig dari server Management API zonal. Untuk mengetahui informasi selengkapnya, lihat Beralih ke konteks zona.CLUSTER_NAME
: nama cluster. Nama cluster tidak boleh diakhiri dengan-system
. Akhiran-system
dicadangkan untuk cluster yang dibuat oleh GDC.POD_CIDR
: ukuran rentang jaringan tempat alamat IP virtual (VIP) pod dialokasikan. Jika tidak disetel, nilai default21
akan digunakan.SERVICE_CIDR
: ukuran rentang jaringan tempat VIP layanan dialokasikan. Jika tidak disetel, nilai default23
akan digunakan.KUBERNETES_VERSION
: versi Kubernetes cluster, seperti1.26.5-gke.2100
. Untuk mencantumkan versi Kubernetes yang tersedia untuk dikonfigurasi, lihat Mencantumkan versi Kubernetes yang tersedia untuk cluster.LOAD_BALANCER_POOL_SIZE
: ukuran kumpulan alamat IP yang tidak tumpang-tindih yang digunakan oleh layanan load balancer. Jika tidak disetel, nilai default20
akan digunakan.MACHINE_TYPE
: jenis mesin untuk node pekerja node pool. Lihat jenis mesin yang tersedia untuk mengetahui konfigurasi yang tersedia.NODE_POOL_NAME
: nama node pool.NUMBER_OF_WORKER_NODES
: jumlah node pekerja yang akan disediakan di node pool.TAINTS
: taint yang akan diterapkan ke node di node pool ini. Kolom ini bersifat opsional.LABELS
: label yang akan diterapkan ke node node pool ini. Objek ini berisi daftar key-value pair. Kolom ini bersifat opsional.GPU_PARTITION_SCHEME
: skema partisi GPU, jika Anda menjalankan beban kerja GPU, sepertimixed-2
. GPU tidak dipartisi jika kolom ini tidak ditetapkan. Untuk mengetahui profil GPU Multi-Instance (MIG) yang tersedia, lihat Profil MIG yang didukung.
Ulangi langkah sebelumnya untuk setiap zona yang ingin Anda gunakan untuk menghosting aplikasi penampung untuk strategi HA Anda.
Mengonfigurasi load balancer
Untuk mendistribusikan traffic antara pod Anda di zona yang berbeda, buat load balancer. Anda memiliki opsi untuk membuat load balancer eksternal (ELB) dan load balancer internal (ILB), yang keduanya dapat dikonfigurasi secara per zona atau global. Untuk contoh ini, konfigurasi ILB global dan ELB global untuk aplikasi penampung Anda.
Membuat load balancer internal global
Load balancer internal (ILB) mengekspos layanan dalam organisasi dari kumpulan alamat IP internal yang ditetapkan ke organisasi. Layanan ILB tidak pernah dapat diakses dari endpoint di luar organisasi.
Selesaikan langkah-langkah berikut untuk membuat ILB global bagi workload penampung Anda.
gdcloud
Buat ILB yang menargetkan beban kerja pod menggunakan gcloud CLI.
ILB ini menargetkan semua workload dalam project yang cocok dengan label yang ditentukan dalam objek Backend
. Resource kustom Backend
harus
ditetapkan cakupannya ke zona.
Untuk membuat ILB menggunakan gdcloud CLI, ikuti langkah-langkah berikut:
Buat resource
Backend
zonal di setiap zona tempat pod Anda berjalan untuk menentukan endpoint ILB:gdcloud compute backends create BACKEND_NAME \ --labels=LABELS \ --project=PROJECT \ --cluster=CLUSTER_NAME \ --zone=ZONE
Ganti kode berikut:
BACKEND_NAME
: nama yang dipilih untuk resource backend, sepertimy-backend
.LABELS
: pemilih yang menentukan endpoint mana antar-pod yang akan digunakan untuk resource backend ini, sepertiapp=web
.PROJECT
: nama project Anda.CLUSTER_NAME
: cluster Kubernetes yang menjadi batas cakupan pemilih yang ditentukan. Jika kolom ini tidak ditentukan, semua endpoint dengan label tertentu akan dipilih. Kolom ini bersifat opsional.ZONE
: zona yang akan digunakan untuk pemanggilan ini. Untuk menyetel sebelumnya tanda zona untuk semua perintah yang memerlukannya, jalankangdcloud config set core/zone ZONE
. Flag zona hanya tersedia di lingkungan multi-zona. Kolom ini bersifat opsional.
Ulangi langkah ini untuk setiap zona di semesta GDC Anda.
Buat resource
BackendService
global:gdcloud compute backend-services create BACKEND_SERVICE_NAME \ --project=PROJECT \ --target-ports=TARGET_PORTS \ --global
Ganti kode berikut:
BACKEND_SERVICE_NAME
: nama untuk layanan backend.PROJECT
: nama project Anda.TARGET_PORTS
: daftar port target yang dipisahkan koma yang diterjemahkan oleh layanan backend ini, dengan setiap port target menentukan protokol, port pada aturan penerusan, dan port pada instance backend. Anda dapat menentukan beberapa port target. Kolom ini harus dalam formatprotocol:port:targetport
, sepertiTCP:80:8080
. Kolom ini bersifat opsional.
Tambahkan resource
BackendService
ke resourceBackend
yang dibuat sebelumnya di setiap zona:gdcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --backend-zone=ZONE \ --backend=BACKEND_NAME \ --project=PROJECT \ --global
Ganti kode berikut:
BACKEND_SERVICE_NAME
: nama layanan backend global.ZONE
: zona backend.BACKEND_NAME
: nama backend zona.PROJECT
: nama project Anda.
Selesaikan langkah ini untuk setiap backend zonal yang Anda buat sebelumnya.
Buat resource
ForwardingRule
internal yang menentukan alamat IP virtual (VIP) tempat layanan tersedia:gdcloud compute forwarding-rules create FORWARDING_RULE_INTERNAL_NAME \ --backend-service=BACKEND_SERVICE_NAME \ --cidr=CIDR \ --ip-protocol-port=PROTOCOL_PORT \ --load-balancing-scheme=INTERNAL \ --project=PROJECT \ --global
Ganti kode berikut:
FORWARDING_RULE_INTERNAL_NAME
: nama untuk aturan penerusan.CIDR
: CIDR yang akan digunakan untuk aturan penerusan. Kolom ini bersifat opsional. Jika tidak ditentukan, CIDRIPv4/32
akan otomatis dicadangkan dari kumpulan alamat IP global. Tentukan nama resourceSubnet
dalam namespace yang sama dengan aturan penerusan ini. ResourceSubnet
merepresentasikan informasi permintaan dan alokasi subnet global. Untuk mengetahui informasi selengkapnya tentang resourceSubnet
, lihat Mengelola subnet.PROTOCOL_PORT
: protokol dan port yang akan diekspos pada aturan penerusan. Kolom ini harus dalam formatip-protocol=TCP:80
. Port yang diekspos harus sama dengan port yang diekspos aplikasi sebenarnya di dalam container.
Untuk memvalidasi ILB yang dikonfigurasi, konfirmasi kondisi
Ready
pada setiap objek yang dibuat. Verifikasi traffic dengan permintaancurl
ke VIP:Untuk mendapatkan VIP yang ditetapkan, jelaskan aturan penerusan:
gdcloud compute forwarding-rules describe FORWARDING_RULE_INTERNAL_NAME --global
Verifikasi traffic dengan permintaan
curl
ke VIP di port yang ditentukan dalam kolom di aturan penerusan:curl http://FORWARDING_RULE_VIP:PORT
Ganti kode berikut:
FORWARDING_RULE_VIP
: VIP aturan penerusan.PORT
: nomor port aturan penerusan.
API
Buat ILB yang menargetkan beban kerja penampung menggunakan KRM API. ILB ini menargetkan
semua beban kerja dalam project yang cocok dengan label yang ditentukan dalam
objek Backend
. Untuk membuat ILB global menggunakan KRM API, ikuti langkah-langkah berikut:
Buat resource
Backend
untuk menentukan endpoint ILB. BuatBackend
resource untuk setiap zona tempat workload container ditempatkan:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.gdc.goog/v1 kind: Backend metadata: namespace: PROJECT name: BACKEND_NAME spec: clusterName: CLUSTER_NAME endpointsLabels: matchLabels: app: APP_NAME EOF
Ganti kode berikut:
MANAGEMENT_API_SERVER
: jalur kubeconfig server Management API zonal. Untuk mengetahui informasi selengkapnya, lihat Beralih ke konteks zona.PROJECT
: nama project Anda.BACKEND_NAME
: nama resourceBackend
.CLUSTER_NAME
: cluster Kubernetes yang menjadi batas cakupan pemilih yang ditentukan. Jika kolom ini tidak ditentukan, semua endpoint dengan label tertentu akan dipilih. Kolom ini bersifat opsional.APP_NAME
: nama aplikasi container Anda.
Anda dapat menggunakan resource
Backend
yang sama untuk setiap zona, atau membuat resourceBackend
dengan kumpulan label yang berbeda untuk setiap zona.Buat objek
BackendService
menggunakan resourceBackend
yang dibuat sebelumnya. Pastikan untuk menyertakan resourceHealthCheck
:kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: BackendService metadata: namespace: PROJECT name: BACKEND_SERVICE_NAME spec: backendRefs: - name: BACKEND_NAME zone: ZONE healthCheckName: HEALTH_CHECK_NAME targetPorts: - port: PORT protocol: PROTOCOL targetPort: TARGET_PORT EOF
Ganti kode berikut:
GLOBAL_API_SERVER
: jalur kubeconfig dari jalur kubeconfig server API global.PROJECT
: nama project Anda.BACKEND_SERVICE_NAME
: nama yang dipilih untuk resourceBackendService
.HEALTH_CHECK_NAME
: nama resourceHealthCheck
yang Anda buat sebelumnya.BACKEND_NAME
: nama resourceBackend
zonal.ZONE
: zona tempat resourceBackend
berada. Anda dapat menentukan beberapa backend di kolombackendRefs
. Misalnya:- name: my-backend-1 zone: us-east1-a - name: my-backend-2 zone: us-east1-b
Kolom
targetPorts
bersifat opsional. Resource ini mencantumkan port yang diterjemahkan oleh resourceBackendService
ini. Jika Anda menggunakan objek ini, berikan nilai untuk berikut ini:PORT
: port yang diekspos oleh layanan.PROTOCOL
: protokol Layer-4 yang harus cocok dengan traffic. Hanya TCP dan UDP yang didukung.TARGET_PORT
: port yang menjadi tujuan terjemahan nilai, seperti8080
. Nilai tidak boleh diulang dalam objek tertentu.Contoh untuk
targetPorts
mungkin terlihat seperti berikut:targetPorts: - port: 80 protocol: TCP targetPort: 8080
Buat resource
ForwardingRule
internal yang menentukan alamat IP virtual (VIP) tempat layanan tersedia.kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ForwardingRuleInternal metadata: namespace: PROJECT name: FORWARDING_RULE_INTERNAL_NAME spec: cidrRef: CIDR ports: - port: PORT protocol: PROTOCOL backendServiceRef: name: BACKEND_SERVICE_NAME EOF
Ganti kode berikut:
GLOBAL_API_SERVER
: jalur kubeconfig dari jalur kubeconfig server API global.PROJECT
: nama project Anda.FORWARDING_RULE_INTERNAL_NAME
: nama yang dipilih untuk resourceForwardingRuleInternal
Anda.CIDR
: CIDR yang akan digunakan untuk aturan penerusan. Kolom ini bersifat opsional. Jika tidak ditentukan, CIDRIPv4/32
akan otomatis dicadangkan dari kumpulan alamat IP global. Tentukan nama resourceSubnet
dalam namespace yang sama dengan aturan penerusan ini. ResourceSubnet
merepresentasikan informasi permintaan dan alokasi subnet global. Untuk mengetahui informasi selengkapnya tentang resourceSubnet
, lihat Mengelola subnet.PORT
: port yang akan diekspos pada aturan penerusan. Gunakan kolomports
untuk menentukan array port L4 yang paketnya diteruskan ke backend yang dikonfigurasi dengan aturan penerusan ini. Setidaknya satu port harus ditentukan. Gunakan kolomport
untuk menentukan nomor port. Port yang diekspos harus sama dengan port yang diekspos oleh aplikasi sebenarnya di dalam container.PROTOCOL
: protokol yang akan digunakan untuk aturan penerusan, sepertiTCP
. Entri dalam arrayports
harus terlihat seperti berikut:ports: - port: 80 protocol: TCP
Untuk memvalidasi ILB yang dikonfigurasi, konfirmasi kondisi
Ready
pada setiap objek yang dibuat. Verifikasi traffic dengan permintaancurl
ke VIP:Ambil VIP:
kubectl get forwardingruleinternal -n PROJECT
Outputnya akan terlihat seperti berikut:
NAME BACKENDSERVICE CIDR READY ilb-name BACKEND_SERVICE_NAME 192.0.2.0/32 True
Uji traffic dengan permintaan
curl
ke VIP di port yang ditentukan di kolom dalam aturan penerusan:curl http://FORWARDING_RULE_VIP:PORT
Ganti kode berikut:
FORWARDING_RULE_VIP
: VIP aturan penerusan.PORT
: nomor port kolom dalam aturan penerusan.
Membuat load balancer eksternal global
Load balancer eksternal (ELB) mengekspos layanan untuk diakses dari luar organisasi dari kumpulan alamat IP yang ditetapkan ke organisasi dari kumpulan alamat IP eksternal instance yang lebih besar.
Selesaikan langkah-langkah berikut untuk membuat ELB global bagi workload penampung Anda.
gdcloud
Gunakan gdcloud CLI untuk membuat ELB global yang menargetkan semua beban kerja dalam project yang cocok dengan label yang ditentukan dalam objek Backend
.
Resource kustom Backend
harus memiliki cakupan zona.
Agar layanan ELB berfungsi, Anda harus mengonfigurasi dan menerapkan kebijakan transfer data
ProjectNetworkPolicy
yang disesuaikan sendiri untuk mengizinkan traffic ke beban kerja layanan ELB ini. Kebijakan jaringan mengontrol akses ke beban kerja Anda, bukan load balancer itu sendiri. ELB mengekspos workload ke jaringan pelanggan Anda, sehingga memerlukan kebijakan jaringan eksplisit untuk mengizinkan traffic eksternal ke port workload, seperti8080
.Tentukan alamat CIDR eksternal untuk mengizinkan traffic ke beban kerja ELB ini:
kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ProjectNetworkPolicy metadata: namespace: PROJECT name: allow-inbound-traffic-from-external spec: policyType: Ingress subject: subjectType: UserWorkload ingress: - from: - ipBlock: cidr: CIDR ports: - protocol: TCP port: PORT EOF
Ganti kode berikut:
GLOBAL_API_SERVER
: jalur kubeconfig server API global. Jika Anda belum membuat file kubeconfig untuk server API global, lihat Membuat file kubeconfig secara manual untuk mengetahui detailnya.PROJECT
: nama project Anda.CIDR
: CIDR eksternal yang diperlukan ELB untuk diakses. Kebijakan ini diperlukan karena load balancer eksternal menggunakan Direct Server Return (DSR), yang mempertahankan alamat IP eksternal sumber dan melewati load balancer di jalur kembali. Untuk mengetahui informasi selengkapnya, lihat Membuat aturan firewall ingress global untuk traffic lintas organisasi.PORT
: port backend pada pod di belakang load balancer. Nilai ini dapat ditemukan di kolom.spec.ports[].targetPortfield
manifes untuk resourceService
. Kolom ini bersifat opsional.
Konfigurasi ini memberikan akses semua resource di dalam project ke rentang CIDR yang ditentukan.
Buat resource
Backend
di setiap zona untuk menentukan endpoint bagi ELB:gdcloud compute backends create BACKEND_NAME \ --labels=LABELS \ --project=PROJECT \ --cluster=CLUSTER_NAME \ --zone=ZONE
Ganti kode berikut:
BACKEND_NAME
: nama untuk resource backend, sepertimy-backend
.LABELS
: pemilih yang menentukan endpoint antar-pod yang akan digunakan untuk resource backend ini, sepertiapp=web
.PROJECT
: nama project Anda.CLUSTER_NAME
: cluster Kubernetes yang menjadi batas cakupan pemilih yang ditentukan. Jika kolom ini tidak ditentukan, semua endpoint dengan label tertentu akan dipilih. Kolom ini bersifat opsional.ZONE
: zona yang akan digunakan untuk pemanggilan ini. Untuk menyetel sebelumnya tanda zona untuk semua perintah yang memerlukannya, jalankangdcloud config set core/zone ZONE
. Flag zona hanya tersedia di lingkungan multi-zona. Kolom ini bersifat opsional.
Anda dapat menggunakan resource
Backend
yang sama untuk setiap zona, atau membuat resourceBackend
dengan kumpulan label yang berbeda untuk setiap zona.Buat resource
BackendService
global:gdcloud compute backend-services create BACKEND_SERVICE_NAME \ --project=PROJECT \ --target-ports=TARGET_PORTS \ --health-check=HEALTH_CHECK_NAME \ --global
Ganti kode berikut:
BACKEND_SERVICE_NAME
: nama yang dipilih untuk layanan backend ini.PROJECT
: nama project Anda.TARGET_PORTS
: daftar port target yang dipisahkan koma yang diterjemahkan oleh layanan backend ini, dengan setiap port target menentukan protokol, port pada aturan penerusan, dan port pada instance backend. Anda dapat menentukan beberapa port target. Kolom ini harus dalam formatprotocol:port:targetport
, sepertiTCP:80:8080
. Kolom ini bersifat opsional.HEALTH_CHECK_NAME
: nama resource health check. Kolom ini bersifat opsional.
Tambahkan resource
BackendService
global ke resourceBackend
zonal yang dibuat sebelumnya:gdcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --backend=BACKEND_NAME \ --backend-zone=ZONE \ --project=PROJECT \ --global
Selesaikan langkah ini untuk setiap backend zonal yang Anda buat sebelumnya.
Buat resource
ForwardingRule
eksternal yang menentukan VIP tempat layanan tersedia:gdcloud compute forwarding-rules create FORWARDING_RULE_EXTERNAL_NAME \ --backend-service=BACKEND_SERVICE_NAME \ --cidr=CIDR \ --ip-protocol-port=PROTOCOL_PORT \ --load-balancing-scheme=EXTERNAL \ --project=PROJECT \ --global
Ganti kode berikut:
FORWARDING_RULE_EXTERNAL_NAME
: nama untuk aturan penerusan.CIDR
: CIDR yang akan digunakan untuk aturan penerusan. Kolom ini bersifat opsional. Jika tidak ditentukan, CIDRIPv4/32
akan otomatis dicadangkan dari kumpulan alamat IP global. Tentukan nama resourceSubnet
dalam namespace yang sama dengan aturan penerusan ini. ResourceSubnet
merepresentasikan informasi permintaan dan alokasi subnet global. Untuk mengetahui informasi selengkapnya tentang resourceSubnet
, lihat Mengelola subnet.PROTOCOL_PORT
: protokol dan port yang akan diekspos pada aturan penerusan. Kolom ini harus dalam formatip-protocol=TCP:80
. Port yang diekspos harus sama dengan yang diekspos aplikasi sebenarnya di dalam container.PROJECT
: nama project Anda.
Untuk memvalidasi ELB yang dikonfigurasi, konfirmasi kondisi
Ready
pada setiap objek yang dibuat. Verifikasi traffic dengan permintaancurl
ke VIP:Untuk mendapatkan VIP yang ditetapkan, jelaskan aturan penerusan:
gdcloud compute forwarding-rules describe FORWARDING_RULE_EXTERNAL_NAME
Verifikasi traffic dengan permintaan
curl
ke VIP di port yang ditentukan di kolomPROTOCOL_PORT
dalam aturan penerusan:curl http://FORWARDING_RULE_VIP:PORT
Ganti kode berikut:
FORWARDING_RULE_VIP
: VIP aturan penerusan.PORT
: nomor port dari kolomPROTOCOL_PORT
dalam aturan penerusan.
API
Buat ELB yang menargetkan beban kerja pod menggunakan KRM API. ELB ini menargetkan semua workload dalam project yang cocok dengan label yang ditentukan dalam objek Backend
. Untuk membuat ELB zona menggunakan KRM API, ikuti langkah-langkah berikut:
Agar layanan ELB berfungsi, Anda harus mengonfigurasi dan menerapkan kebijakan transfer data
ProjectNetworkPolicy
yang disesuaikan sendiri untuk mengizinkan traffic ke beban kerja layanan ELB ini. Kebijakan jaringan mengontrol akses ke beban kerja Anda, bukan load balancer itu sendiri. ELB mengekspos workload ke jaringan pelanggan Anda, sehingga memerlukan kebijakan jaringan eksplisit untuk mengizinkan traffic eksternal ke port workload, seperti8080
.Tentukan alamat CIDR eksternal untuk mengizinkan traffic ke beban kerja ELB ini:
kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ProjectNetworkPolicy metadata: namespace: PROJECT name: allow-inbound-traffic-from-external spec: policyType: Ingress subject: subjectType: UserWorkload ingress: - from: - ipBlock: cidr: CIDR ports: - protocol: TCP port: PORT EOF
Ganti kode berikut:
GLOBAL_API_SERVER
: jalur kubeconfig server API global. Jika Anda belum membuat file kubeconfig untuk server API global, lihat Membuat file kubeconfig secara manual untuk mengetahui detailnya.PROJECT
: nama project Anda.CIDR
: CIDR eksternal yang diperlukan ELB untuk diakses. Kebijakan ini diperlukan karena load balancer eksternal menggunakan Direct Server Return (DSR), yang mempertahankan alamat IP eksternal sumber dan melewati load balancer di jalur kembali. Untuk mengetahui informasi selengkapnya, lihat Membuat aturan firewall ingress global untuk traffic lintas organisasi.PORT
: port backend pada pod di belakang load balancer. Nilai ini dapat ditemukan di kolom.spec.ports[].targetPortfield
manifes untuk resourceService
. Kolom ini bersifat opsional.
Buat resource
Backend
untuk menentukan endpoint bagi ELB. Buat resourceBackend
untuk setiap zona tempat workload ditempatkan:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.gdc.goog/v1 kind: Backend metadata: namespace: PROJECT name: BACKEND_NAME spec: clusterName: CLUSTER_NAME endpointsLabels: matchLabels: app: APP_NAME EOF
Ganti kode berikut:
MANAGEMENT_API_SERVER
: jalur kubeconfig server Management API zonal. Jika Anda belum membuat file kubeconfig untuk server API di zona target, lihat Membuat file kubeconfig secara manual untuk mengetahui detailnya.PROJECT
: nama project Anda.BACKEND_NAME
: nama resourceBackend
.CLUSTER_NAME
: cluster Kubernetes yang menjadi batas cakupan pemilih yang ditentukan. Jika kolom ini tidak ditentukan, semua endpoint dengan label tertentu akan dipilih. Kolom ini bersifat opsional.APP_NAME
: nama aplikasi container Anda.
Anda dapat menggunakan resource
Backend
yang sama untuk setiap zona, atau membuat resourceBackend
dengan kumpulan label yang berbeda untuk setiap zona.Buat objek
BackendService
menggunakan resourceBackend
yang dibuat sebelumnya:kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: BackendService metadata: namespace: PROJECT name: BACKEND_SERVICE_NAME spec: backendRefs: - name: BACKEND_NAME zone: ZONE healthCheckName: HEALTH_CHECK_NAME EOF
Ganti kode berikut:
BACKEND_SERVICE_NAME
: nama yang dipilih untuk resourceBackendService
.HEALTH_CHECK_NAME
: nama resourceHealthCheck
yang Anda buat sebelumnya. Jangan sertakan kolom ini jika Anda mengonfigurasi ELB untuk workload pod.ZONE
: zona tempat resourceBackend
berada. Anda dapat menentukan beberapa backend di kolombackendRefs
. Misalnya:
- name: my-backend-1 zone: us-east1-a - name: my-backend-2 zone: us-east1-b
Buat resource
ForwardingRule
eksternal yang menentukan VIP tempat layanan tersedia.kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ForwardingRuleExternal metadata: namespace: PROJECT name: FORWARDING_RULE_EXTERNAL_NAME spec: cidrRef: CIDR ports: - port: PORT protocol: PROTOCOL backendServiceRef: name: BACKEND_SERVICE_NAME EOF
Ganti kode berikut:
FORWARDING_RULE_EXTERNAL_NAME
: nama yang dipilih untuk resourceForwardingRuleExternal
.CIDR
: CIDR yang akan digunakan untuk aturan penerusan. Kolom ini bersifat opsional. Jika tidak ditentukan, CIDRIPv4/32
akan otomatis dicadangkan dari kumpulan alamat IP global. Tentukan nama resourceSubnet
dalam namespace yang sama dengan aturan penerusan ini. ResourceSubnet
merepresentasikan informasi permintaan dan alokasi subnet global. Untuk mengetahui informasi selengkapnya tentang resourceSubnet
, lihat Mengelola subnet.PORT
: port yang akan diekspos pada aturan penerusan. Gunakan kolomports
untuk menentukan array port L4 yang paketnya diteruskan ke backend yang dikonfigurasi dengan aturan penerusan ini. Setidaknya satu port harus ditentukan. Gunakan kolomport
untuk menentukan nomor port. Port yang diekspos harus sama dengan yang diekspos oleh aplikasi sebenarnya di dalam container.PROTOCOL
: protokol yang akan digunakan untuk aturan penerusan, sepertiTCP
. Entri dalam arrayports
harus terlihat seperti berikut:
ports: - port: 80 protocol: TCP
Untuk memvalidasi ELB yang dikonfigurasi, konfirmasi kondisi
Ready
pada setiap objek yang dibuat. Coba dan uji traffic dengan permintaancurl
ke VIP.Ambil VIP untuk project:
kubectl get forwardingruleexternal -n PROJECT
Outputnya akan terlihat seperti berikut:
NAME BACKENDSERVICE CIDR READY elb-name BACKEND_SERVICE_NAME 192.0.2.0/32 True
Verifikasi traffic dengan permintaan curl ke VIP di port yang ditentukan di kolom
PORT
dalam aturan penerusan:curl http://FORWARDING_RULE_VIP:PORT
Ganti
FORWARDING_RULE_VIP:PORT
dengan VIP dan port aturan penerusan, seperti192.0.2.0:80
.
Men-deploy workload container ke setiap cluster zonal
Beban kerja penampung bukan merupakan resource global, yang berarti Anda harus men-deploy setiap aplikasi penampung secara terpisah ke dalam cluster Kubernetes zonal.
Login ke zona yang menghosting cluster Kubernetes Anda:
gdcloud config set core/zone ZONE
Verifikasi bahwa image container Anda tersedia dari registry Harbor terkelola. Untuk mengetahui informasi selengkapnya, lihat tutorial Men-deploy aplikasi container.
Buat file manifes untuk workload container Anda dan deploy ke cluster Kubernetes zonal Anda:
kubectl --kubeconfig KUBERNETES_CLUSTER -n PROJECT \ apply -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: DEPLOYMENT_NAME spec: replicas: NUMBER_OF_REPLICAS selector: matchLabels: run: APP_NAME template: metadata: labels: run: APP_NAME spec: containers: - name: CONTAINER_NAME image: HARBOR_INSTANCE_URL/HARBOR_PROJECT_NAME/IMAGE:TAG EOF
Ganti kode berikut:
KUBERNETES_CLUSTER
: file kubeconfig untuk cluster Kubernetes zonal tempat Anda men-deploy workload container. Jika Anda belum membuat file kubeconfig untuk cluster Kubernetes zonal, lihat Membuat file kubeconfig secara manual untuk mengetahui detailnya.PROJECT
: namespace project tempat men-deploy workload container.DEPLOYMENT_NAME
: nama deployment container Anda.NUMBER_OF_REPLICAS
: jumlah objekPod
replika yang dikelola deployment.APP_NAME
: nama aplikasi yang akan dijalankan dalam deployment.CONTAINER_NAME
: nama container.HARBOR_INSTANCE_URL
: URL instance Harbor, sepertiharbor-1.org-1.zone1.google.gdc.test.
Untuk mengambil URL instance Harbor, lihat Melihat instance registry Harbor.HARBOR_PROJECT_NAME
: nama project Harbor, sepertimy-project
.IMAGE
: nama gambar, sepertinginx
.TAG
: tag untuk versi image yang ingin Anda tarik, seperti1.0
.
Ulangi langkah-langkah sebelumnya untuk setiap zona di semesta GDC Anda. Pastikan aplikasi penampung Anda berada di setiap zona yang Anda inginkan untuk strategi HA.
Mengekspos aplikasi container menggunakan Kubernetes
Anda harus mengekspos aplikasi penampung untuk mengizinkan akses ke aplikasi tersebut dari resource lain di semesta GDC Anda.
Buat resource
Service
daritype: LoadBalancer
. Resource ini mengekspos pod aplikasi Anda melalui jaringan.kubectl --kubeconfig KUBERNETES_CLUSTER -n PROJECT \ apiVersion: v1 kind: Service metadata: name: SERVICE_NAME spec: selector: app: APP_NAME ports: - port: 80 protocol: TCP type: LoadBalancer EOF
Ganti kode berikut:
KUBERNETES_CLUSTER
: file kubeconfig untuk cluster Kubernetes zonal tempat Anda men-deploy workload container.PROJECT
: namespace project tempat workload container Anda berada.SERVICE_NAME
: nama layanan load balancer.APP_NAME
: label yang Anda terapkan untuk aplikasi penampung.
Buat resource kustom
NetworkPolicy
untuk mengizinkan semua traffic jaringan ke namespace default:kubectl --kubeconfig KUBERNETES_CLUSTER -n PROJECT \ apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: annotations: name: allow-all spec: ingress: - from: - ipBlock: cidr: 0.0.0.0/0 podSelector: {} policyTypes: - Ingress EOF
Menyediakan penyimpanan persisten untuk pod Anda
Anda harus membuat resource PersistentVolumeClaim
(PVC) untuk menyediakan penyimpanan persisten bagi pod aplikasi.
Petunjuk berikut menunjukkan cara membuat volume menggunakan
GDC standard-rwo
StorageClass
.
Buat resource
PersistentVolumeClaim
Misalnya, konfigurasikan dengan mode aksesReadWriteOnce
dan kelas penyimpananstandard-rwo
:kubectl --kubeconfig KUBERNETES_CLUSTER \ --namespace PROJECT apply -f - <<EOF apiVersion: v1 kind: PersistentVolumeClaim metadata: name: PVC_NAME spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: standard-rwo EOF
Ganti kode berikut:
KUBERNETES_CLUSTER
: file kubeconfig untuk cluster Kubernetes.PROJECT
: namespace project tempat PVC akan dibuat.PVC_NAME
: nama objekPersistentVolumeClaim
.
Objek
PersistentVolume
(PV) disediakan secara dinamis. Periksa status PV baru di cluster Kubernetes Anda:kubectl get pv --kubeconfig KUBERNETES_CLUSTER
Outputnya mirip dengan hal berikut ini:
NAME CAPACITY ACCESS MODES STATUS CLAIM STORAGECLASS AGE pvc-uuidd 10Gi RWO Bound pvc-name standard-rwo 60s
Konfigurasi workload container Anda untuk menggunakan PVC. Berikut adalah contoh manifes pod yang menggunakan PVC
standard-rwo
:kubectl --kubeconfig KUBERNETES_CLUSTER \ --namespace PROJECT apply -f - <<EOF apiVersion: apps/v1 kind: Pod metadata: name: web-server-deployment labels: app: APP_LABEL spec: containers: - name: CONTAINER_NAME image: HARBOR_INSTANCE_URL/HARBOR_PROJECT_NAME/IMAGE:TAG volumeMounts: - mountPath: MOUNT_PATH name: data volumes: - name: data persistentVolumeClaim: claimName: PVC_NAME EOF
Ganti kode berikut:
KUBERNETES_CLUSTER
: file kubeconfig untuk cluster Kubernetes tempat Anda men-deploy workload container.PROJECT
: namespace project tempat PVC berada.APP_LABEL
: label yang Anda terapkan untuk aplikasi penampung.CONTAINER_NAME
: nama container.HARBOR_INSTANCE_URL
: URL instance Harbor, sepertiharbor-1.org-1.zone1.google.gdc.test.
Untuk mengambil URL instance Harbor, lihat Melihat instance registry Harbor.HARBOR_PROJECT_NAME
: nama project Harbor, sepertimy-project
.IMAGE
: nama gambar, sepertinginx
.TAG
: tag untuk versi image yang ingin Anda tarik, seperti1.0
.MOUNT_PATH
: jalur di dalam pod untuk memasang volume Anda.PVC_NAME
: PVC yang Anda buat.
Mengonfigurasi replikasi penyimpanan asinkron
Universe multi-zona GDC menawarkan penggunaan resource penyimpanan yang direplikasi seperti volume dan bucket dalam mode asinkron untuk skenario pemulihan dari bencana. Opsi resource penyimpanan ini menyediakan replikasi data asinkron antara dua zona mana pun di region yang sama. Replikasi asinkron terjadi di latar belakang, sehingga memberikan tujuan titik pemulihan (RPO) yang rendah, tetapi tidak nol, jika terjadi bencana. Semua data yang direplikasi bersifat online dan dapat diakses langsung, tetapi mungkin memerlukan prosedur failover manual untuk mengaktifkan penulisan di zona sekunder.
Anda dapat memilih salah satu jenis replikasi penyimpanan asinkron berikut untuk aplikasi penampung Anda:
Membuat bucket zona ganda untuk penyimpanan objek
Data penyimpanan objek ditulis ke satu bucket yang datanya disimpan di kedua zona. Karena data disalin secara asinkron di seluruh zona, zona mungkin tidak berisi versi objek yang sama pada waktu tertentu, tetapi pada akhirnya akan menjadi setara jika tidak ada perubahan tambahan yang dilakukan. Tidak seperti replikasi volume, bucket yang direplikasi dapat ditulis selama partisi zona. Setiap penulisan ke objek menghasilkan versi yang berbeda, dan versi terbaru di kedua zona akan menjadi status akhir setelah konektivitas dipulihkan.
Verifikasi bahwa Operator Infrastruktur (IO) Anda telah membuat resource kustom
BucketLocationConfig
, yang diperlukan untuk replikasi asinkron di seluruh zona untuk penyimpanan objek. Resource ini harus di-deploy ke server API global root.Buat resource kustom
Bucket
zona ganda:kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: object.global.gdc.goog/v1 kind: Bucket metadata: name: BUCKET_NAME namespace: PROJECT spec: location: LOCATION_NAME description: Sample DZ Bucket storageClass: Standard EOF
Ganti kode berikut:
GLOBAL_API_SERVER
: file kubeconfig untuk server API global.BUCKET_NAME
: nama bucket penyimpanan.PROJECT
: nama project tempat bucket berada.LOCATION_NAME
: tempat fisik tempat data objek dalam bucket berada. Atribut ini harus dipetakan ke nama resourceBucketLocation
yang ada. Untuk mengkueri server API global organisasi Anda guna mendapatkan daftar resourceBucketLocation
yang tersedia, jalankankubectl --kubeconfig GLOBAL_API_SERVER bucketlocations
. Jika tidak ada resourceBucketLocation
, hubungi IO Anda untuk memverifikasi bahwa mereka telah mengaktifkan replikasi asinkron.
Mengonfigurasi replikasi block storage asinkron di seluruh zona
Penyimpanan blok yang direplikasi menyediakan volume (PV) yang direplikasi secara asinkron, yang mempertahankan kesetaraan blok antara volume utama dan sekunder. Karena sifat asinkron, volume sekunder mencerminkan status zona primer pada suatu waktu di masa lalu (RPO bukan nol). Volume sekunder tidak dapat di-mount selama volume tersebut tetap menjadi target replikasi, sehingga memerlukan intervensi manual untuk mengakhiri hubungan dan memungkinkan penulisan terjadi.
Anda harus mengonfigurasi hubungan replikasi penyimpanan di seluruh zona untuk membuat data yang direplikasi yang tersedia untuk failover jika data zona sumber menjadi tidak tersedia. Hal ini relevan jika Anda menggunakan penyimpanan blok untuk aplikasi penampung.
Sebelum memulai, pastikan Operator Infrastruktur (IO) Anda telah membuat dan mengonfigurasi resource kustom StorageClusterPeering
dan StorageVirtualMachinePeering
untuk memungkinkan replikasi penyimpanan blok di seluruh zona. Resource ini
harus di-deploy ke server API global root.
Buat file YAML resource kustom
VolumeReplicationRelationship
dan deploy ke server API global:kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: storage.global.gdc.goog/v1 kind: VolumeReplicationRelationship metadata: name: PVC_REPL_NAME namespace: PROJECT spec: source: pvc: clusterRef: SOURCE_PVC_CLUSTER pvcRef: SOURCE_PVC zoneRef: SOURCE_ZONE destination: pvc: clusterRef: DEST_PVC_CLUSTER zoneRef: DEST_ZONE EOF
Ganti kode berikut:
GLOBAL_API_SERVER
: file kubeconfig untuk server API global.PVC_REPL_NAME
: nama hubungan replikasi volume.PROJECT
: project tempat infrastruktur penyimpanan berada.SOURCE_PVC_CLUSTER
: cluster Kubernetes tempat PVC dihosting.SOURCE_PVC
: PVC di zona sumber yang akan direplikasi.SOURCE_ZONE
: zona sumber tempat PVC dihosting.DEST_PVC_CLUSTER
: cluster Kubernetes tujuan untuk mereplikasi PVC.DEST_ZONE
: zona tujuan untuk mereplikasi PVC ke.
Buat resource kustom
VolumeFailover
di zona tujuan, yang menghentikan replikasi ke zona tujuan jika zona sumber tidak tersedia karena alasan apa pun:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: storage.gdc.goog/v1 kind: VolumeFailover metadata: name: PVC_FAILOVER_NAME namespace: PROJECT spec: volumeReplicationRelationshipRef: PVC_REPL_NAME EOF
Ganti kode berikut:
MANAGEMENT_API_SERVER
: file kubeconfig server Management API zonal.PVC_FAILOVER_NAME
: nama failover PVC.PROJECT
: project tempat infrastruktur penyimpanan berada.PVC_REPL_NAME
: nama hubungan replikasi volume.