• 検索結果がありません。

自己紹介 伊藤広樹 ( 所属 : 日本電信電話株式会社 ) 2015 年 2016 年 社内 OpenStack 基盤の運用 2017 年 ( 現在 ) Blazarにコントリビュート開始 平井普 ( 所属 :NTTコムウェア) 2011 年 2016 年 NTT 通信網 NW 機器の運用設定 20

N/A
N/A
Protected

Academic year: 2021

シェア "自己紹介 伊藤広樹 ( 所属 : 日本電信電話株式会社 ) 2015 年 2016 年 社内 OpenStack 基盤の運用 2017 年 ( 現在 ) Blazarにコントリビュート開始 平井普 ( 所属 :NTTコムウェア) 2011 年 2016 年 NTT 通信網 NW 機器の運用設定 20"

Copied!
60
0
0

読み込み中.... (全文を見る)

全文

(1)

0から始める

OpenStack on Kubernetesの導入と運用

日本電信電話株式会社

伊藤 広樹

NTTコムウェア株式会社

平井 普

(2)

自己紹介

伊藤 広樹 (所属: 日本電信電話株式会社)

2015年〜2016年

社内OpenStack基盤の運用

2017年〜(現在)

Blazarにコントリビュート開始

平井 普 (所属:NTTコムウェア)

2011年〜2016年

NTT通信網NW機器の運用設定

2016年〜(現在)

OpenStack基盤の運用

(3)

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

(4)

Kubernetes

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

ユーザ

コンテナ配置

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

(5)

じゃあ, Kubernetesを使えば

(6)

OpenStack on Kubernetes

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

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

Keystone

Nova

Glance

Cinder

Neutron

コンテナ

管理

(7)

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

コンテナ&Kubernetes初心者

の私たちが

(8)

アジェンダ

0から始める前に

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

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

(9)
(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

(11)

目標とする構成 (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ノードのプロセスをコンテナ化

(12)

Kubernetes適用に向けた方針

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

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

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

(13)

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

Masakariプロジェクト

[1,2]

のCIシステムが対象

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

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

バージョン: Newton版

Kubernetes化する環境

13

[1] https://wiki.openstack.org/wiki/Masakari

(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

(15)
(16)

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

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

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

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

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

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

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

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

(17)

OpenStack on Kubernetes導入までの道のり

STEP1: Kubernetesクラスタの設計

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

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

Kubernetesのリソース作成

STEP3: 実際に環境構築

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

17

(18)

OpenStack on Kubernetes導入までの道のり

STEP1: Kubernetesクラスタの設計

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

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

● Kubernetesのリソース作成

STEP3: 実際に環境構築

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

(19)

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

(20)

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

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

今回のKubernetesクラスタ設計

STEP1: Kubernetesクラスタの設計

kube-proxy

kubelet

kube-controller-manager

kube-scheduler

docker

flannel

kube-apiserver

kube-proxy

kubelet

kube-controller-manager

kube-scheduler

docker

flannel

kube-apiserver

kube-proxy

kubelet

kube-controller-manager

kube-scheduler

docker

flannel

kube-apiserver

(21)

OpenStack on Kubernetes導入までの道のり

STEP1: Kubernetesクラスタの設計

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

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

Kubernetesのリソース作成

STEP3: 実際に環境構築

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

21

(22)

Kubernetesの用語説明

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

Pod

Deployment

Service

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

(23)

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

(24)

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

Dockerfile

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

Pod/DeploymentとServiceの設定

yamlファイルを作成

OpenStackの各種設定ファイル

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

今回の説明範囲

(25)

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

増設/減設の柔軟性

設定ファイルの量

今回の選択

(26)

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

Serviceの利用

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-api

ClusterIP

(27)

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

にアクセス

(28)

OpenStack on Kubernetes導入までの道のり

STEP1: Kubernetesクラスタの設計

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

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

● Kubernetesのリソース作成

STEP3: 実際に環境構築

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

(29)

環境構築の流れ

Kubernetesクラスタ構築

OpenStackの設定ファイル設置

Kubernetes上にOpenStackをデプロイ

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

DeploymentとServiceの作成

構築試験

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

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

29

STEP3: 実際に環境構築

(30)

構築したOpenStack on Kubernetes

STEP3: 実際に環境構築

kube-apiserver

kube-controller-manager

kube-scheduler

kube-proxy

kubelet

docker

flanneld

etcd

apache2(keystone)

neutron-server

nova-api

nova-scheduler

nova-conductor

nova-consoleauth

nova-novncproxy

cinder-api

cinder-scheduler

x

2

x

2

x

2

x

2

:Pod

:コンテナ

:プロセス

(31)

結局, 導入してみてどうなった?

Controllerノードの標準構成(相当)をKubernetesのみで実現できた

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

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

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

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

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

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

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

31

(32)
(33)

運用を始めるために

33

ユーザからの

問い合わせ対応

機器、サービスの

状態監視

トラブル時の

解析、復旧

必要に応じた

メンテナンス

説明対象

(34)

OpenStack on Kubernetes監視までの道のり

STEP1: 監視項目の決定

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

STEP2: 監視ツールの設計

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

STEP3: 実際に環境構築

監視環境を構築

STEP1

監視項目

STEP2

監視ツール

STEP3

環境構築

(35)

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

35

STEP1

監視項目

STEP2

監視ツール

STEP3

環境構築

35

35

kube-apiserver

kube-controller-manager

kube-scheduler

kube-proxy

kubelet

docker

flanneld

etcd

:コンテナ

:プロセス

物理サーバ

Kubernetes

クラスタ

:Pod

:Deployment

:Service

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

プロセス死活

OpenStackサービス

OpenStack

サービス

Kubernetes

リソース

keystone

apache2(keystone)

x

2

neutron-server

x

2

nova-api

nova-scheduler

nova-novncproxy

・・・

x

2

cinder-api

cinder-scheduler

x

2

neutron

nova

cinder

Pod

Deployment

Service

(36)

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

STEP1

監視項目

STEP2

監視ツール

STEP3

環境構築

kube-apiserver

kube-controller-manager

kube-proxy

kubelet

flanneld

etcd

Kubernetes

クラスタ

プロセス死活

OpenStackサービス

OpenStack

サービス

Kubernetes

リソース

keystone

apache2(keystone)

x

2

neutron-server

x

2

nova-api

nova-scheduler

nova-novncproxy

・・・

x

2

cinder-api

cinder-scheduler

x

2

neutron

nova

cinder

Pod

Deployment

Service

異常時サービス提供不可のリスク低

(即時対応不要)

異常時サービス提供不可のリスク高

(即時対応必要)

(37)

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

37

STEP1

監視項目

STEP2

監視ツール

STEP3

環境構築

Kubernetesの監視に特別なツールは必須でない

→OSSのZabbixで簡単に実現可能

提供層

監視項目

Zabbixでの実現

サービス

OpenStackサービス状態

従来通りのサービス監視

Kubernetes

リソース

Service状態

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

Deployment状態

Pod状態

Kubernetes

クラスタ

プロセス死活

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

物理サーバ

サーバ死活、HWリソース

デフォルトTemplateを適用

従来監視と同様

従来監視と同一

従来監視と同一

従来監視と異なる

(38)

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

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

KubernetesのREST APIにHTTPアクセス

レスポンスjsonから該当リソースの状態を抽出し、状態を出力するだけ

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_LIST

4 do

5 STATUS=`echo $PODS_DATA | \

6 jq '.items[] | select(.metadata.name == '$pod_name')' | jq '.status.phase'`

(39)

環境構築:構築の流れ

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

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

監視対象ノードの登録

各層の監視項目を設定

39

STEP1

監視項目

STEP2

監視ツール

STEP3

環境構築

zabbix_server

kube-apiserver

kube-controller-manager

kube-scheduler

kube-proxy

kubelet

docker

flanneld

etcd

zabbix_agent

nova

nova-api

nova-scheduler

・・・

nova-novncproxy

x

2

・・・

(40)

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

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

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

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

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

事前の検証は必要

(41)

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

まだ分からない・・・

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

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

(42)
(43)

まとめ

結果:

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

楽になった

Kubernetesを使ってOpenStackを運用してみて「楽になった」か?

まだ分からない・・・

考察:

どんな人(環境)に向いている?

プロセス配置まで厳密に管理したい運用者には, 向いていないかも...

(大規模チームでの運用?)

プロセス配置の管理を気にしない運用者には, 向いているかも…

(少数精鋭チームでの運用者?)

43

(44)
(45)
(46)

OpenStackに適用する際の注意点

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

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

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

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~

(47)

Dockerfile ~ Keystone

47

FROM ubuntu:16.04

RUN apt update && apt install -y software-properties-common \ && add-apt-repository cloud-archive:newton

RUN apt update && apt install -y keystone apache2 libapache2-mod-wsgi ENV APACHE_RUN_USER=www-data ENV APACHE_RUN_GROUP=www-data ENV APACHE_PID_FILE=/var/run/apache2/apache2.pid ENV APACHE_RUN_DIR=/var/run/apache2 ENV APACHE_LOCK_DIR=/var/lock/apache2 ENV APACHE_LOG_DIR=/var/log/apache2 EXPOSE 5000 35357 CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]

keystone

(48)

Dockerfile ~ Nova 1/2

FROM ubuntu:16.04

RUN apt update && apt install -y software-properties-common \ && add-apt-repository cloud-archive:newton

RUN apt update && apt install -y nova-api EXPOSE 8774

CMD ["/usr/bin/nova-api", "--config-file", "/etc/nova/nova.conf", "--log-file", "/var/log/nova/nova-api.log"]

nova-api

FROM ubuntu:16.04

RUN apt update && apt install -y software-properties-common \ && add-apt-repository cloud-archive:newton

RUN apt update && apt install -y nova-scheduler

CMD ["/usr/bin/nova-scheduler", "--config-file", "/etc/nova/nova.conf", "--log-file", "/var/log/nova/nova-scheduler.log"]

nova-scheduler

FROM ubuntu:16.04

RUN apt update && apt install -y software-properties-common \ && add-apt-repository cloud-archive:newton

(49)

Dockerfile ~ Nova 2/2

49

FROM ubuntu:16.04

RUN apt update && apt install -y software-properties-common \ && add-apt-repository cloud-archive:newton

RUN apt update && apt install -y nova-novncproxy EXPOSE 6080

CMD ["/usr/bin/nova-novncproxy", "--config-file", "/etc/nova/nova.conf", "--log-file", "/var/log/nova/nova-novncproxy.log"]

nova-novcnproxy

FROM ubuntu:16.04

RUN apt update && apt install -y software-properties-common \ && add-apt-repository cloud-archive:newton

RUN apt update && apt install -y nova-consoleauth

CMD ["/usr/bin/nova-consoleauth", "--config-file", "/etc/nova/nova.conf", "--log-file", "/var/log/nova/nova-consoleauth.log"]

(50)

Dockerfile ~ Cinder

FROM ubuntu:16.04

RUN apt update && apt install -y software-properties-common \ && add-apt-repository cloud-archive:newton

RUN apt update && apt install -y cinder-api python-memcache EXPOSE 8776

CMD ["/usr/bin/cinder-api", "--config-file", "/etc/cinder/cinder.conf", "--log-file", "/var/log/cinder/cinder-api.log"]

cinder-api

FROM ubuntu:16.04

RUN apt update && apt install -y software-properties-common \ && add-apt-repository cloud-archive:newton

RUN apt update && apt install -y cinder-scheduler

CMD ["/usr/bin/cinder-scheduler", "--config-file", "/etc/cinder/cinder.conf", "--log-file", "/var/log/cinder/cinder-scheduler.log"]

(51)

Dockerfile ~ Neutron

51

FROM ubuntu:16.04

RUN apt update && apt install -y software-properties-common \ && add-apt-repository cloud-archive:newton

RUN apt update && apt install -y neutron-server EXPOSE 9696

CMD ["/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"]

(52)

Deployment ~ Keystone

---apiVersion: extensions/v1beta1 kind: Deployment metadata: name: keystone-deployment spec: 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

keystone-deployment.yaml

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

(53)

Deployment ~ Nova

53

---apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nova-deployment spec: 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

(54)

Deployment ~ Cinder

---apiVersion: extensions/v1beta1 kind: Deployment metadata: name: cinder-deployment spec: 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

cinder-deployment.yaml

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

(55)

Deployment ~ Neutron

55

---apiVersion: extensions/v1beta1 kind: Deployment metadata: name: neutron-deployment spec: 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

(56)

Service ~ Keystone / Nova

---apiVersion: v1 kind: Service metadata: name: keystone-service spec: type: NodePort ports: - name: public port: 5000 targetPort: 5000 nodePort: 5000 protocol: TCP - name: admin port: 35357 targetPort: 35357 nodePort: 35357 protocol: TCP selector: app: keystone

keystone-service.yaml

---apiVersion: v1 kind: Service metadata: name: nova-service spec: type: NodePort ports: - name: nova-api port: 8774 targetPort: 8774 nodePort: 8774 protocol: TCP - name: nova-novncproxy port: 6080 targetPort: 6080 nodePort: 6080 protocol: TCP selector: app: nova

nova-service.yaml

(57)

Service ~ Cinder / Neutron

57

---apiVersion: v1 kind: Service metadata: name: cinder-service spec: type: NodePort ports: - name: cinder-api port: 8776 targetPort: 8776 nodePort: 8776 protocol: TCP selector: app: cinder

cinder-service.yaml

---apiVersion: v1 kind: Service metadata: name: neutron-service spec: type: NodePort ports: - name: neutron-server port: 9696 targetPort: 9696 nodePort: 9696 protocol: TCP selector: app: neutron

neutron-service.yaml

(58)

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

#!/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 list

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

for pod_name in $POD_LIST do

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

(59)

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

59

#!/bin/bash # Set args. ENDPOINT=$1 DEPLOYMENT_NAME=$2 THRESHOLD=$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 2 fi

# 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 0 then

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

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

(60)

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

#!/bin/bash # Set args. ENDPOINT=$3 SERVICE_NAME=$1 THRESHOLD=$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 2 fi

# 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 0 then

STATUS=0 # Error: No Service Endpoints are available.

elif test $AVAILABLE_ENDPOINTS -le $THRESHOLD then

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

参照

関連したドキュメント

電気設備保守グループ 設備電源グループ 所内電源グループ 配電・電路グループ 冷却・監視設備計装グループ 水処理・滞留水計装グループ

電気設備保守グループ 設備電源グループ 所内電源グループ 配電・電路グループ 冷却・監視設備計装グループ 水処理・滞留水計装グループ

この設備によって、常時監視を 1~3 号機の全てに対して実施する計画である。連続監

建屋水位・地下水位の監視と制御 特定原子力施設 (第23回)資料 監視・評価検討会 加筆.

2013年3月29日 第3回原子力改革監視委員会 参考資料 1.

冬場エアコン温度26度を24度に設定。デマンド監視装置(約 330 千円)を導入し、最大需要電力の21K Wの削減が実施できた。(月間 35

機関室監視強化の技術開発,および⾼度なセ キュリティー技術を適用した陸上監視システム の開発を⾏う...

定期監査(原則的に 1 回/2