Pods sysctl 設(shè)定

目前剃袍,在 Linux 內(nèi)核中,有許多的 sysctl 參數(shù)都是 有命名空間的 捎谨。 這就意味著可以為節(jié)點(diǎn)上的每個 Pod 分別去設(shè)置它們的 sysctl 參數(shù)民效。 在 Kubernetes 中,只有那些有命名空間的 sysctl 參數(shù)可以通過 Pod 的 securityContext 對其進(jìn)行配置涛救。

以下列出有命名空間的 sysctl 參數(shù)畏邢,在未來的 Linux 內(nèi)核版本中,此列表可能會發(fā)生變化检吆。

  • kernel.shm*,
  • kernel.msg*,
  • kernel.sem,
  • fs.mqueue.,
  • net.(內(nèi)核中可以在容器命名空間里被更改的網(wǎng)絡(luò)配置項(xiàng)相關(guān)參數(shù))舒萎。然而也有一些特例 (例如,net.netfilter.nf_conntrack_max 和 net.netfilter.nf_conntrack_expect_max 可以在容器命名空間里被更改蹭沛,但它們是非命名空間的)臂寝。

沒有命名空間的 sysctl 參數(shù)稱為 節(jié)點(diǎn)級別的 sysctl 參數(shù)章鲤。 如果需要對其進(jìn)行設(shè)置,則必須在每個節(jié)點(diǎn)的操作系統(tǒng)上手動地去配置它們咆贬, 或者通過在 DaemonSet 中運(yùn)行特權(quán)模式容器來配置败徊。

可使用 Pod 的 securityContext 來配置有命名空間的 sysctl 參數(shù), securityContext 應(yīng)用于同一個 Pod 中的所有容器素征。

在運(yùn)行一個容器時集嵌,有時候需要使用sysctl修改內(nèi)核參數(shù),比如net.御毅、vm.根欧、kernel等,sysctl需要容器擁有超級權(quán)限端蛆,容器啟動時加上--privileged參數(shù)即可凤粗。那么,在k8s中是如何使用的呢今豆?

使用sysctl

sysctl -a可以獲取sysctl所有參數(shù)列表嫌拣。

從v1.4開始,kubernetes將sysctl分為safe和unsafe呆躲,其對safe的sysctl定義如下:

  • 不會影響該節(jié)點(diǎn)的其他pod
  • 不會影響節(jié)點(diǎn)的正常運(yùn)行
  • 不會獲取超出resource limits范圍的CPU和內(nèi)存資源

目前屬于safe sysctl的有:

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

其余的都是unsafe sysctl异逐,當(dāng)kubelet支持更好的隔離機(jī)制時,safe sysctl列表將在未來的Kubernetes版本中擴(kuò)展插掂。

如果日后kubelete支持更好的隔離機(jī)制,這份支持的安全列表將會擴(kuò)展灰瞻, 所有安全sysctls默認(rèn)被開啟。

所有的非安全sysctls默認(rèn)被關(guān)閉,管理員必須手動在pod級別啟動.包含非安全sysctls的pod仍然會被調(diào)度,但是將啟動失敗辅甥。請牢記以上警告,集群管理員可以在特殊情況下,比如為了高性能或者時實(shí)應(yīng)用系統(tǒng)優(yōu)化,可以啟動相應(yīng)的sysctls.sysctl可以通過kubelet在節(jié)點(diǎn)級別啟動

即需要在想要開啟sysctl的節(jié)點(diǎn)上手動啟動.如果要在多個節(jié)點(diǎn)上啟動則需要分別進(jìn)入相應(yīng)的節(jié)點(diǎn)進(jìn)行設(shè)置.

·kubelet --allowed-unsafe-sysctls \ 'kernel.msg*,net.ipv4.route.min_pmtu' ...

對于minikube,則可以通過extra-config來配置

minikube start --extra-config="kubelet.allowed-unsafe-sysctls=kernel.msg*,net.ipv4.route.min_pmtu"...
僅有名稱空間的sysctls可以通過這種方式開啟

為pod設(shè)置Sysctls

一系列的sysctls被劃分在不同的名稱空間內(nèi).這意味著他們可以為節(jié)點(diǎn)上的pod單獨(dú)地設(shè)置.僅有名稱空間的sysctls可以通過pod的securityContext被設(shè)置

以下列出的是已知的有名稱空間的.在日后的linux內(nèi)核版本中可能會改變

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

沒有名稱空間的systls被稱作節(jié)點(diǎn)級別sysctls.如果你需要設(shè)置它們,你必須在每個節(jié)點(diǎn)的操作系統(tǒng)上手動設(shè)置,或者通過有特權(quán)的DaemonSet來設(shè)置

使用pod的安全上下文(securityContext)來設(shè)置有名稱空間的sysctls.安全上下文對pod內(nèi)的所有容器都產(chǎn)生效果.

以下示例通過pod的安全上下文來設(shè)置一個安全的sysctl kernel.shm_rmid_forced和兩個非安全的sysctls net.ipv4.route.min_pmtu以及kernel.msgmax .在pod的spec里面,安全的sysctl和非安全的sysctl聲明并沒有區(qū)別

在生產(chǎn)環(huán)境中,僅僅在你明白了要設(shè)置的sysctl的功能時候才進(jìn)行設(shè)置,以免造成系統(tǒng)不穩(wěn)定.

POD Spec

apiVersion: v1
kind: Pod
metadata:
  name: sysctl-example
spec:
  securityContext:
    sysctls:
    - name: kernel.shm_rmid_forced
      value: "0"
    - name: net.ipv4.route.min_pmtu
      value: "552"
    - name: kernel.msgmax
      value: "65536"
  ...

由于非安全sysctls的非安全特征,設(shè)置非安全sysctls產(chǎn)生的后果將由你自行承擔(dān),可能產(chǎn)生的后果包含pod行為異常,資源緊張或者節(jié)點(diǎn)完全崩潰\

使用 pod 的 initContainers:

      initContainers:
      - command:
        - sysctl
        - -w
        - net.ipv4.tcp_keepalive_time=180
        image: busybox:1.27
        name: init-sysctl
        securityContext:
          privileged: true

或者

      initContainers:
      - command:
        - /bin/sh
        - -c
        - |
          ulimit -n 65536
          mount -o remount rw /sys
          echo never > /sys/kernel/mm/transparent_hugepage/enabled
          mount -o remount rw /proc/sys
          echo 2000 > /proc/sys/net/core/somaxconn
          echo 1 > /proc/sys/vm/overcommit_memory
        image: registry.cn-beijing.aliyuncs.com/acs/busybox:v1.29.2
        imagePullPolicy: IfNotPresent
        name: init-redis
        resources: {}
        securityContext:
          privileged: true
          procMount: Default

pod安全策略(PodSecurityPolicy)

你可以通過設(shè)置pod安全策略里的forbiddenSysctls(和)或者allowedUnsafeSysctls來進(jìn)一步控制哪些sysctls可以被設(shè)置.一個以結(jié)尾的sysctl,比如kernel.匹配其下面所有的sysctl

  • forbiddenSysctls和allowedUnsafeSysctls均是一系列的純字符串sysctl名稱或者sysctl模板(以結(jié)尾).匹配所有的sysctl
  • forbiddenSysctls將排除一系列sysctl.你可以排除一系列安全和非安全的sysctls.如果想要禁止設(shè)置任何sysctls,可以使用*
  • 如果你在allowedUnsafeSysctls字段設(shè)置了非安全sysctls,并且沒有出現(xiàn)在forbiddenSysctls字段里,則使用了此pod安全策略的pods可以使用這個(些)(sysctls).如果想啟用所有的非安全sysctls,可以設(shè)置*

警告,如果你通過pod安全策略的allowedUnsafeSysctls把非安全sysctl添加到白名單(即可以執(zhí)行),但是如果節(jié)點(diǎn)級別沒有通過sysctl設(shè)置--allowed-unsafe-sysctls,pod將啟動失敗.

以下示例允許以kernel.msg開頭的sysctls被設(shè)置,但是禁止設(shè)置kernel.shm_rmid_forced

apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: sysctl-psp
spec:
  allowedUnsafeSysctls:
  - kernel.msg*
  forbiddenSysctls:
  - kernel.shm_rmid_forced
 ...
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酝润,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子璃弄,更是在濱河造成了極大的恐慌要销,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件夏块,死亡現(xiàn)場離奇詭異疏咐,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)脐供,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門凳鬓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人患民,你說我怎么就攤上這事缩举。” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵仅孩,是天一觀的道長托猩。 經(jīng)常有香客問我,道長辽慕,這世上最難降的妖魔是什么京腥? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮溅蛉,結(jié)果婚禮上公浪,老公的妹妹穿的比我還像新娘。我一直安慰自己船侧,他們只是感情好欠气,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著镜撩,像睡著了一般预柒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上袁梗,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天宜鸯,我揣著相機(jī)與錄音,去河邊找鬼遮怜。 笑死淋袖,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的锯梁。 我是一名探鬼主播即碗,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼涝桅!你這毒婦竟也來了拜姿?” 一聲冷哼從身側(cè)響起烙样,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤冯遂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后谒获,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛤肌,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年批狱,在試婚紗的時候發(fā)現(xiàn)自己被綠了裸准。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡赔硫,死狀恐怖炒俱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤权悟,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布砸王,位于F島的核電站,受9級特大地震影響峦阁,放射性物質(zhì)發(fā)生泄漏谦铃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一榔昔、第九天 我趴在偏房一處隱蔽的房頂上張望驹闰。 院中可真熱鬧,春花似錦撒会、人聲如沸嘹朗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽骡显。三九已至,卻和暖如春曾掂,著一層夾襖步出監(jiān)牢的瞬間惫谤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工珠洗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留溜歪,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓许蓖,卻偏偏與公主長得像蝴猪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子膊爪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容