Exastro on Kubernetes - Offline

目的

本書では、Exastro IT Automation を利用する際に必要となる、Exastro Platform および Exastro IT Automation を Kubernetes 上に導入する手順について説明します。

特徴

高い可用性やサービスレベルを必要とされる際の、Exastro IT Automation の導入方法となります。
評価や一時的な利用など、簡単に利用を開始したい場合には、Docker Compose 版 の利用を推奨します。

前提条件

資材を収集する環境とインストールする環境では、OSを一致させる必要があります。
資材を収集するサーバは curl コマンドが実行できる必要があります。
オフライン環境として使用するサーバはFirewalldがインストールされている必要があります。

警告

kubernetesのオフライン用設定ファイルを適用するため、Exastroをインストールサーバは外部と通信できないことを確認してください。
  • クライアント要件

    動作確認が取れているクライアントアプリケーションのバージョンは下記のとおりです。
    表 33 クライアント要件

    アプリケーション

    バージョン

    Helm

    v3.9.x

    kubectl

    1.23

  • 動作確認済みオペレーティングシステム

    以下は、動作確認済のバージョンとなります。

    表 34 オペレーティングシステム

    種別

    バージョン

    Red Hat Enterprise Linux

    バージョン 9.6

  • デプロイ環境

    動作確認が取れているコンテナ環境の最小要求リソースとバージョンは下記のとおりです。
    表 35 ハードウェア要件(最小構成)

    リソース種別

    要求リソース

    CPU

    2 Cores (3.0 GHz, x86_64)

    Memory

    4GB

    Storage (Container image size)

    10GB

    Kubernetes (Container image size)

    1.23 以上

    表 36 ハードウェア要件(推奨構成)

    リソース種別

    要求リソース

    CPU

    4 Cores (3.0 GHz, x86_64)

    Memory

    16GB

    Storage (Container image size)

    120GB

    Kubernetes (Container image size)

    1.23 以上

    警告

    要求リソースは Exastro IT Automation のコア機能に対する値です。同一クラスタ上に Keycloak や MariaDB などの外部ツールをデプロイする場合は、その分のリソースが別途必要となります。
    データベースおよびファイルの永続化のために、別途ストレージ領域を用意する必要があります。
    Storage サイズには、Exastro IT Automation が使用する入出力データのファイルは含まれていないため、利用状況に応じて容量を見積もる必要があります。
  • 通信要件

    • クライアントからデプロイ先のコンテナ環境にアクセスできる必要があります。
    • Platform 管理者用と一般ユーザー用の2つ通信ポートが使用となります。
    • コンテナ環境からコンテナイメージの取得のために、Docker Hub に接続できる必要があります。
  • 外部コンポーネント

    • MariaDB、もしくは、MySQL サーバ
    • GitLab リポジトリ、および、アカウントの払い出しが可能なこと

    警告

    GitLab 環境を同一クラスタに構築する場合は、GitLab のシステム要件に対応する最小要件を追加で容易する必要があります。
    Database 環境を同一クラスタに構築する場合は、使用する Database のシステム要件に対応する最小要件を定義する必要があります

全体の流れ

オンライン環境での作業完了後に、オフライン環境にてインストールを実施します。
※本説明では、資材収集サーバー1台、Ansible実行サーバ1台、Exastroインストールサーバ1台の計3台で実施しています。
フローイメージ

オンライン環境での手順

①事前準備
②helmリポジトリ及び設定ファイルの取得
③kubespray及びkubernetesのコンテナイメージの取得
④パッケージファイルの取得
⑤Exastroのコンテナイメージを取得
⑥オフライン環境で使用するシェルスクリプト等を作成

オフライン環境での手順

⑦資材受け取り
⑧Ansible実行サーバでの準備
⑨Exastroインストールサーバでの準備
⑩kubernetesのコンテナイメージの設定
⑪自己署名証明書及びNginxの設定
⑫パッケージのインストール
⑬kubesprayのインストール
⑭Exastroのインストール
⑮Exastroインストール後の設定

オンライン環境(インターネットに接続できる環境)での作業

資材の収集を行います。

①事前準備

コンテナイメージを取得するため docker コマンドを使用します。
インストールされていない場合は以下の手順でdockerをインストールします。
リスト 191 コマンド
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
dnf remove -y runc
dnf install -y docker-ce docker-ce-cli containerd.io container-selinux
systemctl enable --now docker
cat /etc/group | grep docker
ユーザーがグループに追加されていない場合は以下を実行します。
リスト 192 コマンド
usermod -aG docker ${USER}
cat /etc/group | grep docker
reboot
コンテナイメージを取得する際、dockerのバージョンによってはDocker Image Format v1 及び Docker Image manifestについてのエラーが起きることがあります。
環境変数を追加し、事前に対応します。
リスト 193 コマンド
cd  /etc/systemd/system/docker.service.d

#docker.service.dディレクトリが存在しない場合は新しく作成する
cd  /etc/systemd/system/
mkdir docker.service.d && cd docker.service.d
http-proxy.confが存在しない場合は新しく作成し、以下の2行を記載します。
リスト 194 コマンド
vi http-proxy.conf

[Service]
Environment="DOCKER_ENABLE_DEPRECATED_PULL_SCHEMA_1_IMAGE=1"

注釈

ファイルが存在する場合はEnvironment="DOCKER_ENABLE_DEPRECATED_PULL_SCHEMA_1_IMAGE=1"を追記します。
dockerを再起動し、追加した環境変数を確認します。
リスト 195 コマンド
systemctl daemon-reload
systemctl restart docker
systemctl show --property=Environment docker
その他に必要なパッケージをインストールします。
リスト 196 コマンド
dnf install -y git python3 python3-pip createrepo
pip3.9 install ruamel-yaml
pip3.9 install ansible

②helmリポジトリ及び設定ファイルの編集

作業用ディレクトリを作成します。
リスト 197 コマンド
mkdir /tmp/work && cd /tmp/work
helm コマンドがインストールされていない場合、以下の手順でインストールします。
詳細は helmの公式ドキュメント をご参照ください。
リスト 198 コマンド
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
helm version
rm -f get_helm.sh
Exastro システムの Helm リポジトリを登録後、リポジトリを取得します。
リスト 199 コマンド
helm repo add exastro https://exastro-suite.github.io/exastro-helm/ --namespace exastro
helm repo update
helm pull exastro/exastro
設定ファイルを取得し、以降の手順でパラメータを設定していきます。
リスト 200 コマンド
helm show values exastro/exastro > exastro.yaml
exastro.yaml
リスト 201 exastro.yaml
  1# Default values for Exastro.
  2# This is a YAML-formatted file.
  3# Declare variables to be passed into your templates.
  4global:
  5  itaGlobalDefinition:
  6    config:
  7      DEFAULT_LANGUAGE: "ja"
  8      LANGUAGE: "en"
  9      TZ: "Asia/Tokyo"
 10    secret:
 11      ENCRYPT_KEY: ""
 12    persistence:
 13      enabled: true
 14      accessMode: ReadWriteMany
 15      size: 10Gi
 16      volumeType: hostPath # e.g.) hostPath or AKS
 17      storageClass: "-" # e.g.) azurefile or - (None)
 18      # matchLabels:
 19      #   release: "stable"
 20      # matchExpressions:
 21      #   - {key: environment, operator: In, values: [dev]}
 22  itaDatabaseDefinition:
 23    config:
 24      DB_VENDOR: "mariadb"
 25      DB_HOST: "mariadb"
 26      DB_PORT: "3306"
 27      DB_DATABASE: "ITA_DB"
 28    secret:
 29      DB_ADMIN_USER: "root"
 30      DB_ADMIN_PASSWORD: "Ch@ngeMeDBAdm"
 31      DB_USER: "ITA_USER"
 32      DB_PASSWORD: "Ch@ngeMeITADB"
 33  pfGlobalDefinition:
 34    config:
 35      DEFAULT_LANGUAGE: "ja"
 36      LANGUAGE: "en"
 37      TZ: "Asia/Tokyo"
 38    secret:
 39      ENCRYPT_KEY: ""
 40  pfAuditLogDefinition:
 41    name: pf-auditlog
 42    persistence:
 43      enabled: false
 44      reinstall: false
 45      accessMode: ReadWriteMany
 46      size: 10Gi
 47      volumeType: hostPath # e.g.) hostPath or AKS
 48      storageClass: "-" # e.g.) azurefile or - (None)
 49      # matchLabels:
 50      #   release: "stable"
 51      # matchExpressions:
 52      #   - {key: environment, operator: In, values: [dev]}
 53  pfDatabaseDefinition:
 54    config:
 55      DB_VENDOR: "mariadb"
 56      DB_HOST: "mariadb"
 57      DB_PORT: "3306"
 58      DB_DATABASE: "platform"
 59    secret:
 60      DB_ADMIN_USER: "root"
 61      DB_ADMIN_PASSWORD: "Ch@ngeMeDBAdm"
 62      DB_USER: "pf-user"
 63      DB_PASSWORD: "Ch@ngeMePFDB"
 64  keycloakDefinition:
 65    secret:
 66      SYSTEM_ADMIN: "admin"
 67      SYSTEM_ADMIN_PASSWORD: "Ch@ngeMeKCAdm"
 68      KEYCLOAK_DB_USER: "keycloak"
 69      KEYCLOAK_DB_PASSWORD: "Ch@ngeMeKCADB"
 70  gitlabDefinition:
 71    config:
 72      GITLAB_PROTOCOL: "http"
 73      GITLAB_HOST: "" # "gitlab" if use container.
 74      GITLAB_PORT: "8080"
 75    secret:
 76      GITLAB_ROOT_PASSWORD: "Ch@ngeMeGL"
 77      GITLAB_ROOT_TOKEN: "change-this-token"
 78  mongoDefinition:
 79    config:
 80      MONGO_PROTOCOL: "http"
 81      MONGO_HOST: "mongo" # "mongo" if use container.
 82      MONGO_PORT: "27017"
 83    secret:
 84      MONGO_ADMIN_USER: "admin"
 85      MONGO_ADMIN_PASSWORD: "Ch@ngeMeMGAdm"
 86
 87exastro-it-automation:
 88  ita-api-admin:
 89    replicaCount: 1
 90    image:
 91      repository: "docker.io/exastro/exastro-it-automation-api-admin"
 92      tag: ""
 93      pullPolicy: IfNotPresent
 94    extraEnv:
 95      PLATFORM_API_HOST: "platform-api"
 96      PLATFORM_API_PORT: "8000"
 97
 98  ita-api-organization:
 99    replicaCount: 1
100    image:
101      repository: "docker.io/exastro/exastro-it-automation-api-organization"
102      tag: ""
103      pullPolicy: IfNotPresent
104    extraEnv:
105      PLATFORM_API_HOST: "platform-api"
106      PLATFORM_API_PORT: "8000"
107
108  ita-api-oase-receiver:
109    replicaCount: 1
110    image:
111      repository: "docker.io/exastro/exastro-it-automation-api-oase-receiver"
112      tag: ""
113      pullPolicy: IfNotPresent
114    extraEnv:
115      LISTEN_PORT: "8000"
116      PLATFORM_API_HOST: "platform-api"
117      PLATFORM_API_PORT: "8000"
118
119  ita-api-ansible-execution-receiver:
120    replicaCount: 1
121    image:
122      repository: "docker.io/exastro/exastro-it-automation-api-ansible-execution-receiver"
123      tag: ""
124      pullPolicy: IfNotPresent
125    extraEnv:
126      LISTEN_PORT: "8000"
127      PLATFORM_API_HOST: "platform-api"
128      PLATFORM_API_PORT: "8000"
129
130  ita-by-ansible-execute:
131    replicaCount: 1
132    image:
133      repository: "docker.io/exastro/exastro-it-automation-by-ansible-execute"
134      tag: ""
135      pullPolicy: IfNotPresent
136    extraEnv:
137      EXECUTE_INTERVAL: "3"
138      ANSIBLE_AGENT_IMAGE: "docker.io/exastro/exastro-it-automation-by-ansible-agent"
139      ANSIBLE_AGENT_IMAGE_TAG: ""
140      PLATFORM_API_HOST: "platform-api"
141      PLATFORM_API_PORT: "8000"
142    serviceAccount:
143      create: false
144      name: "ita-by-ansible-execute-sa"
145
146  ita-by-ansible-legacy-role-vars-listup:
147    replicaCount: 1
148    extraEnv:
149      EXECUTE_INTERVAL: "10"
150      PLATFORM_API_HOST: "platform-api"
151      PLATFORM_API_PORT: "8000"
152    image:
153      repository: "docker.io/exastro/exastro-it-automation-by-ansible-legacy-role-vars-listup"
154      tag: ""
155      pullPolicy: IfNotPresent
156
157  ita-by-ansible-legacy-vars-listup:
158    replicaCount: 1
159    extraEnv:
160      EXECUTE_INTERVAL: "10"
161      PLATFORM_API_HOST: "platform-api"
162      PLATFORM_API_PORT: "8000"
163    image:
164      repository: "docker.io/exastro/exastro-it-automation-by-ansible-legacy-vars-listup"
165      tag: ""
166      pullPolicy: IfNotPresent
167
168  ita-by-ansible-pioneer-vars-listup:
169    replicaCount: 1
170    extraEnv:
171      EXECUTE_INTERVAL: "10"
172      PLATFORM_API_HOST: "platform-api"
173      PLATFORM_API_PORT: "8000"
174    image:
175      repository: "docker.io/exastro/exastro-it-automation-by-ansible-pioneer-vars-listup"
176      tag: ""
177      pullPolicy: IfNotPresent
178
179  ita-by-ansible-towermaster-sync:
180    replicaCount: 1
181    extraEnv:
182      EXECUTE_INTERVAL: "10"
183      PLATFORM_API_HOST: "platform-api"
184      PLATFORM_API_PORT: "8000"
185    image:
186      repository: "docker.io/exastro/exastro-it-automation-by-ansible-towermaster-sync"
187      tag: ""
188      pullPolicy: IfNotPresent
189
190  ita-by-cicd-for-iac:
191    replicaCount: 1
192    extraEnv:
193      EXECUTE_INTERVAL: "10"
194      PLATFORM_API_HOST: "platform-api"
195      PLATFORM_API_PORT: "8000"
196    image:
197      repository: "docker.io/exastro/exastro-it-automation-by-cicd-for-iac"
198      tag: ""
199      pullPolicy: IfNotPresent
200
201  ita-by-collector:
202    replicaCount: 1
203    extraEnv:
204      EXECUTE_INTERVAL: "10"
205      PLATFORM_API_HOST: "platform-api"
206      PLATFORM_API_PORT: "8000"
207    image:
208      repository: "docker.io/exastro/exastro-it-automation-by-collector"
209      tag: ""
210      pullPolicy: IfNotPresent
211
212  ita-by-conductor-regularly:
213    replicaCount: 1
214    extraEnv:
215      EXECUTE_INTERVAL: "10"
216      PLATFORM_API_HOST: "platform-api"
217      PLATFORM_API_PORT: "8000"
218    image:
219      repository: "docker.io/exastro/exastro-it-automation-by-conductor-regularly"
220      tag: ""
221      pullPolicy: IfNotPresent
222
223  ita-by-conductor-synchronize:
224    replicaCount: 1
225    extraEnv:
226      EXECUTE_INTERVAL: "3"
227      PLATFORM_API_HOST: "platform-api"
228      PLATFORM_API_PORT: "8000"
229    image:
230      repository: "docker.io/exastro/exastro-it-automation-by-conductor-synchronize"
231      tag: ""
232      pullPolicy: IfNotPresent
233
234  ita-by-excel-export-import:
235    replicaCount: 1
236    extraEnv:
237      EXECUTE_INTERVAL: "10"
238      PLATFORM_API_HOST: "platform-api"
239      PLATFORM_API_PORT: "8000"
240    image:
241      repository: "docker.io/exastro/exastro-it-automation-by-excel-export-import"
242      tag: ""
243      pullPolicy: IfNotPresent
244
245  ita-by-execinstance-dataautoclean:
246    replicaCount: 1
247    extraEnv:
248      EXECUTE_INTERVAL: "10"
249      PLATFORM_API_HOST: "platform-api"
250      PLATFORM_API_PORT: "8000"
251    image:
252      repository: "docker.io/exastro/exastro-it-automation-by-execinstance-dataautoclean"
253      tag: ""
254      pullPolicy: IfNotPresent
255
256  ita-by-file-autoclean:
257    replicaCount: 1
258    extraEnv:
259      EXECUTE_INTERVAL: "10"
260      PLATFORM_API_HOST: "platform-api"
261      PLATFORM_API_PORT: "8000"
262    image:
263      repository: "docker.io/exastro/exastro-it-automation-by-file-autoclean"
264      tag: ""
265      pullPolicy: IfNotPresent
266
267  ita-by-hostgroup-split:
268    replicaCount: 1
269    extraEnv:
270      EXECUTE_INTERVAL: "10"
271      PLATFORM_API_HOST: "platform-api"
272      PLATFORM_API_PORT: "8000"
273    image:
274      repository: "docker.io/exastro/exastro-it-automation-by-hostgroup-split"
275      tag: ""
276      pullPolicy: IfNotPresent
277
278  ita-by-menu-create:
279    replicaCount: 1
280    extraEnv:
281      EXECUTE_INTERVAL: "10"
282      PLATFORM_API_HOST: "platform-api"
283      PLATFORM_API_PORT: "8000"
284    image:
285      repository: "docker.io/exastro/exastro-it-automation-by-menu-create"
286      tag: ""
287      pullPolicy: IfNotPresent
288
289  ita-by-menu-export-import:
290    replicaCount: 1
291    extraEnv:
292      EXECUTE_INTERVAL: "10"
293      PLATFORM_API_HOST: "platform-api"
294      PLATFORM_API_PORT: "8000"
295    image:
296      repository: "docker.io/exastro/exastro-it-automation-by-menu-export-import"
297      tag: ""
298      pullPolicy: IfNotPresent
299
300  ita-by-oase-conclusion:
301    replicaCount: 1
302    extraEnv:
303      EXECUTE_INTERVAL: "10"
304      PLATFORM_API_HOST: "platform-api"
305      PLATFORM_API_PORT: "8000"
306    image:
307      repository: "docker.io/exastro/exastro-it-automation-by-oase-conclusion"
308      tag: ""
309      pullPolicy: IfNotPresent
310
311  ita-by-terraform-cli-execute:
312    replicaCount: 1
313    extraEnv:
314      EXECUTE_INTERVAL: "3"
315      PLATFORM_API_HOST: "platform-api"
316      PLATFORM_API_PORT: "8000"
317    image:
318      repository: "docker.io/exastro/exastro-it-automation-by-terraform-cli-execute"
319      tag: ""
320      pullPolicy: IfNotPresent
321
322  ita-by-terraform-cli-vars-listup:
323    replicaCount: 1
324    extraEnv:
325      EXECUTE_INTERVAL: "10"
326      PLATFORM_API_HOST: "platform-api"
327      PLATFORM_API_PORT: "8000"
328    image:
329      repository: "docker.io/exastro/exastro-it-automation-by-terraform-cli-vars-listup"
330      tag: ""
331      pullPolicy: IfNotPresent
332
333  ita-by-terraform-cloud-ep-execute:
334    replicaCount: 1
335    extraEnv:
336      EXECUTE_INTERVAL: "3"
337      PLATFORM_API_HOST: "platform-api"
338      PLATFORM_API_PORT: "8000"
339    image:
340      repository: "docker.io/exastro/exastro-it-automation-by-terraform-cloud-ep-execute"
341      tag: ""
342      pullPolicy: IfNotPresent
343
344  ita-by-terraform-cloud-ep-vars-listup:
345    replicaCount: 1
346    extraEnv:
347      EXECUTE_INTERVAL: "10"
348      PLATFORM_API_HOST: "platform-api"
349      PLATFORM_API_PORT: "8000"
350    image:
351      repository: "docker.io/exastro/exastro-it-automation-by-terraform-cloud-ep-vars-listup"
352      tag: ""
353      pullPolicy: IfNotPresent
354
355  ita-web-server:
356    replicaCount: 1
357    image:
358      repository: "docker.io/exastro/exastro-it-automation-web-server"
359      tag: ""
360      pullPolicy: IfNotPresent
361
362  ita-migration:
363    extraEnv:
364      PLATFORM_API_HOST: "platform-api"
365      PLATFORM_API_PORT: "8000"
366    image:
367      repository: "docker.io/exastro/exastro-it-automation-migration"
368      tag: ""
369      pullPolicy: IfNotPresent
370
371exastro-platform:
372  platform-api:
373    image:
374      repository: "docker.io/exastro/exastro-platform-api"
375      tag: ""
376
377  platform-auth:
378    extraEnv:
379      # Please set the URL to access
380      EXTERNAL_URL: ""
381      EXTERNAL_URL_MNG: ""
382    ingress:
383      enabled: true
384      hosts:
385        - host: exastro-suite.example.local
386          paths:
387            - path: /
388              pathType: Prefix
389              backend: "http"
390        - host: exastro-suite-mng.example.local
391          paths:
392            - path: /
393              pathType: Prefix
394              backend: "httpMng"
395      tls: []
396        # - secretName: chart-example-tls
397        #   hosts:
398        #     - chart-example.local
399      secrets: []
400        # - name: chart-example-tls
401        #   certificate: |-
402        #     -----BEGIN CERTIFICATE-----
403        #     ...
404        #     -----END CERTIFICATE-----
405        #   key: |-
406        #     -----BEGIN PRIVATE KEY-----
407        #     ...
408        #     -----END PRIVATE KEY-----
409    service:
410      type: ClusterIP
411      # http:
412      #   nodePort: 30080
413      # httpMng:
414      #   nodePort: 30081
415    image:
416      repository: "docker.io/exastro/exastro-platform-auth"
417      tag: ""
418
419  platform-job:
420    extraEnv:
421      # LOG_LEVEL: "INFO"
422      # SUB_PROCESS_TERMINATE_REQUEST_SECONDS: "1800"
423      # SUB_PROCESS_ACCEPTABLE: "2"
424      # SUB_PROCESS_MAX_JOBS: "10"
425      # SUB_PROCESS_WATCH_INTERVAL_SECONDS: "1.0"
426      # SUB_PROCESS_DB_RECONNECT_INTERVAL_SECONDS: "60"
427      # SUB_PROCESS_DB_HEALTH_CHECK_INTERVAL_SECONDS: "5"
428      # SUB_PROCESS_MAX_CANCEL_TIMEOUT: "10"
429      # JOB_STATUS_WATCH_INTERVAL_SECONDS: "1.0"
430      # JOB_CANCEL_TIMEOUT_SECONDS: "5.0"
431      # JOB_NOTIFICATION_TIMEOUT_SECONDS: "20"
432      # JOB_NOTIFICATION_TEAMS_CONNECTION_TIMEOUT: "3.0"
433      # JOB_NOTIFICATION_TEAMS_READ_TIMEOUT: "10.0"
434      # JOB_NOTIFICATION_SMTP_TIMEOUT: "10.0"
435      # JOB_NOTIFICATION_SMTPS_SSL_VERIFY_ENABLED: "TRUE"
436      # JOB_FORCE_UPDATE_STATUS_TIMEOUT_SECONDS: "60"
437      # JOB_FORCE_UPDATE_STATUS_INTERVAL_SECONDS: "180"
438      # JOB_FORCE_UPDATE_STATUS_PROGRASS_SECONDS: "600"
439    image:
440      repository: "docker.io/exastro/exastro-platform-job"
441      tag: ""
442
443  platform-migration:
444    image:
445      repository: "docker.io/exastro/exastro-platform-migration"
446      tag: ""
447
448  platform-web:
449    image:
450      repository: "docker.io/exastro/exastro-platform-web"
451      tag: ""
452
453  mariadb:
454    enabled: true
455    image:
456      repository: "docker.io/mariadb"
457      tag: "10.11"
458      pullPolicy: IfNotPresent
459    imagePullSecrets: []
460    persistence:
461      enabled: true
462      accessMode: ReadWriteOnce
463      size: 20Gi
464      storageClass: "-" # e.g.) azurefile or - (None)
465      matchLabels:
466        name: pv-database
467      matchExpressions:
468        # - {key: name, operator: In, values: [pv-database]}
469    dbSetup:
470      dbConfInfo:
471        name: mysql-server-conf-config
472        customCnf: |-
473          [mysqld]
474          character-set-server=utf8mb4
475          collation-server=utf8mb4_bin
476          secure_file_priv=/tmp
477          lower_case_table_names=1
478          [client]
479          default-character-set=utf8mb4
480    resources:
481      requests:
482        memory: "256Mi"
483        cpu: "1m"
484      limits:
485        memory: "2Gi"
486        cpu: "4"
487
488  keycloak:
489    enabled: true
490    image:
491      repository: "docker.io/exastro/keycloak"
492      tag: ""
493      pullPolicy: IfNotPresent
494    extraEnv:
495      # If you use Azure MySQL, add options like below
496      # KC_DB_URL_PROPERTIES: "?useSSL=false"
497    resources: {}
498      # requests:
499      #   memory: "256Mi"
500      #   cpu: "1m"
501      # limits:
502      #   memory: "2Gi"
503      #   cpu: "4"
504
505  gitlab:
506    enabled: false
507    extraEnv:
508      GITLAB_OMNIBUS_CONFIG: |
509        postgresql['shared_buffers'] = "2048MB"
510        postgresql['work_mem'] = "128MB"
511        postgresql['maintenance_work_mem'] = "128MB"
512        postgresql['effective_cache_size'] = "128MB"
513        postgresql['checkpoint_segments'] = 16
514        postgresql['checkpoint_timeout'] = "10min"
515        external_url 'http://gitlab:40080'
516        nginx['listen_port'] = 40080
517        gitlab_rails['initial_root_password'] = "${GITLAB_ROOT_PASSWORD:-}"
518        gitlab_rails['registry_enabled'] = false;
519        gitlab_rails['db_prepared_statements'] = false;
520        gitlab_rails['monitoring_whitelist'] = ['0.0.0.0/0']
521        # gitlab_rails['env'] = {'MALLOC_CONF' => 'dirty_decay_ms:1000,muzzy_decay_ms:1000'}
522        # puma['worker_processes'] = 0
523        prometheus_monitoring['enable'] = false
524        # sidekiq['max_concurrency'] = 10
525        # gitaly['env'] = {'MALLOC_CONF' => 'dirty_decay_ms:1000,muzzy_decay_ms:1000', 'GITALY_COMMAND_SPAWN_MAX_PARALLEL' => '2'}
526      GITLAB_POST_RECONFIGURE_SCRIPT: |
527        while ! curl -sfI -o /dev/null http://localhost:40080/-/readiness;
528        do
529        echo "GitLab service is not ready."
530        sleep 1
531        done
532        echo "GitLab service started normally"
533        curl -Ssf -H "PRIVATE-TOKEN: ${GITLAB_ROOT_TOKEN:-}" "http://localhost:40080/api/v4/version" || (
534          gitlab-rails runner "token = User.find_by_username('root').personal_access_tokens.create(scopes: [:api, :write_repository, :sudo], name: 'exastro system token'); token.set_token('${GITLAB_ROOT_TOKEN:-}'); token.save!"
535        )
536        echo "GitLab post reconfigure script ended."
537    image:
538      repository: "docker.io/gitlab/gitlab-ce"
539      tag: "15.11.13-ce.0"
540      pullPolicy: IfNotPresent
541      # Overrides the image tag whose default is the chart appVersion.
542    persistence:
543      enabled: true
544      volumeName: pv-gitlab
545      accessMode: ReadWriteMany
546      size: 20Gi
547      storageClass: "-" # e.g.) azurefile or - (None)
548      matchLabels:
549        name: pv-gitlab
550      matchExpressions:
551        # - {key: name, operator: In, values: [pv-gitlab]}
552    resources: {}
553      # requests:
554      #   memory: "4Gi"
555      #   cpu: "4"
556      # limits:
557      #   memory: "8Gi"
558      #   cpu: "8"
559    service:
560      type: ClusterIP
561      name: gitlab
562      port: 40080
563      # nodePort: 30082
564
565  mongo:
566    enabled: true
567    image:
568      repository: "docker.io/mongo"
569      pullPolicy: IfNotPresent
570      # Overrides the image tag whose default is the chart appVersion.
571      tag: "6.0"
572    persistence:
573      enabled: true
574      accessMode: ReadWriteOnce
575      size: 20Gi
576      storageClass: "-" # e.g.) azurefile, local-path or - (None)
577      matchLabels:
578        # release: "pv-mongo"
579      matchExpressions:
580        # - {key: name, operator: In, values: [pv-mongo]}
581    dbSetup:
582      dbConfInfo:
583        name: mongo-server-conf-config
584        customCnf: |
585          systemLog:
586            verbosity: 0
587            # destination: file
588            # path: /root/logs/mongod.log
589            timeStampFormat: iso8601-utc
590          # storage:
591          #   directoryPerDB: true
592          #   dbPath: /root/data
593          #   engine: wiredTiger
594          #   wiredTiger:
595          #     engineConfig:
596          #       cacheSizeGB: 1
597          #   journal:
598          #     enabled: true
599          # processManagement:
600          #   fork: true
601          # net:
602          #   port: 27017
603          #   bindIp: 0.0.0.0
604          # security:
605          #   authorization: enabled
606    resources: {}
607      # requests:
608      #   memory: "4Gi"
609      #   cpu: "4"
610      # limits:
611      #   memory: "8Gi"
612      #   cpu: "4"
613    affinity:
614      podAntiAffinity:
615        requiredDuringSchedulingIgnoredDuringExecution:
616        - labelSelector:
617            matchExpressions:
618            - key: name
619              operator: In
620              values:
621              - mongo
622          topologyKey: kubernetes.io/hostname

サービス公開の設定

exastro.yaml を編集しサービス公開に必要なパラメータを設定していきます。
ここではNodePortを使用する方法を例に記載しています。
EXTERNAL_URLとEXTERNAL_URL_MNGはExastroをインストールするサーバのIPアドレスを指定します。
リスト 202 コマンド
EXTERNAL_URL: "http://xx.xx.xx.xx:30080"
EXTERNAL_URL_MNG: "http://xx.xx.xx.xx:30081"
リスト 203 exastro.yaml
--- /home/runner/work/exastro-it-automation-docs/exastro-it-automation-docs/workspace/src/ja/2.6/installation/literal_includes/exastro.yaml
+++ /home/runner/work/exastro-it-automation-docs/exastro-it-automation-docs/workspace/src/ja/2.6/installation/literal_includes/exastro_nodeport_setting.yaml
@@ -377,10 +377,10 @@
   platform-auth:
     extraEnv:
       # Please set the URL to access
-      EXTERNAL_URL: ""
-      EXTERNAL_URL_MNG: ""
+      EXTERNAL_URL: "http://10.10.10.10:30080"
+      EXTERNAL_URL_MNG: "http://10.10.10.10:30081"
     ingress:
-      enabled: true
+      enabled: false
       hosts:
         - host: exastro-suite.example.local
           paths:
@@ -407,11 +407,11 @@
         #     ...
         #     -----END PRIVATE KEY-----
     service:
-      type: ClusterIP
-      # http:
-      #   nodePort: 30080
-      # httpMng:
-      #   nodePort: 30081
+      type: NodePort
+        http:
+          nodePort: 30080
+        httpMng:
+          nodePort: 30081
     image:
       repository: "docker.io/exastro/exastro-platform-auth"
       tag: ""

データベース連携

