1 of 34

Nomad Workshop

Takayuki Kaburagi, Solutions Engineer, HashiCorp Japan K.K

@kabuctl

kabu@hashicorp.com

https://blog.kabuctl.run

https://github.com/tkaburagi

Copyright © 2019 HashiCorp

2 of 34

HashiCorp Overview

Products

Founded

2012 by Mitchell Hashimoto and Armon Dadgar

CEO

Dave McJannet

3 of 34

4 of 34

ある特定の技術ではなく、ワークフローの最終ゴールにフォーカスします。製品設計はまずゴールを設定し、そこに至るまでのワークフローを想像するところから始まります。

Workflows, not technologies

Unix哲学と同様各ツールはシンプルでモジュール化され、組み合わせ可能であること。ツールは利用範囲が明確に定義されている小さなコンポーネントを好みます。各ツールはブロックであり、完全なソリューションを構築する際はそれらを組み合わせて使うべきです。

Simple, Modular, Composable

各ツールは独立したプロセスとして扱われ、APIを介して他のツールとコミュニケーションし連結します。

Communicating Sequential Processes

VCSのコミット内容が永久に残るように、サーバなどのインフラもバージョン管理やデバッグを行えるように不変的に管理されるべきです。

Immutability

The Tao of HashiCorp

5 of 34

全てのプロセスはコードで書かれ、保管され、バージョン化されるべきです。これにより過去のデータの損失が防がれ、情報共有が促進されます。

Versioning through codification

コード化されたプロセスはマシンにより実行可能で、運用者にも可読性があります。コード化されたプロセスの自動化はシステム変更のオーバヘッドを減少させ、人的ミスを削減します。

Automation through Codification

高いレベルの信頼性を達成するために、予想外の入出力に耐えられるシステムが必要です。その目には望ましい状態を把握しておくこと、現在の状態を収集する手段、望ましくな状態になった際に復旧する手段が必要です。

Resilient Systems

問題を解決するのは実用主義であるという点が重要です。HashiCorp道で記載する様々な原理は理想であり目指しているものでありますが、独善的に自らに強制する者でありません。そのために実用的な製品開発のためには再評価を行うこともあります。

Pragmatism

The Tao of HashiCorp

6 of 34

Evolving application workload delivery

Challenge

複数のクラウド環境へ一貫性のある方法でどのようにアプリケーションをデリバリするか?

従来のアプリケーション環境

  • 想定可能なアプリケーショントラフィック
  • 必要な量のハードウェアリソースを事前に確保
  • IPベースのサービス間接続
  • 静的な環境を前提としたセキュリティ管理

クラウドにおけるアプリケーション環境

  • 想定不可能なトラフィック
  • スケーラビリティ、マルチクラウド
  • 多発するサービス間通信のネットワーキング
  • IDベースでのセキュリティへの対応

7 of 34

StaticからDynamicな環境へ

専用のインフラへデプロイ

インフラのプールへ

オンデマンドにスケジューリング

ホストベースの静的IPでのサービス間通信

サービスベースの動的IPでのサービス間通信

信頼性の高いネットワーク境界によるセキュリティ

信頼性の低いネットワーク上のIdentityベースのセキュリティ

専有のインフラを準備

オンデマンドにインフラを準備

8 of 34

HashiCorp ソリューション

異なる環境間の差異を吸収し、一貫性のあるワークフローを実現

Infrastructure

Automation

Security Automation

Networking Automation

Application

Automation

  • ワークロードスケジューリング
  • マルチクラウド オーケストレーション
  • シークレット・マネジメント
  • データプロテクション
  • Infrastructure as a Code
  • マルチクラウド プロビジョニング
  • Service Registry & Discovery
  • Service Mesh

9 of 34

エンタープライズ版を選定する価値

Provision

Connect

Secure

Run

サービス、プラットフォーム、ビジネスを支えるツール群

Business Application

Observability

Data

Multi Cloud

お客様

  • エンタープライズ新機能
  • バージョン追従
  • サービス開発
  • スケーラビリティの担保
  • クラウド対応
  • データ活用、モニタリング

製品フィードバック

技術支援

Business Value

フォーカスしたいエリア

重要だがリソースを

かけたくないエリア

10 of 34

Networking

Connect infrastructure and applications

Development

Run applications

Security

Secure applications and infrastructure

Operations

Provision Infrastructure

The 4 essential elements of dynamic infrastructure

THE HASHICORP STACK

10

© 2018 HashiCorp

11 of 34

Connect

Consul

Run

Deploy applications

Secure

Vault

Provision

Terraform

The 4 essential elements of dynamic infrastructure

12 of 34

