k8s中容器許可權問題

2021-10-10 09:15:56 字數 1951 閱讀 1203

問題1

在容器內strace/gdb乙個程序報錯:

operation not permitted

這涉及到ptrace系統呼叫的許可權問題,預設容器是沒有許可權去ptrace程序的。

這個問題需要通過給容器提權才能解決,在k8s中需要給container級別增加如下選項:

]注意,securitycontext.capabilities選項只能在container級別生效,不能配置到pod級別。

capabilities還包括一些其他許可權,另外也有平行於capabilities的其他選項可以配置,可以進一步學習:

問題2因為容器內的程式用到了大量的systemv訊號量,需要通過sysctl命令調大閥值。

直接在容器裡調整是被禁止的:

sysctl kernel.sem=」1034 32000 100 1000″

sysctl: setting key 「kernel.sem」: read-only file system

對於如下的sysctl配置:

kernel.shm*,

kernel.msg*,

kernel.sem,

fs.mqueue.,

net..

允許在pod級別指定securitycontext生效,但是前提是在kubelet啟動引數中進行授權,比如:

kubelet –allowed-unsafe-sysctls kernel.sem

然後就可以在pod級進行sysctl修改,生效到pod下的所有容器:

metadata

:labels

:: ***x

spec

:securitycontext

:sysctls:-

name

: kernel.sem

value

:"1034 32000 100 1000"

metadata

:labels

:: ***x

spec

:securitycontext

:sysctls:-

name

: kernel.sem

value

:"1034 32000 100 1000"

然後在容器裡觀察一下,已經生效:

[root@zhongce-85d55fd5b5-hrwbs ~]

# sysctl -a|grep sem

kernel.sem = 1034 32000 100 1000

kernel.sem_next_id = -1

[root@zhongce-85d55fd5b5-hrwbs ~]

# sysctl -a|grep sem

kernel.sem = 1034 32000 100 1000

kernel.sem_next_id = -1

k8s調整sysctl的官方文件:

k8s中解決容器時差問題

解決k8s的pod容器的時差常用的兩種方式 1 通過設定pod 模板中的環境變數 env解決 在pod的模板中新增以下 apiversion v1 kind pod metadata name pod name spec containers name name image image name i...

k8s 容器鉤子

有兩個鉤子暴露在容器中 poststart 這個鉤子在建立容器之後立即執行。但是,不能保證鉤子會在容器入口點之前執行。沒有引數傳遞給處理程式。kind deployment metadata name testlifecycle labels spec replicas 1 selector mat...

容器編排工具k8s

如何實踐 1 搜尋kubunetes online kubernetes playground katacoda pod k8s最小排程單位 docker pause 二個容器 deployments 維持pod一定數量 service 解決deploytemnets內部之間的乙個負載均衡 dns解...