在本地Kubernetes上安装AWX

1. 基础环境

  • Kubernetes 13
  • AWX 6.0.0
  • helm 2.11.0
  • postgresql 2.0.0

2. 准备环境

2.1 Kubernetes

Kubernetes环境已自行搭建完成

2.2 AWX

  • 默认每个pod请求的资源为 —— Memory:6GB CPU:3cores,可在/installer/roles/kubernetes/defaults/main.yml中进行修改,注意修改过小,可能会导致环境崩溃。

2.2.1 下载官方部署文件

官方git:https://github.com/ansible/awx ,部署文件放在awx/installer/,kubernetes相关在awx/installer/roles/kubernetes/目录下。

2.2.2 修改installer/inventory文件

确保所有Openshift Install和独立的Docker部分已被注释。

可通过kubectl config current-context获取自己的kubernetes_context。

我的inventory未注释内容如下

localhost ansible_connection=local ansible_python_interpreter="/usr/bin/env python"

[all:vars]

dockerhub_base=ansible

# Kubernetes Install
kubernetes_context=kubernetes-admin@kubernetes
kubernetes_namespace=awx
tiller_namespace=kube-system
# Optional Kubernetes Variables
pg_persistence_storageClass=StorageClassName
pg_cpu_limit=1000
pg_mem_limit=2

# Common Docker parameters
awx_task_hostname=awx
awx_web_hostname=awxweb
postgres_data_dir=/tmp/pgdocker
host_port=80
host_port_ssl=443
#ssl_certificate=
docker_compose_dir=/tmp/awxcompose

# pg_hostname=postgresql
pg_username=awx
# pg_password should be random 10 character alphanumeric string, when postgresql is running on kubernetes
# NB: it's a limitation of the "official" postgres helm chart
pg_password=awxpass
pg_database=awx
pg_port=5432
#pg_sslmode=require

# RabbitMQ Configuration
rabbitmq_password=awxpass
rabbitmq_erlang_cookie=cookiemonster

# This will create or update a default admin (superuser) account in AWX, if not provided
# then these default values are used
admin_user=admin
admin_password=password

# Whether or not to create preload data for demonstration purposes
create_preload_data=True

# AWX Secret key
# It's *very* important that this stay the same between upgrades or you will lose the ability to decrypt
# your credentials
secret_key=awxsecret

project_data_dir=/data/awx/projects

2.2.3修改installer/roles/kubernetes/defaults

dockerhub_version: latest

我自己不修改这儿会报could not locate file in lookup: /root/installer/../"VERSION"的错,我就自己改了这儿,此时对应的latest版本是6.0.0

2.2.4 helm

官方部署文件在部署的时候会检测是否安装了helm,如果未安装则会帮你安装,这里我是自己已提前安装了helm。

helm安装://www.greatytc.com/p/8aec2776f3f1

2.2.5 postgresql

文档使用的postgresql 2.0,在部署过程中会检查是否安装,未安装则会帮你安装,但是因为我是本地环境没有动态持久化存储,通过官方环境则会出错,需要修改一下原文件。所以我下载到本地,放在git上。
postgresql2.0: https://github.com/OranYee/awx

因为没有动态存储,所以修改了postgresql/value.ymal,否则会报pod has unbound immediate PersistentVolumeClaims的错,应该也可以手动添加pv,但是我自己添加的没绑定上,我就直接这么粗暴了。

persistence:
  enabled: false

修改installer/roles/kubernetes/tasks/main.yml,找到Deploy and Activate Postgres,将stable/postgresql修改为本地postgresql的路径,我的是在/root/postgresql

- name: Deploy and Activate Postgres (Kubernetes)
  shell: |
    helm repo update --tiller-namespace={{ tiller_namespace | default('kube-system') }}
    helm upgrade {{ postgresql_service_name }} --install \
      --namespace {{ kubernetes_namespace }} \
      --set postgresqlUsername={{ pg_username }} \
      --set postgresqlPassword={{ pg_password | quote }} \
      --set postgresqlDatabase={{ pg_database }} \
      --set persistence.size={{ pg_volume_capacity|default('5')}}Gi \
      --version="2.0.0" \
      --tiller-namespace={{ tiller_namespace | default('kube-system') }} \
      {{ '--set persistence.storageClass='+pg_persistence_storageClass if pg_persistence_storageClass is defined else ' ' }} \
      {{ '--set resources.limits.cpu='+(pg_cpu_limit | string)+'m' if pg_cpu_limit is defined else ' ' }} \
      {{ '--set resources.limits.memory='+(pg_mem_limit | string)+'Gi' if pg_mem_limit is defined else ' ' }} \
      /root/postgresql
  when:
    - pg_hostname is not defined or pg_hostname == ''
    - postgres_svc_details is defined and postgres_svc_details.rc != 0
    - kubernetes_context is defined
  register: kubernetes_pg_activate
  no_log: no

查看postgresql是否部署成功helm list

NAME            REVISION    UPDATED                     STATUS      CHART               APP VERSION NAMESPACE
awx-postgresql  1           Wed Jul 17 11:29:56 2019    DEPLOYED    postgresql-2.0.0    10.5.0      awx      
[root@k8s-master01 postgresql]# kubectl get pods -n awx
NAME                          READY   STATUS    RESTARTS   AGE
awx-postgresql-postgresql-0   1/1     Running   0          7h52m

删除postgresql

helm del postgresql --purge

2.2.6 部署AWX

(我将installer/roles/kubernetes/templates下的deployment.yml.j2下的centos镜像所依赖的软件提前安装在一个镜像中了,kind:StatefulSet下的initContainers内容变成了如下,你也可以不进行修改。)

      initContainers:
        - image: 'oranyee/centos:awx'
          name: init-custom-venvs
          command:
            - sh
            - '-c'
            - >-
              mkdir -p {{ custom_venvs_path }} &&
{% for custom_venv in custom_venvs %}
              virtualenv -p {{ custom_venv.python | default(custom_venvs_python) }} \
                {{ custom_venvs_path }}/{{ custom_venv.name }} &&
              source {{ custom_venvs_path }}/{{ custom_venv.name }}/bin/activate &&
              {{ custom_venvs_path }}/{{ custom_venv.name }}/bin/pip install -U psutil \
                "ansible=={{ custom_venv.python_ansible_version }}" &&
{% if custom_venv.python_modules is defined %}
              {{ custom_venvs_path }}/{{ custom_venv.name }}/bin/pip install -U \
                {% for module in custom_venv.python_modules %}{{ module }} {% endfor %} &&
{% endif %}
              deactivate && 
{% endfor %}
              :
          volumeMounts:
            - name: custom-venvs
              mountPath: {{ custom_venvs_path }}
{% endif %}

在/installer/roles/kubernetes/templates/deployment.yml.j2的name: {{ kubernetes_deployment_name }}-celery的volumeMounts下添加挂载project目录:

{% if project_data_dir is defined %}
            - name: {{ kubernetes_deployment_name }}-project-data-dir
              mountPath: "/var/lib/awx/projects"
              readOnly: false
{% endif %}

在awx目录下,运行ansible-playbook -i inventory install.yml。等待几分钟后,如果没有出错则成功,有错可通过修改installer/roles/kubernetes/tasks/main.yml下的对应的任务下的no_log,修改为yes,再运行ansible-playbook -i inventory install.yml查看具体什么错误,或者ansible-playbook -i inventory install.yml -vvv查看更多信息。

2.2.7 查看AWX部署是否成功

[root@k8s-master01 ~]# kubectl get pods -n awx
NAME                          READY   STATUS    RESTARTS   AGE
awx-0                         4/4     Running   0          5d19h
awx-postgresql-postgresql-0   1/1     Running   0          6d22h

在浏览器访问:ip:32641,默认账户和密码分别是:admin和password,可在installer/inventory下进行修改

awx.PNG

进来的awx主页如下:


awx-index.PNG

3. awx的简单使用

3.1 创建playbook

进入awx所在的节点,可通过kubectl get pods -n awx -owide查看awx—0在哪个节点,我的是在k8s-master02

[root@k8s-master01 ~]# kubectl get pods -n awx -owide
NAME                          READY   STATUS    RESTARTS   AGE     IP            NODE
awx-0                         4/4     Running   0          5d20h   10.244.1.79   k8s-master02
awx-postgresql-postgresql-0   1/1     Running   0          6d23h   10.244.2.57   k8s-master03

进入awx projects挂在的目录下,此前在inventory文件中定义在/data/awx/projects下,创建目录ansible-for-devops,在ansible-for-devops目录下创建测试playbook:main.yml

[root@k8s-master02 ansible-for-devops]# cat main.yml
---
- hosts: all
  gather_facts: no
  tasks:
  - name: Check the date on the server.
    command: date
  - name: Check the eth0 ip on the server.
    command: ifconfig em1

3.2 创建证书

点击Credentials,添加证书,选择证书类型为Machine。


credentials.jpg
credential-type.jpg

输入你要管理的machine的username和password


ssh-username-password.jpg

3.3 创建Projects

选择SCM TYPE为Manual,输入project的名字,选ORGANIZATION和PLAYBOOK DIRECTORY


project.png

3.4 创建Inventory

创建inventory,输入名字保存,然后点击创建的inventory,选择HOSTS,添加你要管理的machine的ip。


hosts.jpg

3.5创建Template

点击Templates,创建一个新template保存并运行。


template.jpg

3.6 成功运行

successful.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 197,273评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,905评论 2 374
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 144,281评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,817评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,690评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,491评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,886评论 3 388
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,513评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,810评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,839评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,642评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,455评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,901评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,091评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,381评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,895评论 2 343
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,104评论 2 338