Contents
Rancher Labsの k3s にAWX をデプロイした時のメモです。
環境
バージョン
項目 | バージョン |
---|---|
CentOS | 7.6.1810 |
k3s | v1.14.1-k3s.4 |
AWX | 4.0.0 |
登場人物
ホスト名 | 役割 |
---|---|
k3s-master | masterノード |
k3s-node01 | workerノード |
k3sクラスタ構築
一先ず動かす事を目的としているので、firewalldとSELinuxは無効化しています。
masterセットアップ
masterで必要なモジュールをロードします。
1 2 3 |
[root@k3s-master ~]# modprobe nf_conntrack [root@k3s-master ~]# modprobe br_netfilter |
ルーティング設定をします。
1 2 3 4 5 6 |
[root@k3s-master ~]# cat <<EOF > /etc/sysctl.d/k3s.conf > net.bridge.bridge-nf-call-ip6tables = 1 > net.bridge.bridge-nf-call-iptables = 1 > EOF [root@k3s-master ~]# sysctl --system |
master側にk3sをインストールします。
1 2 3 4 5 6 |
[root@k3s-master ~]# curl -sfL https://get.k3s.io | sh - [root@k3s-master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION k3s-master Ready <none> 3s v1.14.1-k3s.4 [root@k3s-master ~]# systemctl status k3s |
helmをデプロイします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
[root@k3s-master ~]# curl -L https://storage.googleapis.com/kubernetes-helm/helm-v2.13.1-linux-amd64.tar.gz -O [root@k3s-master ~]# tar zxvf helm-v2.13.1-linux-amd64.tar.gz linux-amd64/helm linux-amd64/helm [root@k3s-master ~]# mv linux-amd64/helm /usr/local/bin/ [root@k3s-master ~]# kubectl create serviceaccount --namespace kube-system tiller [root@k3s-master ~]# cat << EOF > tiller-role.yml > apiVersion: rbac.authorization.k8s.io/v1beta1 > kind: ClusterRoleBinding > metadata: > name: tiller > roleRef: > apiGroup: rbac.authorization.k8s.io > kind: ClusterRole > name: cluster-admin > subjects: > - kind: ServiceAccount > name: tiller > namespace: kube-system > EOF [root@k3s-master ~]# kubectl create -f tiller-role.yml [root@k3s-master ~]# export KUBECONFIG=/etc/rancher/k3s/k3s.yaml [root@k3s-master ~]# helm init --service-account tiller [root@k3s-master ~]# kubectl get pods --all-namespaces | grep tiller-deploy kube-system tiller-deploy-8458f6c667-tvw5n 1/1 Running 0 21s |
workerセットアップ
masterと同様のモジュールをロードします。
1 2 3 |
[root@k3s-node01 ~]# modprobe nf_conntrack [root@k3s-node01 ~]# modprobe br_netfilter |
ルーティング設定をします。
1 2 3 4 5 6 |
[root@k3s-node01 ~]# cat <<EOF > /etc/sysctl.d/k3s.conf > net.bridge.bridge-nf-call-ip6tables = 1 > net.bridge.bridge-nf-call-iptables = 1 > EOF [root@k3s-node01 ~]# sysctl --system |
worker追加
k3s-node01をクラスタに追加するためk3sコマンドをコピーします。
1 2 |
[root@k3s-master ~]# scp /usr/local/bin/k3s root@192.168.0.181:/usr/local/bin |
クラスタに追加するためのtokenを確認します。
1 2 3 |
[root@k3s-master ~]# cat /var/lib/rancher/k3s/server/node-token K10ce318c4cc5acaae2df2cd202bc4f4051645b1042b6639af463a9f4fc7c949270::node:c4b63377b2a91f44f37e736ce8899602 |
k3s-node01をクラスタへ追加します。
1 2 |
[root@k3s-node01 ~]# k3s agent --server https://192.168.0.180:6443 --token K10ce318c4cc5acaae2df2cd202bc4f4051645b1042b6639af463a9f4fc7c949270::node:c4b63377b2a91f44f37e736ce8899602 |
ロール設定
クラスタの状態を確認します。
1 2 3 4 5 |
[root@k3s-master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION k3s-master Ready <none> 9m9s v1.14.1-k3s.4 k3s-node01 Ready <none> 29s v1.14.1-k3s.4 |
各ロールを設定します。
1 2 3 4 5 6 7 |
[root@k3s-master ~]# kubectl label node k3s-master node-role.kubernetes.io/master=master [root@k3s-master ~]# kubectl label node k3s-node01 node-role.kubernetes.io/worker=worker [root@k3s-master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION k3s-master Ready master 10m v1.14.1-k3s.4 k3s-node01 Ready worker 106s v1.14.1-k3s.4 |
StorageClassとPersistentVolumeの作成
podから(ここでは)ローカルストレージをマウントするためにStorageClassとPersistentVolumeを作成します。
StorageClassを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@k3s-master ~]# cat << EOF > sc-local-storage.yml > kind: StorageClass > apiVersion: storage.k8s.io/v1 > metadata: > name: local-storage > provisioner: kubernetes.io/no-provisioner > volumeBindingMode: WaitForFirstConsumer > EOF [root@k3s-master ~]# kubectl create -f sc-local-storage.yml [root@k3s-master ~]# kubectl get sc NAME PROVISIONER AGE local-storage kubernetes.io/no-provisioner 11s |
PersistentVolumeを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
[root@k3s-master ~]# cat << EOF > pv-local-storage.yml > apiVersion: v1 > kind: PersistentVolume > metadata: > name: local-pv > spec: > capacity: > storage: 10Gi > accessModes: > - ReadWriteOnce > persistentVolumeReclaimPolicy: Retain > storageClassName: local-storage > local: > path: /opt > nodeAffinity: > required: > nodeSelectorTerms: > - matchExpressions: > - key: kubernetes.io/hostname > operator: In > values: > - k3s-node01 > EOF [root@k3s-master ~]# kubectl create -f pv-local-storage.yml [root@k3s-master ~]# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE local-pv 10Gi RWO Retain Available local-storage 19s |
AWXデプロイ
AWXクローン
masterに必要なパッケージをインストールします。
1 2 3 |
[root@k3s-master ~]# yum -y install epel-release [root@k3s-master ~]# yum -y install git ansible |
AWXのリポジトリをクローンします。
1 2 |
[root@k3s-master ~]# git clone https://github.com/ansible/awx.git |
AWXデプロイ
AWXをデプロイするための準備をします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[root@k3s-master ~]# cd awx [root@k3s-master awx]# git checkout -b 4.0.0 refs/tags/4.0.0 Switched to a new branch '4.0.0' [root@k3s-master awx]# cd installer/ [root@k3s-master installer]# vi inventory (snip) # Kubernetes Install kubernetes_context=test-cluster kubernetes_namespace=awx tiller_namespace=kube-system # Optional Kubernetes Variables pg_persistence_storageClass=local-storage (snip) postgres_data_dir=/opt/pgdocker (snip) |
必要であればコンテナの必要スペックを変更してください。
1 2 |
[root@k3s-master installer]# vi roles/kubernetes/defaults/main.yml |
AWXをデプロイします。
1 2 |
[root@k3s-master installer]# ansible-playbook -i inventory install.yml |
AWXにアクセスするためのポートを確認します。
ここではクラスターのホストのIPで 30693
へアクセスします。
1 2 3 |
[root@k3s-master installer]# kubectl -n awx get svc | grep web awx-web-svc NodePort 10.43.239.66 <none> 80:30693/TCP 4m34s |
アクセスしてログイン画面が表示されることを確認します。
URL |
---|
http://clusterのホストのIP:30693 |