Exastro on Kubernetes - Offline

目的

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

特徴

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

前提条件

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

警告

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

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

    アプリケーション

    バージョン

    Helm

    v3.9.x

    kubectl

    1.23

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

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

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

    種別

    バージョン

    Red Hat Enterprise Linux

    バージョン 8.9

  • デプロイ環境

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

    リソース種別

    要求リソース

    CPU

    2 Cores (3.0 GHz, x86_64)

    Memory

    4GB

    Storage (Container image size)

    10GB

    Kubernetes (Container image size)

    1.23 以上

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

    リソース種別

    要求リソース

    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をインストールします。
リスト 181 コマンド
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
ユーザーがグループに追加されていない場合は以下を実行します。
リスト 182 コマンド
usermod -aG docker ${USER}

cat /etc/group | grep docker

reboot
コンテナイメージを取得する際、dockerのバージョンによってはDocker Image Format v1 及び Docker Image manifestについてのエラーが起きることがあります。
環境変数を追加し、事前に対応します。
リスト 183 コマンド
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行を記載します。
リスト 184 コマンド
vi http-proxy.conf

[Service]
Environment="DOCKER_ENABLE_DEPRECATED_PULL_SCHEMA_1_IMAGE=1"

注釈

ファイルが存在する場合はEnvironment="DOCKER_ENABLE_DEPRECATED_PULL_SCHEMA_1_IMAGE=1"を追記します。
dockerを再起動し、追加した環境変数を確認します。
リスト 185 コマンド
systemctl daemon-reload

systemctl restart docker

systemctl show --property=Environment docker
その他に必要なパッケージをインストールします。
リスト 186 コマンド
dnf install -y git python39

pip3.9 install ruamel-yaml

pip3.9 install ansible

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

作業用ディレクトリを作成します。
リスト 187 コマンド
cd /tmp

mkdir work && cd work
helm コマンドがインストールされていない場合、以下の手順でインストールします。
詳細は helmの公式ドキュメント をご参照ください。
リスト 188 コマンド
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
Exastro システムの Helm リポジトリを登録後、リポジトリを取得します。
リスト 189 コマンド
helm repo add exastro https://exastro-suite.github.io/exastro-helm/ --namespace exastro

helm repo update

helm pull exastro/exastro

rm -f get_helm.sh
設定ファイルを取得し、以降の手順でパラメータを設定していきます。
リスト 190 コマンド
helm show values exastro/exastro > exastro.yaml
exastro.yaml
リスト 191 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-by-ansible-execute:
120    replicaCount: 1
121    image:
122      repository: "docker.io/exastro/exastro-it-automation-by-ansible-execute"
123      tag: ""
124      pullPolicy: IfNotPresent
125    extraEnv:
126      EXECUTE_INTERVAL: "3"
127      ANSIBLE_AGENT_IMAGE: "docker.io/exastro/exastro-it-automation-by-ansible-agent"
128      ANSIBLE_AGENT_IMAGE_TAG: ""
129      PLATFORM_API_HOST: "platform-api"
130      PLATFORM_API_PORT: "8000"
131    serviceAccount:
132      create: false
133      name: "ita-by-ansible-execute-sa"
134
135  ita-by-ansible-legacy-role-vars-listup:
136    replicaCount: 1
137    extraEnv:
138      EXECUTE_INTERVAL: "10"
139      PLATFORM_API_HOST: "platform-api"
140      PLATFORM_API_PORT: "8000"
141    image:
142      repository: "docker.io/exastro/exastro-it-automation-by-ansible-legacy-role-vars-listup"
143      tag: ""
144      pullPolicy: IfNotPresent
145
146  ita-by-ansible-legacy-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-vars-listup"
154      tag: ""
155      pullPolicy: IfNotPresent
156
157  ita-by-ansible-pioneer-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-pioneer-vars-listup"
165      tag: ""
166      pullPolicy: IfNotPresent
167
168  ita-by-ansible-towermaster-sync:
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-towermaster-sync"
176      tag: ""
177      pullPolicy: IfNotPresent
178
179  ita-by-cicd-for-iac:
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-cicd-for-iac"
187      tag: ""
188      pullPolicy: IfNotPresent
189
190  ita-by-collector:
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-collector"
198      tag: ""
199      pullPolicy: IfNotPresent
200
201  ita-by-conductor-regularly:
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-conductor-regularly"
209      tag: ""
210      pullPolicy: IfNotPresent
211
212  ita-by-conductor-synchronize:
213    replicaCount: 1
214    extraEnv:
215      EXECUTE_INTERVAL: "3"
216      PLATFORM_API_HOST: "platform-api"
217      PLATFORM_API_PORT: "8000"
218    image:
219      repository: "docker.io/exastro/exastro-it-automation-by-conductor-synchronize"
220      tag: ""
221      pullPolicy: IfNotPresent
222
223  ita-by-excel-export-import:
224    replicaCount: 1
225    extraEnv:
226      EXECUTE_INTERVAL: "10"
227      PLATFORM_API_HOST: "platform-api"
228      PLATFORM_API_PORT: "8000"
229    image:
230      repository: "docker.io/exastro/exastro-it-automation-by-excel-export-import"
231      tag: ""
232      pullPolicy: IfNotPresent
233
234  ita-by-execinstance-dataautoclean:
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-execinstance-dataautoclean"
242      tag: ""
243      pullPolicy: IfNotPresent
244
245  ita-by-file-autoclean:
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-file-autoclean"
253      tag: ""
254      pullPolicy: IfNotPresent
255
256  ita-by-hostgroup-split:
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-hostgroup-split"
264      tag: ""
265      pullPolicy: IfNotPresent
266
267  ita-by-menu-create:
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-menu-create"
275      tag: ""
276      pullPolicy: IfNotPresent
277
278  ita-by-menu-export-import:
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-export-import"
286      tag: ""
287      pullPolicy: IfNotPresent
288
289  ita-by-oase-conclusion:
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-oase-conclusion"
297      tag: ""
298      pullPolicy: IfNotPresent
299
300  ita-by-terraform-cli-execute:
301    replicaCount: 1
302    extraEnv:
303      EXECUTE_INTERVAL: "3"
304      PLATFORM_API_HOST: "platform-api"
305      PLATFORM_API_PORT: "8000"
306    image:
307      repository: "docker.io/exastro/exastro-it-automation-by-terraform-cli-execute"
308      tag: ""
309      pullPolicy: IfNotPresent
310
311  ita-by-terraform-cli-vars-listup:
312    replicaCount: 1
313    extraEnv:
314      EXECUTE_INTERVAL: "10"
315      PLATFORM_API_HOST: "platform-api"
316      PLATFORM_API_PORT: "8000"
317    image:
318      repository: "docker.io/exastro/exastro-it-automation-by-terraform-cli-vars-listup"
319      tag: ""
320      pullPolicy: IfNotPresent
321
322  ita-by-terraform-cloud-ep-execute:
323    replicaCount: 1
324    extraEnv:
325      EXECUTE_INTERVAL: "3"
326      PLATFORM_API_HOST: "platform-api"
327      PLATFORM_API_PORT: "8000"
328    image:
329      repository: "docker.io/exastro/exastro-it-automation-by-terraform-cloud-ep-execute"
330      tag: ""
331      pullPolicy: IfNotPresent
332
333  ita-by-terraform-cloud-ep-vars-listup:
334    replicaCount: 1
335    extraEnv:
336      EXECUTE_INTERVAL: "10"
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-vars-listup"
341      tag: ""
342      pullPolicy: IfNotPresent
343
344  ita-web-server:
345    replicaCount: 1
346    image:
347      repository: "docker.io/exastro/exastro-it-automation-web-server"
348      tag: ""
349      pullPolicy: IfNotPresent
350
351  ita-migration:
352    extraEnv:
353      PLATFORM_API_HOST: "platform-api"
354      PLATFORM_API_PORT: "8000"
355    image:
356      repository: "docker.io/exastro/exastro-it-automation-migration"
357      tag: ""
358      pullPolicy: IfNotPresent
359
360exastro-platform:
361  platform-api:
362    image:
363      repository: "docker.io/exastro/exastro-platform-api"
364      tag: ""
365
366  platform-auth:
367    extraEnv:
368      # Please set the URL to access
369      EXTERNAL_URL: ""
370      EXTERNAL_URL_MNG: ""
371    ingress:
372      enabled: true
373      hosts:
374        - host: exastro-suite.example.local
375          paths:
376            - path: /
377              pathType: Prefix
378              backend: "http"
379        - host: exastro-suite-mng.example.local
380          paths:
381            - path: /
382              pathType: Prefix
383              backend: "httpMng"
384    service:
385      type: ClusterIP
386      # http:
387      #   nodePort: 30080
388      # httpMng:
389      #   nodePort: 30081
390    image:
391      repository: "docker.io/exastro/exastro-platform-auth"
392      tag: ""
393
394  platform-job:
395    extraEnv:
396      # LOG_LEVEL: "INFO"
397      # SUB_PROCESS_TERMINATE_REQUEST_SECONDS: "1800"
398      # SUB_PROCESS_ACCEPTABLE: "2"
399      # SUB_PROCESS_MAX_JOBS: "10"
400      # SUB_PROCESS_WATCH_INTERVAL_SECONDS: "1.0"
401      # SUB_PROCESS_DB_RECONNECT_INTERVAL_SECONDS: "60"
402      # SUB_PROCESS_DB_HEALTH_CHECK_INTERVAL_SECONDS: "5"
403      # SUB_PROCESS_MAX_CANCEL_TIMEOUT: "10"
404      # JOB_STATUS_WATCH_INTERVAL_SECONDS: "1.0"
405      # JOB_CANCEL_TIMEOUT_SECONDS: "5.0"
406      # JOB_NOTIFICATION_TIMEOUT_SECONDS: "20"
407      # JOB_NOTIFICATION_TEAMS_CONNECTION_TIMEOUT: "3.0"
408      # JOB_NOTIFICATION_TEAMS_READ_TIMEOUT: "10.0"
409      # JOB_NOTIFICATION_SMTP_TIMEOUT: "10.0"
410      # JOB_NOTIFICATION_SMTPS_SSL_VERIFY_ENABLED: "TRUE"
411      # JOB_FORCE_UPDATE_STATUS_TIMEOUT_SECONDS: "60"
412      # JOB_FORCE_UPDATE_STATUS_INTERVAL_SECONDS: "180"
413      # JOB_FORCE_UPDATE_STATUS_PROGRASS_SECONDS: "600"
414    image:
415      repository: "docker.io/exastro/exastro-platform-job"
416      tag: ""
417
418  platform-migration:
419    image:
420      repository: "docker.io/exastro/exastro-platform-migration"
421      tag: ""
422
423  platform-web:
424    image:
425      repository: "docker.io/exastro/exastro-platform-web"
426      tag: ""
427
428  mariadb:
429    enabled: true
430    image:
431      repository: "docker.io/mariadb"
432      tag: "10.11"
433      pullPolicy: IfNotPresent
434    imagePullSecrets: []
435    persistence:
436      enabled: true
437      accessMode: ReadWriteOnce
438      size: 20Gi
439      storageClass: "-" # e.g.) azurefile or - (None)
440      matchLabels:
441        name: pv-database
442      matchExpressions:
443        # - {key: name, operator: In, values: [pv-database]}
444    dbSetup:
445      dbConfInfo:
446        name: mysql-server-conf-config
447        customCnf: |-
448          [mysqld]
449          character-set-server=utf8mb4
450          collation-server=utf8mb4_bin
451          secure_file_priv=/tmp
452          lower_case_table_names=1
453          [client]
454          default-character-set=utf8mb4
455    resources:
456      requests:
457        memory: "256Mi"
458        cpu: "1m"
459      limits:
460        memory: "2Gi"
461        cpu: "4"
462
463  keycloak:
464    enabled: true
465    image:
466      repository: "docker.io/exastro/keycloak"
467      tag: ""
468      pullPolicy: IfNotPresent
469    resources: {}
470      # requests:
471      #   memory: "256Mi"
472      #   cpu: "1m"
473      # limits:
474      #   memory: "2Gi"
475      #   cpu: "4"
476
477  gitlab:
478    enabled: false
479    extraEnv:
480      GITLAB_OMNIBUS_CONFIG: |
481        postgresql['shared_buffers'] = "2048MB"
482        postgresql['work_mem'] = "128MB"
483        postgresql['maintenance_work_mem'] = "128MB"
484        postgresql['effective_cache_size'] = "128MB"
485        postgresql['checkpoint_segments'] = 16
486        postgresql['checkpoint_timeout'] = "10min"
487        external_url 'http://gitlab:40080'
488        nginx['listen_port'] = 40080
489        gitlab_rails['initial_root_password'] = "${GITLAB_ROOT_PASSWORD:-}"
490        gitlab_rails['registry_enabled'] = false;
491        gitlab_rails['db_prepared_statements'] = false;
492        gitlab_rails['monitoring_whitelist'] = ['0.0.0.0/0']
493        # gitlab_rails['env'] = {'MALLOC_CONF' => 'dirty_decay_ms:1000,muzzy_decay_ms:1000'}
494        # puma['worker_processes'] = 0
495        prometheus_monitoring['enable'] = false
496        # sidekiq['max_concurrency'] = 10
497        # gitaly['env'] = {'MALLOC_CONF' => 'dirty_decay_ms:1000,muzzy_decay_ms:1000', 'GITALY_COMMAND_SPAWN_MAX_PARALLEL' => '2'}
498      GITLAB_POST_RECONFIGURE_SCRIPT: |
499        while ! curl -sfI -o /dev/null http://localhost:40080/-/readiness;
500        do
501        echo "GitLab service is not ready."
502        sleep 1
503        done
504        echo "GitLab service started normally"
505        curl -Ssf -H "PRIVATE-TOKEN: ${GITLAB_ROOT_TOKEN:-}" "http://localhost:40080/api/v4/version" || (
506          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!"
507        )
508        echo "GitLab post reconfigure script ended."
509    image:
510      repository: "docker.io/gitlab/gitlab-ce"
511      tag: "15.11.13-ce.0"
512      pullPolicy: IfNotPresent
513      # Overrides the image tag whose default is the chart appVersion.
514    persistence:
515      enabled: true
516      volumeName: pv-gitlab
517      accessMode: ReadWriteMany
518      size: 20Gi
519      storageClass: "-" # e.g.) azurefile or - (None)
520      matchLabels:
521        name: pv-gitlab
522      matchExpressions:
523        # - {key: name, operator: In, values: [pv-gitlab]}
524    resources: {}
525      # requests:
526      #   memory: "4Gi"
527      #   cpu: "4"
528      # limits:
529      #   memory: "8Gi"
530      #   cpu: "8"
531    service:
532      type: ClusterIP
533      name: gitlab
534      port: 40080
535      # nodePort: 30082
536
537  mongo:
538    enabled: true
539    image:
540      repository: "docker.io/mongo"
541      pullPolicy: IfNotPresent
542      # Overrides the image tag whose default is the chart appVersion.
543      tag: "6.0"
544    persistence:
545      enabled: true
546      accessMode: ReadWriteOnce
547      size: 20Gi
548      storageClass: "-" # e.g.) azurefile, local-path or - (None)
549      matchLabels:
550        # release: "pv-mongo"
551      matchExpressions:
552        # - {key: name, operator: In, values: [pv-mongo]}
553    dbSetup:
554      dbConfInfo:
555        name: mongo-server-conf-config
556        customCnf: |
557          systemLog:
558            verbosity: 0
559            # destination: file
560            # path: /root/logs/mongod.log
561            timeStampFormat: iso8601-utc
562          # storage:
563          #   directoryPerDB: true
564          #   dbPath: /root/data
565          #   engine: wiredTiger
566          #   wiredTiger:
567          #     engineConfig:
568          #       cacheSizeGB: 1
569          #   journal:
570          #     enabled: true
571          # processManagement:
572          #   fork: true
573          # net:
574          #   port: 27017
575          #   bindIp: 0.0.0.0
576          # security:
577          #   authorization: enabled
578    resources: {}
579      # requests:
580      #   memory: "4Gi"
581      #   cpu: "4"
582      # limits:
583      #   memory: "8Gi"
584      #   cpu: "4"
585    affinity:
586      podAntiAffinity:
587        requiredDuringSchedulingIgnoredDuringExecution:
588        - labelSelector:
589            matchExpressions:
590            - key: name
591              operator: In
592              values:
593              - mongo
594          topologyKey: kubernetes.io/hostname

サービス公開の設定

exastro.yaml を編集しサービス公開に必要なパラメータを設定していきます。
ここではNodePortを使用する方法を例に記載しています。
EXTERNAL_URLとEXTERNAL_URL_MNGはExastroをインストールするサーバのIPアドレスを指定します。
リスト 192 コマンド
EXTERNAL_URL: "http://xx.xx.xx.xx:30080"
EXTERNAL_URL_MNG: "http://xx.xx.xx.xx:30081"
リスト 193 exastro.yaml
--- /home/runner/work/exastro-it-automation-docs-dev/exastro-it-automation-docs-dev/workspace/src/ja/2.4/installation/literal_includes/exastro.yaml
+++ /home/runner/work/exastro-it-automation-docs-dev/exastro-it-automation-docs-dev/workspace/src/ja/2.4/installation/literal_includes/exastro_nodeport_setting.yaml
@@ -366,10 +366,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:
@@ -382,11 +382,11 @@
               pathType: Prefix
               backend: "httpMng"
     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: ""
@@ -593,4 +593,3 @@
               - mongo
           topologyKey: kubernetes.io/hostname
 
-

データベース連携

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

警告

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

警告

認証情報などはすべて平文で問題ありません。(Base64エンコードは不要)
  1. データベースコンテナの設定
    データベースコンテナの root パスワードを設定します。
    また、データベースのデータを永続化するために利用するストレージを指定します。
    表 43 共通設定 (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

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

    可 (データ永続化時)

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

    必須

    任意の文字列

    リスト 195 exastro.yaml
    --- /home/runner/work/exastro-it-automation-docs-dev/exastro-it-automation-docs-dev/workspace/src/ja/2.4/installation/literal_includes/exastro.yaml
    +++ /home/runner/work/exastro-it-automation-docs-dev/exastro-it-automation-docs-dev/workspace/src/ja/2.4/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:
    @@ -593,4 +593,3 @@
                   - mongo
               topologyKey: kubernetes.io/hostname
     
    -
    
  3. Exastro 共通基盤用データベースの設定
    Exastro 共通基盤のコンテナがデータベースに接続できるようにするために、「1. データベースコンテナの設定」で作成した root アカウントのパスワードを設定します。
    表 45 共通設定 (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ユーザのパスワード(エンコードなし)

    必須

    任意の文字列

    リスト 196 exastro.yaml
    --- /home/runner/work/exastro-it-automation-docs-dev/exastro-it-automation-docs-dev/workspace/src/ja/2.4/installation/literal_includes/exastro.yaml
    +++ /home/runner/work/exastro-it-automation-docs-dev/exastro-it-automation-docs-dev/workspace/src/ja/2.4/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:
    @@ -593,4 +593,3 @@
                   - mongo
               topologyKey: kubernetes.io/hostname
     
    -
    
  4. OASE用データベースの設定

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

    警告

    MongoDBのユーザやデータベースを「自動払い出し( オーガナイゼーション作成 )」で利用する場合は、MONGO_HOST の指定が必要です。
    MONGO_ADMIN_USER がユーザやデータベースの作成・削除が可能(rootロールまたは同等の権限)である必要があります。
    上記の権限がない場合は「Python接続文字列( オーガナイゼーション作成 )」の指定が必要です。
    また、自動払い出しを利用しない場合は MONGO_HOST の指定は不要です。
    表 46 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.DB_ADMIN_PASSWORD

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

    必須

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

    リスト 197 exastro.yaml
    --- /home/runner/work/exastro-it-automation-docs-dev/exastro-it-automation-docs-dev/workspace/src/ja/2.4/installation/literal_includes/exastro.yaml
    +++ /home/runner/work/exastro-it-automation-docs-dev/exastro-it-automation-docs-dev/workspace/src/ja/2.4/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:
    
  5. MongoDBコンテナの設定

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

    警告

    MongoDBコンテナを利用しない場合、exastro-platform.mongo.enabled をfalseに指定して下さい。
    表 47 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"

    リスト 198 exastro.yaml
    --- /home/runner/work/exastro-it-automation-docs-dev/exastro-it-automation-docs-dev/workspace/src/ja/2.4/installation/literal_includes/exastro.yaml
    +++ /home/runner/work/exastro-it-automation-docs-dev/exastro-it-automation-docs-dev/workspace/src/ja/2.4/installation/literal_includes/exastro_mongodb_hostpath.yaml
    @@ -544,7 +544,7 @@
         persistence:
           enabled: true
           accessMode: ReadWriteOnce
    -      size: 20Gi
    +      size: XXGi
           storageClass: "-" # e.g.) azurefile, local-path or - (None)
           matchLabels:
             # release: "pv-mongo"
    

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

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

設定例

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

  • Exastro 共通基盤

  • Keycloak

警告

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

    必須

    任意の文字列

    リスト 199 exastro.yaml
    --- /home/runner/work/exastro-it-automation-docs-dev/exastro-it-automation-docs-dev/workspace/src/ja/2.4/installation/literal_includes/exastro.yaml
    +++ /home/runner/work/exastro-it-automation-docs-dev/exastro-it-automation-docs-dev/workspace/src/ja/2.4/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"
    @@ -593,4 +593,3 @@
                   - mongo
               topologyKey: kubernetes.io/hostname
     
    -
    
  2. Keycloak 用データベースの設定
    アプリケーションが利用・作成する DB ユーザーを設定します。
    表 49 共通設定 (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 が使用するデータベースユーザのパスワード(エンコードなし)

    必須

    任意の文字列

    リスト 200 exastro.yaml
    --- /home/runner/work/exastro-it-automation-docs-dev/exastro-it-automation-docs-dev/workspace/src/ja/2.4/installation/literal_includes/exastro.yaml
    +++ /home/runner/work/exastro-it-automation-docs-dev/exastro-it-automation-docs-dev/workspace/src/ja/2.4/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"
    @@ -593,4 +593,3 @@
                   - mongo
               topologyKey: kubernetes.io/hostname
     
    -
    
  3. Exastro 共通基盤用データベースの設定
    アプリケーションが利用・作成する DB ユーザーを設定します。
    表 50 共通設定 (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ユーザのパスワード(エンコードなし)

    必須

    任意の文字列

    リスト 201 exastro.yaml
    --- /home/runner/work/exastro-it-automation-docs-dev/exastro-it-automation-docs-dev/workspace/src/ja/2.4/installation/literal_includes/exastro.yaml
    +++ /home/runner/work/exastro-it-automation-docs-dev/exastro-it-automation-docs-dev/workspace/src/ja/2.4/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"
    @@ -593,4 +593,3 @@
                   - mongo
               topologyKey: kubernetes.io/hostname
     
    -
    

GitLab 連携設定

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

警告

GitLab 連携を利用しない場合は、下記のように設定してください。
GITLAB_HOST: ""
表 51 共通設定 (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 連携の設定例を記載しています。
リスト 202 exastro.yaml
--- /home/runner/work/exastro-it-automation-docs-dev/exastro-it-automation-docs-dev/workspace/src/ja/2.4/installation/literal_includes/exastro.yaml
+++ /home/runner/work/exastro-it-automation-docs-dev/exastro-it-automation-docs-dev/workspace/src/ja/2.4/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"
-    secret:
-      GITLAB_ROOT_PASSWORD: "Ch@ngeMeGL"
-      GITLAB_ROOT_TOKEN: "change-this-token"
+      GITLAB_PROTOCOL: "接続プロトコル http or https"
+      GITLAB_HOST: "your.gitlab.endpoint" # 起動する Gitalb コンテナの公開時のURL。AAPから接続できる必要がある。
+      GITLAB_PORT: "30082"                # 起動する Gitalb コンテナの公開時のポート番号
+    secret:
+      GITLAB_ROOT_PASSWORD: "GitLabのRoot権限をユーザーパスワード"
+      GITLAB_ROOT_TOKEN: "GitLabのRoot権限を持ったトークン"
   mongoDefinition:
     config:
       MONGO_PROTOCOL: "http"
@@ -593,4 +593,3 @@
               - mongo
           topologyKey: kubernetes.io/hostname
 
-

システム管理者の作成

セットアップ時に システム管理者の初期ユーザーを作成するための情報を設定します。
表 52 共通設定 (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 が使用するデータベースユーザのパスワード(エンコードなし)

必須

任意の文字列

リスト 203 exastro.yaml
--- /home/runner/work/exastro-it-automation-docs-dev/exastro-it-automation-docs-dev/workspace/src/ja/2.4/installation/literal_includes/exastro.yaml
+++ /home/runner/work/exastro-it-automation-docs-dev/exastro-it-automation-docs-dev/workspace/src/ja/2.4/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:
@@ -593,4 +593,3 @@
               - mongo
           topologyKey: kubernetes.io/hostname
 
-

永続ボリュームの設定

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

注釈

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

Tip

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

危険

データの永続化自体は可能ですが、コンピュートノードの増減や変更によりデータが消えてしまう可能性があるため本番環境では使用しないでください。
また、Azure で構築した AKS クラスタは、クラスタを停止すると AKS クラスターの Node が解放されるため、保存していた情報は消えてしまいます。そのため、Node が停止しないように注意が必要となります。
hostPath を使用した例を記載します。
リスト 204 コマンド
vi pv-database.yaml
リスト 205 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
リスト 206 コマンド
vi pv-ita-common.yaml
リスト 207 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
リスト 208 コマンド
vi pv-mongo.yaml
リスト 209 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
リスト 210 コマンド
vi pv-gitlab.yaml
リスト 211 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に以下の設定が必要となります
リスト 212 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)
リスト 213 コマンド
vi pv-pf-auditlog.yaml
リスト 214 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を取得します。
リスト 215 コマンド
cd /tmp

git clone https://github.com/kubernetes-sigs/kubespray.git -b release-2.23
kubernetesのコンテナイメージ一覧を取得します。
リスト 216 コマンド
cd kubespray/contrib/offline

./generate_list.sh

cp -ip /tmp/kubespray/contrib/offline/temp/images.list /tmp/work/k8s-images.list
kubernetesのコンテナイメージを取得するシェルスクリプト作成します。
リスト 217 コマンド
cd /tmp/work

vi k8s-image-save.sh
リスト 218 下記のコードをコピー&ペーストします
#!/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のコンテナイメージを取得します。
リスト 219 コマンド
chmod a+x k8s-image-save.sh

./k8s-image-save.sh

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

Ansible実行サーバにインストールするパッケージファイルをダウンロードします。
--releasever=x.xはAnsibleを実行するサーバのOSのバージョンを指定します。
インストール先のディレクトリは/tmp/pkg-repo 、/tmp/pip_whl とします。
リスト 220 コマンド
cd /tmp/kubespray

dnf install -y --downloadonly --downloaddir=/tmp/pkg-repo --installroot=/tmp/pkg-installroot --releasever=x.x docker-ce python39 nginx gcc httpd systemd-devel keepalived

dnf install -y createrepo

createrepo /tmp/pkg-repo

pip3.9 download -d /tmp/pip_whl -r requirements.txt
kubernetes内でインストールするパッケージファイルをダウンロードします。
--releasever=x.xはExastroをインストールするサーバのOSのバージョンを指定します。
インストール先のディレクトリは /tmp/k8s-repoとします。
リスト 221 コマンド
dnf install -y --downloadonly --downloaddir=/tmp/k8s-repo --installroot=/tmp/k8s-installroot --releasever=x.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-libevent keyutils nfs-utils libev rpcbind container-selinux iproute
リスト 222 コマンド
createrepo /tmp/k8s-repo
manage-offline-files.shは「 NGINX_PORT=8080 」 及び ファイル最下部の「 sudo "${runtime}" container inspect nginx >/dev/null 2>&1 」以降の記載を削除します。
リスト 223 コマンド
cd contrib/offline

cp manage-offline-files.sh manage-offline-files.sh.bk

vi manage-offline-files.sh
リスト 224 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を実行します。
リスト 225 コマンド
./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つは同じディレクトリに作成する必要があります。
シェルスクリプト内の「["x.x.x"]="x.x.x"」にはExastro IT Automation App VersionとExastro Platform App Versionをそれぞれ記載します。
Component version を参照し、最新のバージョンに書き換えてください。
リスト 226 コマンド
cd /tmp/work

vi exastro-images.list
リスト 227 下記のコードをコピー&ペーストします
docker.io/exastro/exastro-it-automation-api-admin:#__ITA_VERSION__#
docker.io/exastro/exastro-it-automation-api-organization:#__ITA_VERSION__#
docker.io/exastro/exastro-it-automation-api-oase-receiver:#__ITA_VERSION__#
docker.io/exastro/exastro-it-automation-by-ansible-execute:#__ITA_VERSION__#
docker.io/exastro/exastro-it-automation-by-ansible-agent:#__ITA_VERSION__#
docker.io/exastro/exastro-it-automation-by-ansible-legacy-role-vars-listup:#__ITA_VERSION__#
docker.io/exastro/exastro-it-automation-by-ansible-legacy-vars-listup:#__ITA_VERSION__#
docker.io/exastro/exastro-it-automation-by-ansible-pioneer-vars-listup:#__ITA_VERSION__#
docker.io/exastro/exastro-it-automation-by-ansible-towermaster-sync:#__ITA_VERSION__#
docker.io/exastro/exastro-it-automation-by-cicd-for-iac:#__ITA_VERSION__#
docker.io/exastro/exastro-it-automation-by-collector:#__ITA_VERSION__#
docker.io/exastro/exastro-it-automation-by-conductor-regularly:#__ITA_VERSION__#
docker.io/exastro/exastro-it-automation-by-conductor-synchronize:#__ITA_VERSION__#
docker.io/exastro/exastro-it-automation-by-excel-export-import:#__ITA_VERSION__#
docker.io/exastro/exastro-it-automation-by-execinstance-dataautoclean:#__ITA_VERSION__#
docker.io/exastro/exastro-it-automation-by-file-autoclean:#__ITA_VERSION__#
docker.io/exastro/exastro-it-automation-by-hostgroup-split:#__ITA_VERSION__#
docker.io/exastro/exastro-it-automation-by-menu-create:#__ITA_VERSION__#
docker.io/exastro/exastro-it-automation-by-menu-export-import:#__ITA_VERSION__#
docker.io/exastro/exastro-it-automation-by-oase-conclusion:#__ITA_VERSION__#
docker.io/exastro/exastro-it-automation-by-terraform-cli-execute:#__ITA_VERSION__#
docker.io/exastro/exastro-it-automation-by-terraform-cli-vars-listup:#__ITA_VERSION__#
docker.io/exastro/exastro-it-automation-by-terraform-cloud-ep-execute:#__ITA_VERSION__#
docker.io/exastro/exastro-it-automation-by-terraform-cloud-ep-vars-listup:#__ITA_VERSION__#
docker.io/exastro/exastro-it-automation-web-server:#__ITA_VERSION__#
docker.io/exastro/exastro-it-automation-migration:#__ITA_VERSION__#
docker.io/exastro/exastro-platform-api:#__PF_VERSION__#
docker.io/exastro/exastro-platform-auth:#__PF_VERSION__#
docker.io/exastro/exastro-platform-job:#__PF_VERSION__#
docker.io/exastro/exastro-platform-migration:#__PF_VERSION__#
docker.io/exastro/exastro-platform-web:#__PF_VERSION__#
docker.io/exastro/keycloak:#__PF_VERSION__#
docker.io/gitlab/gitlab-ce:15.11.13-ce.0
docker.io/mongo:6.0
docker.io/mongo:6.0.7
docker.io/mariadb:10.9
docker.io/mariadb:10.11
busybox:latest
registry.access.redhat.com/ubi8/ubi-init:latest
コンテナイメージを取得するシェルスクリプト作成します。
リスト 228 コマンド
vi exastro-image-save.sh
リスト 229 下記のコードをコピー&ペーストし、x.x.xにはバージョンを指定します
#!/bin/bash

ITA_VERSION=$1
declare -A PF_VERSION=(
  ["x.x.x"]="x.x.x"
)
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} | sed -e "s/#__ITA_VERSION__#/${ITA_VERSION}/" -e "s/#__PF_VERSION__#/${PF_VERSION[$ITA_VERSION]}/")
  image_name=$(basename ${image_fullname} | sed -e "s/:/-/")
  if [ ! -e ${ITA_VERSION}/${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のバージョンを指定します。
完了するまでに数十分程度の時間がかかります。(通信環境やサーバースペックによって状況は異なります。)
リスト 230 コマンド
chmod a+x exastro-image-save.sh

sh exastro-image-save.sh x.x.x

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

シェルスクリプトを作成します。
ITA_VERSIONにはExastro IT Automation App Versionを記載します。
リスト 231 コマンド
cd /tmp/work

vi exastro-image-load.sh
リスト 232 下記のコードをコピー&ペーストし、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アドレスを指定します。
リスト 233 コマンド
vi k8s-image-push.sh
リスト 234 下記のコードをコピー&ペーストします
#!/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アドレスを指定します。
リスト 235 コマンド
vi k8s-image-load.sh
リスト 236 下記のコードをコピー&ペーストします
#!/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の実行先となるサーバを指定します。
リスト 237 コマンド
vi inventory.yaml
リスト 238 下記のコードをコピー&ペーストし、ホスト名を書き換えます
[ControlMachine]
Ansible実行サーバのホスト名

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

[K8S:children]
k8s-node1
パッケージファイルをインストールするyamlファイルを作成します。
リスト 239 コマンド
vi preparation.yaml
以下の内容をコピー&ペーストします。
preparation.yaml
リスト 240 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のバージョンは手順②で取得したバージョンに書き換えます。
また、永続ボリュームの設定ファイルは使用状況に合わせて適宜削除します。
リスト 241 コマンド
vi install-exastro.yaml
install-exastro.yaml
リスト 242 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
永続ボリュームを作成するシェルスクリプトです。
永続ボリュームの設定ファイルは使用状況に合わせて適宜削除します。
リスト 243 コマンド
vi apply-pv.sh
リスト 244 下記のコードをコピー&ペーストします
#!/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
パッケージファイルをインストールするシェルスクリプトを作成します。
リスト 245 コマンド
vi k8s-pkg-install.sh
リスト 246 下記のコードをコピー&ペーストします
#!/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はバージョンを指定します。
リスト 247 コマンド
cd /tmp/work

tar -zcvf exastro-image.tar.gz x.x.x

tar -zcvf k8s-images.tar.gz k8s-images
シェルスクリプトとyamlファイルを圧縮します。
永続ボリュームの設定ファイルは作成したファイルのみ指定します。
リスト 248 コマンド
tar -zcvf resource.tar.gz k8s-image-push.sh k8s-image-load.sh k8s-images.list exastro.yaml inventory.yaml install-exastro.yaml preparation.yaml apply-pv.sh exastro-image-load.sh k8s-pkg-install.sh pv-database.yaml pv-ita-common.yaml pv-gitlab.yaml pv-mongo.yaml pv-pf-auditlog.yaml
リスト 249 コマンド
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実行サーバ)に転送します。
Ansible実行サーバの/tmpに/workディレクトリを作成し、以下の資材を配置します。
  • exastro-image.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実行サーバで、取得した資材を展開します。
リスト 250 コマンド
cd /tmp

tar xzvf kubespray.tar.gz

tar xzvf pip-whl.tar.gz

tar xzvf pkg-repo.tar.gz

cd /tmp/work

tar xzvf offline-files.tar.gz

tar xzvf k8s-images.tar.gz

tar xzvf /tmp/work/resource.tar.gz -C /tmp/work

⑧Ansible実行サーバでの準備

リスト 251 コマンド
cd /tmp

vi pkg-install.sh
リスト 252 下記のコードをコピー&ペーストします
#!/bin/bash

#ローカルリポジトリを作成
sudo 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 "python39")

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
パッケージファイルをインストールします。
リスト 253 コマンド
chmod a+x pkg-install.sh

./pkg-install.sh
エラーメッセージが表示された場合は、表示されているmoduleを検索し全てインストールします。
リスト 254 メッセージ例
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
リスト 255 表示された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グループにユーザを追加します。
リスト 256 コマンド
systemctl enable --now docker

cat /etc/group | grep docker

usermod -aG docker ${USER}

cat /etc/group | grep docker

reboot
ExastroをインストールするサーバのIPアドレスとホスト名をHOSTSに登録します。
※本説明では、1台のKubernetesクラスターを構築する例となっております。
リスト 257 コマンド
vi /etc/hosts
リスト 258 hosts
xx.xx.xx.xx xxx.cluster.local xxx

#サーバのIPアドレス:xx.xx.xx.xx
#サーバホスト名:xxx.cluster.local xxx
SSH Keyの作成を作成します。
.sshディレクトリにid_rsa.pubが存在する場合は再度作成する必要はありません。
リスト 259 コマンド
cd ~ && ls -al

#.sshディレクトリが存在する場合は作成不要
mkdir .ssh

cd .ssh

#指定がない場合は全てEnterを押す
ssh-keygen -t rsa
実行しているサーバー自身 及び HOSTSに登録したサーバに対して鍵交換を実施します。
実行後はssh接続ができることを確認します。
リスト 260 コマンド
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をインストールするサーバすべてで以下の手順を実施します。
リスト 261 コマンド
vi /etc/sysctl.conf
/etc/sysctl.confに以下の1行を追記します。
リスト 262 追記する1行
net.ipv4.ip_forward=1
リスト 263 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
ファイアーウォールを無効化します。
リスト 264 コマンド
systemctl disable firewalld

systemctl stop firewalld

systemctl status firewalld
SELinuxを無効化します。Disabled となっている場合は実施不要です。
リスト 265 コマンド
getenforce
リスト 266 コマンド
vi /etc/selinux/config
リスト 267 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更新後、システムを再起動します。
リスト 268 コマンド
reboot
Disabled となっていることを確認します。
リスト 269 コマンド
getenforce

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

Ansible実行サーバとして使用するサーバでdockerの例外レジストリを定義します。
/etc/dockerディレクトリにdaemon.jsonが存在しない場合は新しく作成します。
リスト 270 コマンド
vi  /etc/docker/daemon.json
以下の1行を追記します。xx.xx.xx.xxには現在作業しているサーバ(Ansible実行サーバ)のIPアドレスを指定します。
リスト 271 daemon.json
{ "insecure-registries":[ "xx.xx.xx.xx:6000" ] }
設定ファイルの再読み込みとdockerの再起動を行います。
リスト 272 コマンド
systemctl daemon-reload

systemctl start docker
シェルスクリプトを実行し、kubernetesのコンテナイメージを読み込みます。
完了するまでに数十分程度の時間がかかります。(通信環境やサーバースペックによって状況は異なります。)
リスト 273 コマンド
cd /tmp/work

ls k8s-image-load.sh

chmod a+x k8s-image-load.sh

./k8s-image-load.sh
docker registryを起動します。
xx.xx.xx.xxには現在作業しているサーバ(Ansible実行サーバ)のIPアドレスを指定します。
リスト 274 コマンド
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します。
リスト 275 コマンド
ls k8s-image-push.sh

chmod a+x k8s-image-push.sh

./k8s-image-push.sh

注釈

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

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

自己署名証明書用のディレクトリを作成します。
以下の手順をAnsible実行サーバで実施します。
リスト 276 コマンド
mkdir /etc/nginx/ssl
暗号鍵を作成します
リスト 277 コマンド
openssl genrsa -out /etc/nginx/ssl/server.key 2048
自己署名証明書リクエストを作成します。
Country NameはJP、State or Province NameはTokyo、それ以外はEnterキーを押します。
リスト 278 コマンド
openssl req -new -key /etc/nginx/ssl/server.key -out /etc/nginx/ssl/server.csr
自己署名証明書を作成します。
リスト 279 コマンド
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 )が作成されていることを確認します。
リスト 280 コマンド
ls /etc/nginx/ssl
Nginxの設定をします。
リスト 281 コマンド
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bk

vi /etc/nginx/nginx.conf
バックアップを取得した後、nginx.confに以下のブロックを追記します。
xx.xx.xx.xxには現在作業しているサーバ(Ansible実行サーバ)のIPアドレスを指定します。
リスト 282 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;
    }
}
リスト 283 コマンド
systemctl stop firewalld

systemctl start nginx
ブラウザでコンテナイメージが表示されることを確認します(イメージ名にはIPアドレスやタグは表示されません)。
xx.xx.xx.xxには現在作業しているサーバ(Ansible実行サーバ)のIPアドレスを指定します。
接続がプライベートではありませんと表示されるため、詳細設定をクリックして先に進みます。
リスト 284 コマンド
https://xx.xx.xx.xx:81/v2/_catalog

注釈

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

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

Ansibleを実行してパッケージファイルをインストールするため、hosts.ymlを以下の手順で作成します。
以下の手順をAnsible実行サーバで実施します。
リスト 286 コマンド
cd /tmp/kubespray
サンプルのinventoryファイルをコピーします。
リスト 287 コマンド
cp -rfp inventory/sample inventory/k8s_cluster
Kubernetesクラスター環境のIPの変数を設定します。
xx.xx.xx.xxにはExastroをインストールするサーバのIPアドレスを指定します。
リスト 288 コマンド
declare -a IPS=(xx.xx.xx.xx)
hosts.ymlを作成します。
リスト 289 コマンド
CONFIG_FILE=inventory/k8s_cluster/hosts.yml python3.9 contrib/inventory_builder/inventory.py ${IPS[@]}
作成された hosts.yml のnode1を構成したいKubernetesクラスターのホスト名に書き換えます。
以下の記載例はKubernetesクラスターを1台で構成した例です。
本説明では、各Kubernetesクラスターがコントロールプレーン、ワーカーノードを兼ねた設定で作成するため、全てのnode1に同じホスト名を指定します。
リスト 290 コマンド
cd /tmp/kubespray/inventory/k8s_cluster

vi hosts.yml
リスト 291 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をインストールするサーバにパッケージファイルをインストールします。
リスト 292 コマンド
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実行サーバで実施します。
リスト 293 コマンド
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を以下のように書き換えます。
リスト 294 コマンド
cd /tmp/kubespray/inventory/k8s_cluster/group_vars/all

cp all.yml all.yml.bk

vi all.yml
リスト 295 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アドレスを指定します。
リスト 296 コマンド
cp offline.yml offline.yml.bk

vi offline.yml
リスト 297 追記する行
containerd_registries_mirrors:
  - prefix: "{{ registry_host }}"
    mirrors:
      - host: "{{ registry_host }}"
        capabilities: ["pull", "resolve"]
        skip_verify: true
offline.yml
リスト 298 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をインストールします。
完了するまでに数十分程度の時間がかかります。(通信環境やサーバースペックによって状況は異なります。)
リスト 299 コマンド
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が作成されていることを確認します。
リスト 300 コマンド
kubectl get nodes
リスト 301 結果サンプル
NAME                                    STATUS   ROLES           AGE     VERSION
ITAをインストールするサーバのホスト名   Ready    control-plane   5m10s   v1.27.10

⑭Exastroのインストール

ExastroをインストールするサーバにExastroのコンテナイメージを転送します。
xx.xx.xx.xxにはExastroをインストールするサーバ(Kubernetesクラスター環境)のIPアドレスを指定します。
完了するまでに数十分程度の時間がかかります。(通信環境やサーバースペックによって状況は異なります。)
以下の手順をAnsible実行サーバで実行します。
リスト 302 コマンド
cd /tmp/work

ls exastro-image.tar.gz

scp /tmp/work/exastro-image.tar.gz root@xx.xx.xx.xx:/tmp/work
Exastroのインストールを実行します。
リスト 303 コマンド
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が作成されていることを確認します。
リスト 304 コマンド
kubectl get pv
リスト 305 結果サンプル
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
コマンドラインから以下のコマンドを入力して、インストール(サービス起動)が完了していることを確認します。
リスト 306 コマンド
# Pod の一覧を取得
kubectl get po --namespace exastro
正常に起動している場合は、ita-migration-xxxplatform-migration-xxxCompleted 、その他すべてが Running となります。
※正常に起動するまで数分かかる場合があります。
リスト 307 出力結果
NAME                                                      READY   STATUS      RESTARTS   AGE
ita-api-admin-6b8567596d-rgjms                            1/1     Running     0          7h40m
ita-api-oase-receiver-6b74bdff6-zmcrw                     1/1     Running     0          7h40m
ita-api-organization-559d7d8f89-ptphh                     1/1     Running     0          7h40m
ita-by-ansible-execute-5dc444c999-w6gmr                   1/1     Running     0          7h40m
ita-by-ansible-legacy-role-vars-listup-6d8f98895f-bvjgn   1/1     Running     0          7h40m
ita-by-ansible-legacy-vars-listup-6ccd997cf-hvkzq         1/1     Running     0          7h40m
ita-by-ansible-pioneer-vars-listup-6cfcfd4479-8bqst       1/1     Running     0          7h40m
ita-by-ansible-towermaster-sync-6759486f8f-wrbbp          1/1     Running     0          7h40m
ita-by-cicd-for-iac-7b75cc56f5-rrrvg                      1/1     Running     0          7h40m
ita-by-collector-7748d54f59-8j5r2                         1/1     Running     0          7h40m
ita-by-conductor-regularly-779ff79775-xnt29               1/1     Running     0          7h40m
ita-by-conductor-synchronize-5d5485479-5df54              1/1     Running     0          7h40m
ita-by-excel-export-import-6f84f97dcf-hlm4h               1/1     Running     0          7h40m
ita-by-hostgroup-split-59b698f479-cxggd                   1/1     Running     0          7h40m
ita-by-menu-create-796bdc9c75-l79zq                       1/1     Running     0          7h40m
ita-by-menu-export-import-849d796bb5-5mpw2                1/1     Running     0          7h40m
ita-by-oase-conclusion-b484595d7-kssv4                    1/1     Running     0          7h40m
ita-by-terraform-cli-execute-769d874d7-sknn6              1/1     Running     0          7h40m
ita-by-terraform-cli-vars-listup-7f589cdddc-g5xz6         1/1     Running     0          7h40m
ita-by-terraform-cloud-ep-execute-7f8b6d87cc-kfmfv        1/1     Running     0          7h40m
ita-by-terraform-cloud-ep-vars-listup-6cccbd4899-6frcn    1/1     Running     0          7h40m
ita-migration-1-3-6-lydz                                  0/1     Completed   0          7h40m
ita-web-server-b4cd4cdf8-wkx78                            1/1     Running     0          7h40m
keycloak-0                                                1/1     Running     0          7h40m
mariadb-778786f7d-ss4cq                                   1/1     Running     0          7h40m
mongo-0                                                   1/1     Running     0          7h40m
platform-api-ffb78f578-svd5t                              1/1     Running     0          7h40m
platform-auth-75895d784-9hhxw                             1/1     Running     0          7h40m
platform-job-864c47d4f-8vvvq                              1/1     Running     0          7h40m
platform-migration-1-8-0-rjwr                             0/1     Completed   0          7h40m
platform-web-6644884657-dmwp6                             1/1     Running     0          7h40m

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

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

危険

暗号化キーを紛失した場合、バックアップデータからシステムを復旧した際にデータの復号ができなくなります。
リスト 308 コマンド
# Exastro IT Automation ENCRYPT_KEY
kubectl get secret ita-secret-ita-global --namespace exastro -o jsonpath='{.data.ENCRYPT_KEY}' | base64 -d
リスト 309 出力結果
JnIoXzJtPic2MXFqRl1yI1chMj8hWzQrNypmVn41Pk8=
リスト 310 コマンド
# Exastro Platform ENCRYPT_KEY
kubectl get secret platform-secret-pf-global --namespace exastro -o jsonpath='{.data.ENCRYPT_KEY}' | base64 -d
リスト 311 出力結果
bHFZe2VEVVM2PmFeQDMqNG4oZT4lTlglLjJJekxBTHE=
下記5つのコマンドを順に実行します。
リスト 312 コマンド
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 にアクセスします。
下記は、実行例のため実際のコマンド実行結果に読み替えてください。
リスト 313 出力結果(例)
*************************
* Administrator Console *
*************************
http://172.16.20.xxx:30081/auth/

*************************
* Service Console       *
*************************
http://172.16.20.xxx:30080
表 53 接続確認用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クラスター環境)にて実施します。
リスト 314 コマンド
#削除が完了するまでに数分かかることがあります
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をインストールする手順から再実行します。
リスト 315 コマンド
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.: