LoginSignup
10
7

More than 5 years have passed since last update.

bluemix kubernetes clusterを試してみる

Last updated at Posted at 2017-03-19

概要

今回はbluemix kubernetes clusterを試してみました。

(祝)日本語対応

2017/04/21 Bluxmix supportから、日本語で見れるようになりました。
と丁寧にアナウンスいただき確認しました。
画面キャプチャは追って後日更新します。

# 操作画面が利用できないあなたへ
※2017/03/20現在、ブラウザ言語設定で「日本語」が優先設定されていると、
項目がすべて"TRANLATE"と表示されて操作不能という状態になっています。(windows chrome/firefox)
日本語の順序を最下位にすることで表示が可能です。
language.PNG

※2017/03/20現在 ticketでフィードバックいれました。
国際化作業を実施中なのでこうなっているとのことです。

Bluemix Kubernetes Clusterの開始

1.Kubernetes Clusterをクリック

image

2. Cluster typeを選ぶ

2つのCluster typeから選びます。

無料版(Free)
設定項目 設定内容 メモ
Cluster Name クラスタ名 まさかと思い、日本語いれたらOKでした
Location: dal10 現在はダラスのみ固定
Machine type: Micro 1CPU-4GB RAM 固定
Number of workers: 1 固定
有料版(Paid)
設定項目 設定内容 メモ
Cluster Name クラスタ名
Kubernetes version 1.5.3 3/20現在固定
Location: dal10 現在はダラスのみ固定
Machine type: Micro 2CPU-4GB RAM
Balanced 4CPU-16GB RAM
Balanced 16CPU-64GB RAM
Balanced 32CPU-128GB RAM
Balanced 56CPU-242GB RAM
Number of workers: 1-100000000000000000000 (試しに入れられるだけいれてみました・・・)
Hardware: Dedicated 専有DockerHost
Shared 共有DockerHost

3. 4~5分でDeploy完了

Bluemix CLIのcontainer-serviceプラグインを導入する。

設定手順

1. Bluemix CLIへcontainer-serviceプラグインを導入する

> bx plugin install container-service -r Bluemix

image

2. Bluemix ヘログイン

> bx login -a https://api.ng.bluemix.net

image

3. Bluemix コンテナサービスの起動

> bx cs init

image

4. クラスタの切り替え

> bx cs cluster-config 日本語クラスタ

image

5. 稼働クラスタの確認

> bx cs clusters

image

6. kubernetes dashboardの起動

kubectl proxyを利用してdashboardへ接続します。

> kubectl proxy

image

ブラウザから以下URLを開く

http://localhost:8001/

image

7. コンテナのデプロイ

Specify app details below・・・スペック情報をWebから
Upload a YAML or JSON file・・・YAML or JSONに記述した情報を元にデプロイ

基本設定項目
設定項目 設定項目(日) 設定内容 メモ
AppName デブロイアプリ名 テストアプリ
Container image コンテナイメージ名 centos:7 Docker Hub/Bluemix registry/google container registry(?)で入手可能なイメージ
Number of pods ポッド数 3 デプロイするpodの数
Service サービス External None(なし)Internal(内部IP)/External(外部IP)
Port[A1] 公開ポート番号 22 SSHポートの開放例
Target port[A1] コンテナ側ポート番号 22 SSHポートの開放例
Protocol[A1] プロトコル名 TCP SSHポートの開放例

[A1]は組み合わせで繰り返しポート数分設定可能
※Free typeは、ここで公開ポートを指定するとうまくいかない。

拡張設定項目

SHOW ADVANCED OPTIONSをクリックすると以下設定ができる

設定項目 設定項目(日) 設定内容 メモ
Description 詳細 test application conainter 詳細メモ
Labels Key[B1] ラベル キー app Podメタ情報ラベル(初期値)
Labels Value[B1] ラベル 値 test Podメタ情報キー(初期値)
Labels Key[B1] ラベル キー version Podメタ情報ラベル(初期値)
Labels Value[B1] ラベル 値 7 Podメタ情報キー(初期値)
Namespace ネームスペース default default/ibm-system/kube-system/Create a new namespaceがあるが、defaultのまま
Image Pull Secret イメージ取得用シークレット (null) docker imageを取得するときに必要なシークレット
CPU requirements(cores) 要求CPUコア数 (null) millicore指定じゃなくなった?
Memory requirements(MiB) 要求メモリMiB数 (null) MiBです。MBではありません。(1024kb計算)
Run command 実行コマンド (null) 実行コマンド
Run command arguments 実行コマンドオプション (null) 実行コマンドオプション
Run as privileged 特権での実行 false false=チェックしない。shareのdockerhostだと無理なんじゃないかな?あとで試す
Environment variables Name[B2] 環境変数名 TMP_ENV コンテナ内に引き継ぐ環境変数名
Environment variables Value[B2] 環境変数値 HelloWorld コンテナ内に引き継ぐ環境変数の値

[B1]は組み合わせで繰り返しラベルが設定可能
[B2]は組み合わせで繰り返し環境変数が定義可能

8. 盛大に失敗してみる。

当然CPU数が1なので2個以上のコンテナは起動ができないとエラーとなります。
image

9.コンテナデプロイまで暫し待つ

imagesをcentos:7としたら、crash loopして失敗してしまった。
image

nginx:latestとしたことですぐ動作した。
image

外部からのアクセス

ここからはキャプチャが一部変わります。
(noderedコンテナで試すことに統一します。後日前半も入れ替えてみます)

(2017/03/23現在)

kubernetesのload balancerはpaidtype以上定義ができないような記述も見たので、
そもそもそれが原因なのか、現在問い合わせ中

SVCの種類

Service(SVC)には3種類あり、Free typeで使用できるのは「Node Port」のみだということがわかりました。

種類 使用可能区分 説明
NodePort 無償/有償両方 1コンテナ1ポートが開放可能/コンテナ起動ごとにポート番号変動(30000 - 32767のハイポートのみで80/443など任意のポート開放ができない)
Load balancer 有料のみ Layer3? Layer4?ロードバランサ(TCP/UDP over IP)
グローバルIP(portable public)が4つ用意され、アプリ用の外部TCP/UDPロードバランサが作成可能。コンテナの起動停止に左右されない。
Ingress 有料のみ Layer7ロードバランサ。
URLベース、パス振り分け、SSLロードバランスができる

※この辺は自分もまだぼやーっとしてるところがあるので、ご指摘いただければ幸いです

kubernetes dash board画面ではGUIで登録できないため、
この手順ではYAMLファイルを作成して利用してみます。

NodePortでのポート開放手順

1.YAMLの作成

今回はテキストエディタを使用して。nodered-svc.ymlファイルを作成しました。
NodePortの部分は試しに1880をいれてデプロイしてみたところ、
使用可能レンジから外れたためエラーとなり使用できませんでした。
(30000 - 32767の範囲であれば指定可能なようです)

apiVersion: v1
kind: Service
metadata:
  name: nodered
  labels:
    run: nodered
spec:
  selector:
    app: nodered
  type: NodePort
  ports:
   - protocol: TCP
     port: 1880
     #nodePort: 1880

2. yamlの登録

kubenetes dashboard (kubectl proxyを使用して、先程開けたdashboardです。 http://127.0.0.1:8001/ui/)を利用してServiceのyamlを登録します。

「・・・」をクリックして、nodered-svc.ymlファイルを選択し、Uploadします。
image

3. Service登録の確認

うまく登録ができると、以下画面のようにyamlで登録したServiceが表示されます。
image

4. IPアドレスの確認

コマンドプロンプトに戻り、Kubernetesに割り当てられているbluemix側のグローバルIP(FCR)とローカルIP(BCR)のIPを確認します。
どちらのIPでも良いのでメモしておきます。
BCRはもちろんSSL-VPNでSoftLayerのBCR(10.0.0.0/8)につながるようにしておいてください。

> bx cs workers <クラスタ名>

image

5. kubernetes側のサービスの確認

正しくServiceが登録されると、NodePortの場合、EXTERNAL-IPの箇所がとなります。
ここで、注目。1880:31791/TCPとこの画面キャプチャでは表示されていますが、
<1880=コンテナ側ポート番号>:<外部公開ポート番号>と認識してください。

> kubectl get svc

image

失敗したあなたへ。そしてまたつまずく。(2017/03/23現在 -> 2017/03/24解決)

EXTERNALがpendingって・・・
この記事の項目どおり、yamlで登録してNodePortとしてServiceを登録すれば、
こういったことは無いですが、僕は最初の段階でNodePortでなくkubenetes dashboardのGUI画面でポート開放をしようとしたため、このようになりました。

この場合はkubernetes dashboardの、SevicesからAction->Deleteを使用してServiceを削除しましょう。
image

6. Servicesの設定詳細の確認

> kubectl describe svc nodered

image

7. アクセスしてみる

ブラウザから、http://<グローバルIP or ローカルIP>:/でアクセスしてみます。

image

→ 接続できました!!

感想

まずはkubernetes clusterでpodがデプロイできるところまでを一気にやってみました。
kubernetesの知識がまだ筆者に足りないと痛感。出直してきます。

今わかっていること

  1. free typeは1nodeが上限。CPU割当がmillicoreでなく、core単位なので1デプロイしか組めない。dockerhubのイメージを切り替えて使うなら、deploy configの置き換えなどをする必要あり。
  2. kubectl proxyするkubernetes dashboardは日本語化済み。(kubernetes側が、i18n対応なので)冒頭の言語順位を変えていないブラウザで試すと日本語環境になる。

TODO

1.centosでなぜcrash loop back offとなるのか確認
2.特権実行
3.有償プランでコンテナのpod展開まわり
4.コンテナのServices公開されたポートはinternetから見えないのか確認する
 kubernetes dashboardではCluster IPがプライベートアドレスで10.10.10.からはじまるIPだった。
 これを外からアクセスする手段の確認。
5.永続ストレージまわりの調査。PVCはできそうだけどPVは権限的に追加できるのか

更新履歴

2017/03/23 TODO 4.コンテナのポート開放周りを試したので追記(でも解決してない)、今わかっていることを追記
2017/03/24 TODO 4.コンテナのポート開放周りが成功したので追記・変更
2017/04/21 bluemix consoleのkubernetes画面が日本語化対応した為、Update

キャプチャが変わった理由

centosコンテナがcrash look back off でデプロイうまくできていなので、
いったん見捨ててngixコンテナ、noderedコンテナの2つをデプロイして外からつなごうとしましたが今はまだ途中です。
※dockerイメージ、というかデプロイ単位を入れ替えるときには既存の設定を全部消してからデプロイしています。
YAMLを直接Editすれば、docker hubの元イメージを指定できます。

2017/03/24素材としてnoderedコンテナイメージを利用してみました。

10
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
7