使用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

