Halaman ini menjelaskan langkah-langkah untuk men-deploy workload di hardware yang terhubung ke Google Distributed Cloud dan batasan yang harus Anda patuhi saat mengonfigurasi workload.
Sebelum menyelesaikan langkah-langkah ini, Anda harus memenuhi persyaratan penginstalan yang terhubung ke Distributed Cloud dan memesan hardware Distributed Cloud.
Saat hardware Google Distributed Cloud terhubung tiba di tujuan yang Anda pilih, hardware tersebut telah dikonfigurasi sebelumnya dengan hardware, Google Cloud, dan beberapa setelan jaringan yang Anda tentukan saat memesan Distributed Cloud terhubung.
Penginstal Google menyelesaikan penginstalan fisik, dan administrator sistem Anda menghubungkan Distributed Cloud yang terhubung ke jaringan lokal Anda.
Setelah hardware terhubung ke jaringan lokal, hardware akan berkomunikasi dengan Google Cloud untuk mendownload update software dan terhubung dengan project Google Cloud Anda. Kemudian, Anda siap menyediakan kumpulan node dan men-deploy workload di Distributed Cloud terhubung.
Ringkasan deployment
Untuk men-deploy workload di hardware yang terhubung ke Distributed Cloud Anda, selesaikan langkah-langkah berikut:
Opsional: Aktifkan Distributed Cloud Edge Network API.
Opsional: Lakukan inisialisasi konfigurasi jaringan zona terhubung Distributed Cloud Anda.
Opsional: Konfigurasi jaringan Distributed Cloud.
Opsional: Aktifkan dukungan untuk kunci enkripsi yang dikelola pelanggan (CMEK) untuk penyimpanan lokal jika Anda ingin berintegrasi dengan Cloud Key Management Service untuk mengaktifkan dukungan CMEK untuk data beban kerja Anda. Untuk mengetahui informasi tentang cara Distributed Cloud terhubung mengenkripsi data workload, lihat Keamanan penyimpanan lokal.
Buat node pool. Pada langkah ini, Anda menetapkan node ke node pool dan secara opsional mengonfigurasi node pool untuk menggunakan Cloud KMS guna mengenkripsi dan mendekripsi frasa sandi Linux Unified Key Setup (LUKS) untuk mengenkripsi data workload.
Dapatkan kredensial untuk cluster guna menguji cluster.
Beri pengguna akses ke cluster dengan menetapkan peran Edge Container Viewer (
roles/edgecontainer.viewer) atau peran Edge Container Admin (roles/edgecontainer.admin) pada project.Opsional: Aktifkan dukungan GPU untuk menjalankan workload berbasis GPU di Distributed Cloud terhubung.
Men-deploy load balancer NGINX sebagai layanan
Contoh berikut mengilustrasikan cara men-deploy server NGINX dan mengeksposnya sebagai layanan di cluster yang terhubung Distributed Cloud:
Buat file YAML bernama
nginx-deployment.yamldengan konten berikut:apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80
Terapkan file YAML ke cluster menggunakan perintah berikut:
kubectl apply -f nginx-deployment.yaml
Buat file YAML bernama
nginx-service.yamldengan konten berikut:apiVersion: v1 kind: Service metadata: name: nginx-service spec: type: LoadBalancer selector: app: nginx ports: - protocol: TCP port: 8080 targetPort: 80
Terapkan file YAML ke cluster menggunakan perintah berikut:
kubectl apply -f nginx-deployment.yaml
Dapatkan alamat IP eksternal yang ditetapkan ke layanan oleh load balancer MetalLB menggunakan perintah berikut:
kubectl get services
Perintah ini akan menampilkan output yang mirip dengan berikut ini:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-service LoadBalancer 10.51.195.25 10.100.68.104 8080:31966/TCP 11d
Mengonfigurasi resource NodeSystemConfigUpdate
Konfigurasi resource operator fungsi jaringan NodeSystemConfigUpdate untuk setiap node
di cluster sebagai berikut.
Cantumkan node yang berjalan di node pool cluster target menggunakan perintah berikut:
kubectl get nodes | grep -v master
Perintah ini akan menampilkan output yang mirip dengan berikut ini:
NAME STATUS ROLES AGE VERSION pool-example-node-1-01-b2d82cc7 Ready <none> 2d v1.22.8-gke.200 pool-example-node-1-02-52ddvfc9 Ready <none> 2d v1.22.8-gke.200Catat nama node yang ditampilkan dan dapatkan nama pendeknya. Misalnya, untuk node
pool-example-node-1-01-b2d82cc7, nama pendeknya adalahnode101.Untuk setiap node yang telah Anda rekam di langkah sebelumnya, buat file resource
NodeSystemConfigUpdatekhusus dengan konten berikut:apiVersion: networking.gke.io/v1 kind: NodeSystemConfigUpdate metadata: name: nodesystemconfigupdate-NODE_SHORT_NAME namespace: nf-operator spec: kubeletConfig: cpuManagerPolicy: Static topologyManagerPolicy: SingleNumaNode nodeName: NODE_NAME osConfig: hugePagesConfig: ONE_GB: 2 TWO_MB: 0 isolatedCpusPerSocket: "0": 40 "1": 40 sysctls: nodeLevel: net.core.rmem_max: "8388608" net.core.wmem_max: "8388608"
Ganti kode berikut:
NODE_NAME: nama lengkap node target. Contoh,pool-example-node-1-01-b2d82cc7.NODE_SHORT_NAME: nama singkat node target yang berasal dari nama lengkapnya. Contoh,node101.
Beri nama setiap file
node-system-config-update-NODE_SHORT_NAME.yaml.Terapkan setiap file resource
NodeSystemConfigUpdateke cluster menggunakan perintah berikut:kubectl apply -f node-system-config-update-NODE_SHORT_NAME.yaml
Ganti
NODE_SHORT_NAMEdengan nama pendek node target yang sesuai.Saat Anda menerapkan resource ke cluster, setiap node yang terpengaruh akan di-reboot, yang dapat memakan waktu hingga 30 menit.
- Pantau status node yang terpengaruh hingga semuanya berhasil di-reboot:
kubectl get nodes | grep -v master
Status setiap node bertransisi dari
not-readykereadysaat proses booting ulang selesai.
Mengonfigurasi Pod untuk caching gambar
Anda dapat mengonfigurasi Pod yang berjalan di cluster yang terhubung ke Distributed Cloud untuk menyimpan image-nya dalam cache. Pod mulai menggunakan image yang di-cache setelah ditarik dari repositori untuk pertama kalinya. Jika node yang menghosting Pod kehabisan penyimpanan, gambar baru tidak di-cache dan cache gambar yang ada akan dihapus untuk memastikan workload Anda terus berjalan tanpa terganggu.
Konfigurasi Pod Anda harus memenuhi prasyarat berikut:
- Anda harus menetapkan label
gdce.baremetal.cluster.gke.io/cache-image: truepada Pod. - Jika Anda menggunakan repositori image pribadi, resource
ImagePullSecretAnda harus berjeniskubernetes.io/dockerconfigjson. - Anda harus menyetel kebijakan penarikan Pod ke
IfNotPresentuntuk memastikan salinan cache gambar target selalu digunakan. Jika salinan yang di-cache tidak tersedia secara lokal, image akan ditarik dari repositori.
Contoh berikut mengilustrasikan konfigurasi Pod dengan caching yang diaktifkan:
apiVersion: v1
kind: Pod
metadata:
name: cached-image-pod
labels:
gdce.baremetal.cluster.gke.io/cache-image: "true"
spec:
containers:
- name: my-container
image: your-private-image-repo/your-image:tag
imagePullPolicy: IfNotPresent
imagePullSecrets:
- name: my-image-secret # If using a private registry
Contoh berikutnya mengilustrasikan konfigurasi Deployment dengan caching yang diaktifkan:
apiVersion: apps/v1
kind: Deployment
metadata:
name: cached-image-deployment
spec:
template:
metadata:
labels:
gdce.baremetal.cluster.gke.io/cache-image: "true"
spec:
containers:
- name: my-container
image: your-private-image-repo/your-image:tag
imagePullPolicy: IfNotPresent
imagePullSecrets:
- name: my-image-secret # If using a private registry
Batasan untuk workload Distributed Cloud
Saat mengonfigurasi beban kerja yang terhubung ke Distributed Cloud, Anda harus mematuhi batasan yang dijelaskan di bagian ini. Batasan ini diterapkan oleh Distributed Cloud terhubung pada semua workload yang Anda deploy di hardware Distributed Cloud terhubung.
Batasan workload Linux
Distributed Cloud Connected hanya mendukung kemampuan Linux berikut untuk workload:
AUDIT_READAUDIT_WRITECHOWNDAC_OVERRIDEFOWNERFSETIDIPC_LOCKIPC_OWNERKILLMKNODNET_ADMINNET_BIND_SERVICENET_RAWSETFCAPSETGIDSETPCAPSETUIDSYS_CHROOTSYS_NICESYS_PACCTSYS_PTRACESYS_RESOURCESYS_TIME
Pembatasan namespace
Distributed Cloud yang terhubung tidak mendukung namespace berikut:
hostPIDhostIPChostNetwork
Pembatasan jenis resource
Distributed Cloud Connected tidak mendukung jenis resource CertificateSigningRequest, yang memungkinkan klien meminta penerbitan sertifikat X.509, berdasarkan permintaan penandatanganan.
Batasan konteks keamanan
Distributed Cloud Connected tidak mendukung konteks keamanan mode istimewa.
Batasan pengikatan pod
Distributed Cloud Connected tidak mendukung pengikatan Pod ke port host di namespace HostNetwork. Selain itu, namespace HostNetwork tidak tersedia.
hostPath pembatasan volume
Distributed Cloud yang terhubung hanya mengizinkan hostPath
volume dengan akses baca/tulis berikut:
/dev/hugepages/dev/infiniband/dev/vfio/dev/char/sys/devices
Batasan jenis resource PersistentVolumeClaim
Distributed Cloud yang terhubung hanya mengizinkan jenis resource PersistentVolumeClaim berikut:
csinfslocal
Batasan jenis volume
Distributed Cloud yang terhubung hanya mengizinkan jenis volume berikut:
configMapcsidownwardAPIemptyDirhostPathnfspersistentVolumeClaimprojectedsecret
Batasan toleransi pod
Distributed Cloud terhubung tidak mengizinkan Pod yang dibuat pengguna di node bidang kontrol. Secara khusus, Distributed Cloud Connected tidak mengizinkan penjadwalan Pod yang memiliki kunci toleransi berikut:
""node-role.kubernetes.io/masternode-role.kubernetes.io/control-plane
Batasan peniruan identitas
Distributed Cloud connected tidak mendukung peniruan identitas pengguna atau grup.
Batasan namespace pengelolaan
Distributed Cloud connected tidak mengizinkan akses ke namespace berikut:
ai-systemai-speech-systemai-ocr-systemai-translation-systemanthos-identity-servicecert-managerdataproc-systemdataproc-PROJECT_IDdns-systemg-istio-systemgke-connectgke-managed-metrics-servergke-operatorsg-ospf-servicecontrol-systemg-ospf-systemg-pspf-systemgke-systemgpc-backup-systemiam-systemkube-node-leasekube-publickube-systemdengan pengecualian penghapusanippools.whereabouts.cni.cncf.iometallb-system, kecuali mengedit resourceconfigMapuntuk menetapkan rentang alamat IP load balancingnf-operatoroclcm-systempredictionrm-systemrobiniosaas-systemvm-system
PROJECT_ID menunjukkan ID project Google Cloud target.
Hindari penggunaan namespace dengan awalan g- dalam namanya. Namespace tersebut biasanya merupakan namespace yang dicadangkan dan digunakan oleh Distributed Cloud yang terhubung.
Pembatasan webhook
Distributed Cloud terhubung membatasi webhook sebagai berikut:
- Webhook yang bermutasi yang Anda buat akan otomatis mengecualikan namespace
kube-system. - Webhook yang mengubah dimatikan untuk jenis resource berikut:
nodespersistentvolumescertificatesigningrequeststokenreviews
Batasan prioritas pod
Distributed Cloud yang terhubung mengharuskan Anda menetapkan prioritas Pod workload ke nilai yang lebih rendah dari 500000000.
Mengonfigurasi class runtime untuk Pod
Distributed Cloud Connected memungkinkan Anda menentukan class runtime untuk Pod
dalam konfigurasinya menggunakan kolom runtimeClassName. Tindakan ini akan menggantikan class runtime default yang ditentukan di tingkat cluster. Class runtime yang tersedia adalah runc dan gvisor.
Contoh:
apiVersion: v1
kind: Pod
metadata:
name: myPod
spec:
runtimeClassName: gvisor
containers:
- name: myPod
image: myPodImage
restartPolicy: OnFailure
Jika Anda menghilangkannya dalam konfigurasi Pod, Pod akan menggunakan class yang ditentukan di tingkat cluster.
Class runtime tingkat cluster default adalah runc kecuali jika Anda mengonfigurasi class runtime default
menggunakan parameter --default-container-runtime seperti yang dijelaskan dalam Membuat dan mengelola cluster.
Jika Anda mengubah class runtime di tingkat Pod atau cluster, Anda harus memulai ulang Pod yang terpengaruh agar perubahan diterapkan.
Class runtime gvisor
Menentukan class runtime gvisor akan mengalihkan Pod ke runtime aman Open Container Initiative (OCI)
berdasarkan gVisor. gVisor adalah solusi sandbox yang memperkenalkan
isolasi yang kuat antara workload dan host-nya.