使用 Ansible 管理 Kubernetes 资源

发布时间:2020-07-19 11:39:04 作者:OpenInfra
来源:网络 阅读:602

前两天,一篇「Think twice before using Helm[1]」(译文:「恕我直言,对Helm大家还是要三思而后用」) 引起了大家的关注。作者从认证,生命周期管理,错误处理等多个角度说明了 Helm 自身的问题。我基本赞同作者的观点。多数情况下我们只是把 helm 当做一个模板引擎在使用,把 charts 生成 Kubernetes 可以处理的格式。但是从使用角度来说,这个模板实现的太重了。有兴趣的可以去读读原文。

那如果 Helm 不轻量好用的话,我们有啥其他选择?

Ansible 做为部署管理的工具,正在受到越来越多的运维人员的追捧。他支持 Jinja2 的模板引擎,而且是无代理节点的架构,很方便来做一些模板工作。所以本文来介绍使用 Ansible 如何管理 Kubernetes 上面的资源。

首先使用 Ansible 避免不了使用其模块。与 Kubernetes 相关的模块可以从[2]找到。现在主要有k8s, k8s_facts, k8s_scale, kubernetes和oc 5个模块。其中 kubernetes 和 oc 模块因为实现逻辑不好用,在 ansible 2.6 版本中已经废弃掉, 推荐使用前三个。其中,k8s_scale 来自 ansible 2.5, k8s 来自 ansible 2.6, k8s_facts 来自 ansible 2.7。使用这三个模块的话,还需要安装 openshift 的 Python 包。以下代码全部基于 ansible 2.7 版本。

一、k8s 模块

管理 kubernetes 各种资源的话,使用 k8s 模块就可以了,如下是创建 namespace 的写法

如果 k8s 模块和 ansible lookup 插件合用的话,可以写出更加简洁的代码,如下

#tasks.yml

基于此,完全可以使用这种方式替换掉 helm 的模板功能,而且没有引入任何额外的依赖,就是直接的 ansible 生成相关文件,丢给 kubernetes api 来处理。等部署完成后,我们也可以脱离 Ansible 继续通过 kubelet 命令维护这些资源。也正是由于这么简洁的实现,k8s 模块可以管理 Kubernetes 和 OpenShift, 也可以管理各种 CRD 资源。

相比于 helm , 这种方法的缺点在于 YAML 文件都要自己写,没有社区在维护的 Charts。不像 helm 那样,一个命令就可以把服务都安装上。前期的工作还是挺多的。但是从另外一个角度来说,社区维护的 Charts 做一些 Demo 还可以,真要生产上面使用,还是要做大量工作的。所以从这个角度上讲,使用 Ansible 也没有带来太大的工作量。

我更期待社区可以使用 Ansible 直接管理 Charts 资源,或可以有一个工具把 Charts 的 Go 模板转成 Ansible 可以接受的 Jinja2 格式。

二、k8s_scale 和 k8s_facts 模块

这两个模块算辅助的功能,我觉得使用的机会可能并不会太多。k8s_scale 的例子如下:

k8s_facts的例子如下:

三、小技巧

因为 Ansible 是 Python 编写的,在使用 pip 安装时容易破坏系统已经安装的 Python 包,推荐使用虚拟环境来安装。

#mkvirtualenv --system-site-packages ansible
#pip install 'ansible<2.7' openshift

使用时,需要指定 Ansible 使用的 python interpreter 变量

#workon ansible
#ansible-playbook -i localhost, -c local test.yml -e ansible_python_interpreter=${VIRTUAL_ENV}/bin/python

四、demo

以下是使用 ansible 在 OpenShift 上面部署 echoserver 的一个完整例子


参考文献:

[1]https://medium.com/virtuslab/think-twice-before-using-helm-25fbb18bc822;
[2]https://docs.ansible.com/ansible/latest/modules/list_of_clustering_modules.html;

推荐阅读:
  1. Ansible的基础使用和快速入门
  2. k8s之Dashboard部署及使用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

九州云 openstack kubernetes

上一篇:(版本定制)第15课:Spark Streaming源码解读之No Receivers彻底思考

下一篇:iOS 2个坐标之间的距离

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》