使用k3s v0.10.0(k8s v1.16.2)环境部署AWX 9.0.1

※2019/11/10将AWX的版本从8.0.0更改为9.0.1。几乎没有内容上的更改。

首先

我打算尝试使用 AWX,在 @sky_jokerxx 先生的博客上参考了以下文章,在 k3s 环境上尝试部署。
在 RANCHER LABS 的 K3S 上部署 AWX | 日常工程师的技术博客

然而,由于博客文章和各种版本的改变,我遇到了各种问题。
因为我有些心得总结,所以我打算记录下来。

迷上了其中的要点

无法部署PostgreSQL。

事件

在 k3s v0.9.1 环境下部署时,无论如何都会在 Deploy and Activate Postgres (Kubernetes) 过程中失败。

背景

这是containerd的一个bug。
参考:升级containerd以修复CRI问题#1280·问题#931·牧人/ 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)”步骤同样会失败。

There is only one option available for paraphrasing the word “reason” natively in Chinese:

1. 缘由

从 Kubernetes v1.16 开始,API的规范发生了变化,指定版本的helm chart(6.2.1)无法成功部署。

处理

我将PostgreSQL的图表版本升级至6.5.0。

无法部署其他(或别的)地方

事件

申请部署会失败。

追溯起因

原因是与上述相同,API规范进行了更改,并且在AWX 8.0.0版本发布时留下的错误(在AWX9.0.1中已经进行了反映)。

应对

我已经修改了部署模板文件。

考虑到上述的变更内容,导致的结果

我按照以下步骤进行了部署。

准备k3s环境

在之前的文章中使用的是相同的步骤。
截至2019年10月24日,如果不指定版本,将安装v0.10.0版本。

准备舵。

准备以下的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

在Mac+Homebrew环境下,为客户端安装helm命令并使用helm init部署tiller。

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

如果`helm version`的结果如下所示,那就可以了。

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

储存准备

由于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操作。

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中使用最新的版本8.0.0,现在是2019年10月24日。而截至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

编辑部署模板文件。

编辑`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
スクリーンショット 2019-10-24 3.46.47.png
スクリーンショット 2019-11-10 16.11.56.png
bannerAds