2017年 11月 の投稿一覧

コンテナアプリケーションプラットフォーム「Red Hat OpenShift」を触ってみた Vol.2

【第2回】本記事では、コンテナアプリケーションプラットフォーム「Red Hat OpenShift」(以降、「OpenShift」と記載)を触ってみたエンジニアより、その概要と感想をご紹介したいと思います。

はじめに

本連載はサイオスグループのキーポート・ソリューションズの開発プログラマーが、コンテナアプリケーションプラットフォーム「Red Hat OpenShift」(以降、「OpenShift」と記載)を触ってみて、その概要と感想をご紹介します。(普段はアプリケーション開発に従事しているため、OS、ミドルウェアについては決して得意ではない筆者です。)
第2回目のテーマは「環境構築」、サーバ環境の準備からOpenShiftのインストールまでをゴールとし、極力自力で構築してみて課題や問題点を洗い出そうという主旨です。

環境構築時の作業リスト

事前の準備なしに1から環境構築を実施して発生した作業項目と作業時間を下記に記載します。
様々なエラーが発生し、調査も含めかなりの時間を要しましたが、本記事が皆様のトラブルシューティングの参考にしていたければと思います。下記にに発生事象などをご紹介したいと思います。
事前に準備ができていた場合、実際の作業量としては半日もかからない内容であると思います。
  ※「今回の作業時間」・・・手探りながらもなんとか実施した環境構築にかかった実績時間。調査時間が大半・・・。
  ※「今後の想定時間」・・・今回の環境構築により作成した手順書を元に、次回以降できるであろう想定の構築時間。

事前準備

開発プログラマーの立場からすると、ある意味OpenShiftの勉強からのスタートでした。Dev/Opsという言葉もあるため、今後はこのような仕組みも理解しなければならないと痛感します。
下記に環境構築にあたり参照したサイトをご紹介しておきます。
  • OpenShift Container Platform 3.6 Installation and Configuration

https://access.redhat.com/documentation/en-us/openshift_container_platform/3.6/pdf/installation_and_configuration/OpenShift_Container_Platform-3.6-Installation_and_Configuration-en-US.pdf

  • Install OpenShift Container Platform

https://docs.openshift.com/container-platform/latest/getting_started/install_openshift.html

次に、OpenShiftの推奨環境です。

要件

  • Red Hat Enterprise Linux 7.3 / 7.4
  • マスター:2vCPU、16GBメモリ
  • ノード:1vCPU、8GBメモリ
※All in One 構成も可能
上記の推奨環境を用意しようとしたのですが、弊社の諸事情によりMaster環境についてはメモリ8GBの環境しか用意できませんでした。

(このせいで後々ハマることには、この時点では気づきませんでした)
その後、RHEL 7.4 OSのインストールは難なく完了し、RHEL・OpenShiftのサブスクリプションも登録。
ちなみに、サブスクリプションは必ず登録しましょう!登録は以下のコマンドで簡単にできます。
#subscription-manager register
また、コマンドに慣れていない方はRHELのGUIからサブスクリプションメニューも用意されていますので、ご活用を。

OpenShiftインストールの前に

OpenShiftをインストール前にいくつかの設定が必要となります。
・DNSサーバの設定
  Master環境とNode環境をDNSサーバに登録する必要があります。
  
  MasterとNodeは互いにアクセスできるよう設定しておくことがポイントです。
  ちなみに、今回弊社では、外部からのOpenShift環境へのアクセスはさせたくなかったため、
      OpenShift環境(Master環境)内にDNSサーバを立てることにしました。
が、このせいで後々ハマッてしまうことに、現時点では気づきもしないのであった・・・。(その2)
・SSHの設定
  1. Node側のサーバでssh-keyを作成する。
#ssh-keygen
  2. 下記のコマンドを実行する
#ssh-copy-id -i ~/.ssh/id_rsa.pub XXX.XXX.XXX.XXX

・その他

  hosts設定、iptables設定等も実施。

 OpenShiftインストール

さあ、やっとOpenShiftのインストールです。
(事前確認から始めたため、ここまで来るのに数日かかりました・・・。自力で0から始めるのは大変ですね・・・。)
OpenShiftでは、いくつかのパッケージをインストールする必要があります。
ここでは詳細までは書ききれませんので、各パッケージのインストールコマンドのみ記載します。
なお、今回の環境構築では、アドバンスドインストールではなく、クイックインストールで実施しています。
※今回弊社では、詳細な手順書も作成していますが、それはまた別の機会に・・・。

1.パッケージインストール

ベースパッケージのインストール
→Master環境、Node環境それぞれで実行します。
yum install wget git net-tools bind-utils iptables-services bridge-utils bash-completion kexec-tools sos psacct
atomicパッケージのインストール
→Master環境、Node環境それぞれで実行します。
yum install atomic-openshift-utils
yum install atomic-openshift-excluder atomic-openshift-docker-excluder -y
システムパッケージのアップデート
→Master環境、Node環境それぞれで実行します。
yum update

2.Docker インストールと設定

dockerをインストール
→Master環境、Node環境それぞれで実行します。
yum install docker-1.12.6 -y
docker-storage設定
→Master環境、Node環境どちらかで実行すればOkです。
vim /etc/sysconfig/docker-storage-setup
docker-storage-setup

3.OpenShiftインストールと設定

OpenShift Container Platformをインストール
→Master環境、Node環境それぞれに対しインストールが必要ですが、片方のサーバにてまとめてインストールすることができます。
atomic-openshift-installer install
※インストール中の確認ポイント
→IPアドレスの入力を要求されます。このとき、Master環境のインストールか、Node環境のインストールか
 を質問されますので、まずはMaster環境をインストールします。
Enter hostname or IP address: 10.10.20.36
Will this host be an OpenShift master? [y/N]: y
→Master環境のインストールが完了すると、以下のサマリーが表示されます。
*** Installation Summary ***
Hosts:
– 10.10.20.36
  – OpenShift master
  – OpenShift node
  – Etcd
Total OpenShift masters: 1
Total OpenShift nodes: 1
NOTE: Add a total of 3 or more masters to perform an HA installation.
→続けて、ホストを追加するかどうかを質問されますので、次はNode環境をインストールします。
Do you want to add additional hosts? [y/N]: y
Enter hostname or IP address: 10.10.20.37
Will this host be an OpenShift master? [y/N]: n
→Node環境のインストールが完了すると、以下のサマリーが表示されます。
*** Installation Summary ***
Hosts:
– 10.10.20.36
  – OpenShift master
  – OpenShift node (Unscheduled)
  – Etcd
– 10.10.20.37
  – OpenShift node (Dedicated)
Total OpenShift masters: 1
Total OpenShift nodes: 2
NOTE: Add a total of 3 or more masters to perform an HA installation.
※「Hosts:」欄にNode側の環境も追加されています。
 また、「Total OpenShift nodes:」が「2」に増えていますね。
 なお、「Total OpenShift nodes:」が「2」になっている点についてですが、Master環境をインストールすると
 「1」となっているので、その際にNodeもインストールはされていますが、これはどうやらMaster環境が
 デフォルトでインストールするNodeであり、実際にユーザーが使用するNodeとは違うもののようです。

     ・・・こんなエラーが出ました!!

     
      推奨値である16GBに対し、5.8GBしかメモリがないよ!ということのようです。

推奨環境を用意できなかったツケが早速出てしまいました。

      調査したところ、インストール時にリソースの制限チェックが実行されており、これに引っかかってしまったことが判明。

下記の設定ファイルに対し、制限チェックをしない設定を追加し、なんとかクリアしました。

      ファイル名:「/root/.config/openshift/hosts」
      設定内容:
openshift_disable_check=disk_availability,memory_availability,docker_storage, docker_image_availability

4.疎通確認

      発生したエラーの調査も含め、3日間も費やしてしまいましたが、なんとかインストールが完了し、いざ疎通確認を開始。
      しかし、エラーは続けざまに発生するものです・・・。
NODEが”Ready”状態にならない!!
 
# oc get nodes
NAME                            STATUS                     AGE       VERSION
master.openshift.fiosys.co.jp   NotReady   16h       v1.6.1+5115d708d7
→調査したところ、OpenShiftでは全てのMaster、及びNodeでdnsmasqを使用するよう自動的に設定されますが、
 本事象では、こちらで立てたDNSサーバがポート53を使用しており、dnsmasqもポート53を使用するため、
 ポートが競合したために発生したものでした。

~参考~

※2 :
    
   ということで、気持ちとサーバをリフレッシュしようと、サーバを再起動して再度疎通確認を実施。
 すると、今度はNODE以前にOpenShift自体(Masterサービス)が起動しなくなってしまいました・・・。
 
  ※ちなみに正常に起動した場合は、下記のように表示されます。
 
再度調査を実施したところ、Master上で各NodeのPodやネットワーク情報を保持するetcdサーバがなぜか起動されていませんでした。
※おそらく自動起動するよう設定が必要と思われるが、今回はそこまでは調査できておりません。

手動でetcdサーバを起動することで、なんとかMasterサービスを起動することができました!

ということで、ついに環境構築が完了!
 
→「oc get nodes」コマンドでMaster、NodeともにReady状態になっていることを確認。
# oc get nodes
NAME                            STATUS                     AGE       VERSION
master.openshift.fiosys.co.jp   Ready,SchedulingDisabled   16h       v1.6.1+5115d708d7
node.openshift.fiosys.co.jp     Ready                      31m       v1.6.1+5115d708d7
 
→「oc get pods」コマンドでPodが稼働中であることを確認。


# oc get pods
NAME                       READY     STATUS    RESTARTS   AGE
docker-registry-1-3gnzp    1/1       Running   0          3m
registry-console-1-mm6dl   1/1       Running   0          4m
→ログイン画面を表示することが出来ました。
→ログインもできました!

→無事デプロイもできました!

注意すべきポイント(ハマッたことなど)

今回は普段よりアプリケーション開発に従事しており、ミドルウェアや基盤の構築はあまり経験がないメンバーにて
OpenShiftの環境構築を実施してみたのですが、かなり大変でした。
発生した事象は前述の通りですが、それ以外の細かい点も含め下記に記載しておきます。
  ●メモリ不足(制限チェックエラー)
   →推奨環境はきちんと守りましょう!
  ●Node状態が「Not Ready」になる事象(DNSサーバとポートが競合した事象)
   →用途が異なるものはサーバを分けましょう!
  ●サーバ再起動時にMasterサービスがactiveにならない
   →必要なプロセスはさらに勉強して把握しておきましょう!
  ●プロキシ設定に漏れがあった
   →Linuxをもっと勉強しましょう!

感想(大変だったことや今後の課題など)

今回環境構築を通してOpenShiftを触ってみて、感じたことを記載します。
  1.色んな参考サイトを見ながら構築作業を実施したが、そのまま利用できるものが見つからなかったため、
            やはり自分たちで手順書を作成する必要があると感じた。
  2.今回はクイックインストールで環境構築を実施したが、上述のエラーが発生した際に、
           その原因が分からず調査に苦労した。(実際にはRed Hatのサポートケースへの問合せも実施して対応)
    Red Hatの推奨はアドバンスドインストールとのことなので、今後改めて勉強し、理解する必要があると感じた。
  3.Red Hatのサポートケースで問合せたところ、迅速に回答が得られ、効果的であると感じた。
    また、コミュニティサイトを利用して質問を投げてみたが、こちらも比較的早めに回答が得られ、
            改めてOSSの強み(温かさ?)を感じることができた。

コンテナアプリケーションプラットフォーム「Red Hat OpenShift」を触ってみた Vol.1

第1回】本記事では、コンテナアプリケーションプラットフォーム「Red Hat OpenShift」(以降、「OpenShift」と記載)を触ってみて、その感想をご紹介したいと思います。

アプリケーション開発において、コンテナ技術の重要性が高まっているようです。金融IT分野のアプリケーション開発を生業としているサイオスグループの株式会社キーポート・ソリューションズ(以降:弊社)では今回、流行りに乗り遅れまいとレッドハット社が提供するコンテナベースのアプリケーションプラットフォーム「OpenShift」を触ってみることにしました。

実際、触るのは「これから」なのですが、今後数回にわたり以下のような観点で「OpenShift」を触ってみて、開発者視点でのメリットやデメリット、疑問点とその解決策、良い使い方がないか、などを探ってみたいと思います。

まずは、第1回目となる本記事では、「OpenShift」を触ってみることになった背景、目的、今回やってみたい内容などをご紹介したいと思います。

 

背景

以前、ポケモンGoが話題になったときにサーバ側処理が気になって調べたことがあります。Googleクラウド、Googleコンテナエンジン、Kubernetes、Dockerといったあまり馴染みのなかったワードが・・・。それまで、コンテナに対して、“便利なことができるんだろうなぁ“程度に思っていた私にとって、コンテナの有効性を初めて身近に感じた一件となりました。

さて、現在のIT業界において、コンテナの存在は急激に注目され始めています。そんな中、「OpenShift」はDocker、Kubernetesの機能に加えて、DevOpsに便利な機能を有すると謳われています。

OpenShiftによって、現課題は解消できる?開発の生産性は上がるの?運用は容易になるの?といった素朴な疑問を解消するためにもまずは触ってみよう!ということになりました。

 

  • アプリケーションを開発するにあたって現在の課題 (同じような課題をお持ちのベンダーさんは多いはず・・・)
    • 保守、開発しているシステムが多数あるが、システムごとに開発環境を用意しており、OS、M/W、フレームワーク、開発言語などさまざまで、環境が乱立している。
    • システムごとに環境や手順や異なるため、ナレッジを共有できず属人化している。(サーバ環境だけでなく、ローカル端末の開発環境も様々で、自分のPCは色んなツールがいっぱいで動きが重い。)
  • 素朴な疑問
    • 乱立している開発環境や手順など、本当に効率化できる?
    • 開発における生産性、スピードは本当に上がる?
    • DevOpsっていうけど、運用側のメリットって一体何?
    • コンテナによる環境の標準化の方法って?
    • また、標準化するために必要な下準備の内容とは?

などなど・・・。

そして、ひょっとするとこんな夢も叶えられるのでは?と次第に思うように・・。

  • このような課題や疑問を解決することは開発効率を上げることだけではなく、疲弊しがちな開発者のストレスも軽減し、ワークライフバランスまで改善したりするのかも・・・
  • 流行りのコンテナ技術を活用することによってDevOpsを実現するソリューションを提供することができるようになり、本分野における先駆けのSIerになれるかも・・・
  • そして、技術者個人としてもスキルアップできるかも・・・

目的

「OpenShift」を導入したとしても、使いこなせなければ効果は出ないはず。
というわけで、下記のような目的で「OpenShift」を触ってみることにします。

  • 目的
  1. メリット、デメリットを明確にする。
  2. 弊社のような開発ベンダーが利用するための情報を整理する。
  3. お客様環境に適用するための情報を整理する。
 

確認する内容

今後「OpenShift」を使って何をするか、を考えてみました。

 

基本的には、開発者視点で触ってみたいので、下記3点を試していきたいと思います。

① 環境を作る。
② OpenShiftをアプリケーション開発で利用する。
③ OpenShiftをアプリケーション運用で利用する。

■確認する内容

⇒「① 環境を作る」

      • 大変な部分はどこ?・・・みんなが詰まる部分を洗い出したい。
      • 必要な作業項目は?・・・今後、他の人が構築し易いようにTODOリストを作りたい。
      • 注意点すべき点はどこ?・・・パフォーマンス、リソース、設定などサイジングを考える上での元ネタを集める。

⇒「② OpenShiftをアプリケーション開発で利用する。」
「OpenShift」を触ってみる過程において、一番やってみたいことが盛りだくさんなのは、やはりアプリケーション開発です。
今回は弊社で持っている既存システムを試験的に移行し、軽微なPG改修を実施してみながら、以下の観点で確認したいと思います。

      • ビルド、デプロイの作業負荷は軽減できる?
      • システムの移行はスムーズにできる?
      • 複数システムの開発は容易にできるか?
      • 複数の開発メンバーによるビルド、デプロイ時の制御はできるか?
      • オーケストレーション機能ってどんなもの?
      • gitやJenkinsとの連携がスムーズにできるか?
      • ローカル端末の開発環境構築時の作業負荷は軽減できるか?

⇒「③ OpenShiftをアプリケーション運用で利用する。」
開発ベンダーとして「OpenShift」を利用する場合、その運用面においても気になる点がいくつもあります。
運用面においても前述の「②アプリケーションを開発する」にて移行、改修したシステムを用いて、以下の観点で確認したいと思います。

      • 開発環境用のコンテナを、そのまま本番環境にデプロイできるか?
      • パラメータを利用して簡単にコンテナ環境を構築することができるか?
      • 複数の開発メンバーによるビルド、デプロイ時の効率的なコンテナ管理方法は?
      • OS、M/W等のアップデートを自動化できるか?(もし試せれば。。)