共计 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 行业资讯频道了解更多相关知识。