Paano Gamitin ang Linux sysctls sa Kubernetes

Paano Gamitin Ang Linux Sysctls Sa Kubernetes



Tatalakayin ng post na ito kung ano ang Linux sysctl sa Kubernetes at kung paano ito magagamit sa loob ng isang cluster ng Kubernetes. Ang sysctl ay isang interface sa Linux operating system na nagbibigay-daan sa administrator na baguhin ang mga parameter ng kernel sa runtime. Dito, ipapakita namin kung paano gamitin ang Linux sysctls sa platform ng Kubernetes. Magpapakita kami ng isang simpleng halimbawa upang matulungan kang maunawaan kung anong uri ng output ang maaari mong asahan habang ipinapatupad ang mga kubectl command para sa paggamit ng sysctls sa Kubernetes.

Ano ang sysctls?

Ang sysctls ay isang interface sa Linux na ginagamit upang ayusin ang mga parameter ng kernel sa runtime para sa namespace sa isang lalagyan. Ang mga parameter na ito ay matatagpuan sa /proc/sys/ virtual process file at sumasaklaw ang mga ito sa iba't ibang subsystem tulad ng virtual memory, networking, kernel, atbp. Ang namespaced na mga sysctl lamang ang maaaring itakda nang independyente sa mga pod at inilalantad ng Kubernetes ang mga setting ng sysctl. Ang mga sysctls ng antas ng node na hindi naka-namespace ay kailangang itakda sa ibang paraan ng setting ng sysctls tulad ng operator ng pag-tune ng node. Bukod dito, tanging ang mga ligtas na sysctl lamang ang naka-whitelist bilang default habang ang mga hindi ligtas na sysctl ay kailangang manual na paganahin sa node upang maging available ang mga ito sa user. Ngayon, unawain natin kung paano gamitin ang Linux sysctls sa Kubernetes.







Mga kinakailangan

Bago ka magsimulang matutunan kung paano gamitin ang Linux sysctls sa Kubernetes, tiyaking mayroon kang mga sumusunod na tool na naka-install sa iyong system:



    • Kubernetes bersyon 1.23 o anumang iba pang pinakabagong bersyon
    • Ubuntu 20.04 o anumang iba pang pinakabagong bersyon
    • Sysctls para sa suporta sa pod
    • Kubectl command line tool
    • Minikube cluster

Sa pag-aakalang natutugunan ng iyong system ang mga kinakailangang pangangailangan, lilipat kami sa seksyon ng pagpapatupad.



Paano Gamitin ang Linux sysctls sa Kubernetes?

Ang Linux operating system ay isang platform na nagbibigay-daan sa iyong ibagay ang mga kernel sa pamamagitan ng sysctls knobs sa network stack. Ang ilan sa mga sysctl ay namespaced para sa isang pod na may sarili nitong configuration habang ang iba ay valid para sa buong system. Pinagsama-sama ng mga Kubernetes ang interface ng sysctls sa dalawang kategorya:





    • Namespaced vs node-level sysctls
    • Ligtas kumpara sa hindi ligtas na mga sysctls

Namespaced vs node-level sysctls:

Sa Linux kernel, karamihan sa mga sysctls ay namespaced na nagbibigay-daan sa iyong itakda ang mga ito nang hiwalay sa pagitan ng iba't ibang pod sa isang node. Ang namespaced sysctls ay madaling ma-access sa isang Kubernetes pod. Ang ilan sa mga namespaced sysctls ay ang mga sumusunod:



    • fs.mqueue.*
    • kernel .msg*
    • kernel.shm*
    • kernel.sem

Ang mga sysctl sa antas ng node ay hindi naka-namespace at kailangang manu-manong itakda ang mga ito ng administrator ng cluster. Gumagamit ang cluster administrator ng demon set na may privileged container o maaaring baguhin ang Linux distribution ng /etc/sysctls.conf node. Ang Node Tuning Operator ay maaari ding gamitin upang itakda ang sysctls ng antas ng node.

Ligtas kumpara sa hindi ligtas na mga sysctls:

Mayroong dalawang grupo ng mga sysctl: ligtas at hindi ligtas. Ang mga ligtas na sysctls ay wastong namespaced at sila ay ganap na nakahiwalay sa loob ng mga pod sa parehong node. Ang mga ligtas na sysctls ay pinagana bilang default at maaaring gamitin sa isang pod sa pamamagitan ng pagbabago sa detalye ng pod. Gayunpaman, ang mga hindi ligtas na sysctl ay hindi pinagana bilang default at kailangan nilang manual na paganahin ng administrator ng cluster. Ang mga ligtas na sysctl ay hindi nakakaimpluwensya sa kanilang mga kapitbahay dahil sila ay wastong namespaced. Habang ang mga hindi ligtas na sysctl ay maaaring hindi inaasahang makaapekto sa kanilang mga kapitbahay tulad ng pag-overload ng isang system. Ang ligtas na hanay ng mga sysctls ay ang mga sumusunod:

    • net.ipv4.ping_group_range
    • net.ipv4.ip_local_port_range
    • kernel.shm_rmid_forced
    • net.ipv4.tcp_syncookies

Ang punto dito na dapat pansinin ay ang pagiging namespaced lamang ay hindi sapat para ipagpalagay na ligtas ang sysctl.

Ngayong naunawaan na natin ang parehong mga kategorya ng sysctls, magpatuloy tayo para matutunan kung paano gamitin ang mga sysctl na ito sa Kubernetes. Dito, gagabayan ka namin kung paano gamitin ang parehong ligtas at hindi ligtas na mga sysctl at kung paano manu-manong paganahin ang mga hindi ligtas na sysctls sa Kubernetes.

Hakbang # 1: Simulan ang Minikube Cluster

Ang platform ng Kubernetes ay maaaring gamitin sa pamamagitan ng ilang mga cluster at ginagamit namin ang minikube cluster dito. Upang simulan ang minikube cluster, maaari mong gamitin ang utos na ibinigay sa ibaba:

> simulan ang minikube


Sisimulan nito ang minikube cluster kung saan maaari mong patakbuhin ang mga kubectl command at gamitin ang Linux sysctls sa Kubernetes platform. Kapag isinagawa mo ang utos na ito, makakakuha ka ng katulad na output sa ibinigay sa ibaba:

Hakbang # 2: Suriin ang Mga Parameter ng sysctls

Ang interface ng sysctls ay ginagamit upang baguhin ang mga parameter ng kernel na matatagpuan sa /proc/sys/ virtual process file. Upang ilista ang lahat ng mga parameter, ang utos na ibinigay sa ibaba ay maaaring gamitin:

> sudo sysctl -a


Ililista ng command na ito ang lahat ng mga parameter ng kernel mula sa /proc/sys/ virtual process file. Tingnan ang sample na output na ibinigay sa snapshot sa ibaba:

Hakbang # 3: Paganahin ang Mga Hindi Ligtas na sysctls

Kailangang manual na paganahin ang mga hindi ligtas na sysctl dahil naka-disable ang mga ito bilang default. Manu-manong pinapagana ng admin ng cluster ang hindi ligtas na mga sysctl sa bawat node na batayan. Ang mga pod na hindi pinagana ang mga hindi ligtas na sysctl ay hindi maaaring ilunsad ngunit nakaiskedyul lamang. Mayroong ilang partikular na kundisyon (tulad ng run time application tuning, mataas na performance, atbp.) kapag maaaring payagan ng cluster admin ang mga hindi ligtas na sysctls. Upang paganahin ang mga hindi ligtas na sysctls sa isang node-by-node na batayan, maaari mong gamitin ang kubectl command na ibinigay sa ibaba:

> kubectl –allowed-unsafe-sysctls \


Ito ay isang napaka-basic at simpleng paraan upang paganahin ang mga hindi ligtas na sysctls sa pamamagitan ng paggamit ng kubectl command.


Bukod dito, ang mga hindi ligtas na sysctls ay maaaring paganahin sa pamamagitan ng paggamit ng minikube extra-config flag. Magagawa ito gamit ang utos na ibinigay sa ibaba:

> minikube start –extra-config=”kubectl.allowed-unsafe-sysctls=kernel.msg * ,net.core.somaxconn”...


Binibigyang-daan ka ng command na ito na paganahin ang mga hindi ligtas na sysctls sa pamamagitan ng minikube cluster. Gayunpaman, maaari lamang nitong paganahin ang namespaced sysctls. Tingnan ang sample na output na ibinigay sa snapshot sa ibaba:

Konklusyon

Ang artikulong ito ay nagbigay sa amin ng isang pangkalahatang-ideya ng interface ng Linux sysctls. Tinalakay namin kung ano ang Linux sysctl at kung paano ito magagamit sa kapaligiran ng Kubernetes. Mayroong dalawang grupo ng mga sysctls: ay ligtas at hindi ligtas. Ang ligtas na pangkat ng mga sysctls ay pinagana bilang default, habang ang hindi ligtas na pangkat ng sysctls ay hindi pinagana bilang default. Sa tulong ng isang simple at madaling halimbawa, natutunan namin kung paano paganahin ang mga hindi ligtas na sysctls gamit ang kubectl command at minikube –extra-config flag.