• Sel. Jun 22nd, 2021

Media Bangsa

Menyajikan Info Menarik dan Unik

Mengatur Sumber Daya Komputasi Untuk Container

Bymediahemat

Feb 26, 2021

Saat kamu membuat spesifikasi sebuah Pod, kamu dapat secara opsional menentukan seberapa banyak CPU dan memori (RAM) yang dibutuhkan oleh setiap Container. Saat Container-Container menentukan request (permintaan) sumber daya, scheduler dapat membuat keputusan yang lebih baik mengenai Node mana yang akan dipilih untuk menaruh Pod-Pod. Dan saat {limit|restrict} (batas) sumber daya Container-Container telah ditentukan, maka kemungkinan rebutan sumber daya pada sebuah Node dapat dihindari. Untuk informasi lebih lanjut mengenai perbedaan request dan {limit|restrict}, lihat QoS Sumber Daya.

Jenis-jenis sumber daya
CPU dan memori masing-masing merupakan jenis sumber daya ({resource|useful resource} {type|sort|kind}). Sebuah jenis sumber daya memiliki satuan dasar. CPU ditentukan dalam satuan jumlah core, dan memori ditentukan dalam satuan bytes. Jika kamu menggunakan Kubernetes v1.14 keatas, kamu dapat menentukan sumber daya {huge|large|big} {page|web page}. Huge {page|web page} adalah fitur khusus Linux di mana kernel Node mengalokasikan blok-blok memori yang jauh lebih besar daripada ukuranpage bawaannya.

Sebagai contoh, pada sebuah sistem di mana ukuran {page|web page} bawaannya adalah 4KiB, kamu dapat menentukan sebuah {limit|restrict}, hugepages-2Mi: 80Mi. Jika kontainer mencoba mengalokasikan lebih dari {40|forty} {huge|large|big} {page|web page} berukuran 20MiB ({total|complete|whole} 80MiB), maka alokasi tersebut akan gagal.

> Catatan: Kamu tidak dapat melakukan overcommit terhadap sumber daya hugepages-*. Hal ini berbeda dari sumber daya {memory|reminiscence} dan cpu (yang dapat di-overcommit).

CPU dan memori secara kolektif disebut sebagai sumber daya komputasi, atau cukupsumber daya saja. Sumber daya komputasi adalah jumlah yang dapat diminta, dialokasikan, dan dikonsumsi. Mereka berbeda dengan sumber daya API. Sumber daya API, seperti Pod dan Service adalah objek-objek yang dapat dibaca dan diubah melalui Kubernetes API Server.

Request dan Limit Sumber daya dari Pod dan Container
Setiap Container dari sebuah Pod dapat menentukan satu atau lebih dari hal-hal berikut:

* spec.containers[].{resources|assets|sources}.limits.cpu
* spec.containers[].{resources|assets|sources}.limits.{memory|reminiscence}
* spec.containers[].{resources|assets|sources}.limits.hugepages-
* spec.containers[].{resources|assets|sources}.requests.cpu
* spec.containers[].{resources|assets|sources}.requests.{memory|reminiscence}
* spec.containers[].{resources|assets|sources}.requests.hugepages-

Walaupun requests dan limits hanya dapat ditentukan pada Container {individual|particular person}, akan lebih mudah untuk membahas tentang request dan {limit|restrict} sumber daya dari Pod. Sebuahrequest/{limit|restrict} sumber daya Pod untuk jenis sumber daya tertentu adalah jumlah dari request/{limit|restrict} sumber daya pada jenis tersebut untuk semua Container di dalam Pod tersebut.

Arti dari CPU
Limit dan request untuk sumber daya CPU diukur dalam satuan cpu. Satu cpu, dalam Kubernetes, adalah sama dengan:

* 1 vCPU AWS
* 1 Core GCP
* 1 vCore Azure
* 1 vCPU IBM
* 1 Hyperthread pada sebuah prosesor Intel {bare|naked}-{metal|metallic|steel} dengan Hyperthreading

Request dalam bentuk pecahan diizinkan. Sebuah Container denganspec.containers[].{resources|assets|sources}.requests.cpu bernilai {0|zero}.5 dijamin mendapat setengah CPU dibandingkan dengan yang meminta 1 CPU. Ekspresi nilai {0|zero}.1 ekuivalen dengan ekspresi nilai 100m, yang dapat dibaca sebagai “seratus milicpu”. Beberapa orang juga membacanya dengan “seratus milicore”, dan keduanya ini dimengerti sebagai hal yang sama. Sebuah request dengan angka di belakang koma, seperti {0|zero}.1 dikonversi menjadi 100m oleh API, dan presisi yang lebih kecil lagi dari 1m tidak dibolehkan. Untuk alasan ini, bentuk 100m mungkin lebih disukai.

CPU juga selalu diminta dalam jumlah yang mutlak, tidak sebagai jumlah yang relatif; {0|zero}.1 adalah jumlah CPU yang sama pada sebuah mesin single-core, {dual|twin}-core, atau48-core.

Arti dari Memori
Limit dan request untuk {memory|reminiscence} diukur dalam satuan bytes. Kamu dapat mengekspresikan memori sebagai plain integer atau sebagai sebuah {fixed|fastened|mounted}-{point|level} integer menggunakan satu dari sufiks-sufiks berikut: E, P, T, G, M, K. Kamu juga dapat menggunakan bentuk pangkat dua ekuivalennya: Ei, Pi, Ti, Gi, Mi, Ki. Sebagai contoh, nilai-nilai berikut kurang lebih sama: , 129e6, 129M, 123Mi
Berikut sebuah contoh. Pod berikut memiliki dua Container. Setiap Container memiliki request {0|zero}.25 cpu dan 64MiB (226 bytes) memori. Setiap Container memiliki {limit|restrict} {0|zero}.5 cpu dan 128MiB memori. Kamu dapat berkata bahwa Pod tersebut memiliki request {0|zero}.5 cpu dan 128MiB memori, dan memiliki {limit|restrict} 1 cpu dan 265MiB memori.

apiVersion: v1
{kind|type|sort}: Pod
metadata:
name: frontend
spec:
containers:
– name: db
{image|picture}: mysql
env: name: MYSQL_ROOT_PASSWORD {value|worth}: “password”
{resources|assets|sources}: requests: {memory|reminiscence}: “64Mi” cpu: “250m” limits: {memory|reminiscence}: “128Mi” cpu: “500m”
– name: wp
{image|picture}: wordpress
{resources|assets|sources}: requests: {memory|reminiscence}: “64Mi” cpu: “250m” limits: {memory|reminiscence}: “128Mi” cpu: “500m”
Bagaimana Pod-Pod dengan request sumber daya dijadwalkan
Saat kamu membuat sebuah Pod, Kubernetes scheduler akan memilih sebuah Node untuk Pod tersebut untuk dijalankan. Setiap Node memiliki kapasitas maksimum untuk setiap jenis sumber daya: jumlah CPU dan memori yang dapat disediakan oleh Node tersebut untuk Pod-Pod. Scheduler memastikan bahwa, untuk setiap jenis sumber daya, jumlah semua request sumber daya dari Container-Container yang dijadwalkan lebih kecil dari kapasitas Node tersebut. Perlu dicatat bahwa walaupun penggunaan sumber daya memori atau CPU aktual/sesungguhnya pada Node-Node sangat rendah, scheduler tetap akan menolak untuk menaruh sebuah Pod pada sebuah Node jika pemeriksaan kapasitasnya gagal. Hal ini adalah untuk menjaga dari kekurangan sumber daya pada sebuah Node saat penggunaan sumber daya meningkat suatu waktu, misalnya pada saat titik puncak {traffic|visitors|site visitors} harian.

Bagaimana Pod-Pod dengan {limit|restrict} sumber daya dijalankan
Saat Kubelet menjalankan sebuah Container dari sebuah Pod, Kubelet tersebut mengoper {limit|restrict} CPU dan memori ke runtime kontainer.

Ketika menggunakan Docker:

* spec.containers[].{resources|assets|sources}.requests.cpu diubah menjadi nilai core-nya, yang mungkin berbentuk angka pecahan, dan dikalikan dengan 1024. Nilai yang lebih besar antara angka ini atau 2 digunakan sebagai nilai dari flag–cpu-sharespada perintah docker run.

* spec.containers[].{resources|assets|sources}.limits.cpu diubah menjadi nilai millicore-nya dan dikalikan dengan {100|one hundred|a hundred}. Nilai hasilnya adalah jumlah waktu CPU yang dapat digunakan oleh sebuah kontainer setiap {100|one hundred|a hundred} milidetik. Sebuah kontainer tidak dapat menggunakan lebih dari jatah waktu CPU-nya selama selang waktu ini. > Catatan: Periode kuota bawaan adalah 100ms. Resolusi {minimum|minimal} dari kuota CPU adalah 1 milidetik.

* spec.containers[].{resources|assets|sources}.limits.{memory|reminiscence} diubah menjadi sebuah bilangan bulat, dan digunakan sebagai nilai dari flag –memorydari perintah docker run.

Jika sebuah Container melebihi batas memorinya, Container tersebut mungkin akan diterminasi. Jika Container tersebut dapat diulang kembali, Kubelet akan mengulangnya kembali, sama seperti jenis kegagalan lainnya.

Jika sebuah Container melebihi request memorinya, kemungkinan Pod-nya akan dipindahkan kapanpun Node tersebut kehabisan memori.

Sebuah Container mungkin atau mungkin tidak diizinkan untuk melebihi {limit|restrict} CPU-nya untuk periode waktu yang lama. Tetapi, Container tersebut tidak akan diterminasi karena penggunaan CPU yang berlebihan.

Untuk menentukan apabila sebuah Container tidak dapat dijadwalkan atau sedang diterminasi karena {limit|restrict} sumber dayanya, lihat bagian Penyelesaian Masalah.

Memantau penggunaan sumber daya komputasi
Penggunaan sumber daya dari sebuah Pod dilaporkan sebagai bagian dari kondisi Pod.

Jika monitoring opsional diaktifkan pada klaster kamu, maka penggunaan sumber daya Pod dapat diambil dari sistem monitoring kamu.

Penyelesaian Masalah
Pod-Pod saya berkondisi Pending (tertunda) dengan {event|occasion} message failedScheduling
Jika scheduler tidak dapat menemukan Node manapun yang muat untuk sebuah Pod, Pod tersebut tidak akan dijadwalkan hingga ditemukannya sebuah tempat yang muat. Sebuah {event|occasion} akan muncul setiap kali scheduler gagal menemukan tempat untuk Pod tersebut, seperti berikut:

kubectl describe pod frontend | grep -A {3|three} Events
Events:
FirstSeen LastSeen Count From Subobject PathReason Message
36s 5s {scheduler } FailedScheduling Failed for {reason|cause|purpose} PodExceedsFreeCPU and {possibly|probably|presumably} others
Pada contoh di atas, Pod bernama “frontend” gagal dijadwalkan karena kekurangan sumber daya CPU pada Node tersebut. Pesan kesalahan yang serupa dapat juga menunjukkan kegagalan karena kekurangan memori (PodExceedsFreeMemroy). Secara umum, jika sebuah Pod berkondisi Pending (tertunda) dengan sebuah pesan seperti ini, ada beberapa hal yang dapat dicoba:

* Tambah lebih banyak Node pada klaster.
* Terminasi Pod-Pod yang tidak dibutuhkan untuk memberikan ruangan untuk Pod-Pod yang tertunda.
* Periksa jika nilai request Pod tersebut tidak lebih besar dari Node-node yang ada. Contohnya, jika semua Node memiliki kapasitas cpu: 1, maka Pod dengan requestcpu: 1.1 tidak akan pernah dijadwalkan.

Kamu dapat memeriksa kapasitas Node-Node dan jumlah-jumlah yang telah dialokasikan dengan perintah kubectl describe nodes. Contohnya:

