用Ansible的Kubernetes模块实现容器编排自动化


用Ansible的Kubernetes模块实现容器编排自动化文章插图
将 Kubernetes 与 Ansible 结合实现云端自动化 。 此外 , 还可以参照我们的 Ansible 的 k8s 模块速查表 。
? 来源:linux.cn ? 作者:Seth Kenlon ? 译者:Hank Chow ?
(本文字数:6899 , 阅读时长大约:8 分钟)
【用Ansible的Kubernetes模块实现容器编排自动化】Ansible 是实现自动化工作的优秀工具 , 而 Kubernetes 则是容器编排方面的利器 , 要是把两者结合起来 , 会有怎样的效果呢?正如你所猜测的 , Ansible + Kubernetes 的确可以实现容器编排自动化 。
Ansible 模块实际上 , Ansible 本身只是一个用于解释 YAML 文件的框架 。 它真正强大之处在于它 丰富的模块, 所谓 模块(module) , 就是在 Ansible 剧本(playbook) 中让你得以通过简单配置就能调用外部应用程序的一些工具 。
Ansible 中有模块可以直接操作 Kubernetes , 也有对一些相关组件(例如 Docker 和 Podman )实现操作的模块 。 学习使用一个新模块的过程和学习新的终端命令、API 一样 , 可以先从文档中了解这个模块在调用的时候需要接受哪些参数 , 以及这些参数在外部应用程序中产生的具体作用 。
访问 Kubernetes 集群在使用 Ansible Kubernetes 模块之前 , 先要有能够访问 Kubernetes 集群的权限 。 在没有权限的情况下 , 可以尝试使用一个短期在线试用账号 , 但我们更推荐的是按照 Kubernetes 官网上的指引 , 或是参考 Braynt Son 《 入门 Kubernetes 》的教程安装 Minikube。 Minikube 提供了一个单节点 Kubernetes 实例的安装过程 , 你可以像使用一个完整集群一样对其进行配置和交互 。

  • 下载 Ansible k8s 速记表 (需注册)
在安装 Minikube 之前 , 你需要确保你的环境支持虚拟化并安装 libvirt , 然后对 libvirt 用户组授权:
$ sudo dnf install libvirt$ sudo systemctl start libvirtd$ sudo usermod --append --groups libvirt `whoami`$ newgrp libvirt安装 Python 模块
为了能够在 Ansible 中使用 Kubernetes 相关的模块 , 你需要安装以下这些 Python 模块:
$ pip3.6 install kubernetes --user$ pip3.6 install openshift --user启动 Kubernetes
如果你使用的是 Minikube 而不是完整的 Kubernetes 集群 , 请使用 minikube 命令在本地创建一个最精简化的 Kubernetes 实例:
$ minikube start --driver=kvm2 --kvm-network default然后等待 Minikube 完成初始化 , 这个过程所需的时间会因实际情况而异 。
获取集群信息集群启动以后 , 通过 cluster-info 选项就可以获取到集群相关信息了:
$ kubectl cluster-infoKubernetes master is running at KubeDNS is running at /api/v1/namespaces/kube-system/services/kube-dns:dns/proxyTo further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.使用 k8s 模块Ansible 使用 k8s 这个模块来实现对 Kubernetes 的操作 , 在剧本中使用 k8s 模块就可以对 Kuvernetes 对象进行管理 。 这个模块描述了 kubectl 命令的最终状态 , 例如对于以下这个使用 kubectl 创建新的 命名空间 的操作:
$ kubectl create namespace my-namespace这是一个很简单的操作 , 而对这个操作的最终状态用 YAML 文件来描述是这样的:
- hosts: localhosttasks:- name: create namespacek8s:name: my-namespaceapi_version: v1kind: Namespacestate: present如果你使用的是 Minikube , 那么主机名(hosts)应该定义为 localhost 。 需要注意的是 , 所使用的模块也定义了可用参数的语法(例如 api_version 和 kind 参数) 。
在运行这个剧本之前 , 先通过 yamllint 命令验证是否有错误:
$ yamllint example.yaml确保没有错误之后 , 运行剧本:
$ ansible-playbook ./example.yaml可以验证新的命名空间是否已经被创建出来:
$ kubectl get namespacesNAMESTATUSAGEdefaultActive37hkube-node-leaseActive37hkube-publicActive37hkube-systemActive37hdemoActive11hmy-namespaceActive3s使用 Podman 拉取容器镜像容器是个 Linux 系统 , 几乎是最小化的 , 可以由 Kubernetes 管理 。LXC 项目 和 Docker 定义了大部分的容器规范 。 最近加入容器工具集的是 Podman , 它不需要守护进程就可以运行 , 为此受到了很多用户的欢迎 。
通过 Podman 可以从 Docker Hub 或者 Quay.io 等存储库拉取容器镜像 。 这一操作对应的 Ansible 语法也很简单 , 只需要将存储库网站提供的镜像路径写在剧本中的相应位置就可以了:
- name: pull an imagepodman_image:name: quay.io/jitesoft/nginx使用 yamllint 验证: