Exastro × Ansibleで管理運用する
Kubernetesマニフェスト

アジェンダ• はじめに 約30分
• これまでのインフラ管理と今後のインフラ管理に求められることは？
• コンテナとは？Kubernetesとは？

• Exastroを使ってどのように効率化できるのか？

• Exastro × Ansibleを活用した 約30分
Kubernetesマニフェスト管理デモ• Q&A

Exastro2はじめにこれまでのインフラ管理の要素を振り返ってみます。
また、今後求められるインフラ管理とは？

Exastro3

Introduction これまでのインフラ管理とは？（オンプレ）

新技術を取り込みにくい
密結合で保守しづらいアプリ
従来のスタティックな環境手動構築・手動運用

モノリシック(物理機器)
Exastro仮想化技術がまだ普及していなかった頃…
 サービス停止させないために「最繁トラヒック×バッファ×冗長2倍」のリソースを物理的に並べていた また「CPU、Mem、I/O」の選択肢が少なく、リソースを使いきれなかった
 それでもなるべく少ない機器点数で多くのサービスを捌けるように、複数機能をうまく混載(コンソリ)することが”正しい”とされていた
 アプリケーションもこれらを前提に作られていた(それが正しかった)4

Introduction 現在のインフラ管理とは？（仮想化・コンテナ）

新技術を取り込みにくい
密結合で保守しづらいアプリ
従来のスタティックな環境
手動構築・手動運用

モノリシック(クラウドリフト)
Exastro仮想化技術という武器を手に入れた結果
 「CPU、Mem、I/O」が選択可能に 「オートスケールWeb」くらいの簡単な動的システムは組めるようになった 結果、システムサイズはコンパクトになりハードウェア寿命から脱却できた
 複数機能を混載(コンソリ)させないことが”正しい”と変わり始めた
さらに、コンテナ技術を使うことで 環境のパッケージ化が可能
 どこでも同じように動くようになる→クラウドシフトへの期待
5

コンテナとは？
Dockerに代表される仮想化技術で、非常に軽量なリソースで稼働できる

Exastro

アプリ

アプリ

ライブラリ
ミドルウェアライブラリ
ミドルウェア

アプリ

アプリ

ゲストOS

ゲストOS

ライブラリ
ミドルウェアライブラリ
ミドルウェアHypervisor

Docker EngineホストOS

ホストOS

物理マシン

物理マシン

仮想マシン

コンテナ
6

クラウドネイティブに欠かせないコンテナ・Kubernetesとは？
MobileSocial

IoT

5G

Tech

スケーラブルなアプリ
コンテナ
サービスメッシュ
イミュータブルインフラストラクチャ
宣言型API

AP

近代的でダイナミックな環境
パブリッククラウド
プライベートクラウド
ハイブリッドクラウド

PF

自動構築・自律運用

OP

コンテナ技術に必要な要素とは？
 Dockerコンテナ単体のビルドは容易
だが、Dockerのみでは複数のコンテナでシステムを組み上げられない 複数のホストへ展開してスケールアウトし、ロードバランシングする仕組み→コンテナオーケストレーション

クラウドネイティブ
Exastro7

Kubernetesを運用管理するために必要なIaCは？
コンテナ基盤の維持管理には2つのIaC(Infrastructure As a Code)が必要となる① Kubernetes自体の構築やメンテナンスのための構築コード② Kubernetes上にコンテナ(Pod)をデプロイするための“マニフェスト”

本ウェビナーでは②を取り扱います

App(Pod)[宣言型IaC]
マニフェスト②

AppAppApp

(Pod)

(Pod)

(Pod)

①

[命令型IaC]
Ansible[宣言型IaC]
CFn/HCL
Exastro8

開発/本番環境の一致▌クラウドネイティブな環境の指針 “THE Twelve-Factor App”にて、推奨されているクラウドネイティブでは環境の変更頻度が高い→環境差分を減らす工夫が必要

https://12factor.net/ja/dev-prod-parity
Exastro9

公式資料抜粋
Exastro IT Automation：システム情報をデジタル管理するためのフレームワーク

Exastro10

Exastroが使えます！
マニフェストの中で環境に依存するパラメータをExastro上で管理し、一貫したマニフェストにして環境差分を限定可能！

Staging(検証)Production(本番)CMDB
IaC/System Parameters
Staging
マニフェストは1つだけ！
Production[宣言型IaC]
マニフェストパラメータApp(Pod)

パラメータをマニフェスト外で一元管理
Conductor環境ごとにIaCを自動生成(Job Flow)

Start

ExastroEnd

環境ごとのマニフェストをデプロイ

App(Pod)

App(Pod)

App(Pod)

App(Pod)

Kubernetes

11

今回のデモでのポイント

Exastroで開発・本番での環境一致を支援します！
マニフェスト（IaC）をExastroでテンプレート管理
1つのマニフェストファイルをテンプレートとして登録する事で複数の環境へデプロイ可能です！

パラメータシートを作成し、マニフェストの環境依存パラメータを外部管理
随時変更するパラメータはIaCのコードを変更することなく、Exastroから自動でIaCを生成します！
※本日使用する手順は別途公開予定です

Exastro12

[Tips]AnsibleでのKubernetesモジュールについて
Kubernetesマニフェストの適用で、以下のAnsibleモジュールが利用可能k8s – Manage Kubernetes (K8s) objects
Ansibleの実行サーバをMasterNodeとする（≒Kubectlコマンド相当の操作が可能）
必要な設定• Ansibleサーバ(ITAサーバ)：

モジュールのインストール$ ansible-galaxy collection install community.kubernetes• 実行先サーバ(k8s MasterNode)：
ライブラリのインストール$ pip install openshift▌参考URLhttps://docs.ansible.com/ansible/latest/collections/community/kubernetes/k8s_module.html
https://blog.mosuke.tech/entry/2019/08/21/ansible-for-k8s-resources/

Exastro13

-デモ- 初期状態
Exastro：未セットアップ状態（Version 1.7.2)
Kubernetes：NameSpaceのみ存在(Staging/Production)
Staging(検証)Production(本番)CMDB
IaC/System Parameters

Conductor(Job Flow)

ExastroKubernetes

14

-デモ- 1. 機器一覧の登録
Kubernetes MasterNodeを機器一覧に登録します（AnsibleにてKubernetesを操作するため）

Staging(検証)Production(本番)CMDB
IaC/System Parameters

Conductor(Job Flow)

ExastroKubernetes

15

-デモ- 2. Kubernetesマニフェストのアップロード（テンプレート化）
利用するマニフェストファイルをアップロードしますAnsible共通>テンプレート管理 (※)※Exastro-ITA_利用手順マニュアル_Ansible-driver.pdf (exastro-suite.github.io)
5.2.4 テンプレート管理

Staging(検証)Production(本番)CMDB
IaC/System Parameters
マニフェストは1つだけ！
[宣言型IaC]
マニフェストConductor(Job Flow)

ExastroKubernetes

16

[Tips]今回利用するマニフェスト(nginx_manifest.yaml)について
Kubernetes公式のチュートリアルのマニフェストをベースにしています
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:app: nginx
spec:
replicas: {{ replicas }}selector:
matchLabels:
app: nginx
template:
metadata:labels:app: nginx
spec:
containers:- name: nginx
image: {{ image }}ports:- containerPort: 80～以下略～
Exastro[ファイルについて]
NGINXのPodを立ち上げるマニフェスト[変数(カッコについて)]パラメータはJinja2の形式で記入します{{ replicas }} ：Podをいくつ立ち上げるか{{ image }} ：コンテナイメージ(バージョン){{ nodeport }}：接続ポート

17

-デモ- 3. メニュー（パラメータシート）の作成
マニフェスト内のパラメータを管理するためのメニューを作成します（パラメータの入力自体は次で設定）

Staging(検証)Production(本番)CMDB
IaC/System Parameters
メニュー[宣言型IaC]
マニフェストConductor(Job Flow)

ExastroKubernetes

18

[Tips]縦メニューについて縦メニュー
繰り返し定義されるようなパラメータを、1つのオペレーション上で同時に利用可能（代入順序の設定が必要）※利用手順マニュアル メニュー作成機能
4 メニュー（パラメータシート/データシート）説明

Exastro19

-デモ- 4. オペレーション(環境)・パラメータ登録
StagingとProductionのそれぞれをオペレーションで分割します環境ごとにパラメータを設定します
Staging(検証)Production(本番)CMDB
IaC/System Parameters
Staging[宣言型IaC]
マニフェスト

Production
パラメータConductor(Job Flow)

ExastroKubernetes

20

-デモ- 5. Movement・Conductor作成
環境を設定するためのMovementとConductorを作成しますMov1はマニフェストの自動生成、Mov2はPodのデプロイ

Staging(検証)Production(本番)CMDB
IaC/System Parameters
Staging[宣言型IaC]
マニフェスト

Production
パラメータ[Movement1]
Conductor環境ごとにIaCを自動生成(Job Flow)

Start

ExastroMov1

Mov2[Movement2]
環境ごとのコンテナをEnd デプロイ

Kubernetes

21[Tips]今回利用するPlaybookについて Mov1：CreateManifest
パラメータを埋め込んだマニフェストファイルを作成します- name: Create Manifest File
template:
src: "{{ item.0 }}"dest: "/tmp/{{ item.0 | basename }}"vars:
replicas: "{{ item.1 }}"image: "{{ item.2 }}"nodeport: "{{ item.3 }}"with_together:- "{{ VAR_TPF_FILE }}"- "{{ VAR_replicas }}"- "{{ VAR_image }}"- "{{ VAR_nodeport }}"Exastro[Playbookについて]
マニフェストテンプレートにパラメータを設定し、環境ごとのマニフェストファイルを作成します。
[各変数について]{{ VAR_TPF_FILE }}は作成するマニフェストテンプレートを指定します。
それぞれのテンプレート内の変数は以下のように変換されます。
VAR_replicas ⇔ replicas
VAR_image ⇔ image
VAR_nodeport ⇔ nodeport22[Tips]今回利用するPlaybookについて Mov2：ApplyManifest
Podをデプロイします- name: Apply Manifest
k8s:
namespace: "{{ item.1 }}"state: present
src: "/tmp/{{ item.0 | basename }}"with_together:- "{{ VAR_TPF_FILE }}"- "{{ VAR_namespace }}"Exastro[Playbookについて]Manage Kubernetes (K8s) objectsモジュールを利用して、Mov1で生成されたマニフェストファイルを環境へ適用していきます。

説明②{{ VAR_TPF_FILE }}は適用するマニフェスト
ファイルを指定し、{{ VAR_namespace }}は適用するnamespaceを指定します。

23

-デモ- 6. Conductorの実行(Staging)オペレーションStagingを実行して、Staging環境のPodを作成します

Staging(検証)Production(本番)CMDB
IaC/System Parameters
Staging[宣言型IaC]
マニフェスト

Production

App(Pod)

App(Pod)

パラメータ

Conductor(Job Flow)

Start

ExastroEnd

環境ごとのコンテナをデプロイ

Kubernetes

24

-デモ- 7. Conductorの実行(Production)
オペレーションProductionを実行して、Production環境のPodを作成します

Staging(検証)Production(本番)CMDB
IaC/System Parameters
Staging[宣言型IaC]
マニフェスト

Production

App(Pod)

App(Pod)

App(Pod)

App(Pod)

App(Pod)

パラメータ

Conductor(Job Flow)

Start

ExastroEnd

環境ごとのコンテナをデプロイ

Kubernetes

25まとめマニフェストの中で環境に依存するパラメータをExastro上で管理し、一貫したマニフェストにして環境差分を限定可能！

Staging(検証)Production(本番)CMDB
IaC/System Parameters
Staging
マニフェストは1つだけ！
Production[宣言型IaC]
マニフェストパラメータApp(Pod)パラメータをマニフェスト外で一元管理
Conductor環境ごとにIaCを自動生成(Job Flow)

Start

ExastroEnd

環境ごとのマニフェストをデプロイ

App(Pod)

App(Pod)

App(Pod)

App(Pod)

Kubernetes

26

[参考]Exastro IT Automation 関連記事

Qiita記事‒Exastro IT Automationをインストールしてみた（v1.7.2）‒Exastro IT Automationのキホンの”キ”‒Exastro IT Automation ver1.6.0のキホンの"キ“公式サイト‒Exastroコミュニティ (Github)Exastro27

[参考]8月のウェビナーにて、Exastro EPOCHをご紹介予定！

Exastro EPOCHは「クラウドネイティブシステム開発を加速するためのフレームワーク」です

Exastro28