60
Copyright©2017 NTT corp./NTT comware corp. 0から始める OpenStack on Kubernetesの導入と運用 日本電信電話株式会社 伊藤 広樹 NTTコムウェア株式会社 平井

0から始める OpenStack on Kubernetesの導入と運用 · OpenStackの設定ファイル設置 Kubernetes上にOpenStackをデプロイ コンテナイメージのビルド DeploymentとServiceの作成

  • Upload
    others

  • View
    22

  • Download
    0

Embed Size (px)

Citation preview

Copyright©2017 NTT corp./NTT comware corp.

0から始めるOpenStack on Kubernetesの導入と運用

日本電信電話株式会社伊藤 広樹

NTTコムウェア株式会社平井 普

Copyright©2017 NTT corp./NTT comware corp.

自己紹介

► 伊藤 広樹 (所属: 日本電信電話株式会社)2015年〜2016年 社内OpenStack基盤の運用2017年〜(現在) Blazarにコントリビュート開始

► 平井 普 (所属:NTTコムウェア)2011年〜2016年 NTT通信網NW機器の運用設定2016年〜(現在) OpenStack基盤の運用

2

Copyright©2017 NTT corp./NTT comware corp.

最近, 名前はよく聞くけど

Kubernetesって何がいいの??

Copyright©2017 NTT corp./NTT comware corp.

Kubernetes

► 複数サーバ上に跨ったコンテナ管理のための機能を実現するOSS

4

ユーザ コンテナ配置

コンテナ停止時に自動再配置

アクセス

コンテナイメージ

アクセスの負荷分散

Copyright©2017 NTT corp./NTT comware corp.

じゃあ, Kubernetesを使えば

OpenStackの構築/運用は楽になる??

Copyright©2017 NTT corp./NTT comware corp.

OpenStack on Kubernetes

► Kubernetesを使うことで, PacemakerとHAproxyを使った場合と

比較して何か良いことがある??

6

Keystone Nova Glance Cinder Neutronコンテナ管理

Copyright©2017 NTT corp./NTT comware corp.

その効果を明らかにするため,

コンテナ&Kubernetes初心者 の私たちが

OpenStack on Kubernetes を 0から始めてみた

Copyright©2017 NTT corp./NTT comware corp.

アジェンダ

► 0から始める前に

► 0から始めるOpenStack on Kubernetesの導入

► 0から始めるOpenStack on Kubernetesの運用

► 0から始めたまとめ

8

Copyright©2017 NTT corp./NTT comware corp.

0から始める前に

Copyright©2017 NTT corp./NTT comware corp.

現状の標準構成 (コミュニティ推奨)

10

Controllerノード

・pacemaker・haproxy・keystone・nova-api・nova-scheduler・nova-conductor・glance-api・cinder-api・cinder-scheduler・cinder-volume・neutron-server

Backendノード

・pacemaker・haproxy・rabbitmq・mysql・memcached

Networkノード

・pacemaker・neutron-l2-agent・neutron-l3-agent・neutron-dhcp-agent

Computeノード

・nova-compute・neutron-l2-agent

Copyright©2017 NTT corp./NTT comware corp.

目標とする構成 (Kubernetes利用)

11

・keystone・nova-api・nova-scheduler・nova-conductor・glance-api・cinder-api・cinder-scheduler・cinder-volume・neutron-server

Backendノード

・pacemaker・haproxy・rabbitmq・mysql・memcached

Networkノード

・pacemaker・neutron-l2-agent・neutron-l3-agent・neutron-dhcp-agent

Computeノード

・nova-compute・neutron-l2-agent

Kubernetesノード コンテナ管理

Controllerノードのプロセスをコンテナ化

Copyright©2017 NTT corp./NTT comware corp.

Kubernetes適用に向けた方針

► ControllerノードのOpenStackプロセスをKubernetes上で管理する

► KubernetesおよびOpenStackの各プロセスはできる限り冗長化する

► できるだけ一般的かつ簡単な構成にする

► 必要なもののみ自作する

12

Copyright©2017 NTT corp./NTT comware corp.

► OpenStackコミュニティで稼働中の環境をKubernetes化

● Masakariプロジェクト[1,2]のCIシステムが対象

○ CI試験がOpenStack上で行われている

○ コンポーネント: Keystone, Nova, Glance, Cinder, Neutron

○ バージョン: Newton版

Kubernetes化する環境

13[1] https://wiki.openstack.org/wiki/Masakari[2] http://openstackdays.com/program-detail/#d1p2s9

Copyright©2017 NTT corp./NTT comware corp.

達成状況

14

・keystone・nova-api・nova-scheduler・nova-conductor・cinder-api・cinder-scheduler・neutron-server

Kubernetesノード

Controllerノード

・pacemaker・haproxy・keystone・nova-api・nova-scheduler・nova-conductor・glance-api・cinder-api・cinder-scheduler・cinder-volume・neutron-server

Copyright©2017 NTT corp./NTT comware corp.

0から始めるOpenStack on Kubernetesの導入

Copyright©2017 NTT corp./NTT comware corp.

既存のプロジェクトで実現できる?

16

► コミュニティの既存プロジェクト

● Kolla: Dockerイメージの作成+Kubernetes上への配布

● OpenStack-helm: Helmを使ったOpenStackの構築/バージョン管理

► 既存プロジェクトは新規構築のみをサポートしている

● 今回は構築済みの環境をKubernetes化したい

► 既存プロジェクトではKubernetesクラスタの構築はサポート外

● Kubernetesクラスタは独自に設計/構築する必要がある

Copyright©2017 NTT corp./NTT comware corp.

OpenStack on Kubernetes導入までの道のり

STEP1: Kubernetesクラスタの設計

● Kubernetesのプロセス配置と冗長化の設計

STEP2: Kubernetesクラスタ上のOpenStackの設計

● Kubernetesのリソース作成

STEP3: 実際に環境構築

● Kubernetes環境構築/OpenStackデプロイ/構築試験

17

Copyright©2017 NTT corp./NTT comware corp.

OpenStack on Kubernetes導入までの道のり

STEP1: Kubernetesクラスタの設計

● Kubernetesのプロセス配置と冗長化の設計

STEP2: Kubernetesクラスタ上のOpenStackの設計

● Kubernetesのリソース作成

STEP3: 実際に環境構築

● Kubernetes環境構築/OpenStackデプロイ/構築試験

18

Copyright©2017 NTT corp./NTT comware corp.

Kubernetesを構成するプロセス群

19

STEP1: Kubernetesクラスタの設計

kube-controller-manager

kube-apiserver

kube-scheduler kube-proxy

kubelet docker

flannel

etcd

Masterコンテナ操作

データストア

REST API

REST API

Unixドメインソケット

Kubernetesの他プロセス間のハブっぽい役割

バージョン情報 : - Kubernetes:1.5.3 - etcd: 2.3.1 - docker: 1.12.6 - flannel: 0.5.5

コンテナ管理に 必要な各種情報が貯蔵されている

Node

Copyright©2017 NTT corp./NTT comware corp.

► Kubernetesの各プロセスはローカルのkube-apiserverを参照

► kube-apiserverはローカルのetcdを参照, etcdは3ノードでクラスタ化

今回のKubernetesクラスタ設計

20

STEP1: Kubernetesクラスタの設計

kube-proxykubeletkube-controller-managerkube-scheduler

dockerflannel

etcd

kube-apiserver

kube-proxykubeletkube-controller-managerkube-scheduler

dockerflannel

etcd

kube-apiserver

kube-proxykubeletkube-controller-managerkube-scheduler

dockerflannel

etcd

kube-apiserver

Copyright©2017 NTT corp./NTT comware corp.

OpenStack on Kubernetes導入までの道のり

STEP1: Kubernetesクラスタの設計

● Kubernetesのプロセス配置と冗長化の設計

STEP2: Kubernetesクラスタ上のOpenStackの設計

● Kubernetesのリソース作成

STEP3: 実際に環境構築

● Kubernetes環境構築/OpenStackデプロイ/構築試験

21

Copyright©2017 NTT corp./NTT comware corp.

Kubernetesの用語説明

Kubernetesの仕組みの中でも基本的なものを利用してみた

► Pod

► Deployment

► Service

22

STEP2: Kubernetesクラスタ上のOpenStackの設計

Copyright©2017 NTT corp./NTT comware corp.

Deployment

Kubernetesの用語説明

23

STEP2: Kubernetesクラスタ上のOpenStackの設計

Pod label: n-sch

nova-scheduler

Service label: n-api

アクセス 172.16.0.100:8774

Pod label: n-api

nova-api

Pod label: n-api

nova-api

Copyright©2017 NTT corp./NTT comware corp.

OpenStackデプロイのための準備物

► Dockerfile

● Kubernetes化するOpenStackプロセス分作成

► Pod/DeploymentとServiceの設定

● yamlファイルを作成

► OpenStackの各種設定ファイル

24

STEP2: Kubernetesクラスタ上のOpenStackの設計

今回の説明範囲

Copyright©2017 NTT corp./NTT comware corp.

Pod/Deploymentの利用

どのプロセスをPodとしてまとめればいい?

25

STEP2: Kubernetesクラスタ上のOpenStackの設計

● 1Pod - 1プロセス

Pod

nova-api

Pod

nova-api

nova-scheduler

nova-conductor

● 1Pod - 1コンポーネント ● 1Pod - 全プロセス

Pod

nova-api

nova-scheduler

cinder-api

……

増設/減設の柔軟性 低高

設定ファイルの量 少多

今回の選択

Copyright©2017 NTT corp./NTT comware corp.

► hoge-apiプロセスへの負荷分散に利用できる

Serviceの利用

26

STEP2: Kubernetesクラスタ上のOpenStackの設計

しかし, デフォルトの設定(ClusterIP利用)だとKubernetesクラスタの

外部からアクセスできない!

Service lable: n-api

アクセス 172.16.0.100:8774

Pod label: n-api

nova-api

Pod label: n-api

nova-apiClusterIP

Copyright©2017 NTT corp./NTT comware corp.

Serviceの設計ポイント

外部からServiceのエンドポイントにアクセス可能にするためには??

► NodePortタイプのServiceを利用

● クラスタを構成するノードのIPとportを利用する

27

STEP2: Kubernetesクラスタ上のOpenStackの設計

Service type: NodePort lable: n-api port: 8774 nodePort: 8774

ノード IP: 192.168.10.10

kube-proxy

iptables 192.168.10.10:8774 → 172.16.0.100:8774

Pod label: n-api

nova-api

Pod label: n-api

nova-api

192.168.10.10:8774にアクセス

Copyright©2017 NTT corp./NTT comware corp.

OpenStack on Kubernetes導入までの道のり

STEP1: Kubernetesクラスタの設計

● Kubernetesのプロセス配置設計, 冗長化設計

STEP2: Kubernetesクラスタ上のOpenStackの設計

● Kubernetesのリソース作成

STEP3: 実際に環境構築

● Kubernetes環境構築, OpenStackデプロイ, 構築試験

28

Copyright©2017 NTT corp./NTT comware corp.

環境構築の流れ

► Kubernetesクラスタ構築

► OpenStackの設定ファイル設置

► Kubernetes上にOpenStackをデプロイ

● コンテナイメージのビルド

● DeploymentとServiceの作成

► 構築試験

● OpenStack APIへのアクセスが通ることを確認

● Masakariにパッチを投げて正常にCI試験が実行されることを確認

29

STEP3: 実際に環境構築

Copyright©2017 NTT corp./NTT comware corp.

構築したOpenStack on Kubernetes

30

STEP3: 実際に環境構築

kube-apiserverkube-controller-managerkube-scheduler

kube-proxykubeletdocker

flanneldetcd

apache2(keystone)

neutron-server

nova-api

nova-scheduler

nova-conductor

nova-consoleauth

nova-novncproxy

cinder-api

cinder-scheduler

x2

x2

x2

x2

:Pod:コンテナ

:プロセス

Copyright©2017 NTT corp./NTT comware corp.

結局, 導入してみてどうなった?► Controllerノードの標準構成(相当)をKubernetesのみで実現できた

● 従来のHAproxyやPacemakerの役割をKubernetesが担う

● 系全体としてはHAproxyとPacemakerに加えてKubernetes管理が増える

● Kubernetesの学習コストはもちろん必要

► 結局, 構築は楽になったか?

● HAproxyやPacemakerの設定を実装するのに比較すると楽になった

○ DeploymentやServiceのyamlファイルの作成は

HAproxyやPacemakerのconfファイル作成より容易

31

Copyright©2017 NTT corp./NTT comware corp.

0から始めるOpenStack on Kubernetesの運用

Copyright©2017 NTT corp./NTT comware corp.

運用を始めるために

33

ユーザからの

問い合わせ対応

機器、サービスの

状態監視

トラブル時の

解析、復旧

必要に応じた

メンテナンス

説明対象

Copyright©2017 NTT corp./NTT comware corp.

OpenStack on Kubernetes監視までの道のり

34

STEP1: 監視項目の決定

● 故障を早期検知、異変を早期察知するための項目を精査

STEP2: 監視ツールの設計

● 監視項目をカバーする監視ツール設定を設計

STEP3: 実際に環境構築

● 監視環境を構築

STEP1監視項目

STEP2監視ツール

STEP3環境構築

Copyright©2017 NTT corp./NTT comware corp.

監視項目:何を監視すればいいの?

35

STEP1監視項目

STEP2監視ツール

STEP3環境構築

3535

kube-apiserverkube-controller-managerkube-scheduler

kube-proxykubeletdocker

flanneldetcd

:コンテナ

:プロセス

物理サーバ

Kubernetesクラスタ

:Pod:Deployment:Service

サーバ死活、HWリソース状況(cpu/memory/disk)

プロセス死活

OpenStackサービスOpenStackサービス

Kubernetesリソース

keystone

apache2(keystone) x2

neutron-server x2

nova-api

nova-scheduler

nova-novncproxy・・・

x2cinder-api

cinder-scheduler

x2

neutron nova cinder

Pod

Deployment

Service

Copyright©2017 NTT corp./NTT comware corp.

監視レベル:何が重要になるの?

36

STEP1監視項目

STEP2監視ツール

STEP3環境構築

3636

kube-apiserverkube-controller-managerkube-scheduler

kube-proxykubeletdocker

flanneldetcd

物理サーバ

Kubernetesクラスタ

サーバ死活、HWリソース状況(cpu/memory/disk)

プロセス死活

OpenStackサービスOpenStackサービス

Kubernetesリソース

keystone

apache2(keystone) x2

neutron-server x2

nova-api

nova-scheduler

nova-novncproxy・・・

x2cinder-api

cinder-scheduler

x2

neutron nova cinder

Pod

Deployment

Service

異常時サービス提供不可のリスク低(即時対応不要)

異常時サービス提供不可のリスク高(即時対応必要)

Copyright©2017 NTT corp./NTT comware corp.

監視ツール:何を使えばいいの?

37

STEP1監視項目

STEP2監視ツール

STEP3環境構築

Kubernetesの監視に特別なツールは必須でない→OSSのZabbixで簡単に実現可能

提供層 監視項目 Zabbixでの実現

サービス OpenStackサービス状態 従来通りのサービス監視

Kubernetesリソース

Service状態 外部スクリプトで監視(API実行)

Deployment状態

Pod状態

Kubernetesクラスタ

プロセス死活 各プロセスの起動数を設定

物理サーバ サーバ死活、HWリソース デフォルトTemplateを適用

従来監視と同様

従来監視と同一

従来監視と同一

従来監視と異なる

Copyright©2017 NTT corp./NTT comware corp.

外部スクリプトで監視って、複雑なんでしょ?

いいえ、たった数十行のshellでできます

► KubernetesのREST APIにHTTPアクセス► レスポンスjsonから該当リソースの状態を抽出し、状態を出力するだけ

38

STEP1監視項目

STEP2監視ツール

STEP3環境構築

1 PODS_DATA=`curl -s $endpoint/api/v1/pods`2 POD_LIST=`echo $PODS_DATA | jq '.items[].metadata.name'`3 for pod_name in $POD_LIST4 do5 STATUS=`echo $PODS_DATA | \6 jq '.items[] | select(.metadata.name == '$pod_name')' | jq '.status.phase'`7 echo $pod_name,$STATUS8 done

PODリソースの状態確認shellサンプル(一部抜粋)

Copyright©2017 NTT corp./NTT comware corp.

環境構築:構築の流れ

► 監視対象ノードにzabbix_agentを導入

► 監視サーバで各監視項目を設定

● 監視対象ノードの登録

● 各層の監視項目を設定

39

STEP1監視項目

STEP2監視ツール

STEP3環境構築

zabbix_server

kube-apiserverkube-controller-managerkube-scheduler

kube-proxykubeletdocker

flanneldetcdzabbix_agent

nova

nova-api nova-scheduler nova-novncproxy・・・ x2 ・・・

・・・

Copyright©2017 NTT corp./NTT comware corp.

「OpenStack」on Kubernetes監視のポイントは?

► 従来と同様の方法で監視を実現可能

► Kubernetes化したOpenStackプロセスのプロセス監視は不要

(コンテナ内のプロセス死活はPOD状態に反映)

► Kubernetesクラスタのノード監視は一律の監視設定で良い

► 事前の検証は必要

40

Copyright©2017 NTT corp./NTT comware corp.

結局,運用してみて楽になった?

► まだ分からない・・・

● Kubernetes化の後、故障が発生していない…

● Kubernetes化の後、増減設やupdateのメンテナンスが発生していない…

41

Copyright©2017 NTT corp./NTT comware corp.

0から始めたまとめ

Copyright©2017 NTT corp./NTT comware corp.

まとめ

結果:► Kubernetesを使ってOpenStackを構築してみて「楽になった」か?

● 楽になった

► Kubernetesを使ってOpenStackを運用してみて「楽になった」か?● まだ分からない・・・

考察:► どんな人(環境)に向いている?

● プロセス配置まで厳密に管理したい運用者には, 向いていないかも...(大規模チームでの運用?)

● プロセス配置の管理を気にしない運用者には, 向いているかも…(少数精鋭チームでの運用者?) 43

Copyright©2017 NTT corp./NTT comware corp.

ご清聴ありがとうございました

Copyright©2017 NTT corp./NTT comware corp.

参考

Copyright©2017 NTT corp./NTT comware corp.

OpenStackに適用する際の注意点

► 追加で必要な運用作業も発生

● 再deploy発生で、コンテナ上OpenStackプロセスのホスト名が変わる

→定期的にNovaなどのDBから不要なホスト名を削除する作業が発生

46

openstack@openstack:~$ openstack compute service list+----+------------------+----------------------------------+--------+| ID | Binary | Host | ~snip~ |+----+------------------+----------------------------------+--------+| 65 | nova-scheduler | nova-deployment-3169709093-5r5k2 | ~snip~ || 66 | nova-conductor | nova-deployment-3169709093-tjll5 | ~snip~ || 67 | nova-consoleauth | nova-deployment-3169709093-chqw8 | ~snip~ |~snip~

PodごとにKubernetesが付与

Copyright©2017 NTT corp./NTT comware corp.

Dockerfile ~ Keystone

47

FROM ubuntu:16.04RUN apt update && apt install -y software-properties-common \

&& add-apt-repository cloud-archive:newtonRUN apt update && apt install -y keystone apache2 libapache2-mod-wsgiENV APACHE_RUN_USER=www-dataENV APACHE_RUN_GROUP=www-dataENV APACHE_PID_FILE=/var/run/apache2/apache2.pidENV APACHE_RUN_DIR=/var/run/apache2ENV APACHE_LOCK_DIR=/var/lock/apache2ENV APACHE_LOG_DIR=/var/log/apache2EXPOSE 5000 35357CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]

● keystone

Copyright©2017 NTT corp./NTT comware corp.

Dockerfile ~ Nova 1/2

48

FROM ubuntu:16.04RUN apt update && apt install -y software-properties-common \

&& add-apt-repository cloud-archive:newtonRUN apt update && apt install -y nova-apiEXPOSE 8774CMD ["/usr/bin/nova-api", "--config-file", "/etc/nova/nova.conf", "--log-file", "/var/log/nova/nova-api.log"]

● nova-api

FROM ubuntu:16.04RUN apt update && apt install -y software-properties-common \

&& add-apt-repository cloud-archive:newtonRUN apt update && apt install -y nova-schedulerCMD ["/usr/bin/nova-scheduler", "--config-file", "/etc/nova/nova.conf", "--log-file", "/var/log/nova/nova-scheduler.log"]

● nova-scheduler

FROM ubuntu:16.04RUN apt update && apt install -y software-properties-common \

&& add-apt-repository cloud-archive:newtonRUN apt update && apt install -y nova-conductorCMD ["/usr/bin/nova-conductor", "--config-file", "/etc/nova/nova.conf", "--log-file", "/var/log/nova/nova-conductor.log"]

● nova-conductor

Copyright©2017 NTT corp./NTT comware corp.

Dockerfile ~ Nova 2/2

49

FROM ubuntu:16.04RUN apt update && apt install -y software-properties-common \

&& add-apt-repository cloud-archive:newtonRUN apt update && apt install -y nova-novncproxyEXPOSE 6080CMD ["/usr/bin/nova-novncproxy", "--config-file", "/etc/nova/nova.conf", "--log-file", "/var/log/nova/nova-novncproxy.log"]

● nova-novcnproxy

FROM ubuntu:16.04RUN apt update && apt install -y software-properties-common \

&& add-apt-repository cloud-archive:newtonRUN apt update && apt install -y nova-consoleauthCMD ["/usr/bin/nova-consoleauth", "--config-file", "/etc/nova/nova.conf", "--log-file", "/var/log/nova/nova-consoleauth.log"]

● nova-consoleauth

Copyright©2017 NTT corp./NTT comware corp.

Dockerfile ~ Cinder

50

FROM ubuntu:16.04RUN apt update && apt install -y software-properties-common \

&& add-apt-repository cloud-archive:newtonRUN apt update && apt install -y cinder-api python-memcacheEXPOSE 8776CMD ["/usr/bin/cinder-api", "--config-file", "/etc/cinder/cinder.conf", "--log-file", "/var/log/cinder/cinder-api.log"]

● cinder-api

FROM ubuntu:16.04RUN apt update && apt install -y software-properties-common \

&& add-apt-repository cloud-archive:newtonRUN apt update && apt install -y cinder-schedulerCMD ["/usr/bin/cinder-scheduler", "--config-file", "/etc/cinder/cinder.conf", "--log-file", "/var/log/cinder/cinder-scheduler.log"]

● cinder-scheduler

Copyright©2017 NTT corp./NTT comware corp.

Dockerfile ~ Neutron

51

FROM ubuntu:16.04RUN apt update && apt install -y software-properties-common \

&& add-apt-repository cloud-archive:newtonRUN apt update && apt install -y neutron-serverEXPOSE 9696CMD ["/usr/bin/neutron-server", "--config-file", "/etc/neutron/neutron.conf", "--config-file", "/etc/neutron/plugins/ml2/ml2_conf.ini", "--log-file", "/var/log/neutron/neutron-server.log"]

● neutron-server

Copyright©2017 NTT corp./NTT comware corp.

Deployment ~ Keystone

52

---apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: keystone-deploymentspec: replicas: 2 template:

metadata: labels: app: keystone

spec: containers: - name: keystone image: <your repo IP>:<port>/keystone:newton volumeMounts: - name: keystone mountPath: /etc/keystone - name: apache2 mountPath: /etc/apache2 ports: - containerPort: 5000 name: public - containerPort: 35357 name: admin volumes: - name: keystone

● keystone-deployment.yaml

hostPath: path: /etc/k8s/keystone - name: apache2 hostPath: path: /etc/k8s/apache2

Copyright©2017 NTT corp./NTT comware corp.

Deployment ~ Nova

53

---apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: nova-deploymentspec: replicas: 2 template:

metadata: labels: app: nova

spec: hostNetwork: true containers: - name: nova-api image: <your repo IP>:<port>/nova-api:newton volumeMounts: - name: nova mountPath: /etc/nova ports: - containerPort: 8774 securityContext: privileged: true - name: nova-scheduler image: <your repo IP>:<port>/nova-scheduler:newton

● nova-deployment.yaml

volumeMounts: - name: nova mountPath: /etc/nova - name: nova-conductor image: <your repo IP>:<port>/nova-conductor:newton volumeMounts: - name: nova mountPath: /etc/nova - name: nova-novncproxy image: <your repo IP>:<port>/nova-novncproxy:newton volumeMounts: - name: nova mountPath: /etc/nova ports: - containerPort: 6080 - name: nova-consoleauth image: <your repo IP>:<port>/nova-consoleauth:newton volumeMounts: - name: nova mountPath: /etc/nova volumes: - name: nova hostPath: path: /etc/k8s/nova

Copyright©2017 NTT corp./NTT comware corp.

Deployment ~ Cinder

54

---apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: cinder-deploymentspec: replicas: 2 template:

metadata: labels: app: cinder

spec: containers: - name: cinder-api image: <your repo IP>:<port>/cinder-api:newton volumeMounts: - name: cinder mountPath: /etc/cinder ports: - containerPort: 8776 - name: cinder-scheduler image: <your repo IP>:<port>/cinder-scheduler:newton volumeMounts:

● cinder-deployment.yaml

- name: cinder mountPath: /etc/cinder volumes: - name: cinder hostPath: path: /etc/k8s/cinder

Copyright©2017 NTT corp./NTT comware corp.

Deployment ~ Neutron

55

---apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: neutron-deploymentspec: replicas: 2 template:

metadata: labels: app: neutron

spec: containers: - name: neutron-server image: <your repo IP>:<port>/neutron-server:newton volumeMounts: - name: neutron mountPath: /etc/neutron ports: - containerPort: 9696 volumes: - name: neutron hostPath: path: /etc/k8s/neutron

● neutron-deployment.yaml

Copyright©2017 NTT corp./NTT comware corp.

Service ~ Keystone / Nova

56

---apiVersion: v1kind: Servicemetadata: name: keystone-servicespec: type: NodePort ports: - name: public

port: 5000targetPort: 5000nodePort: 5000protocol: TCP

- name: adminport: 35357targetPort: 35357nodePort: 35357protocol: TCP

selector:app: keystone

● keystone-service.yaml

---apiVersion: v1kind: Servicemetadata: name: nova-servicespec: type: NodePort ports: - name: nova-api

port: 8774targetPort: 8774nodePort: 8774protocol: TCP

- name: nova-novncproxyport: 6080targetPort: 6080nodePort: 6080protocol: TCP

selector:app: nova

● nova-service.yaml

Copyright©2017 NTT corp./NTT comware corp.

Service ~ Cinder / Neutron

57

---apiVersion: v1kind: Servicemetadata: name: cinder-servicespec: type: NodePort ports: - name: cinder-api

port: 8776targetPort: 8776nodePort: 8776protocol: TCP

selector:app: cinder

● cinder-service.yaml

---apiVersion: v1kind: Servicemetadata: name: neutron-servicespec: type: NodePort ports: - name: neutron-server

port: 9696targetPort: 9696nodePort: 9696protocol: TCP

selector:app: neutron

● neutron-service.yaml

Copyright©2017 NTT corp./NTT comware corp.

Kubernetesリソース監視スクリプト ~ Pod

58

#!/bin/bash

# Set args.ENDPOINT=$1

# Get Pod json data.PODS_DATA=`curl -s $ENDPOINT/api/v1/pods`

if [ -z "$PODS_DATA" ]then

echo "ERROR: Can't access to Kubernetes API endpoint."exit 2

fi

# Get Pod name listPOD_LIST=`echo $PODS_DATA | jq '.items[].metadata.name'`

# Get Pod statusfor pod_name in $POD_LISTdo

STATUS=`echo $PODS_DATA | jq '.items[] | select(.metadata.name == '$pod_name')' | jq '.status.phase'`echo $pod_name,$STATUS

done

Copyright©2017 NTT corp./NTT comware corp.

Kubernetesリソース監視スクリプト ~ Deployment

59

#!/bin/bash

# Set args.ENDPOINT=$1DEPLOYMENT_NAME=$2THRESHOLD=$3

# Get Deployment json data.DEPLOYMENT_DATA=`curl -s $ENDPOINT/apis/extensions/v1beta1/deployments`

if [ -z "$DEPLOYMENT_DATA" ]then

echo "ERROR: Can't access to Kubernetes API endpoint."

exit 2fi

# Get Deployment status.AVAILABLE_REPLICAS=`echo $DEPLOYMENT_DATA | jq '.items[] | select(.metadata.name == "'$DEPLOYMENT_NAME'")' | jq -r '.status.availableReplicas'`

# Check Deployment status.STATUS=""if test $AVAILABLE_REPLICAS -eq 0then

STATUS=0 # Error: No Pods are available.elif test $AVAILABLE_REPLICAS -le $THRESHOLDthen

STATUS=1 # Warning: Available Pods are less than or equal to threshold.else

STATUS=2 # Healthy: Available Pods are more than threshold.fi

# Return Deployment status.echo $STATUS

Copyright©2017 NTT corp./NTT comware corp.

Kubernetesリソース監視スクリプト ~ Service

60

#!/bin/bash

# Set args.ENDPOINT=$3SERVICE_NAME=$1THRESHOLD=$2

# Get Service json data.SERVICE_DATA=`curl -s $ENDPOINT/api/v1/namespaces/default/endpoints/$SERVICE_NAME`

if [ -z "$SERVICE_DATA" ]then

echo "ERROR: Can't access to Kubernetes API endpoint."

exit 2fi

# Get Available Service Endpoints.AVAILABLE_ENDPOINTS=`echo $SERVICE_DATA | jq '.subsets[].addresses[].targetRef.name' | wc -l`

# Check Service status.STATUS=""if test $AVAILABLE_ENDPOINTS -eq 0then

STATUS=0 # Error: No Service Endpoints are available.elif test $AVAILABLE_ENDPOINTS -le $THRESHOLDthen

STATUS=1 # Warning: Available Service Endpoints are less than or equal to threshold.else

STATUS=2 # Healthy: Available Service Endpoints are more than threshold.fi

# Return Service status.echo $STATUS