2015

プロダクトローンチ

280+

コントリビュータ

4.7K+

GitHub スター

20K+

月間ダウンロード

17+

顧客数

About�Nomad�

LOREM IPSUM DOLOR SIT AMET ULLAM

12

© 2019 HashiCorp

13 of 34

14 of 34

Nomadによるオーケストレーション

  • 複雑なデプロイワークフロー
  • アプリ運用のための細かな設計
  • 対応するアプリの種類が限定的
  • スキル習得に時間がかかる

  • シンプルなツールで運用やデプロイを簡素化
  • 既存のメジャーなワークロードに対応
    • コンテナ、バイナリなど
  • HashiCorpツール群と高度に連携可能

従来の運用

Nomadによるオーケストレーション

オーケストレーションツールが多機能で

運用や学習コストが高い

一貫したツールでシンプルなサービスメッシュを提供しセキュリティや運用コストの肥大化を抑える

15 of 34

Orchestrate Any Application

  • コンテナ化されているアプリ、されていないアプリやバッチアプリなど全てのタイプのワークロードにモダンなオーケストレーションの仕組みを提供する
  • 既存のインフラ上にシンプルで軽量なレイヤーを提供
  • アプリケーションのモダナイゼーションし開発を加速するためにシンプルで統合されたワークフローを実現

16 of 34

幅広いエコシステムとの連携

17 of 34

Nomad Core Use Cases

First-class for Containers

軽量なアーキテクチャかつ最小限の運用オーバーヘッドでコンテナのオーケストレーションを実現

Non Containerized Apps

Java(JAR)やホストOSで実行可能なバイナリに対応。コンテナ化されていないワークロードも各OSの機能を利用して分離

Microservices Deployments

Consulとの高度な連携によりサービスディスカバリを含んだService Meshを実現

Batch Processing Workloads

ジョブのスケジューリングやコンカレントラスケジューラを内包。Sparkなどとネイティブに連携も可能

18 of 34

Nomad Core Use Cases

Elastic Scalability

軽量なアーキテクチャでスケールの速度が速く、かつオーケストレーションにおいては同等の機能を提供

Multi Region & Cloud

最小限の作業で環境の構築が可能なため、複数クラウドや他リージョンへの展開が容易

GPU Support

NVIDIAなどマルチベンダーのGPUをサポートし、AIやマシンラーニングのワークロードに対応

Stateful Workloads

様々なストレージが利用可能でデータベースなどのステーフルワークロードにも対応

19 of 34

Nomad Workflow

User

Nomad

Servers

Submits

Job

Nomad

Clients

Deploy App

Skip (Busy)

20 of 34

21 of 34

job "my_job" {

datacenters = ["us-west-1", “us-east-1"]

type = "service"

group "web" {

count = 5

task "frontend" {

driver = "docker"

config { image = "hashicorp/web-frontend" }

resources {

cpu = 500 # MHz

memory = 128 # MB

network {

mbits = 100

}}

my_app.nomad

宣言的なJobの仕様定義

job

group

task

22 of 34

Operating Systems

Workloads

Drivers

Windows

Linux

BSD

Solaris

Long Running Service

Short Lived Batch

Periodic Cron

System Agents

Docker / Rkt / LXC

Qemu / KVM

“exec”�cgroups+chroot

Static Binaries / �Fat JARs

23 of 34

Job Specification

job "my_job" {

datacenters = ["us-west-1", “us-east-1"]

type = "service"

group "web" {

count = 5

task "frontend" {

driver = "docker"

config { image = "hashicorp/web-frontend" }

resources {

cpu = 500 # MHz

memory = 128 # MB

network {

mbits = 100

}}

パラメータ

 内容

 Region, Datacenters

Jobを稼働させるリージョン、

リージョン内のAZ等の区分け

 Job Type

Service / Batch / System

 Group

デプロイされるタスクグループ

 Task

実際のワークロード

 Driver

Docker / Standalone Web / Batch などの

アプリタイプ

 Resources

ハードウェアリソース

my_app.nomad

24 of 34

Workloads

  • Service Scheduler
    • Long running
    • OperatorがStopするまでRunning状態を維持する
    • WebやDatabase
  • Batch Scheduler
    • Short lived
    • Taskが終了するまで実行(Success)
    • 定期バッチ処理やイベント処理
  • System Scheduler
    • 全てのClient上で実行するTask(Taskの要求を満たしているClientのみ)
    • Logging/monitoringなどのBackground processes
    • 新たなClientがJoinした際にも起動

25 of 34

Updating Jobs

  • Rolling Upgrades

  • Canaries Upgrades

  • Consul health checks

  • Auto-revert

job “my_job” {

update {

max_parallel = 3

health_check = "checks"

min_healthy_time = "10s"

healthy_deadline = "10m"

auto_revert = true

canary = 1

stagger = "30s"

}

}

my_app.nomad

26 of 34

A First-class for HashiStack Workflow

  • HashiCorp Consul
    • Nomad上のサービスのレジスト
    • サービスへのヘルスチェック
    • 動的コンフィグレーション
    • 自動ブートストラップ
  • HashiCorp Vault
    • 自動トークン取得
    • 自動トークンリニューアル
    • シークレットの自動取得とリニューアル

job “my_job" {

group "example" {

task "server" {

service {

tags = ["leader", "mysql"]

port = “db"

check {

type = "script"

name = "check_table"

command = “./check_mysql_table_status"

args = ["--verbose"]

interval = "60s"

timeout = “5s"

}

template {

source = "local/redis.conf.tpl"

destination = "local/redis.conf"

change_mode = "signal"

change_signal = "SIGINT"

}

vault {

policies = ["cdn", "frontend"]

change_mode = "signal"

change_signal = "SIGUSR" }

my_app.nomad

27 of 34

Nomad Enterprise

機能名

概要

Automated Upgrades

Nomadサーバの無停止ローリングアップデートを自動化

Enhanced Read Scalability

負荷の高い、クラスタ内のリーダーを決めるConsensusには参加せず、リードの処理のみを行うインスタンス(Non-voting server)を用意してスケールアウトさせる

Redundancy Zones

Non-voting serverを各AZに構築し、Readの処理を分散しつつ、Voting serverが落ちたらNon- votingをVotingに昇格する

Namespaces

マルチテナンシー対応

Resource Quotas

ネームスペースごとに利用可能なリソースを制限

Sentinel Policies

Sentinelによるポリシーの設定

Preemption

先取権

HashiCorp Support

  • Solutions Engineer, Technical Account Managerによるヘルスチェックや定例MTG
  • 24 * 365のサポート

28 of 34

Enhanced Read Scalability

  • Consensus
    • クラスタ内のリーダーを決める際のサーバ間のやりとり(Voting)
    • 起動時やリーダーが停止するたびに発生し、クラスタノードが増えるほど負荷が増大

→スケールアウトのコストが増える

  • Enhanced Read Scalability
    • Enterprise版では、Consensusには参加しないが、リードの処理だけは担当できるサーバをクラスタ内に構築可能となる

    • スケーラビリティが向上

Non-voting

Nomad Server

Non-voting

Nomad Server

Follower

Nomad Server

Leader

Nomad Server

Follower

Nomad Server

29 of 34

Automated Upgrades

  • 新しいバージョンのNomadをNon-votingサーバとしてクラスタにJoinさせ、レプリケーションを実施
  • Non-votingサーバをVotingサーバに昇格させる
  • 古いバージョンのサーバを停止させ、バージョンを入れ替える

30 of 34

Redundancy Zones

  • AZをまたいでNomadサーバをデプロイする際、AZに複数のインスタンスを立てると運用はサーバ間通信で大きなコストが掛かる

  • OSSではそれを回避するためAZあたり一つのサーバを立てる構成を強いられることがある

  • Enterprise版は各AZにConsensusには関係のないNon-votingをデプロイ可能

  • 障害時はNon-votingをAutopilotで自動昇格をし、クラスタの健全性を保つ

Follower

Nomad Server

Leader

Nomad Server

Leader

Nomad Server

Non-voting

Nomad Server

Non-voting

Nomad Server

Non-voting

Nomad Server

AZ-1

AZ-2

AZ-3

31 of 34

Namespaces & Resource Quotas

  • ネームスペースによりNomadサーバの構成や設定を論理的に分割
  • ネームスペースごとに利用可能なハードウェアリソースを割り当てる

32 of 34

Sentinel Policies

  • 通常のACLの設定に加えてNomadの安全性を保つためにより高度で柔軟な設定を実現する
  • ポリシーの例
    • 特定のネットワーク上からのみNomadサーバへのアクセスを許可
    • 特定のレポジトリーのDockerワークロードのみデプロイを許可
    • ワークロードのリソースを5GBメモリ以下のみ許可

33 of 34

Preemption (先取権)

  • OSS Nomadではリソースが不足している場合優先度の高いアロケーションがリクエストされてもリソースが増えるまでジョブは正常に起動しない
  • Enterprise版では優先度に従って低いものがEvictionされ、優先度の高いジョブが実行される。ビジネス的にクリティカルなワークロードのサービスレベルを保つことが可能となる

34 of 34