使用 Red Hat OpenShift 來作為執行環境的平台

資料來源:

Ansible Automation platform 裡的 Automation controller 在執行 playbook 時,已經改用 execution environment (執行環境)這個容器來執行了,換言之,若有建置 OpenShift 的話,應該也可以使用 OpenShift 的運算資源來運行執行環境。

資料來源的文章就是在介紹設定的方法。

首先到 OpenShift ,建置新的 Project

oc new-project ansible-automation

然後建立服務帳號跟配置權限

oc create serviceaccount aap-sa
oc adm policy add-role-to-user edit -z aap-sa

若需要更細部的權限控制,可以自己建立 Role,先將以下內容命名為 aap-sa-role.yml,然後 apply: oc apply -f aap-sa-role.yml

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: aap-sa-role
  namespace: ansible-automation
rules:
- apiGroups:
  - ""
  resources:
  - pods/exec
  - pods/attach
  - pods
  - secrets
  verbs:
  - get
  - list
  - watch
  - create
  - delete
  - update

將 aap-sa 這個服務帳號跟 aap-sa-role 這個 role 做連結

oc adm policy add-role-to-user aap-sa-role -z aap-sa

然後取得服務帳號的 token

oc serviceaccounts get-token aap-sa

回到 Automation controller,先登入,在左邊選單裡選到 Credentials,新增 credential

  • Name 填 “OCP service account”
  • Credential type 選 “OpenShift on Kubernetes API Bearer token”
  • API authentication bearer token 填前面取得的「服務帳號 token」

接著到 Instance groups ,選擇新增 Container group。

  • Name 填 OCP
  • Credential 選剛剛建立的 “OCP service account”
  • Custom pod spec 內容如下
apiVersion: V1
kind: Pod
metadata:
  namespace: ansible-automation
spec:
  serviceAccount: aap-sa
  containers:
    - name: worker
      args:
        - ansible-runner
        - worker
        - '--private-data-dir=/runner'

儲存以後,接著要設定 Job template ,把裡面的 instance group 選為剛剛建立的 “OCP” container group。 試著執行 Job template,Automation controller 就會到 OpenShift 建立 execution environment 的 pod 來執行了。

現在已經可以在 OpenShift 裡運行 execution environment ,那麼是不是可以再多利用 OpenShift 的能力,多開幾個 pod,就可以同時處理了呢? 可以的喔,只要在 Job template 裡的 job slicing 指定數量,Automation controller 就會在 OpenShift 裡去建立指定數量的 pod 來運行 execution environment。

Automation controller 搭配 OpenShift/Kubernetes 這類的容器平台以後,就可以使用容器平台的運算能力來提升 Automation controller 在執行 playbook 的效能,就不再受限於主機的能力了。