LoginSignup
1
2

More than 3 years have passed since last update.

k3s v0.10.0 (k8s v1.16.2) 上に AWX 9.0.1をデプロイ

Last updated at Posted at 2019-10-23

※2019/11/10 AWXのバージョンを8.0.0→9.0.1へ変更。ほとんど内容に変更はありません。

はじめに

AWXを触ってみようと思い、@sky_jokerxx 氏のBlogにある以下の記事を参考にk3s環境上にデプロイを試みました。
RANCHER LABSのK3SにAWXをデプロイしてみた | 日常系エンジニアのTech Blog

が、ブログ記事の頃と諸々のバージョンが変わっていることから、色々とハマってしまいました。
なんとなく解決できたので、記録を残しておきます。

ハマったポイント

PostgreSQL がデプロイできない

事象

k3s v0.9.1の環境でデプロイすると、
Deploy and Activate Postgres (Kubernetes)
の工程で必ずコケます。

原因

containerdのバグです。
参考:Upgrade containerd to include a fix for CRI issue #1280 · Issue #931 · rancher/k3s
k3sのバージョンをv0.8.1(k8s v1.14.6)まで下げるか、現時点の最新であるv0.10.0(k8s v1.16.2)まで上げるかのどちらかの対応が必要です。

対処

今回はv0.10.0に上げることにしました。

PostgreSQL がデプロイできない(2)

事象

k3s v0.10.0の環境でデプロイしても、
Deploy and Activate Postgres (Kubernetes)
の工程で同じくコケます。

原因

Kubernetes v1.16からAPIの仕様が変わり、指定のバージョンのhelm chart(6.2.1)ではデプロイに失敗します。

対処

PostgreSQLのchartのバージョンを6.5.0まで上げました。

他にもデプロイできない

事象

Apply Deploymentでコケます。

原因

上記と同じくAPIの仕様変更と、AWX 8.0.0リリース時に残留していたバグ(AWX9.0.1では反映されてました)が原因です。

対処

Deploymentのテンプレートファイルを修正しました。

上記の変更点を加味した結果

以下のような手順でデプロイしました。

k3s環境の準備

以前の記事で作った手順と同じです。
2019/10/24現在、バージョンを指定しなければv0.10.0がインストールされます。

helmの準備

以下のYAMLを準備し、applyします。

helm-tiller.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system
$ kubectl apply -f helm-tiller.yaml 
serviceaccount/tiller created
clusterrolebinding.rbac.authorization.k8s.io/tiller created

クライアントにhelmコマンドをインストールし、(Mac+Homebrew環境)
helm initでtillerをデプロイします。

$ brew install kubernetes-helm
$ helm init --service-account tiller

helm versionの結果が以下のようになればOKです。

$ helm version
Client: &version.Version{SemVer:"v2.15.0", GitCommit:"c2440264ca6c078a06e088a838b0476d2fc14750", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.15.0", GitCommit:"c2440264ca6c078a06e088a838b0476d2fc14750", GitTreeState:"clean"}

Storageの準備

k3sに標準インストール時からlocal-path-provisionerが導入されたので使ってみます。

$ kubectl get pod -n kube-system
NAME                                      READY   STATUS    RESTARTS   AGE
local-path-provisioner-58fb86bdfd-pfxsw   1/1     Running   0          6h38m
...

ConfigMap用のYAMLを作りapplyします。

local-path-config.yaml
kind: ConfigMap
apiVersion: v1
metadata:
  name: local-path-config
  namespace: kube-system
data:
  config.json: |-
        {
                "nodePathMap":[
                {
                        "node":"DEFAULT_PATH_FOR_NON_LISTED_NODES",
                        "paths":["/opt/local-path-provisioner"]
                }
                ]
        }
$ kubectl apply -f local-path-config.yaml 
configmap/local-path-config created

AWXリポジトリのクローン

AWXのReleasesから、現時点(2019/10/24)で最新の8.0.0を使うことにしました。2019/11/10時点では9.0.1が最新です。

$ git clone https://github.com/ansible/awx.git
$ cd awx
$ git checkout -b 9.0.1 refs/tags/9.0.1

inventoryファイルの書き換え

環境に合わせて書き換えます。
最低限必要そうな内容だと以下のようになります。

--- installer/inventory.orig    2019-10-24 02:12:48.000000000 +0900
+++ installer/inventory     2019-10-24 02:16:54.000000000 +0900
 # Kubernetes Install
-# kubernetes_context=test-cluster
-# kubernetes_namespace=awx
-# tiller_namespace=kube-system
+kubernetes_context=default
+kubernetes_namespace=awx
+tiller_namespace=kube-system
 # Optional Kubernetes Variables
-# pg_persistence_storageClass=StorageClassName
+pg_persistence_storageClass=local-path

PostgreSQL用helm chartのバージョン書き換え

installer/roles/kubernetes/tasks/main.ymlを書き換えます。

--- installer/roles/kubernetes/tasks/main.yml.orig  2019-10-24 02:16:16.000000000 +0900
+++ installer/roles/kubernetes/tasks/main.yml       2019-10-24 02:18:26.000000000 +0900
@@ -90,7 +90,7 @@
         helm repo update --tiller-namespace={{ tiller_namespace | default('kube-system') }}
         echo {{ pg_values | quote }} | helm upgrade {{ postgresql_service_name }} --install \
           --namespace {{ kubernetes_namespace }} \
-          --version="6.2.1" \
+          --version="6.5.0" \
           --tiller-namespace={{ tiller_namespace | default('kube-system') }} \
           --values - \
           stable/postgresql

Deploymentテンプレートファイルの編集

installer/roles/kubernetes/templates/deployment.yml.j2を編集します。
冒頭のハマりポイントの回避の他に、MetalLB配下に入れる設定も加えています。

--- installer/roles/kubernetes/templates/deployment.yml.j2.bak  2019-11-10 14:43:20.000000000 +0900
+++ installer/roles/kubernetes/templates/deployment.yml.j2  2019-11-10 14:22:09.000000000 +0900
@@ -131,12 +131,15 @@ userNames:
 {% endif %}

 ---
-apiVersion: apps/v1beta1
+apiVersion: apps/v1
 kind: StatefulSet
 metadata:
   name: {{ kubernetes_deployment_name }}
   namespace: {{ kubernetes_namespace }}
 spec:
+  selector:
+    matchLabels:
+      app: {{ kubernetes_deployment_name }}
   serviceName: {{ kubernetes_deployment_name }}
   replicas: 1
   template:
@@ -489,11 +492,12 @@ metadata:
   labels:
     name: {{ kubernetes_deployment_name }}-web-svc
 spec:
-  type: "NodePort"
+  type: LoadBalancer
   ports:
     - name: http
       port: 80
       targetPort: 8052
+  loadBalancerIP: 192.168.24.105
   selector:
     name: {{ kubernetes_deployment_name }}-web-deploy
 ---

いざデプロイ

$ cd installer
$ ansible-playbook -i inventory install.yml

しばらく待って、

PLAY RECAP *********************************************************************************
localhost                  : ok=30   changed=15   unreachable=0    failed=0    skipped=72   rescued=0    ignored=3   

のような行が表示されたら完了です。

全コンテナが上がったことを確認し、

$ kubectl get pod -n awx
NAME                          READY   STATUS    RESTARTS   AGE
awx-postgresql-postgresql-0   1/1     Running   0          25m
awx-0                         4/4     Running   0          35s

http://192.168.24.105 にアクセスして、
スクリーンショット 2019-10-24 3.46.47.png
ログイン画面が表示されたら完了です。
ユーザー名/パスワードはinventoryファイルの中に書いてあります。

スクリーンショット 2019-11-10 16.11.56.png

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2