kubectl describe nodes e2e-{test|check|take a look at}-node-pool-4lw4
Name: e2e-{test|check|take a look at}-node-pool-4lw4
[ … {lines|strains|traces} {removed|eliminated} for {clarity|readability} …]
Capacity:
cpu: {memory|reminiscence}: Ki
pods: Allocatable:
cpu: m
{memory|reminiscence}: Ki
pods: [ … beberapa baris dihapus untuk kejelasan …]
Non-terminated Pods: (5 in {total|complete|whole})
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits kube-system fluentd-gcp-v1.38-28bv m (5%) ({0|zero}%) Mi (2%) Mi (2%)
kube-system kube-dns lj m ({13|thirteen}%) {0|zero} ({0|zero}%) Mi (1%) Mi (2%)
kube-system kube-proxy-e2e-{test|check|take a look at}-… m (5%) ({0|zero}%) ({0|zero}%) ({0|zero}%)
kube-system monitoring-influxdb-grafana-v4-z1m m (10%) m (10%) 600Mi ({8|eight}%) Mi ({8|eight}%)
kube-system node-{problem|drawback|downside}-detector-v0.1-fj7m m (1%) m (10%) 20Mi ({0|zero}%) Mi (1%)
Allocated {resources|assets|sources}:
(Total {limit|restrict} mungkin melebihi {100|one hundred|a hundred} persen, misalnya, karena _overcommit_.)
CPU Requests CPU Limits Memory Requests Memory Limits m (34%) m (20%) Mi (12%) Mi (14%)
Pada keluaran di atas, kamu dapat melihat bahwa jika sebuah Pod meminta lebih dari 1120m CPU atau 6.23Gi memori, Pod tersebut tidak akan muat pada Node tersebut.

Dengan melihat pada bagian Pods, kamu dapat melihat Pod-Pod mana saja yang memakan sumber daya pada Node tersebut. Jumlah sumber daya yang tersedia untuk Pod-Pod kurang dari kapasitas Node, karenadaemon sistem menggunakan sebagian dari sumber daya yang ada. Kolom allocatable padaNodeStatusmemberikan jumlah sumber daya yang tersedia untuk Pod-Pod. Untuk lebih lanjut, lihatSumber daya Node yang dapat dialokasikan.

Fitur kuota sumber daya dapat disetel untuk membatasi jumlah sumber daya yang dapat digunakan. Jika dipakai bersama dengan Namespace, kuota sumber daya dapat mencegah suatu tim menghabiskan semua sumber daya.

Container saya diterminasi
Container kamu mungkin diterminasi karena Container tersebut melebihi batasnya. Untuk memeriksa jika sebuah Container diterminasi karena ia melebihi batas sumber dayanya, gunakan perintah kubectl describe pod pada Pod yang bersangkutan:

kubectl describe pod simmemleak-hra99
Name: simmemleak-hra99
Namespace: default
Image(s): saadali/simmemleak
Node: kubernetes-node-tf0f/10.240.216.{66|sixty six}
Labels: name=simmemleak
Status: Running
Reason:
Message:
IP: .244.2.{75|seventy five}
Replication Controllers: simmemleak (1/1 replicas created)
Containers:
simmemleak:
Image: saadali/simmemleak
Limits: cpu: m {memory|reminiscence}: Mi
State: Running Started: Tue, 07 Jul :{54|fifty four}: Last Termination State: Terminated Exit Code: Started: Fri, 07 Jul :{54|fifty four}: Finished: Fri, 07 Jul :{54|fifty four}: Ready: False
Restart Count: Conditions:
Type Status
Ready False
Events:
FirstSeen LastSeen Count From SubobjectPath Reason Message
Tue, 07 Jul :{53|fifty three}: Tue, 07 Jul :{53|fifty three}: {scheduler } scheduled Successfully assigned simmemleak-hra99 to kubernetes-node-tf0f
Tue, 07 Jul :{53|fifty three}: Tue, 07 Jul :{53|fifty three}: {kubelet kubernetes-node-tf0f} implicitly required container POD pulled Pod container {image|picture} “k8s.gcr.io/pause:{0|zero}.{8|eight}.{0|zero}” already {present|current} on machine
Tue, 07 Jul :{53|fifty three}: Tue, 07 Jul :{53|fifty three}: {kubelet kubernetes-node-tf0f} implicitly required container POD created Created with docker id 6a41280f516d
Tue, 07 Jul :{53|fifty three}: Tue, 07 Jul :{53|fifty three}: {kubelet kubernetes-node-tf0f} implicitly required container POD {started|began} Started with docker id 6a41280f516d
Tue, 07 Jul :{53|fifty three}: Tue, 07 Jul :{53|fifty three}: {kubelet kubernetes-node-tf0f} spec.containers{simmemleak} created Created with docker id 87348f12526a
Pada contoh di atas, Restart Count: 5 menunjukkan bahwa Container simmemleakpada Pod tersebut diterminasi dan diulang kembali sebanyak lima kali.

Kamu dapat menggunakan perintah kubectl get pod dengan opsi -o go-template=… untuk mengambil kondisi dari Container-Container yang sebelumnya diterminasi:

kubectl get pod -o go-template='{{range.status.containerStatuses}}{{“Container Name: “}}{{.name}}{{“\r\nLastState: “}}{{.lastState}}{{end}}’ simmemleak-hra99
Container Name: simmemleak
LastState: map[terminated:map[exitCode:137 {reason|cause|purpose}:OOM Killed startedAt: T20:{58|fifty eight}:43Z finishedAt: T20:{58|fifty eight}:43Z containerID:docker://0e4095bba1feccdfe7ef9fb6ebffe972b4b14285d5acdec6f0d3ae8a22fad8b2]]
Kamu dapat lihat bahwa Container tersebut diterminasi karena {reason|cause|purpose}:OOM Killed, di manaOOM merupakan singkatan dari Out Of Memory, atau kehabisan memori.

Penyimpanan lokal sementara
FEATURE STATE: Kubernetes v1.19 [beta]

Kubernetes versi 1.{8|eight} memperkenalkan sebuah sumber daya baru, ephemeral-storage untuk mengatur penyimpanan lokal yang bersifat sementara. Pada setiap Node Kubernetes, direktori root dari Kubelet (secara bawaan /var/lib/kubelet) dan direktori log (/var/log) ditaruh pada partisi root dari Node tersebut. Partisi ini juga digunakan bersama oleh Pod-Pod melalui {volume|quantity} emptyDir, log kontainer, lapisan {image|picture}, dan lapisan kontainer yang dapat ditulis.

Partisi ini bersifat “sementara” dan aplikasi-aplikasi tidak dapat mengharapkan SLA kinerja (misalnya Disk IOPS) dari partisi ini. Pengelolaan penyimpanan lokal sementara hanya berlaku untuk partisi root; partisi opsional untuk lapisan {image|picture} dan lapisan yang dapat ditulis berada di luar ruang lingkup.

> Catatan: Jika sebuah partisi runtime opsional digunakan, partisi root tidak akan menyimpan lapisan {image|picture} ataupun lapisan yang dapat ditulis manapun.

Menyetel request dan {limit|restrict} dari penyimpanan lokal sementara
Setiap Container dari sebuah Pod dapat menentukan satu atau lebih dari hal-hal berikut:

* spec.containers[].{resources|assets|sources}.limits.ephemeral-storage
* spec.containers[].{resources|assets|sources}.requests.ephemeral-storage

Limit dan request untuk ephemeral-storage diukur dalam satuan bytes. Kamu dapat menyatakan penyimpanan dalam bilangan bulat biasa, atau sebagai {fixed|fastened|mounted}-{point|level} integer menggunakan satu dari sufiks-sufiks ini: E, P, T, G, M, K. Kamu jika dapat menggunakan bentuk pangkat dua ekuivalennya: Ei, Pi, Ti, Gi, Mi, Ki. Contohnya, nilai-nilai berikut kurang lebih sama: , 129e6, 129M, 123Mi
Contohnya, Pod berikut memiliki dua Container. Setiap Container memiliki request 2GiB untuk penyimpanan lokal sementara. Setiap Container memiliki {limit|restrict} 4GiB untuk penyimpanan lokal sementara. Maka, Pod tersebut memiliki jumlah request 4GiB penyimpanan lokal sementara, dan {limit|restrict} 8GiB.

apiVersion: v1
{kind|type|sort}: Pod
metadata:
name: frontend
spec:
containers:
– name: db
{image|picture}: mysql
env: name: MYSQL_ROOT_PASSWORD {value|worth}: “password”
{resources|assets|sources}: requests: ephemeral-storage: “2Gi” limits: ephemeral-storage: “4Gi”
– name: wp
{image|picture}: wordpress
{resources|assets|sources}: requests: ephemeral-storage: “2Gi” limits: ephemeral-storage: “4Gi”
Bagaimana Pod-Pod dengan request ephemeral-storage dijadwalkan
Saat kamu membuat sebuah Pod, Kubernetes scheduler memilih sebuah Node di mana Pod tersebut akan dijalankan. Setiap Node memiliki jumlah maksimum penyimpanan lokal sementara yang dapat disediakan. Untuk lebih lanjut, lihat “Hal-hal yang dapat dialokasikan Node”.

Scheduler memastikan bahwa jumlah dari request-request sumber daya dari Container-Container yang dijadwalkan lebih kecil dari kapasitas Node.

Bagaimana Pod-Pod dengan {limit|restrict} ephemeral-storage dijalankan
Untuk isolasi pada tingkat kontainer, jika lapisan yang dapat ditulis dari sebuah Container dan penggunaan log melebihi {limit|restrict} penyimpanannya, maka Pod tersebut akan dipindahkan. Untuk isolasi pada tingkat Pod, jika jumlah dari penyimpanan lokal sementara dari semua Container dan juga {volume|quantity} emptyDir milik Pod melebihi {limit|restrict}, maka Pod teresebut akan dipindahkan.

Memantau penggunaan ephemeral-storage
Saat penyimpanan lokal sementara digunakan, ia dipantau terus-menerus oleh Kubelet. Pemantauan dilakukan dengan cara memindai setiap {volume|quantity} emptyDir, direktori log, dan lapisan yang dapat ditulis secara periodik. Dimulai dari Kubernetes 1.15, {volume|quantity} emptyDir (tetapi tidak direktori log atau lapisan yang dapat ditulis) dapat, sebagai pilihan dari operator klaster, dikelola dengan menggunakan project quotas.Project quotas aslinya diimplementasikan dalam XFS, dan baru-baru ini telah diubah ke ext4fs. Project quotas dapat digunakan baik untukmonitoring dan pemaksaan; sejak Kubernetes 1.{16|sixteen}, mereka tersedia sebagai fitur alpha untuk monitoring saja.

Quota lebih cepat dan akurat dibandingkan pemindaian direktori. Saat sebuah direktori ditentukan untuk sebuah proyek, semua berkas yang dibuat pada direktori tersebut dibuat untuk proyek tersebut, dan kernel hanya perlu melacak berapa banyak blok yang digunakan oleh berkas-berkas pada proyek tersebut. Jika sebuah berkas dibuat dan dihapus, tetapi tetap dengan sebuah file descriptor yang terbuka, maka berkas tersebut tetap akan memakan ruangan penyimpanan. Ruangan ini akan dilacak oleh quota tersebut, tetapi tidak akan terlihat oleh sebuah pemindaian direktori.

Kubernetes menggunakan ID proyek yang dimulai dari . ID-ID yang digunakan akan didaftarkan di dalam /{etc|and so on|and so forth}/{projects|tasks|initiatives} dan /{etc|and so on|and so forth}/projid. Jika ID-ID proyek pada kisaran ini digunakan untuk tujuan lain pada sistem, ID-ID proyek tersebut harus terdaftar di dalam /{etc|and so on|and so forth}/{projects|tasks|initiatives} dan /{etc|and so on|and so forth}/projiduntuk mencegah Kubernetes menggunakan ID-ID tersebut.

Untuk mengaktifkan penggunaan project quotas, operator klaster harus melakukan hal-hal berikut:

* Aktifkan {feature|function|characteristic} gate LocalStorageCapacityIsolationFSQuotaMonitoring=truepada konfigurasi Kubelet. Nilainya secara bawaan false pada Kubernetes 1.{16|sixteen}, jadi harus secara eksplisit disetel menjadi true.

* Pastikan bahwa partisi root (atau partisi opsional runtime) telah dibangun ({build|construct}) dengan mengaktifkan project quotas. Semua sistem berkas (filesystem) XFS mendukung project quotas, tetapi sistem berkas ext4 harus dibangun secara khusus untuk mendukungnya

* Pastikan bahwa partisi root (atau partisi opsional runtime) ditambatkan (mount) dengan project quotas yang telah diaktifkan.

Membangun dan menambatkan sistem berkas dengan project quotas yang telah diaktifkan
Sistem berkas XFS tidak membutuhkan tindakan khusus saat dibangun; mereka secara otomatis telah dibangun dengan project quotas yang telah diaktifkan.

Sistem berkas ext4fs harus dibangun dengan mengaktifkan quotas, kemudian mereka harus diaktifkan pada sistem berkas tersebut.

% sudo mkfs.ext4 other_ext4fs_args… -E quotatype=prjquota /dev/block_device
% sudo tune2fs -O project -Q prjquota /dev/block_device
Untuk menambatkan sistem berkasnya, baik ext4fs dan XFS membutuhkan opsiprjquota disetel di dalam /{etc|and so on|and so forth}/fstab:

/dev/block_device /var/kubernetes_data defaults,prjquota Sumber daya yang diperluas
Sumber daya yang diperluas (Extended Resource) adalah nama sumber daya di luar {domain|area} kubernetes.io. Mereka memungkinkan operator klaster untuk menyatakan dan pengguna untuk menggunakan sumber daya di luar sumber daya bawaan Kubernetes.

Ada dua langkah untuk menggunakan sumber daya yang diperluas. Pertama, operator klaster harus menyatakan sebuah Extended Resource. Kedua, pengguna harus meminta sumber daya yang diperluas tersebut di dalam Pod.

Mengelola sumber daya yang diperluas
Sumber daya yang diperluas pada tingkat Node
Sumber daya yang diperluas pada tingkat Node terikat pada Node.

Sumber daya Device Plugin yang dikelola
Lihat Device Plugin untuk cara menyatakan sumber daya {device|system|gadget} plugin yang dikelola pada setiap node.

Sumber daya lainnya
Untuk menyatakan sebuah sumber daya yang diperluas tingkat Node, operator klaster dapat mengirimkan permintaan HTTP PATCH ke API server untuk menentukan kuantitas sumber daya yang tersedia pada kolom {status|standing}.{capacity|capability} untuk Node pada klaster. Setelah itu, {status|standing}.{capacity|capability} pada Node akan memiliki sumber daya baru tersebut. Kolom {status|standing}.allocatable diperbarui secara otomatis dengan sumber daya baru tersebut secara asynchrounous oleh Kubelet. Perlu dicatat bahwa karena scheduler menggunakan nilai {status|standing}.allocatable milik Node saat mengevaluasi muat atau tidaknya Pod, mungkin ada waktu jeda pendek antara melakukan PATCH terhadap kapasitas Node dengan sumber daya baru dengan Pod pertama yang meminta sumber daya tersebut untuk dapat dijadwalkan pada Node tersebut.

Contoh:

Berikut sebuah contoh yang menunjukkan bagaimana cara menggunakan curl untuk mengirim permintaan HTTP yang menyatakan lima sumber daya “{example|instance}.com/foo” pada Node k8s-node-1 yang memiliki {master|grasp} k8s-{master|grasp}.

curl –header “Content-Type: {application|software|utility}/json-patch+json” \
–request PATCH \
–{data|knowledge|information} ‘[{“op”: “add”, “path”: “/status/capacity/example.com~1foo”, “value”: “5”}]’ \
-{master|grasp}:8080/api/v1/nodes/k8s-node-1/{status|standing}
> Catatan: Pada permintaan HTTP di atas, ~1 adalah encoding untuk karakter / pada jalur (path) patch. Nilai jalur operasi tersebut di dalam JSON-Patch diinterpretasikan sebagai sebuah JSON-Pointer. Untuk lebih lanjut, lihat IETF RFC 6901, bagian {3|three}.
Sumber daya yang diperluas pada tingkat klaster
Sumber daya yang diperluas pada tingkat klaster tidak terikat pada Node. Mereka biasanya dikelola oleh scheduler extender, yang menangani penggunaan sumber daya dan kuota sumber daya.

Kamu dapat menentukan sumber daya yang diperluas yang ditangani oleh scheduler extenderpada konfigurasi kebijakan scheduler.

Contoh:

Konfigurasi untuk sebuah kebijakan scheduler berikut menunjukkan bahwa sumber daya yang diperluas pada tingkat klaster “{example|instance}.com/foo” ditangani oleh scheduler extender.

* Scheduler mengirim sebuah Pod ke scheduler extender hanya jika Pod tersebut meminta “{example|instance}.com/foo”.
* Kolom ignoredByScheduler menentukan bahwa scheduler tidak memeriksa sumber daya “{example|instance}.com/foo” pada predikat PodFitsResources miliknya.

{
“{kind|type|sort}”: “Policy”,
“apiVersion”: “v1”,
“extenders”: [
{ “urlPrefix”:””, “bindVerb”: “bind”, “managedResources”: [ { “name”: “example.com/foo”, “ignoredByScheduler”: true } ]
}
]
}
Menggunakan sumber daya yang diperluas
Pengguna dapat menggunakan sumber daya yang diperluas di dalam spesifikasi Pod seperti CPU dan memori. Scheduler menangani akuntansi sumber daya tersebut agar tidak ada alokasi untuk yang melebihi jumlah yang tersedia.

API server membatasi jumlah sumber daya yang diperluas dalam bentuk bilangan bulat. Contoh jumlah yang {valid|legitimate} adalah {3|three}, 3000m, dan3Ki. Contoh jumlah yang tidak {valid|legitimate} adalah {0|zero}.5 dan 1500m.

> Catatan: Sumber daya yang diperluas menggantikan Opaque Integer Resource. Pengguna dapat menggunakan prefiks nama {domain|area} selain kubernetes.io yang sudah dipakai.

Untuk menggunakan sebuah sumber daya yang diperluas di sebuah Pod, masukkan nama sumber daya tersebut sebagai nilai key dari map spec.containers[].{resources|assets|sources}.limitpada spesifikasi Container.

> Catatan: Sumber daya yang diperluas tidak dapat di-overcommit, sehingga request dan {limit|restrict} nilainya harus sama jika keduanya ada di spesifikasi sebuah Container.

Sebuah Pod hanya dijadwalkan jika semua request sumber dayanya terpenuhi, termasuk CPU, memori, dan sumber daya yang diperluas manapun. Pod tersebut akan tetap berada pada kondisi PENDING selama request sumber daya tersebut tidak terpenuhi.

Contoh:

Pod di bawah meminta 2 CPU dan 1 “{example|instance}.com/foo” (sebuah sumber daya yang diperluas).

apiVersion: v1
{kind|type|sort}: Pod
metadata:
name: my-pod
spec:
containers:
– name: my-container
{image|picture}: myimage
{resources|assets|sources}: requests: cpu: {example|instance}.com/foo: limits: {example|instance}.com/foo: 1
Selanjutnya
Last modified July 10, 2020 at 10:24 PM PST: Replace EN {links|hyperlinks} to ID {links|hyperlinks} (0c799ef75)

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *