共計 1470 個字符,預計需要花費 4 分鐘才能閱讀完成。
yarn 和 k8s 混合部署初步方案是怎樣的,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
版本
yarn 2.6.0
k8s v1.15.2
背景
隨著 k8s 的越來越火熱以及 k8s 的可擴展以及自修復優勢,k8s 勢必是互聯網的優勢,但是很大一部分公司的資源管理工具依舊是 yarn,而且 yarn 和 k8s 也必然并行很久一段時間,
但是由于 yarn 的隔離型相對于 k8s 來說還是很弱的,好在 yarn 2.6.0 版本也集成了 LinuxContainerExecutor(默認是 DefaultContainerExecutor),也就是說 yarn 在好長一段時間是不支持 cpu 限制的,LinuxContainerExecutor 的利用了 cgroup 來進行 cpu 的限制,而 memory 的隔離是在利用 container 進行隔離。
我們知道對于多種資源管理工具的混合部署來說,資源的爭奪必定是存在的。分析一下 k8s,k8s 默認是支持 docker runtime 的,也就是說 k8s 在支持 docker 的情況下,是利用 docke 進行資源隔離的,而 docker 是利用了 liunx 的 namespace 進行隔離,用 cgroup 進行資源限制。而相對于 yarn,只需要修改配置文件就行。
具體實施以及配置 k8s
對于 k8s 來說,按照 k8s 官網,我們把 docker cgroups 的驅動修改為 systemd。具體修改方式參照官網:
# Set up the Docker daemon
cat EOF | sudo tee /etc/docker/daemon.json
exec-opts : [native.cgroupdriver=systemd],
log-driver : json-file ,
log-opts : {
max-size : 100m
},
storage-driver : overlay2
EOF
修改完后重啟 docker,運行 docker info 會打印出:
...
Cgroup Driver: systemd
...
說明設置成功。
關于 cgroup 的兩種驅動 cgroupfs 和 sysmted 的區別:cgroupfs 是直接把 pid 寫入對應的 cgroup 文件,然后把對應的資源限制也寫入相應的 cpu memory 的 cgroup 文件。systemd 本身可以提供一個 cgroup 的管理方式。直接在 service 的文件中寫入對應的資源限制就可以
另外我們得設置 dockerd 的 cgroup-parent 和 yarn 在同一個目錄下,這樣才能達到 yarn 和 k8s 按照配置文件進行資源的分配和管理 按照 dockerd 官網 直接運行
dockerd --cgroup-parent /path/to/cgroup
yarn
yarn 配置支持 cpu 的限制網上很多資料。如這里關于 yarn 的 linuxcontainerExecutor 的 jira,參考這里 注意一下這個配置:
property
name yarn.nodemanager.linux-container-executor.cgroups.mount-path /name
value /sys/fs/cgroup value
/property
這個配置最好和 docker 的 –cgroup-parent 一致,這樣才能更好的管理和控制資源
關于 yarn 和 k8s 混合部署初步方案是怎樣的問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注丸趣 TV 行業資訊頻道了解更多相關知識。