Exastro サービスを利用するためには、CMDB やオーガナイゼーションの管理のためのデータベースが必要となります。
データベースコンテナの root パスワードを作成し、他のコンテナからもアクセスできるように作成した root アカウントのパスワードを設定します。
また、データベースのデータを永続化するために利用するストレージを指定します。
ここではデータベースコンテナ 及び hostPathを使用する方法を例に記載しています。

警告

DB_ADMIN_USERMONGO_ADMIN_USER で指定するDBの管理ユーザには、データベースとユーザを作成する権限が必要です。

警告

認証情報などはすべて平文で問題ありません。(Base64エンコードは不要)
  1. データベースコンテナの設定
    データベースコンテナの root パスワードを設定します。
    また、データベースのデータを永続化するために利用するストレージを指定します。
    表 37 共通設定 (Exastro 共用データベース) のオプションパラメータ

    パラメータ

    説明

    変更

    デフォルト値・選択可能な設定値

    global.databaseDefinition.name

    Exastro 共用データベースの定義名

    不可

    "mariadb"

    global.databaseDefinition.enabled

    Exastro 共用データベースの定義の利用有無

    不可

    true

    global.databaseDefinition.secret.MARIADB_ROOT_PASSWORD

    Exastro 共用データベースの root アカウントに設定するパスワード(エンコードなし)

    必須

    任意の文字列

    global.databaseDefinition.persistence.enabled

    Exastro 共用データベースのデータ永続化の有効フラグ

    "true" (デフォルト): データを永続化する
    "false": データを永続化しない

    global.databaseDefinition.persistence.reinstall

    再インストール時にデータ領域の初期化の要否

    可 (データ永続化時)

    "true" (デフォルト): データを初期化(削除)する
    "false": データを初期化(削除)しない

    global.databaseDefinition.persistence.accessMode

    永続ボリュームのアクセスモードの指定。

    不可

    "ReadWriteOnce"

    global.databaseDefinition.persistence.size

    永続ボリュームのディスク容量

    可 (データ永続化時)

    "20Gi"

    global.databaseDefinition.persistence.volumeType

    永続ボリュームのボリュームタイプ

    可 (現在無効)

    "hostPath" (デフォルト): Kubernetes クラスタのノード上にデータを保存(非推奨)
    "AKS": AKS のストレージクラスを利用

    global.databaseDefinition.persistence.storageClass

    永続ボリュームにストレージクラスを利用する場合のクラスを指定

    可 (データ永続化時)

    "-" (デフォルト): ストレージクラスを指定しない。
    ストレージクラス名: クラウドプロバイダなどから提供されるストレージクラス名を指定。
    リスト 204 exastro.yaml
    --- /home/runner/work/exastro-it-automation-docs/exastro-it-automation-docs/workspace/src/ja/2.6/installation/literal_includes/exastro.yaml
    +++ /home/runner/work/exastro-it-automation-docs/exastro-it-automation-docs/workspace/src/ja/2.6/installation/literal_includes/exastro_database_hostpath.yaml
    @@ -460,7 +460,7 @@
         persistence:
           enabled: true
           accessMode: ReadWriteOnce
    -      size: 20Gi
    +      size: XXGi                                       # 必要な容量に変更
           storageClass: "-" # e.g.) azurefile or - (None)
           matchLabels:
             name: pv-database
    
  2. Exastro IT Automation 用データベースの設定
    Exastro IT Automation コンテナがデータベースに接続できるようにするために、データベース連携 で作成した root アカウントのパスワードを設定します。
    表 38 共通設定 (Exastro IT Automation 用データベース) のオプションパラメータ

    パラメータ

    説明

    変更

    デフォルト値・選択可能な設定値

    global.itaDatabaseDefinition.name

    Exastro IT Automation 用データベースの定義名

    不可

    "ita-database"

    global.itaDatabaseDefinition.enabled

    Exastro IT Automation 用データベースの定義の利用有無

    不可

    true

    global.itaDatabaseDefinition.config.DB_VENDOR

    Exastro IT Automation 用データベースで使用するデータベース

    可 (外部データベース利用時)

    "mariadb" (デフォルト): MariaDB を利用
    "mysql": MySQL を利用

    global.itaDatabaseDefinition.config.DB_HOST

    Exastro IT Automation 用データベース利用するDB
    デフォルト状態では、同一の Kubernetes クラスタ内にデプロイされるコンテナを指定しています。
    クラスタ外部の DB を利用する場合には設定が必要となります。

    可 (外部データベース利用時)

    "mariadb"

    global.itaDatabaseDefinition.config.DB_PORT

    Exastro IT Automation 用データベースで利用するポート番号(TCP)

    可 (外部データベース利用時)

    "3306"

    global.itaDatabaseDefinition.config.DB_DATABASE

    Exastro IT Automation 用データベースで利用するデータベース名

    可 (外部データベース利用時)

    "platform"

    global.itaDatabaseDefinition.secret.DB_ADMIN_USER

    Exastro IT Automation 用データベースで利用する管理権限を持つDBユーザ名

    必須

    管理権限を持つDBユーザ名

    global.itaDatabaseDefinition.secret.DB_ADMIN_PASSWORD

    Exastro IT Automation 用データベースで利用する管理権限を持つDBユーザのパスワード(エンコードなし)

    必須

    管理権限を持つDBユーザ名のパスワード

    global.itaDatabaseDefinition.secret.DB_USER

    Exastro IT Automation 用データベースに作成するDBユーザ名。
    指定した DB ユーザが作成される。

    必須

    任意の文字列

    global.itaDatabaseDefinition.secret.DB_PASSWORD

    Exastro IT Automation 用データベースに作成するDBユーザのパスワード(エンコードなし)

    必須

    任意の文字列

    リスト 205 exastro.yaml
    --- /home/runner/work/exastro-it-automation-docs/exastro-it-automation-docs/workspace/src/ja/2.6/installation/literal_includes/exastro.yaml
    +++ /home/runner/work/exastro-it-automation-docs/exastro-it-automation-docs/workspace/src/ja/2.6/installation/literal_includes/exastro_database_ita_setting.yaml
    @@ -27,7 +27,7 @@
           DB_DATABASE: "ITA_DB"
         secret:
           DB_ADMIN_USER: "root"
    -      DB_ADMIN_PASSWORD: "Ch@ngeMeDBAdm"
    +      DB_ADMIN_PASSWORD: "your-admin-password" # 「1.  データベースコンテナの設定」で設定したコンテナデータベースの root のパスワード
           DB_USER: "ITA_USER"
           DB_PASSWORD: "Ch@ngeMeITADB"
       pfGlobalDefinition:
    
  3. Exastro 共通基盤用データベースの設定
    Exastro 共通基盤のコンテナがデータベースに接続できるようにするために、「1. データベースコンテナの設定」で作成した root アカウントのパスワードを設定します。
    表 39 共通設定 (Exastro 共通基盤用データベース) のオプションパラメータ

    パラメータ

    説明

    変更

    デフォルト値・選択可能な設定値

    global.pfDatabaseDefinition.name

    認証機能用データベースの定義名

    不可

    "pf-database"

    global.pfDatabaseDefinition.enabled

    認証機能用データベースの定義の有効有無

    不可

    true

    global.pfDatabaseDefinition.config.DB_VENDOR

    認証機能用データベースで使用するデータベース

    可 (外部データベース利用時)

    "mariadb" (デフォルト): MariaDB を利用
    "mysql": MySQL を利用

    global.pfDatabaseDefinition.config.DB_HOST

    認証機能用データベース利用するDB
    デフォルト状態では、同一の Kubernetes クラスタ内にデプロイされるコンテナを指定しています。
    クラスタ外部の DB を利用する場合には設定が必要となります。

    可 (外部データベース利用時)

    "mariadb"

    global.pfDatabaseDefinition.config.DB_PORT

    認証機能用データベースで利用するポート番号(TCP)

    可 (外部データベース利用時)

    "3306"

    global.pfDatabaseDefinition.config.DB_DATABASE

    認証機能用データベースで利用するデータベース名

    可 (外部データベース利用時)

    "platform"

    global.pfDatabaseDefinition.secret.DB_ADMIN_USER

    認証機能用データベースで利用する管理権限を持つDBユーザ名

    必須

    管理権限を持つDBユーザ名

    global.pfDatabaseDefinition.secret.DB_ADMIN_PASSWORD

    認証機能用データベースで利用する管理権限を持つDBユーザのパスワード(エンコードなし)

    必須

    管理権限を持つDBユーザ名のパスワード

    global.pfDatabaseDefinition.secret.DB_USER

    認証機能用データベースに作成するDBユーザ名。
    指定した DB ユーザが作成される。

    必須

    任意の文字列

    global.pfDatabaseDefinition.secret.DB_PASSWORD

    認証機能用データベースに作成するDBユーザのパスワード(エンコードなし)

    必須

    任意の文字列

    リスト 206 exastro.yaml
    --- /home/runner/work/exastro-it-automation-docs/exastro-it-automation-docs/workspace/src/ja/2.6/installation/literal_includes/exastro.yaml
    +++ /home/runner/work/exastro-it-automation-docs/exastro-it-automation-docs/workspace/src/ja/2.6/installation/literal_includes/exastro_database_pf_setting.yaml
    @@ -58,7 +58,7 @@
           DB_DATABASE: "platform"
         secret:
           DB_ADMIN_USER: "root"
    -      DB_ADMIN_PASSWORD: "Ch@ngeMeDBAdm"
    +      DB_ADMIN_PASSWORD: "your-admin-password" # 「1.  データベースコンテナの設定」で設定したコンテナデータベースの root のパスワード
           DB_USER: "pf-user"
           DB_PASSWORD: "Ch@ngeMePFDB"
       keycloakDefinition:
    
  4. OASE用データベースの設定

    OASE用データベースの接続情報を設定します。

    警告

    MongoDBのユーザやデータベースを「自動払い出し( オーガナイゼーション作成 )」で利用する場合は、MONGO_HOST の指定が必要です。
    MONGO_ADMIN_USER がユーザやデータベースの作成・削除が可能(rootロールまたは同等の権限)である必要があります。
    上記の権限がない場合は「Python接続文字列( オーガナイゼーション作成 )」の指定が必要です。
    また、自動払い出しを利用しない場合は MONGO_HOST の指定は不要です。
    表 40 OASE設定 (Exastro OASE用データベース) のオプションパラメータ

    パラメータ

    説明

    変更

    デフォルト値・選択可能な設定値

    global.mongoDefinition.config.MONGO_PROTOCOL

    OASE用データベースで利用するDBのプロトコル

    "http"

    global.mongoDefinition.config.MONGO_HOST

    OASE用データベース利用するDB
    デフォルト状態では、同一の Kubernetes クラスタ内にデプロイされるコンテナを指定しています。
    クラスタ外部の DB を利用する場合には設定が必要となります。
    自動払い出しを利用しない場合は、""(空)を指定してください。

    可 (外部データベース利用時)

    "mongo"

    global.mongoDefinition.config.MONGO_PORT

    OASE用データベースで利用するポート番号(TCP)

    可 (外部データベース利用時)

    "27017"

    global.mongoDefinition.secret.MONGO_ADMIN_USER

    OASE用データベースで利用する管理権限を持つDBユーザ名

    必須

    管理権限を持つDBユーザ名

    global.mongoDefinition.secret.MONGO_ADMIN_PASSWORD

    OASE用データベースで利用する管理権限を持つDBユーザのパスワード(エンコードなし)

    必須

    管理権限を持つDBユーザ名のパスワード

    リスト 207 exastro.yaml
    --- /home/runner/work/exastro-it-automation-docs/exastro-it-automation-docs/workspace/src/ja/2.6/installation/literal_includes/exastro.yaml
    +++ /home/runner/work/exastro-it-automation-docs/exastro-it-automation-docs/workspace/src/ja/2.6/installation/literal_includes/exastro_database_mongo_setting.yaml
    @@ -81,8 +81,8 @@
           MONGO_HOST: "mongo" # "mongo" if use container.
           MONGO_PORT: "27017"
         secret:
    -      MONGO_ADMIN_USER: "admin"
    -      MONGO_ADMIN_PASSWORD: "Ch@ngeMeMGAdm"
    +      MONGO_ADMIN_USER: "your-admin-account"      # OASE用データベースの管理者ユーザ
    +      MONGO_ADMIN_PASSWORD: "your-admin-password" # OASE用データベースの管理者ユーザのパスワード
     
     exastro-it-automation:
       ita-api-admin:
    @@ -621,3 +621,4 @@
                   - mongo
               topologyKey: kubernetes.io/hostname
     
    +
    
  5. MongoDBコンテナの設定

    データベースのデータを永続化するために利用するストレージを指定します

    警告

    MongoDBコンテナを利用しない場合、exastro-platform.mongo.enabled をfalseに指定して下さい。
    表 41 MongoDB コンテナのオプションパラメータ

    パラメータ

    説明

    変更

    デフォルト値・選択可能な設定値

    exastro-platform.mongo.enabled

    MongoDB コンテナのデプロイの有無

    true (デフォルト): MongoDB コンテナをデプロイします。
    false : MongoDB コンテナをデプロイしません。

    exastro-platform.mongo.image.repository

    コンテナイメージのリポジトリ名

    不可

    "mongo"

    exastro-platform.mongo.image.pullPolicy

    イメージプルポリシー

    IfNotPresent (デフォルト): コンテナイメージが存在しない場合のみプル
    Always: 毎回必ずプル
    None: プルしない

    exastro-platform.mongo.image.tag

    コンテナイメージのタグ

    不可

    "6.0"

    exastro-platform.mongo.persistence.enabled

    Exastro 共用データベースのデータ永続化の有効フラグ

    true (デフォルト): データを永続化する
    false: データを永続化しない

    exastro-platform.mongo.persistence.reinstall

    再インストール時にデータ領域の初期化の要否

    不可

    true : データを初期化(削除)する
    false (デフォルト): データを初期化(削除)しない

    exastro-platform.mongo.persistence.accessMode

    永続ボリュームのアクセスモードの指定。

    不可

    "ReadWriteOnce"

    exastro-platform.mongo.persistence.size

    永続ボリュームのディスク容量

    可 (データ永続化時)

    "20Gi"

    exastro-platform.mongo.persistence.storageClass

    永続ボリュームにストレージクラスを利用する場合のクラスを指定

    可 (データ永続化時)

    - (デフォルト): ストレージクラスを指定しない。
    ストレージクラス名: クラウドプロバイダなどから提供されるストレージクラス名を指定。

    exastro-platform.mongo.persistence.matchLabels.name

    利用する永続ボリューム名を指定

    不可

    "コメントアウト"

    exastro-platform.mongo.resources.requests.memory

    メモリ要求

    "256Mi"

    exastro-platform.mongo.resources.requests.cpu

    CPU要求

    "1m"

    exastro-platform.mongo.resources.limits.memory

    メモリ上限

    "2Gi"

    exastro-platform.mongo.resources.limits.cpu

    CPU上限

    "4"

    リスト 208 exastro.yaml
    --- /home/runner/work/exastro-it-automation-docs/exastro-it-automation-docs/workspace/src/ja/2.6/installation/literal_includes/exastro.yaml
    +++ /home/runner/work/exastro-it-automation-docs/exastro-it-automation-docs/workspace/src/ja/2.6/installation/literal_includes/exastro_mongodb_hostpath.yaml
    @@ -572,7 +572,7 @@
         persistence:
           enabled: true
           accessMode: ReadWriteOnce
    -      size: 20Gi
    +      size: XXGi
           storageClass: "-" # e.g.) azurefile, local-path or - (None)
           matchLabels:
             # release: "pv-mongo"
    @@ -621,3 +621,4 @@
                   - mongo
               topologyKey: kubernetes.io/hostname
     
    +
    

アプリケーションの DB ユーザー設定

Exastro でアプリケーションのために作成する DB ユーザーの設定をします。

設定例

下記のアプリケーションが利用・作成する DB ユーザーをそれぞれ設定します。
  • Exastro IT Automation

  • Exastro 共通基盤

  • Keycloak

警告

認証情報などはすべて平文で問題ありません。(Base64エンコードは不要)
  1. Exastro IT Automation 用データベースの設定
    アプリケーションが利用・作成する DB ユーザーを設定します。
    表 42 共通設定 (Exastro IT Automation 用データベース) のオプションパラメータ

    パラメータ

    説明

    変更

    デフォルト値・選択可能な設定値

    global.itaDatabaseDefinition.name

    Exastro IT Automation 用データベースの定義名

    不可

    "ita-database"

    global.itaDatabaseDefinition.enabled

    Exastro IT Automation 用データベースの定義の利用有無

    不可

    true

    global.itaDatabaseDefinition.config.DB_VENDOR

    Exastro IT Automation 用データベースで使用するデータベース

    可 (外部データベース利用時)

    "mariadb" (デフォルト): MariaDB を利用
    "mysql": MySQL を利用

    global.itaDatabaseDefinition.config.DB_HOST

    Exastro IT Automation 用データベース利用するDB
    デフォルト状態では、同一の Kubernetes クラスタ内にデプロイされるコンテナを指定しています。
    クラスタ外部の DB を利用する場合には設定が必要となります。

    可 (外部データベース利用時)

    "mariadb"

    global.itaDatabaseDefinition.config.DB_PORT

    Exastro IT Automation 用データベースで利用するポート番号(TCP)

    可 (外部データベース利用時)

    "3306"

    global.itaDatabaseDefinition.config.DB_DATABASE

    Exastro IT Automation 用データベースで利用するデータベース名

    可 (外部データベース利用時)

    "platform"

    global.itaDatabaseDefinition.secret.DB_ADMIN_USER

    Exastro IT Automation 用データベースで利用する管理権限を持つDBユーザ名

    必須

    管理権限を持つDBユーザ名

    global.itaDatabaseDefinition.secret.DB_ADMIN_PASSWORD

    Exastro IT Automation 用データベースで利用する管理権限を持つDBユーザのパスワード(エンコードなし)

    必須

    管理権限を持つDBユーザ名のパスワード

    global.itaDatabaseDefinition.secret.DB_USER

    Exastro IT Automation 用データベースに作成するDBユーザ名。
    指定した DB ユーザが作成される。

    必須

    任意の文字列

    global.itaDatabaseDefinition.secret.DB_PASSWORD

    Exastro IT Automation 用データベースに作成するDBユーザのパスワード(エンコードなし)

    必須

    任意の文字列

    リスト 209 exastro.yaml
    --- /home/runner/work/exastro-it-automation-docs/exastro-it-automation-docs/workspace/src/ja/2.6/installation/literal_includes/exastro.yaml
    +++ /home/runner/work/exastro-it-automation-docs/exastro-it-automation-docs/workspace/src/ja/2.6/installation/literal_includes/exastro_db_user_ita.yaml
    @@ -28,8 +28,8 @@
         secret:
           DB_ADMIN_USER: "root"
           DB_ADMIN_PASSWORD: "Ch@ngeMeDBAdm"
    -      DB_USER: "ITA_USER"
    -      DB_PASSWORD: "Ch@ngeMeITADB"
    +      DB_USER: "ita-db-user"                # Exastro IT Automation のアプリが使うDBユーザー
    +      DB_PASSWORD: "ita-db-user-password"   # Exastro IT Automation のアプリが使うDBユーザーのパスワード
       pfGlobalDefinition:
         config:
           DEFAULT_LANGUAGE: "ja"
    
  2. Keycloak 用データベースの設定
    アプリケーションが利用・作成する DB ユーザーを設定します。
    表 43 共通設定 (Keycloak) のオプションパラメータ

    パラメータ

    説明

    変更

    デフォルト値・選択可能な設定値

    global.keycloakDefinition.name

    Keycloak の定義名

    不可

    keycloak

    global.keycloakDefinition.enabled

    Keycloak の定義の利用有無

    不可

    true

    global.keycloakDefinition.config.API_KEYCLOAK_PROTOCOL

    Keycloak API エンドポイントのプロトコル

    不可

    "http”

    global.keycloakDefinition.config.API_KEYCLOAK_HOST

    Keycloak API エンドポイントのホスト名、もしくは、FQDN

    不可

    "keycloak"

    global.keycloakDefinition.config.API_KEYCLOAK_PORT

    Keycloak API エンドポイントのポート番号

    不可

    "8080"

    global.keycloakDefinition.config.KEYCLOAK_PROTOCOL

    Keycloak エンドポイントのプロトコル

    不可

    "http"

    global.keycloakDefinition.config.KEYCLOAK_HOST

    Keycloak エンドポイントのホスト名、もしくは、FQDN

    不可

    "keycloak"

    global.keycloakDefinition.config.KEYCLOAK_PORT

    Keycloak API エンドポイントのポート番号

    不可

    "8080"

    global.keycloakDefinition.config.KEYCLOAK_MASTER_REALM

    Keycloak のマスターレルム名

    不可

    "master"

    global.keycloakDefinition.config.KEYCLOAK_DB_DATABASE

    Keycloak が利用するデータベース名

    不可

    "keycloak"

    global.keycloakDefinition.secret.SYSTEM_ADMIN

    Keycloak のマスターレルムにおける管理権限を持ったユーザ名を指定。
    指定した Keycloak ユーザが作成される。
    ※KEYCLOAK_USER→SYSTEM_ADMINに変更

    必須

    任意の文字列

    global.keycloakDefinition.secret.SYSTEM_ADMIN_PASSWORD

    Keycloak のマスターレルムにおける管理権限を持ったユーザに設定するパスワード(エンコードなし)
    ※KEYCLOAK_PASSWORD→SYSTEM_ADMIN_PASSWORDに変更

    必須

    任意の文字列

    global.keycloakDefinition.secret.KEYCLOAK_DB_USER

    Keycloak が使用するデータベースユーザ。
    指定した DB ユーザが作成される。

    必須

    任意の文字列

    global.keycloakDefinition.secret.KEYCLOAK_DB_PASSWORD

    Keycloak が使用するデータベースユーザのパスワード(エンコードなし)

    必須

    任意の文字列

    リスト 210 exastro.yaml
    --- /home/runner/work/exastro-it-automation-docs/exastro-it-automation-docs/workspace/src/ja/2.6/installation/literal_includes/exastro.yaml
    +++ /home/runner/work/exastro-it-automation-docs/exastro-it-automation-docs/workspace/src/ja/2.6/installation/literal_includes/exastro_db_user_keycloak.yaml
    @@ -65,8 +65,8 @@
         secret:
           SYSTEM_ADMIN: "admin"
           SYSTEM_ADMIN_PASSWORD: "Ch@ngeMeKCAdm"
    -      KEYCLOAK_DB_USER: "keycloak"
    -      KEYCLOAK_DB_PASSWORD: "Ch@ngeMeKCADB"
    +      KEYCLOAK_DB_USER: "keycloak-db-user"               # Keycloak が使うDBユーザー
    +      KEYCLOAK_DB_PASSWORD: "keycloak-db-user-password"  # Keycloak が使うDBユーザーのパスワード
       gitlabDefinition:
         config:
           GITLAB_PROTOCOL: "http"
    
  3. Exastro 共通基盤用データベースの設定
    アプリケーションが利用・作成する DB ユーザーを設定します。
    表 44 共通設定 (Exastro 共通基盤用データベース) のオプションパラメータ

    パラメータ

    説明

    変更

    デフォルト値・選択可能な設定値

    global.pfDatabaseDefinition.name

    認証機能用データベースの定義名

    不可

    "pf-database"

    global.pfDatabaseDefinition.enabled

    認証機能用データベースの定義の有効有無

    不可

    true

    global.pfDatabaseDefinition.config.DB_VENDOR

    認証機能用データベースで使用するデータベース

    可 (外部データベース利用時)

    "mariadb" (デフォルト): MariaDB を利用
    "mysql": MySQL を利用

    global.pfDatabaseDefinition.config.DB_HOST

    認証機能用データベース利用するDB
    デフォルト状態では、同一の Kubernetes クラスタ内にデプロイされるコンテナを指定しています。
    クラスタ外部の DB を利用する場合には設定が必要となります。

    可 (外部データベース利用時)

    "mariadb"

    global.pfDatabaseDefinition.config.DB_PORT

    認証機能用データベースで利用するポート番号(TCP)

    可 (外部データベース利用時)

    "3306"

    global.pfDatabaseDefinition.config.DB_DATABASE

    認証機能用データベースで利用するデータベース名

    可 (外部データベース利用時)

    "platform"

    global.pfDatabaseDefinition.secret.DB_ADMIN_USER

    認証機能用データベースで利用する管理権限を持つDBユーザ名

    必須

    管理権限を持つDBユーザ名

    global.pfDatabaseDefinition.secret.DB_ADMIN_PASSWORD

    認証機能用データベースで利用する管理権限を持つDBユーザのパスワード(エンコードなし)

    必須

    管理権限を持つDBユーザ名のパスワード

    global.pfDatabaseDefinition.secret.DB_USER

    認証機能用データベースに作成するDBユーザ名。
    指定した DB ユーザが作成される。

    必須

    任意の文字列

    global.pfDatabaseDefinition.secret.DB_PASSWORD

    認証機能用データベースに作成するDBユーザのパスワード(エンコードなし)

    必須

    任意の文字列

    リスト 211 exastro.yaml
    --- /home/runner/work/exastro-it-automation-docs/exastro-it-automation-docs/workspace/src/ja/2.6/installation/literal_includes/exastro.yaml
    +++ /home/runner/work/exastro-it-automation-docs/exastro-it-automation-docs/workspace/src/ja/2.6/installation/literal_includes/exastro_db_user_pf.yaml
    @@ -59,8 +59,8 @@
         secret:
           DB_ADMIN_USER: "root"
           DB_ADMIN_PASSWORD: "Ch@ngeMeDBAdm"
    -      DB_USER: "pf-user"
    -      DB_PASSWORD: "Ch@ngeMePFDB"
    +      DB_USER: "pf-db-user"           # Exastro 共通基盤が使うDBユーザー
    +      DB_PASSWORD: "pf-db-password"   # Exastro 共通基盤が使うDBユーザーのパスワード
       keycloakDefinition:
         secret:
           SYSTEM_ADMIN: "admin"
    

GitLab 連携設定

GitLab 連携のための接続情報を登録します。

警告

GitLab 連携を利用しない場合は、下記のように設定してください。
GITLAB_HOST: ""
表 45 共通設定 (GitLab) のオプションパラメータ

パラメータ

説明

変更

デフォルト値・選択可能な設定値

global.gitlabDefinition.name

GitLab の定義名

不可

gitlab

global.gitlabDefinition.enabled

GitLab の定義の利用有無

不可

true

global.gitlabDefinition.config.GITLAB_PROTOCOL

GitLab エンドポイントのプロトコル

http

global.gitlabDefinition.config.GITLAB_HOST

GitLab エンドポイントへのホスト名、もしくは、FQDN

gitlab

global.gitlabDefinition.config.GITLAB_PORT

GitLab エンドポイントのポート番号

80

global.gitlabDefinition.secret.GITLAB_ROOT_PASSWORD

GitLab の root 権限アカウントのユーザーパスワード

必須

任意の文字列(8文字以上で予測可能な単語等は利用不可)

global.gitlabDefinition.secret.GITLAB_ROOT_TOKEN

GitLab の root 権限アカウントのアクセストークン

必須

アクセエストークン(平文)

警告

GITLAB_ROOT_TOKEN は下記の権限スコープが割り当てられたトークンが必要です。
・api
・write_repository
・sudo
下記は、GitLab 連携の設定例を記載しています。
リスト 212 exastro.yaml
--- /home/runner/work/exastro-it-automation-docs/exastro-it-automation-docs/workspace/src/ja/2.6/installation/literal_includes/exastro.yaml
+++ /home/runner/work/exastro-it-automation-docs/exastro-it-automation-docs/workspace/src/ja/2.6/installation/literal_includes/exastro_gitlab_setting.yaml
@@ -69,12 +69,12 @@
       KEYCLOAK_DB_PASSWORD: "Ch@ngeMeKCADB"
   gitlabDefinition:
     config:
-      GITLAB_PROTOCOL: "http"
-      GITLAB_HOST: "" # "gitlab" if use container.
-      GITLAB_PORT: "8080"
+      GITLAB_PROTOCOL: "接続プロトコル http or https"
+      GITLAB_HOST: "your.gitlab.endpoint" # 起動する Gitalb コンテナの公開時のURL。AAPから接続できる必要がある。
+      GITLAB_PORT: "30082"                # 起動する Gitalb コンテナの公開時のポート番号
     secret:
-      GITLAB_ROOT_PASSWORD: "Ch@ngeMeGL"
-      GITLAB_ROOT_TOKEN: "change-this-token"
+      GITLAB_ROOT_PASSWORD: "GitLabのRoot権限をユーザーパスワード"
+      GITLAB_ROOT_TOKEN: "GitLabのRoot権限を持ったトークン"
   mongoDefinition:
     config:
       MONGO_PROTOCOL: "http"

システム管理者の作成

セットアップ時に システム管理者の初期ユーザーを作成するための情報を設定します。
表 46 共通設定 (Keycloak) のオプションパラメータ

パラメータ

説明

変更

デフォルト値・選択可能な設定値

global.keycloakDefinition.name

Keycloak の定義名

不可

keycloak

global.keycloakDefinition.enabled

Keycloak の定義の利用有無

不可

true

global.keycloakDefinition.config.API_KEYCLOAK_PROTOCOL

Keycloak API エンドポイントのプロトコル

不可

"http”

global.keycloakDefinition.config.API_KEYCLOAK_HOST

Keycloak API エンドポイントのホスト名、もしくは、FQDN

不可

"keycloak"

global.keycloakDefinition.config.API_KEYCLOAK_PORT

Keycloak API エンドポイントのポート番号

不可

"8080"

global.keycloakDefinition.config.KEYCLOAK_PROTOCOL

Keycloak エンドポイントのプロトコル

不可

"http"

global.keycloakDefinition.config.KEYCLOAK_HOST

Keycloak エンドポイントのホスト名、もしくは、FQDN

不可

"keycloak"

global.keycloakDefinition.config.KEYCLOAK_PORT

Keycloak API エンドポイントのポート番号

不可

"8080"

global.keycloakDefinition.config.KEYCLOAK_MASTER_REALM

Keycloak のマスターレルム名

不可

"master"

global.keycloakDefinition.config.KEYCLOAK_DB_DATABASE

Keycloak が利用するデータベース名

不可

"keycloak"

global.keycloakDefinition.secret.SYSTEM_ADMIN

Keycloak のマスターレルムにおける管理権限を持ったユーザ名を指定。
指定した Keycloak ユーザが作成される。
※KEYCLOAK_USER→SYSTEM_ADMINに変更

必須

任意の文字列

global.keycloakDefinition.secret.SYSTEM_ADMIN_PASSWORD

Keycloak のマスターレルムにおける管理権限を持ったユーザに設定するパスワード(エンコードなし)
※KEYCLOAK_PASSWORD→SYSTEM_ADMIN_PASSWORDに変更

必須

任意の文字列

global.keycloakDefinition.secret.KEYCLOAK_DB_USER

Keycloak が使用するデータベースユーザ。
指定した DB ユーザが作成される。

必須

任意の文字列

global.keycloakDefinition.secret.KEYCLOAK_DB_PASSWORD

Keycloak が使用するデータベースユーザのパスワード(エンコードなし)

必須

任意の文字列

リスト 213 exastro.yaml
--- /home/runner/work/exastro-it-automation-docs/exastro-it-automation-docs/workspace/src/ja/2.6/installation/literal_includes/exastro.yaml
+++ /home/runner/work/exastro-it-automation-docs/exastro-it-automation-docs/workspace/src/ja/2.6/installation/literal_includes/exastro_usercreate_system_manager.yaml
@@ -63,8 +63,8 @@
       DB_PASSWORD: "Ch@ngeMePFDB"
   keycloakDefinition:
     secret:
-      SYSTEM_ADMIN: "admin"
-      SYSTEM_ADMIN_PASSWORD: "Ch@ngeMeKCAdm"
+      SYSTEM_ADMIN: "admin"                     # Exastro システムのシステム管理者のユーザー名
+      SYSTEM_ADMIN_PASSWORD: "admin-password"   # Exastro システムのシステム管理者のユーザーパスワード
       KEYCLOAK_DB_USER: "keycloak"
       KEYCLOAK_DB_PASSWORD: "Ch@ngeMeKCADB"
   gitlabDefinition:

永続ボリュームの設定

永続ボリュームの設定ファイルを作成します。
データベースのデータ永続化 (クラスタ内コンテナがある場合)、および、ファイルの永続化のために、永続ボリュームを設定する必要があります。
永続ボリュームの詳細については、 永続ボリューム - Kubernetes を参照してください。
ここではKubernetes のノード上のストレージ領域を使用する方法を例に記載しています。

注釈

監査ログを永続ボリュームに出力する際は、永続ボリュームの設定が必要となります。

Tip

hostpathで指定するディレクトリは、アクセス権を設定する必要があります
例) chmod 777 [該当のディレクトリ]

危険

データの永続化自体は可能ですが、コンピュートノードの増減や変更によりデータが消えてしまう可能性があるため本番環境では使用しないでください。
また、Azure で構築した AKS クラスタは、クラスタを停止すると AKS クラスターの Node が解放されるため、保存していた情報は消えてしまいます。そのため、Node が停止しないように注意が必要となります。
hostPath を使用した例を記載します。
リスト 214 コマンド
vi pv-database.yaml
リスト 215 pv-database.yaml (データベース用ボリューム)
 1# pv-database.yaml
 2apiVersion: v1
 3kind: PersistentVolume
 4metadata:
 5  name: pv-database
 6spec:
 7  claimRef:
 8    name: pvc-mariadb
 9    namespace: exastro
10  capacity:
11    storage: 20Gi
12  accessModes:
13    - ReadWriteOnce
14  persistentVolumeReclaimPolicy: Retain
15  hostPath:
16    path: /var/data/exastro-suite/exastro-platform/database
17    type: DirectoryOrCreate
リスト 216 コマンド
vi pv-ita-common.yaml
リスト 217 pv-ita-common.yaml (ファイル用ボリューム)
 1# pv-ita-common.yaml
 2apiVersion: v1
 3kind: PersistentVolume
 4metadata:
 5  name: pv-ita-common
 6spec:
 7  claimRef:
 8    name: pvc-ita-global
 9    namespace: exastro
10  capacity:
11    storage: 10Gi
12  accessModes:
13    - ReadWriteMany
14  persistentVolumeReclaimPolicy: Retain
15  hostPath:
16    path: /var/data/exastro-suite/exastro-it-automation/ita-common
17    type: DirectoryOrCreate
リスト 218 コマンド
vi pv-mongo.yaml
リスト 219 pv-mongo.yaml (OASE用ボリューム) ※OASEを利用しない場合設定不要
 1# pv-mongo.yaml
 2apiVersion: v1
 3kind: PersistentVolume
 4metadata:
 5  name: pv-mongo
 6spec:
 7  claimRef:
 8    name: volume-mongo-storage-mongo-0
 9    namespace: exastro
10  capacity:
11    storage: 20Gi
12  accessModes:
13    - ReadWriteOnce
14  persistentVolumeReclaimPolicy: Retain
15  hostPath:
16    path: /var/data/exastro-suite/exastro-platform/mongo
17    type: DirectoryOrCreate
リスト 220 コマンド
vi pv-gitlab.yaml
リスト 221 pv-gitlab.yaml (GitLab用ボリューム) ※外部GitLabを利用する場合設定不要
 1# pv-gitlab.yaml
 2apiVersion: v1
 3kind: PersistentVolume
 4metadata:
 5  name: pv-gitlab
 6spec:
 7  claimRef:
 8    name: pvc-gitlab
 9    namespace: exastro
10  capacity:
11    storage: 20Gi
12  accessModes:
13    - ReadWriteMany
14  persistentVolumeReclaimPolicy: Retain
15  hostPath:
16    path: /var/data/exastro-suite/exastro-platform/gitlab
17    type: DirectoryOrCreate
※ 監査ログを永続ボリュームに出力する際は、exastro.yamlに以下の設定が必要となります
リスト 222 exastro.yaml
  pfAuditLogDefinition:
    name: pf-auditlog
    persistence:
-      enabled: false
+      enabled: true
      reinstall: false
      accessMode: ReadWriteMany
      size: 10Gi
      volumeType: hostPath # e.g.) hostPath or AKS
      storageClass: "-" # e.g.) azurefile or - (None)
リスト 223 コマンド
vi pv-pf-auditlog.yaml
リスト 224 pv-pf-auditlog.yaml (監査ログファイル用ボリューム)
 1# pv-pf-auditlog.yaml
 2apiVersion: v1
 3kind: PersistentVolume
 4metadata:
 5  name: pv-auditlog
 6spec:
 7  claimRef:
 8    name: pvc-pf-auditlog
 9    namespace: exastro
10  capacity:
11    storage: 10Gi
12  accessModes:
13    - ReadWriteMany
14  persistentVolumeReclaimPolicy: Retain
15  hostPath:
16    path: /var/log/exastro
17    type: DirectoryOrCreate

③kubespray及びkubernetesのコンテナイメージの取得

git clone を用いてkubesprayを取得します。
リスト 225 コマンド
cd /tmp
git clone https://github.com/kubernetes-sigs/kubespray.git -b release-2.23
kubernetesのコンテナイメージ一覧を取得します。
リスト 226 コマンド
cd /tmp/kubespray/contrib/offline
./generate_list.sh
cp -ip /tmp/kubespray/contrib/offline/temp/images.list /tmp/work/k8s-images.list
kubernetesのコンテナイメージを取得するシェルスクリプト作成します。
リスト 227 コマンド
cd /tmp/work
vi k8s-images-save.sh
リスト 228 下記のコードをコピー&ペーストします
#!/bin/bash

mkdir k8s-images

readarray -t image_list < "./k8s-images.list"
for image in ${image_list[@]}
do
  image_fullname=$(echo ${image})
  image_name=$(basename ${image_fullname} | sed -e "s/:/-/" -e "s/docker.io//" -e "s/registry.k8s.io//" -e "s/quay.io//" -e "s/ghcr.io//")
  if [ ! -e k8s-images/${image_name}.tar.gz ]; then
    echo $image_fullname $image_name
    docker pull ${image_fullname}
    if [ $? -eq 0 ]; then
      docker save ${image_fullname} | gzip -c > k8s-images/${image_name}.tar.gz
    fi
  fi
done
作成したシェルスクリプトを実行し、kubernetesのコンテナイメージを取得します。
リスト 229 コマンド
chmod a+x k8s-images-save.sh
./k8s-images-save.sh

④パッケージファイルの取得

Ansible実行サーバにインストールするパッケージファイルをダウンロードします。
--releasever=xはAnsibleを実行するサーバのOSのバージョンを指定します。
インストール先のディレクトリは/tmp/pkg-repo 、/tmp/pip_whl とします。
リスト 230 コマンド
# RPMパッケージのダウンロード
dnf install -y --downloadonly --downloaddir=/tmp/pkg-repo --installroot=/tmp/pkg-installroot --releasever=x \
            docker-ce python3 python3-pip nginx gcc httpd systemd-devel keepalived
createrepo /tmp/pkg-repo
# Pythonパッケージのダウンロード
pip3.9 download -d /tmp/pip_whl -r /tmp/kubespray/requirements.txt
kubernetes内でインストールするパッケージファイルをダウンロードします。
--releasever=xはExastroをインストールするサーバのOSのバージョンを指定します。
インストール先のディレクトリは /tmp/k8s-repoとします。
リスト 231 コマンド
# RPMパッケージのダウンロード
dnf install -y --downloadonly --downloaddir=/tmp/k8s-repo --installroot=/tmp/k8s-installroot --releasever=x \
            conntrack-tools libnetfilter_cttimeout libnetfilter_cthelper libnetfilter_queue bash-completion \
            e2fsprogs device-mapper-libs ipset libseccomp ipvsadm nss openssl python3-libselinux rsync socat \
            unzip xfsprogs gssproxy libverto-libev keyutils nfs-utils libev rpcbind container-selinux iproute
createrepo /tmp/k8s-repo
manage-offline-files.shは「 NGINX_PORT=8080 」 及び ファイル最下部の「 sudo "${runtime}" container inspect nginx >/dev/null 2>&1 」以降の記載を削除します。
リスト 232 コマンド
cd /tmp/kubespray/contrib/offline
cp manage-offline-files.sh manage-offline-files.sh.bk
vi manage-offline-files.sh
リスト 233 manage-offline-files.sh
  #!/bin/bash

  CURRENT_DIR=$( dirname "$(readlink -f "$0")" )
  OFFLINE_FILES_DIR_NAME="offline-files"
  OFFLINE_FILES_DIR="${CURRENT_DIR}/${OFFLINE_FILES_DIR_NAME}"
  OFFLINE_FILES_ARCHIVE="${CURRENT_DIR}/offline-files.tar.gz"
  FILES_LIST=${FILES_LIST:-"${CURRENT_DIR}/temp/files.list"}
- NGINX_PORT=8080

- sudo "${runtime}" container inspect nginx >/dev/null 2>&1
- if [ $? -ne 0 ]; then
-     sudo "${runtime}" run \
-         --restart=always -d -p ${NGINX_PORT}:80 \
-         --volume "${OFFLINE_FILES_DIR}:/usr/share/nginx/html/download" \
-         --volume "${CURRENT_DIR}"/nginx.conf:/etc/nginx/nginx.conf \
-         --name nginx nginx:alpine
- fi
manage-offline-files.shを実行します。
リスト 234 コマンド
./manage-offline-files.sh
mv offline-files.tar.gz /tmp/work

注釈

取得したファイルはoffline-files.tar.gzとして圧縮されます。
offline-files.tar.gzが存在しない場合は以下のメッセージが表示されますが問題ありません。
rm: cannot remove '/tmp/kubespray/contrib/offline/offline-files.tar.gz': No such file or directory

⑤Exastroのコンテナイメージを取得

コンテナイメージをダウンロードするシェルスクリプトとコンテナイメージのリストを 30GB以上空き容量がある領域に作成します。
これら2つは同じディレクトリに作成する必要があります。
コンテナイメージのリストは Helm のテンプレートより作成します。
リスト 235 コマンド
{
  helm template exastro/exastro | grep 'image:' | sed -e 's/^\s*image:\s"\?\([^"]\+\)"\?\r\?/\1/g' | grep -v '{{';
  # gitlabはHelm Chart内に存在しないので別に取得
  echo "docker.io/gitlab/gitlab-ce:15.11.13-ce.0";
} | sort -u > exastro-images.list
コンテナイメージを取得するシェルスクリプト作成します。
リスト 236 コマンド
vi exastro-images-save.sh
リスト 237 下記のコードをコピー&ペーストします
#!/bin/bash

ITA_VERSION=$1
if [ ! -d $1 ]; then
  mkdir $ITA_VERSION
fi

readarray -t image_list < "./exastro-images.list"
for image in ${image_list[@]}
do
  image_fullname=$(echo ${image})
  image_name=$(basename ${image} | sed -e "s/:/-/")
  if [ ! -e exastro-images/${image_name}.tar.gz ]; then
    echo $image_fullname $image_name
    docker pull ${image_fullname}
    if [ $? -eq 0 ]; then
      docker save ${image_fullname} | gzip -c > ${ITA_VERSION}/${image_name}.tar.gz
    fi
  fi
done
シェルスクリプトを実行し、コンテナイメージを取得します。x.x.x にはITAのバージョンを指定します。
完了するまでに数十分程度の時間がかかります。(通信環境やサーバースペックによって状況は異なります。)
リスト 238 コマンド
chmod a+x exastro-images-save.sh
./exastro-images-save.sh x.x.x

⑥オフライン環境で使用するシェルスクリプト等を作成

シェルスクリプトを作成します。
ITA_VERSIONにはExastro IT Automation App Versionを記載します。
リスト 239 コマンド
vi /tmp/work/exastro-images-load.sh
リスト 240 下記のコードをコピー&ペーストし、x.x.xにはバージョンを指定します
#!/bin/bash
ITA_VERSION=x.x.x
cd /tmp/work/${ITA_VERSION}

for file in *.tar.gz; do
  /usr/local/bin/nerdctl load -i ${file}
done
IPaddressはAnsible実行サーバとして使用するサーバのIPアドレスを指定します。
リスト 241 コマンド
vi /tmp/work/k8s-images-push.sh
リスト 242 下記のコードをコピー&ペーストします
#!/bin/bash

IPaddress=xx.xx.xx.xx:6000
image_list=$(docker images --format "{{.Repository}}:{{.Tag}}" | grep ${IPaddress})
IFS=$'\n'

for image in ${image_list}; do
  new_image=$(echo "${image}" | sed -e "s|docker.io/||" -e "s|registry.k8s.io/||" -e "s|quay.io/||" -e "s|ghcr.io/||")
  docker tag "${image}" "${new_image}"
  docker push "${new_image}"
done
IPaddressはAnsible実行サーバとして使用するサーバのIPアドレスを指定します。
リスト 243 コマンド
vi /tmp/work/k8s-images-load.sh
リスト 244 下記のコードをコピー&ペーストします
#!/bin/bash

IPaddress=xx.xx.xx.xx:6000

readarray -t image_list < k8s-images.list
for image in ${image_list[@]}
do
  image_fullname=$(echo ${image} )
  image_name=$(basename ${image_fullname} | sed -e "s/:/-/")
  if [ -e k8s-images/${image_name}.tar.gz ]; then
    docker load < k8s-images/${image_name}.tar.gz &&
    docker tag ${image_fullname} ${IPaddress}/${image_fullname} &&
    docker rmi ${image_fullname} &
  fi
done

wait
Ansibleの実行先となるサーバを指定します。
リスト 245 コマンド
vi inventory.yaml
リスト 246 下記のコードをコピー&ペーストし、ホスト名を書き換えます
[ControlMachine]
Ansible実行サーバのホスト名

[k8s-node1]
Exastroインストールサーバのホスト名

[K8S:children]
k8s-node1
パッケージファイルをインストールするyamlファイルを作成します。
リスト 247 コマンド
vi preparation.yaml
以下の内容をコピー&ペーストします。
preparation.yaml
リスト 248 preparation.yaml
 1---
 2- name: 資材配布など
 3  hosts: K8S
 4  tasks:
 5    - name: k8s-nodeにディレクトリ作成
 6      file:
 7        path: /tmp/work
 8        state: directory
 9    
10    - name: パッケージを展開(rpmファイル)
11      unarchive:
12        src: /tmp/work/k8s-repo.tar.gz
13        dest: /tmp/work
14        mode: 0755
15        remote_src: false
16      
17    - name: パッケージを展開(offline-files)
18      unarchive:
19        src: /tmp/work/offline-files.tar.gz
20        dest: /tmp/work
21        mode: 0755
22        remote_src: false
23      
24    - name: パッケージをインストールするシェルスクリプトをコピー
25      copy:
26        src: /tmp/work/k8s-pkg-install.sh
27        dest: /tmp/work
28        mode: 0755
29
30    - name: パッケージをインストールする
31      shell:
32        cmd: /tmp/work/k8s-pkg-install.sh
33        chdir: /tmp/work/k8s-repo
34        
28行目と89行目のexastro-x.x.xx.tgzのバージョンは手順②で取得したバージョンに書き換えます。
また、永続ボリュームの設定ファイルは使用状況に合わせて適宜削除します。
リスト 249 コマンド
vi install-exastro.yaml
install-exastro.yaml
リスト 250 install-exastro.yaml
  1---
  2- name: exastroのインストール
  3  hosts: K8S
  4  gather_facts: yes
  5  tasks:
  6    - name: helmを展開
  7      shell:
  8        cmd: tar xzvf /tmp/work/offline-files/get.helm.sh/helm*.tar.gz
  9        chdir: /tmp/work/offline-files/get.helm.sh
 10
 11    - name: helmをコピー
 12      shell:
 13        cmd: cp /tmp/work/offline-files/get.helm.sh/linux-amd64/helm /usr/local/bin
 14
 15    - name: シェルスクリプトをコピー
 16      copy:
 17        src: /tmp/work/exastro-image-load.sh
 18        dest: /tmp/work
 19        mode: 0755
 20
 21    - name: exastroのコンテナイメージを展開
 22      shell:
 23        cmd: tar xzf /tmp/work/exastro-image.tar.gz
 24        chdir: /tmp/work
 25
 26
 27    - name: シェルスクリプトを実行
 28      shell:
 29        cmd: ./exastro-image-load.sh
 30        chdir: /tmp/work
 31
 32    - name: exastro helm chartをコピー
 33      copy:
 34        src: /tmp/work/exastro-x.x.x.tgz
 35        dest: /tmp/work
 36        mode: 0755
 37        remote_src: false
 38
 39    - name: exastro.yamlをコピー
 40      copy:
 41        src: /tmp/work/exastro.yaml
 42        dest: /tmp/work
 43        mode: 0755
 44
 45    - name: pv-database.yamlをコピー
 46      copy:
 47        src: /tmp/work/pv-database.yaml
 48        dest: /tmp/work
 49        remote_src: false
 50      when: "'k8s-node1' in group_names"
 51
 52    - name: pv-ita-common.yamlをコピー
 53      copy:
 54        src: /tmp/work/pv-ita-common.yaml
 55        dest: /tmp/work
 56        remote_src: false
 57      when: "'k8s-node1' in group_names"
 58
 59    - name: pv-mongo.yamlをコピー
 60      copy:
 61        src: /tmp/work/pv-mongo.yaml
 62        dest: /tmp/work
 63        remote_src: false
 64      when: "'k8s-node1' in group_names"
 65
 66    - name: pv-gitlab.yaml をコピー
 67      copy:
 68        src: /tmp/work/pv-gitlab.yaml
 69        dest: /tmp/work
 70        remote_src: false
 71      when: "'k8s-node1' in group_names"
 72
 73    - name: pv-pf-auditlog.yaml をコピー
 74      copy:
 75        src: /tmp/work/pv-pf-auditlog.yaml
 76        dest: /tmp/work
 77        remote_src: false
 78      when: "'k8s-node1' in group_names"
 79
 80    - name: シェルスクリプトのコピー
 81      copy:
 82        src: /tmp/work/apply-pv.sh
 83        dest: /tmp/work
 84        mode: 0755
 85        remote_src: false
 86      when: "'k8s-node1' in group_names"
 87      
 88    - name: シェルスクリプトを実行 
 89      shell: 
 90        cmd: /tmp/work/apply-pv.sh  
 91        chdir: /tmp/work
 92      ignore_errors: true
 93      when: "'k8s-node1' in group_names"
 94
 95    - name: exec exastro v2
 96      shell:
 97        cmd: /usr/local/bin/helm install exastro ./exastro-x.x.x.tgz  --namespace exastro --create-namespace --values exastro.yaml
 98        chdir: /tmp/work
 99      when: "'k8s-node1' in group_names"
100    - debug:
101        msg: need checking exastro pod command kubectl get pod -n exastro
永続ボリュームを作成するシェルスクリプトです。
永続ボリュームの設定ファイルは使用状況に合わせて適宜削除します。
リスト 251 コマンド
vi apply-pv.sh
リスト 252 下記のコードをコピー&ペーストします
#!/bin/bash
/usr/local/bin/kubectl apply -f /tmp/work/pv-database.yaml
/usr/local/bin/kubectl apply -f /tmp/work/pv-ita-common.yaml
/usr/local/bin/kubectl apply -f /tmp/work/pv-mongo.yaml
/usr/local/bin/kubectl apply -f /tmp/work/pv-gitlab.yaml
/usr/local/bin/kubectl apply -f /tmp/work/pv-pf-auditlog.yaml
パッケージファイルをインストールするシェルスクリプトを作成します。
リスト 253 コマンド
vi k8s-pkg-install.sh
リスト 254 下記のコードをコピー&ペーストします
#!/bin/bash

#ebtables のインストール
rpm -ivh --force iptables*.rpm iptables-ebtables*.rpm iptables-libs*.rpm
# conntrack-tools のインストール
rpm -ivh --force conntrack-tools*.rpm libnetfilter_cttimeout*.rpm libnetfilter_cthelper*.rpm libnetfilter_queue*.rpm
# bash-completion のインストール
rpm -ivh --force bash-completion*.rpm libssh*.rpm libssh-config*.rpm openssl*.rpm  openssl-libs*.rpm
# curl のインストール
rpm -ivh --force curl*.rpm libcurl*.rpm
# e2fsprogs のインストール
rpm -ivh --force e2fsprogs*.rpm e2fsprogs-libs*.rpm libcom_err*.rpm libss*.rpm
# device-mapper-libs のインストール
rpm -ivh --force device-mapper*.rpm device-mapper-event*.rpm device-mapper-event-libs*.rpm device-mapper-libs*.rpm lvm2*.rpm lvm2-libs*.rpm ipset-libs*.rpm
# ipset のインストール
rpm -ivh --force ipset*.rpm
# libseccomp のインストール
rpm -ivh --force libseccomp*.rpm
# ipvsadm のインストール
rpm -ivh --force ipvsadm*.rpm
# nss のインストール
rpm -ivh  --force nspr*.rpm nss*.rpm nss-softokn*.rpm nss-softokn-freebl*.rpm nss-sysinit*.rpm nss-tools*.rpm nss-util*.rpm
# openssl のインストール
rpm -ivh --force openssl*.rpm
# python3-libselinux のインストール
rpm -ivh --force libselinux*.rpm python3-libselinux*.rpm libselinux-utils*.rpm
# rsync のインストール
rpm -ivh --force rsync*.rpm
# socat のインストール
rpm -ivh --force socat*.rpm
# unzip のインストール
rpm -ivh --force unzip*.rpm
# xfsprogs のインストール
rpm -ivh --force xfsprogs*.rpm
# container-selinux のインストール
rpm -ivh --force container-selinux*.rpm selinux-policy*.rpm selinux-policy-targeted*.rpm
# nfs-utils のインストール
rpm -ivh --force  nfs-utils*.rpm
#iproutes のインストール
rpm -ivh --force  iproute*.rpm

資材の転送

取得した資材を圧縮します。
ExastroのコンテナイメージはITA_VERSIONで指定したバージョンがディレクトリ名になっているため、x.x.xはバージョンを指定します。
リスト 255 コマンド
cd /tmp/work
tar -zcvf exastro-images.tar.gz x.x.x
tar -zcvf k8s-images.tar.gz k8s-images
シェルスクリプトとyamlファイルを圧縮します。
永続ボリュームの設定ファイルは作成したファイルのみ指定します。
リスト 256 コマンド
tar -zcvf resource.tar.gz k8s-images-push.sh k8s-images-load.sh k8s-images.list exastro.yaml inventory.yaml install-exastro.yaml preparation.yaml apply-pv.sh exastro-images-load.sh k8s-pkg-install.sh pv-database.yaml pv-ita-common.yaml pv-gitlab.yaml pv-mongo.yaml pv-pf-auditlog.yaml
リスト 257 コマンド
cd /tmp
tar -zcvf k8s-repo.tar.gz k8s-repo
tar -zcvf pkg-repo.tar.gz pkg-repo
tar -zcvf pip-whl.tar.gz pip_whl
tar -zcvf kubespray.tar.gz kubespray
収集した資材をFTP、SCP、SFTP、記憶媒体等でオフライン環境(Ansible実行サーバ)に転送します。
次に挙げる資材は /tmp/work ディレクトリを作成して配置します。
  • exastro-images.tar.gz

  • k8s-images.tar.gz

  • resource.tar.gz

  • exastro-x.x.x.tgz

  • offline-files.tar.gz

  • k8s-repo.tar.gz

次に挙げる資材は /tmp ディレクトリに配置します。
  • pkg-repo.tar.gz

  • pip-whl.tar.gz

  • kubespray.tar.gz

オフライン環境(インターネットに接続できない環境)での作業

オンライン環境での作業完了後、オフライン環境にて下記の手順を実施します。
以下は、Ansible実行サーバ1台、Exastroインストールサーバ1台で構成した例です。

⑦資材受け取り

Ansible実行サーバで、取得した資材を展開します。
リスト 258 コマンド
tar xzvf /tmp/kubespray.tar.gz -C /tmp
tar xzvf /tmp/pip-whl.tar.gz -C /tmp
tar xzvf /tmp/pkg-repo.tar.gz -C /tmp
tar xzvf /tmp/work/offline-files.tar.gz -C /tmp/work
tar xzvf /tmp/work/k8s-images.tar.gz -C /tmp/work
tar xzvf /tmp/work/resource.tar.gz -C /tmp/work

⑧Ansible実行サーバでの準備

リスト 259 コマンド
cd /tmp
vi pkg-install.sh
リスト 260 下記のコードをコピー&ペーストします
#!/bin/bash

#ローカルリポジトリを作成
tee /etc/yum.repos.d/pkg-repo.repo <<EOF
[pkg-repo]
name=RedHat-\$releaserver - pkg
baseurl=file:///tmp/pkg-repo
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
EOF

dnf remove -y runc
#docker-ceのインストール
cd /tmp/pkg-repo
docker_ce=$(ls | grep -E "docker-ce|docker-ce-cli|docker-ce-rootless-extras|docker-compose-plugin|fuse3|fuse3-libs|fuse-common|fuse-overlayfs|libcgroup|libslirp|slirp4netns|container-selinux|perl-IO-Socket-SSL|perl-Mozilla-CA|perl-Net-SSLeay")
dnf install -y --disablerepo=\* --enablerepo=pkg-repo ${docker_ce}
#pythonのインストール
python=$(ls | grep "python3")
dnf install -y --disablerepo=\* --enablerepo=pkg-repo ${python}
#Nginxのインストール
nginx=$(ls | grep "nginx")
dnf install -y --disablerepo=\* --enablerepo=pkg-repo ${nginx}
#ansible関連のインストール
cd /tmp/pip_whl
pip3.9 install --no-index --find-links=./ ansible cryptography jinja2 jmespath MarkupSafe netaddr pbr ruamel.yaml ruamel.yaml.clib
パッケージファイルをインストールします。
リスト 261 コマンド
chmod a+x pkg-install.sh
./pkg-install.sh
エラーメッセージが表示された場合は、表示されているmoduleを検索し全てインストールします。
リスト 262 メッセージ例
No available modular metadata for modular package 'perl-Mozilla-CA-20160104-7.module_el8.5.0+2812+ed912d05.noarch', it cannot be installed on the system
No available modular metadata for modular package 'perl-Net-SSLeay-1.88-2.module_el8.6.0+2811+fe6c84b0.x86_64', it cannot be installed on the system
Error: No available modular metadata for modular package
リスト 263 表示されたmoduleを確認し、一度に全てインストールします
#対象がperl-Mozilla-CA 及び perl-Net-SSLeayだった場合
cd /tmp/pkg-repo
ls -l | grep -E "perl-Mozilla-CA|perl-Net-SSLeay"
dnf -y --disablerepo=\* --enablerepo=pkg-repo perl-Mozilla-CA-20160104-7.module_el8.5.0+2812+ed912d05.noarch.rmp perl-Net-SSLeay-1.88-2.module_el8.6.0+2811+fe6c84b0.x86_64.rpm
dockerグループにユーザを追加します。
リスト 264 コマンド
systemctl enable --now docker
cat /etc/group | grep docker
usermod -aG docker ${USER}
cat /etc/group | grep docker
reboot
ExastroをインストールするサーバのIPアドレスとホスト名をHOSTSに登録します。
※本説明では、1台のKubernetesクラスターを構築する例となっております。
リスト 265 コマンド
vi /etc/hosts
リスト 266 hosts
xx.xx.xx.xx xxx.cluster.local xxx

#サーバのIPアドレス:xx.xx.xx.xx
#サーバホスト名:xxx.cluster.local xxx
SSH Keyの作成を作成します。
.sshディレクトリにid_rsa.pubが存在する場合は再度作成する必要はありません。
リスト 267 コマンド
cd ~ && ls -al
#.sshディレクトリが存在する場合は作成不要
mkdir -p .ssh
cd .ssh
#指定がない場合は全てEnterを押す
ssh-keygen -t rsa
実行しているサーバー自身 及び HOSTSに登録したサーバに対して鍵交換を実施します。
実行後はssh接続ができることを確認します。
リスト 268 コマンド
ssh-copy-id -i ~/.ssh/id_rsa.pub root@HOSTSに登録したサーバのホスト名
ssh-copy-id -i ~/.ssh/id_rsa.pub root@実行しているサーバのホスト名
ssh root@HOSTSに登録したサーバのホスト名 exit

⑨Exastroインストールサーバでの準備

Exastroをインストールするサーバすべてで以下の手順を実施します。
リスト 269 コマンド
vi /etc/sysctl.conf
/etc/sysctl.confに以下の1行を追記します。
リスト 270 追記する1行
net.ipv4.ip_forward=1
リスト 271 sysctl.conf
  # sysctl settings are defined through files in
  # /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
  #
  # Vendors settings live in /usr/lib/sysctl.d/.
  # To override a whole file, create a new file with the same in
  # /etc/sysctl.d/ and put new settings there. To override
  # only specific settings, add a file with a lexically later
  # name in /etc/sysctl.d/ and put new settings there.
  #
  # For more information, see sysctl.conf(5) and sysctl.d(5).
+ net.ipv4.ip_forward=1
ファイアーウォールを無効化します。
リスト 272 コマンド
systemctl disable firewalld
systemctl stop firewalld
systemctl status firewalld
SELinuxを無効化します。Disabled となっている場合は実施不要です。
リスト 273 コマンド
getenforce
リスト 274 コマンド
vi /etc/selinux/config
リスト 275 config
  # This file controls the state of SELinux on the system.
  # SELINUX= can take one of these three values:
  #       enforcing - SELinux security policy is enforced.
  #       permissive - SELinux prints warnings instead of enforcing.
  #       disabled - No SELinux policy is loaded.
+ SELINUX=disabled
  # SELINUXTYPE= can take one of these two values:
  #       targeted - Targeted processes are protected,
  #       mls - Multi Level Security protection.
  SELINUXTYPE=targeted
/etc/selinux/config更新後、システムを再起動します。
リスト 276 コマンド
reboot
Disabled となっていることを確認します。
リスト 277 コマンド
getenforce

⑩kubernetesのコンテナイメージの設定

Ansible実行サーバとして使用するサーバでdockerの例外レジストリを定義します。
/etc/dockerディレクトリにdaemon.jsonが存在しない場合は新しく作成します。
リスト 278 コマンド
vi  /etc/docker/daemon.json
以下の1行を追記します。xx.xx.xx.xxには現在作業しているサーバ(Ansible実行サーバ)のIPアドレスを指定します。
リスト 279 daemon.json
{ "insecure-registries":[ "xx.xx.xx.xx:6000" ] }
設定ファイルの再読み込みとdockerの再起動を行います。
リスト 280 コマンド
systemctl daemon-reload
systemctl start docker
シェルスクリプトを実行し、kubernetesのコンテナイメージを読み込みます。
完了するまでに数十分程度の時間がかかります。(通信環境やサーバースペックによって状況は異なります。)
リスト 281 コマンド
cd /tmp/work
ls k8s-images-load.sh
chmod a+x k8s-images-load.sh
./k8s-images-load.sh
docker registryを起動します。
xx.xx.xx.xxには現在作業しているサーバ(Ansible実行サーバ)のIPアドレスを指定します。
リスト 282 コマンド
docker images | grep docker.io/library/registry
#上記で得られたREPOSITORYとTAGを指定します
docker run -d -p 6000:5000 --restart=always --name registry REPOSITORY:TAG
#以下は記載例です
docker run -d -p 6000:5000 --restart=always --name registry xx.xx.xx.xx:6000/docker.io/library/registry:2.8.1
#docker registryが起動していることを確認します
docker ps
docker registryにkubernetesのイメージをpushします。
リスト 283 コマンド
ls k8s-images-push.sh
chmod a+x k8s-images-push.sh
./k8s-images-push.sh

注釈

http: server gave HTTP response to HTTPS clientと表示されpushできない場合はsystemctl daemon-reloadを行います

⑪自己署名証明書及びNginxの設定

自己署名証明書用のディレクトリを作成します。
以下の手順をAnsible実行サーバで実施します。
リスト 284 コマンド
mkdir /etc/nginx/ssl
暗号鍵を作成します
リスト 285 コマンド
openssl genrsa -out /etc/nginx/ssl/server.key 2048
自己署名証明書リクエストを作成します。
Country NameはJP、State or Province NameはTokyo、それ以外はEnterキーを押します。
リスト 286 コマンド
openssl req -new -key /etc/nginx/ssl/server.key -out /etc/nginx/ssl/server.csr
自己署名証明書を作成します。
リスト 287 コマンド
openssl x509 -days 3650 -req -signkey /etc/nginx/ssl/server.key -in /etc/nginx/ssl/server.csr -out /etc/nginx/ssl/server.crt
自己署名証明書(server.key server.csr server.srt )が作成されていることを確認します。
リスト 288 コマンド
ls /etc/nginx/ssl
Nginxの設定をします。
リスト 289 コマンド
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bk
vi /etc/nginx/nginx.conf
バックアップを取得した後、nginx.confに以下のブロックを追記します。
xx.xx.xx.xxには現在作業しているサーバ(Ansible実行サーバ)のIPアドレスを指定します。
リスト 290 nginx.conf
server {
    listen       81 ssl ;
    ssl_certificate "/etc/nginx/ssl/server.crt";
    ssl_certificate_key "/etc/nginx/ssl/server.key";
    charset UTF-8;
    proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    location /{
    client_max_body_size 256M;
    proxy_set_header Host $host;
    proxy_pass http://xx.xx.xx.xx:6000/;
    proxy_redirect off;
    }
}
リスト 291 コマンド
systemctl stop firewalld
systemctl start nginx
ブラウザでコンテナイメージが表示されることを確認します(イメージ名にはIPアドレスやタグは表示されません)。
xx.xx.xx.xxには現在作業しているサーバ(Ansible実行サーバ)のIPアドレスを指定します。
接続がプライベートではありませんと表示されるため、詳細設定をクリックして先に進みます。
リスト 292 コマンド
https://xx.xx.xx.xx:81/v2/_catalog

注釈

レジストリコンテナに登録したイメージを確認するには、ファイアウォールを無効にし、Nginxサービスを起動する必要あります。
Exastroをインストールするサーバに対して自己署名証明書を送信します。
xx.xx.xx.xxにはExastroをインストールするサーバのIPアドレスを指定します。
リスト 293 コマンド
scp /etc/nginx/ssl/server.crt root@xx.xx.xx.xx:/usr/share/pki/ca-trust-source/anchors

⑫パッケージのインストール

Ansibleを実行してパッケージファイルをインストールするため、hosts.ymlを以下の手順で作成します。
以下の手順をAnsible実行サーバで実施します。
リスト 294 コマンド
cd /tmp/kubespray
サンプルのinventoryファイルをコピーします。
リスト 295 コマンド
cp -rfp inventory/sample inventory/k8s_cluster
Kubernetesクラスター環境のIPの変数を設定します。
xx.xx.xx.xxにはExastroをインストールするサーバのIPアドレスを指定します。
リスト 296 コマンド
declare -a IPS=(xx.xx.xx.xx)
hosts.ymlを作成します。
リスト 297 コマンド
CONFIG_FILE=inventory/k8s_cluster/hosts.yml python3.9 contrib/inventory_builder/inventory.py ${IPS[@]}
作成された hosts.yml のnode1を構成したいKubernetesクラスターのホスト名に書き換えます。
以下の記載例はKubernetesクラスターを1台で構成した例です。
本説明では、各Kubernetesクラスターがコントロールプレーン、ワーカーノードを兼ねた設定で作成するため、全てのnode1に同じホスト名を指定します。
リスト 298 コマンド
cd /tmp/kubespray/inventory/k8s_cluster
vi hosts.yml
リスト 299 hosts.yml
all:
  hosts:
    node1:
      ansible_host: xx.xx.xx.xx
      ip: xx.xx.xx.xx
      access_ip: xx.xx.xx.xx
  children:
    kube_control_plane:
      hosts:
        node1:
    kube_node:
      hosts:
        node1:
    etcd:
      hosts:
        node1:
    k8s_cluster:
      children:
        kube_control_plane:
        kube_node:
    calico_rr:
      hosts: {}
Exastroをインストールするサーバにパッケージファイルをインストールします。
リスト 300 コマンド
cd /tmp/work
ls inventory.yaml
ls preparation.yaml
ansible-playbook -i inventory.yaml preparation.yaml -become --become-user=root  --private-key=~/.ssh/id_rsa

⑬kubesprayのインストール

kubenetesクラスタの構築で使用するファイルはNginxコンテナを介して提供します。
/tmp/workに展開するoffline-filesとnginxコンテナの/usr/share/nginx/html/downloadをマウントします。
以下の手順をAnsible実行サーバで実施します。
リスト 301 コマンド
systemctl restart docker
docker images | grep docker.io/library/nginx
#上記で得られたREPOSITORYとTAGを指定します
docker run --name exastro-nginx -d -p 8080:80 -v /tmp/work/offline-files:/usr/share/nginx/html/download REPOSITORY:TAG
#以下は記載例です
docker run --name exastro-nginx -d -p 8080:80 -v /tmp/work/offline-files:/usr/share/nginx/html/download xx.xx.xx.xx:6000/docker.io/library/nginx:1.25.2-alpine
#Nginxコンテナが起動していることを確認します
docker ps
ExastroをインストールするサーバにKubernetesをインストールするための設定ファイルを編集します。
all.ymlとoffline.ymlを以下のように書き換えます。
リスト 302 コマンド
cd /tmp/kubespray/inventory/k8s_cluster/group_vars/all
cp all.yml all.yml.bk
vi all.yml
リスト 303 all.yml
  ## Set these proxy values in order to update package manager and docker daemon to use proxies and custom CA for https_proxy if needed
  # http_proxy: ""
  # https_proxy: ""

- # https_proxy_cert_file: ""
+ https_proxy_cert_file: "/usr/share/pki/ca-trust-source/anchors/server.crt"
xx.xx.xx.xxには現在作業しているサーバ(Ansible実行サーバ)のIPアドレスを指定します。
リスト 304 コマンド
cp offline.yml offline.yml.bk
vi offline.yml
リスト 305 追記する行
containerd_registries_mirrors:
  - prefix: "{{ registry_host }}"
    mirrors:
      - host: "{{ registry_host }}"
        capabilities: ["pull", "resolve"]
        skip_verify: true
offline.yml
リスト 306 offline.yml
  1---
  2## Global Offline settings
  3### Private Container Image Registry
  4- # registry_host: "myprivateregisry.com"
  5+ registry_host: "xx.xx.xx.xx:81"
  6- # files_repo: "http://myprivatehttpd"
  7+ files_repo: "http://xx.xx.xx.xx:8080/download"
  8### If using CentOS, RedHat, AlmaLinux or Fedora
  9- # yum_repo: "http://myinternalyumrepo"
 10+ yum_repo: "http://xx.xx.xx.xx:81"
 11### If using Debian
 12# debian_repo: "http://myinternaldebianrepo"
 13### If using Ubuntu
 14# ubuntu_repo: "http://myinternalubunturepo"
 15
 16containerd_registries_mirrors:
 17  - prefix: "{{ registry_host }}"
 18    mirrors:
 19      - host: "{{ registry_host }}"
 20        capabilities: ["pull", "resolve"]
 21        skip_verify: true
 22
 23## Container Registry overrides
 24- # kube_image_repo: "{{ registry_host }}"
 25+ kube_image_repo: "{{ registry_host }}"
 26- # gcr_image_repo: "{{ registry_host }}"
 27+ gcr_image_repo: "{{ registry_host }}"
 28- # github_image_repo: "{{ registry_host }}"
 29+ github_image_repo: "{{ registry_host }}"
 30- # docker_image_repo: "{{ registry_host }}"
 31+ docker_image_repo: "{{ registry_host }}"
 32- # quay_image_repo: "{{ registry_host }}"
 33+ quay_image_repo: "{{ registry_host }}"
 34
 35## Kubernetes components
 36- # kubeadm_download_url: "{{ files_repo }}/dl.k8s.io/release/{{ kubeadm_version }}/bin/linux/{{ image_arch }}/kubeadm"
 37+ kubeadm_download_url: "{{ files_repo }}/dl.k8s.io/release/{{ kubeadm_version }}/bin/linux/{{ image_arch }}/kubeadm"
 38- # kubectl_download_url: "{{ files_repo }}/dl.k8s.io/release/{{ kube_version }}/bin/linux/{{ image_arch }}/kubectl"
 39+ kubectl_download_url: "{{ files_repo }}/dl.k8s.io/release/{{ kube_version }}/bin/linux/{{ image_arch }}/kubectl"
 40- # kubelet_download_url: "{{ files_repo }}/dl.k8s.io/release/{{ kube_version }}/bin/linux/{{ image_arch }}/kubelet"
 41+ kubelet_download_url: "{{ files_repo }}/dl.k8s.io/release/{{ kube_version }}/bin/linux/{{ image_arch }}/kubelet"
 42
 43## CNI Plugins
 44- # cni_download_url: "{{ files_repo }}/github.com/containernetworking/plugins/releases/download/{{ cni_version }}/cni-plugins-linux-{{ image_arch }}-{{ cni_version }}.tgz"
 45+ cni_download_url: "{{ files_repo }}/github.com/containernetworking/plugins/releases/download/{{ cni_version }}/cni-plugins-linux-{{ image_arch }}-{{ cni_version }}.tgz"
 46
 47## cri-tools
 48- # crictl_download_url: "{{ files_repo }}/github.com/kubernetes-sigs/cri-tools/releases/download/{{ crictl_version }}/crictl-{{ crictl_version }}-{{ ansible_system | lower }}-{{ image_arch }}.tar.gz"
 49+ crictl_download_url: "{{ files_repo }}/github.com/kubernetes-sigs/cri-tools/releases/download/{{ crictl_version }}/crictl-{{ crictl_version }}-{{ ansible_system | lower }}-{{ image_arch }}.tar.gz"
 50
 51## [Optional] etcd: only if you use etcd_deployment=host
 52- # etcd_download_url: "{{ files_repo }}/github.com/etcd-io/etcd/releases/download/{{ etcd_version }}/etcd-{{ etcd_version }}-linux-{{ image_arch }}.tar.gz"
 53+ etcd_download_url: "{{ files_repo }}/github.com/etcd-io/etcd/releases/download/{{ etcd_version }}/etcd-{{ etcd_version }}-linux-{{ image_arch }}.tar.gz"
 54
 55# [Optional] Calico: If using Calico network plugin
 56- # calicoctl_download_url: "{{ files_repo }}/github.com/projectcalico/calico/releases/download/{{ calico_ctl_version }}/calicoctl-linux-{{ image_arch }}"
 57+ calicoctl_download_url: "{{ files_repo }}/github.com/projectcalico/calico/releases/download/{{ calico_ctl_version }}/calicoctl-linux-{{ image_arch }}"
 58# [Optional] Calico with kdd: If using Calico network plugin with kdd datastore
 59- # calico_crds_download_url: "{{ files_repo }}/github.com/projectcalico/calico/archive/{{ calico_version }}.tar.gz"
 60+ calico_crds_download_url: "{{ files_repo }}/github.com/projectcalico/calico/archive/{{ calico_version }}.tar.gz"
 61
 62# [Optional] Cilium: If using Cilium network plugin
 63- # ciliumcli_download_url: "{{ files_repo }}/github.com/cilium/cilium-cli/releases/download/{{ cilium_cli_version }}/cilium-linux-{{ image_arch }}.tar.gz"
 64+ ciliumcli_download_url: "{{ files_repo }}/github.com/cilium/cilium-cli/releases/download/{{ cilium_cli_version }}/cilium-linux-{{ image_arch }}.tar.gz"
 65
 66# [Optional] helm: only if you set helm_enabled: true
 67- # helm_download_url: "{{ files_repo }}/get.helm.sh/helm-{{ helm_version }}-linux-{{ image_arch }}.tar.gz"
 68+ helm_download_url: "{{ files_repo }}/get.helm.sh/helm-{{ helm_version }}-linux-{{ image_arch }}.tar.gz"
 69
 70# [Optional] crun: only if you set crun_enabled: true
 71- # crun_download_url: "{{ files_repo }}/github.com/containers/crun/releases/download/{{ crun_version }}/crun-{{ crun_version }}-linux-{{ image_arch }}"
 72+ crun_download_url: "{{ files_repo }}/github.com/containers/crun/releases/download/{{ crun_version }}/crun-{{ crun_version }}-linux-{{ image_arch }}"
 73
 74# [Optional] kata: only if you set kata_containers_enabled: true
 75- # kata_containers_download_url: "{{ files_repo }}/github.com/kata-containers/kata-containers/releases/download/{{ kata_containers_version }}/kata-static-{{ kata_containers_version }}-{{ ansible_architecture }}.tar.xz"
 76+ kata_containers_download_url: "{{ files_repo }}/github.com/kata-containers/kata-containers/releases/download/{{ kata_containers_version }}/kata-static-{{ kata_containers_version }}-{{ ansible_architecture }}.tar.xz"
 77
 78# [Optional] cri-dockerd: only if you set container_manager: docker
 79- # cri_dockerd_download_url: "{{ files_repo }}/github.com/Mirantis/cri-dockerd/releases/download/v{{ cri_dockerd_version }}/cri-dockerd-{{ cri_dockerd_version }}.{{ image_arch }}.tgz"
 80+ cri_dockerd_download_url: "{{ files_repo }}/github.com/Mirantis/cri-dockerd/releases/download/v{{ cri_dockerd_version }}/cri-dockerd-{{ cri_dockerd_version }}.{{ image_arch }}.tgz"
 81
 82# [Optional] runc: if you set container_manager to containerd or crio
 83- # runc_download_url: "{{ files_repo }}/github.com/opencontainers/runc/releases/download/{{ runc_version }}/runc.{{ image_arch }}"
 84+ runc_download_url: "{{ files_repo }}/github.com/opencontainers/runc/releases/download/{{ runc_version }}/runc.{{ image_arch }}"
 85
 86# [Optional] cri-o: only if you set container_manager: crio
 87- # crio_download_base: "download.opensuse.org/repositories/devel:kubic:libcontainers:stable"
 88+ crio_download_base: "download.opensuse.org/repositories/devel:kubic:libcontainers:stable"
 89- # crio_download_crio: "http://{{ crio_download_base }}:/cri-o:/"
 90+ crio_download_crio: "http://{{ crio_download_base }}:/cri-o:/"
 91- # crio_download_url: "{{ files_repo }}/storage.googleapis.com/cri-o/artifacts/cri-o.{{ image_arch }}.{{ crio_version }}.tar.gz"
 92+ crio_download_url: "{{ files_repo }}/storage.googleapis.com/cri-o/artifacts/cri-o.{{ image_arch }}.{{ crio_version }}.tar.gz"
 93- # skopeo_download_url: "{{ files_repo }}/github.com/lework/skopeo-binary/releases/download/{{ skopeo_version }}/skopeo-linux-{{ image_arch }}"
 94+ skopeo_download_url: "{{ files_repo }}/github.com/lework/skopeo-binary/releases/download/{{ skopeo_version }}/skopeo-linux-{{ image_arch }}"
 95
 96# [Optional] containerd: only if you set container_runtime: containerd
 97- # containerd_download_url: "{{ files_repo }}/github.com/containerd/containerd/releases/download/v{{ containerd_version }}/containerd-{{ containerd_version }}-linux-{{ image_arch }}.tar.gz"
 98+ containerd_download_url: "{{ files_repo }}/github.com/containerd/containerd/releases/download/v{{ containerd_version }}/containerd-{{ containerd_version }}-linux-{{ image_arch }}.tar.gz"
 99- # nerdctl_download_url: "{{ files_repo }}/github.com/containerd/nerdctl/releases/download/v{{ nerdctl_version }}/nerdctl-{{ nerdctl_version }}-{{ ansible_system | lower }}-{{ image_arch }}.tar.gz"
100+ nerdctl_download_url: "{{ files_repo }}/github.com/containerd/nerdctl/releases/download/v{{ nerdctl_version }}/nerdctl-{{ nerdctl_version }}-{{ ansible_system | lower }}-{{ image_arch }}.tar.gz"
101
102# [Optional] runsc,containerd-shim-runsc: only if you set gvisor_enabled: true
103- # gvisor_runsc_download_url: "{{ files_repo }}/storage.googleapis.com/gvisor/releases/release/{{ gvisor_version }}/{{ ansible_architecture }}/runsc"
104+ gvisor_runsc_download_url: "{{ files_repo }}/storage.googleapis.com/gvisor/releases/release/{{ gvisor_version }}/{{ ansible_architecture }}/runsc"
105- # gvisor_containerd_shim_runsc_download_url: "{{ files_repo }}/storage.googleapis.com/gvisor/releases/release/{{ gvisor_version }}/{{ ansible_architecture }}/containerd-shim-runsc-v1"
106+ gvisor_containerd_shim_runsc_download_url: "{{ files_repo }}/storage.googleapis.com/gvisor/releases/release/{{ gvisor_version }}/{{ ansible_architecture }}/containerd-shim-runsc-v1"
107
108# [Optional] Krew: only if you set krew_enabled: true
109- # krew_download_url: "{{ files_repo }}/github.com/kubernetes-sigs/krew/releases/download/{{ krew_version }}/krew-{{ host_os }}_{{ image_arch }}.tar.gz"
110+ krew_download_url: "{{ files_repo }}/github.com/kubernetes-sigs/krew/releases/download/{{ krew_version }}/krew-{{ host_os }}_{{ image_arch }}.tar.gz"
111
112## CentOS/Redhat/AlmaLinux
113### For EL7, base and extras repo must be available, for EL8, baseos and appstream
114### By default we enable those repo automatically
115# rhel_enable_repos: false
116### Docker / Containerd
117- # docker_rh_repo_base_url: "{{ yum_repo }}/docker-ce/$releasever/$basearch"
118+ docker_rh_repo_base_url: "{{ yum_repo }}/docker-ce/$releasever/$basearch"
119- # docker_rh_repo_gpgkey: "{{ yum_repo }}/docker-ce/gpg"
120+ docker_rh_repo_gpgkey: "{{ yum_repo }}/docker-ce/gpg"
121
122## Fedora
123### Docker
124# docker_fedora_repo_base_url: "{{ yum_repo }}/docker-ce/{{ ansible_distribution_major_version }}/{{ ansible_architecture }}"
125# docker_fedora_repo_gpgkey: "{{ yum_repo }}/docker-ce/gpg"
126### Containerd
127# containerd_fedora_repo_base_url: "{{ yum_repo }}/containerd"
128# containerd_fedora_repo_gpgkey: "{{ yum_repo }}/docker-ce/gpg"
129
130## Debian
131### Docker
132# docker_debian_repo_base_url: "{{ debian_repo }}/docker-ce"
133# docker_debian_repo_gpgkey: "{{ debian_repo }}/docker-ce/gpg"
134### Containerd
135# containerd_debian_repo_base_url: "{{ debian_repo }}/containerd"
136# containerd_debian_repo_gpgkey: "{{ debian_repo }}/containerd/gpg"
137# containerd_debian_repo_repokey: 'YOURREPOKEY'
138
139## Ubuntu
140### Docker
141# docker_ubuntu_repo_base_url: "{{ ubuntu_repo }}/docker-ce"
142# docker_ubuntu_repo_gpgkey: "{{ ubuntu_repo }}/docker-ce/gpg"
143### Containerd
144# containerd_ubuntu_repo_base_url: "{{ ubuntu_repo }}/containerd"
145# containerd_ubuntu_repo_gpgkey: "{{ ubuntu_repo }}/containerd/gpg"
146# containerd_ubuntu_repo_repokey: 'YOURREPOKEY'
Kubesparayを実行して、ExastroをインストールするサーバへKubernetesをインストールします。
完了するまでに数十分程度の時間がかかります。(通信環境やサーバースペックによって状況は異なります。)
リスト 307 コマンド
cd /tmp/kubespray
ansible-playbook -i inventory/k8s_cluster/hosts.yml --become --become-user=root cluster.yml --private-key=~/.ssh/id_rsa -e "download_retries=10" | tee ~/kubespray_$(date +%Y%m%d%H%M).log
Exastroをインストールするサーバに接続し、nodeが作成されていることを確認します。
リスト 308 コマンド
kubectl get nodes
リスト 309 結果サンプル
NAME                                    STATUS   ROLES           AGE     VERSION
ITAをインストールするサーバのホスト名   Ready    control-plane   5m10s   v1.27.10

⑭Exastroのインストール

ExastroをインストールするサーバにExastroのコンテナイメージを転送します。
xx.xx.xx.xxにはExastroをインストールするサーバ(Kubernetesクラスター環境)のIPアドレスを指定します。
完了するまでに数十分程度の時間がかかります。(通信環境やサーバースペックによって状況は異なります。)
以下の手順をAnsible実行サーバで実行します。
リスト 310 コマンド
cd /tmp/work
ls exastro-images.tar.gz
scp /tmp/work/exastro-images.tar.gz root@xx.xx.xx.xx:/tmp/work
Exastroのインストールを実行します。
リスト 311 コマンド
ls inventory.yaml
ls install-exastro.yaml
ansible-playbook -i inventory.yaml install-exastro.yaml -become --become-user=root  --private-key=~/.ssh/id_rsa
Exastroをインストールするサーバに接続し、永続ボリュームとpodが作成されていることを確認します。
リスト 312 コマンド
kubectl get pv
リスト 313 結果サンプル
NAME            CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                                  STORAGECLASS   REASON   AGE
pv-auditlog     10Gi       RWX            Retain           Bound       exastro/pvc-pf-auditlog                                        8m10s
pv-database     20Gi       RWO            Retain           Bound       exastro/pvc-mariadb                                            8m10s
pv-gitlab       20Gi       RWX            Retain           Available   exastro/pvc-gitlab                                             8m10s
pv-ita-common   10Gi       RWX            Retain           Bound       exastro/pvc-ita-global                                         8m10s
pv-mongo        20Gi       RWO            Retain           Bound       exastro/volume-mongo-storage-mongo-0                           8m10s
コマンドラインから以下のコマンドを入力して、インストール(サービス起動)が完了していることを確認します。
リスト 314 コマンド
# Pod の一覧を取得
kubectl get po --namespace exastro
正常に起動している場合は、ita-migration-xxxplatform-migration-xxxCompleted 、その他すべてが Running となります。
※正常に起動するまで数分かかる場合があります。

注釈

以下のPODについては READY が 0/1のままで、メンテナンスモードを解除後に READY は 1/1となります。
ita-by-conductor-regularly-xxxxxxxxxx-xxxxx
リスト 315 出力結果
NAME                                                      READY   STATUS      RESTARTS   AGE
ita-api-admin-dcf7c8768-wkwtx                             1/1     Running     0          3m34s
ita-api-ansible-execution-receiver-7776748868-kt7b2       1/1     Running     0          3m34s
ita-api-oase-receiver-75588c6cff-jbmqr                    1/1     Running     0          3m34s
ita-api-organization-645954959f-lpskv                     1/1     Running     0          3m34s
ita-by-ansible-execute-dbd8d7dbc-8jk76                    1/1     Running     0          3m34s
ita-by-ansible-legacy-role-vars-listup-6df9c5dfbf-qhqdd   1/1     Running     0          3m34s
ita-by-ansible-legacy-vars-listup-6565dcd75f-ngz92        1/1     Running     0          3m34s
ita-by-ansible-pioneer-vars-listup-56bcbd8fd5-6dqst       1/1     Running     0          3m34s
ita-by-ansible-towermaster-sync-765fbc4b67-td9cr          1/1     Running     0          3m34s
ita-by-cicd-for-iac-67f9f6bcb7-fdfk2                      1/1     Running     0          3m34s
ita-by-collector-bf8bddcf-9pl9g                           1/1     Running     0          3m33s
ita-by-conductor-regularly-5c7689985f-7rl4n               0/1     Running     0          3m33s
ita-by-conductor-synchronize-857d7cb585-cnpmq             1/1     Running     0          3m33s
ita-by-excel-export-import-6975d6d965-sdlhw               1/1     Running     0          3m33s
ita-by-hostgroup-split-7cbfcc6ff7-lvtxq                   1/1     Running     0          3m33s
ita-by-menu-create-785769547c-9jr4f                       1/1     Running     0          3m32s
ita-by-menu-export-import-bccfcbd67-t5zpz                 1/1     Running     0          3m32s
ita-by-oase-conclusion-6cb7897cb8-hnsrm                   1/1     Running     0          3m32s
ita-by-terraform-cli-execute-7dc5db9f75-646mf             1/1     Running     0          3m32s
ita-by-terraform-cli-vars-listup-85498994df-qv6dj         1/1     Running     0          3m31s
ita-by-terraform-cloud-ep-execute-bcc864cf9-4qqhx         1/1     Running     0          3m31s
ita-by-terraform-cloud-ep-vars-listup-c4fcd48dc-g55rl     1/1     Running     0          3m31s
ita-migration-2-6-1-suhp                                  0/1     Completed   0          24m
ita-web-server-5fcccd684f-lfxmm                           1/1     Running     0          3m31s
keycloak-0                                                1/1     Running     0          3m30s
mariadb-5945c44d44-djxkl                                  1/1     Running     0          3m31s
mongo-0                                                   1/1     Running     0          3m30s
platform-api-7fd9c9fb6d-njt7j                             1/1     Running     0          3m30s
platform-auth-84c55fbc64-tkb4f                            1/1     Running     0          3m30s
platform-job-555d7c76d5-skmzr                             1/1     Running     0          3m30s
platform-migration-1-10-0-oquu                            0/1     Completed   0          24m
platform-web-5594fcfb5d-kzgs6                             1/1     Running     0          3m30s

⑮Exastroインストール後の設定

Exastroをインストールしたサーバにて、暗号化キーのバックアップを取得します。
Exastro システムのパスワードや認証情報といった機密情報はすべて暗号化されています。
必ず、下記で取得した暗号化キーをバックアップして、適切に保管してください。

危険

暗号化キーを紛失した場合、バックアップデータからシステムを復旧した際にデータの復号ができなくなります。
リスト 316 コマンド(Exastro IT Automation ENCRYPT_KEY)
kubectl get secret ita-secret-ita-global --namespace exastro -o jsonpath='{.data.ENCRYPT_KEY}' | base64 -d
リスト 317 出力結果
JnIoXzJtPic2MXFqRl1yI1chMj8hWzQrNypmVn41Pk8=
リスト 318 コマンド(Exastro Platform ENCRYPT_KEY)
kubectl get secret platform-secret-pf-global --namespace exastro -o jsonpath='{.data.ENCRYPT_KEY}' | base64 -d
リスト 319 出力結果
bHFZe2VEVVM2PmFeQDMqNG4oZT4lTlglLjJJekxBTHE=
下記5つのコマンドを順に実行します。
リスト 320 コマンド
export NODE_SVC_PORT=$(kubectl get services platform-auth --namespace exastro -o jsonpath="{.spec.ports[0].nodePort}")
export NODE_MGT_PORT=$(kubectl get services platform-auth --namespace exastro -o jsonpath="{.spec.ports[1].nodePort}")
export NODE_IP=$(kubectl get nodes --namespace exastro -o jsonpath="{.items[0].status.addresses[0].address}")
# *************************
# * Administrator Console *
# *************************
echo http://$NODE_IP:$NODE_MGT_PORT/auth/

# *************************
# * Service Console       *
# *************************
echo http://$NODE_IP:$NODE_SVC_PORT
Administrator Console の URL にアクセスします。
下記は、実行例のため実際のコマンド実行結果に読み替えてください。
リスト 321 出力結果(例)
*************************
* Administrator Console *
*************************
http://172.16.20.xxx:30081/auth/

*************************
* Service Console       *
*************************
http://172.16.20.xxx:30080
表 47 接続確認用URL

管理コンソール

http://172.16.20.xxx:30081/auth/

管理コンソールへのログイン

以下の画面が表示された場合、Administration Console を選択して、ログイン画面を開きます。
administrator-console
ログイン ID とパスワードは システム管理者の作成 で登録した、KEYCLOAK_USER 及び KEYCLOAK_PASSWORD です。
login
Keycloak の管理画面が開きます。
login

オーガナイゼーションの作成

以下のIPアドレスを書き換え作成ページにアクセスし、オーガナイゼーションの作成を行います。
詳細については、 Organization (オーガナイゼーション) を参照してください。

ワークスペースの作成

以下のIPアドレスを書き換え作成ページにアクセスし、ワークスペースの作成を行います。
http://xx.xx.xx.xx:30080/オーガナイゼーションID/platform/workspaces
ワークスペースの作成については、Workspace (ワークスペース) を参照してください。

kubespray及びExastroのインストール時にエラーが発生した場合の対応

Exastroのインストールにはansibleを実行しますが、この手順でエラーが起きた場合は一度アンインストールし、永続ボリュームとkubernetesの削除を行った後、再インストールします。
以下の手順をExastroをインストールするサーバ(Kubernetesクラスター環境)にて実施します。
リスト 322 コマンド
#削除が完了するまでに数分かかることがあります
helm uninstall exastro --namespace exastro
#以下は5つの永続ボリュームを作成している場合の例です
kubectl delete pv pv-auditlog pv-gitlab  pv-mongo  pv-database pv-ita-common
#podが削除されたことを確認します
kubectl get pods -n exastro
#永続ボリュームが削除されたことを確認します
kibectl get pv
kubenetesの削除を行います。kubespyayのインストール時にエラーが発生した場合は以下の手順のみ実行します。
完了するまでに数十分程度の時間がかかります。(通信環境やサーバースペックによって状況は異なります。)
使用するreset.ymlはgit cloneで取得したkubesprayに含まれているため、作成する必要はありません。
完了後、Kubesparayを実行してKubernetesクラスター環境へKubernetesをインストールする手順から再実行します。
リスト 323 コマンド
cd /tmp/kubespray
ls reset.yml
ansible-playbook -i inventory/k8s_cluster/hosts.yml reset.yml -b -v
#以下のメッセージが表示されるため、yesを手入力します
Are you sure you want to reset cluster state? Type 'yes' to reset your cluster.: