1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?