Ansible 的 k8s 模块完全兼容 openshift 资源

安装

使用 k8s 模块需要安装 openshift 的 python 扩展

1
$ pip install --ignore-installed openshift

安装过程中报如下错误
TypeError: find_packages() got an unexpected keyword argument include
需要升级 setuptools

1
$ pip install -U setuptools

在执行 k8s 命令的主机上登录 kubernetes/openshift 平台

1
2
$ oc login https://master.example.com:8443 -u admin -p
password

测试

使用 ansible k8s 模块创建 namespace

1
$ oc -i hosts all -m k8s -a 'state=present name=testproject kind=Project'

使用 ansible k8s 模块基于 dc.yaml 文件创建 dc

  1. 创建 dc.yaml 文件
1
$ oc run nginx --image=nginx -n testproject --dry-run -o yaml

将内容输入到 nginx-dc.yaml 文件中,去掉些默认值,添加 namespace

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ cat nginx-dc.yaml
apiVersion: v1
kind: DeploymentConfig
metadata:
labels:
run: nginx
name: nginx
namespace: testproject
spec:
replicas: 1
selector:
run: nginx
template:
metadata:
labels:
run: nginx
spec:
containers:
- image: nginx
name: nginx
  1. 使用 ansible 创建
1
$ ansible -i hosts all -m k8s -a 'state=present src=/root/sample/nginx-dc.yaml'

使用 ansible k8s 模块基于模板文件创建 dc

  1. 创建 playbook 文件
<< EOF >> playbook.yaml
1
2
3
4
5
6
7
8
---
- hosts: all
tasks:
- name: create nginx yaml
k8s:
state: present
definition: "{{ lookup('template', '/root/sample/dc.yaml') | from_yaml }}"
EOF
  1. 使用 ansible-playbook 创建 nginx 应用
1
$ ansible-playbook -i hosts playbook.yaml

删除 nginx DeploymentConfig

1
$ ansible -i hosts all -m k8s -a 'state=absent kind=DeploymentConfig namespace=testproject name=nginx'

注意:

  • k8s 插件不支持 kind: List。kind: List 并不是 K8S/OpenShift 中的资源对象,而是客户端将它解析为单独的资源对象
  • k8s 插件不支持 definition 中使用---来创建多个资源对象。
  • 使用 k8s 插件得一个个地创建资源对象,利用 Ansible 的 with_items。