2017年11月20日月曜日

Oracle Linux と Docker とその周辺のもの(JPOUG in 15 minutes #6)

JPOUG in 15 minutes #6 に登壇しました。
http://www.jpoug.org/2017/09/20/in15m6

当日の発表資料をもとに、ブログにおこしてみました。

Oracle Linux と Docker とその周辺のもの
ORACLEで Docker というと、まずは Database や Java だと思います。
しかし ここでは、それ以外 の ORACLE x Docker の紹介を試みたいと思います。



ねらい
  • 知られざる ORACLE の Docker を使ったソリューションを紹介してみる。
  • そして、どこらへんが ORACLE なのか。
  • 帰ったらやってみよう。
内容
  • Oracle Linux で Docker (入り口だけ)
  • Oracle Linux の Kubernetes
  • Oracle OpenStack と Docker(と Oracle VM Server)

Oracle Linux で Docker。

Oracle Linux での Docker 情報は、基本的に Oracle Linux と一緒にあります。
(以降で「OL」が出てきたら Oracle Linux のことです)
  • ドキュメントも、エラータも、Oracle Linux と一緒です。
  • 特にドキュメントは、おすすめ。
    Docker 入門書のかわりにもなると思います。(日本語版あり)
ORACLE での Docker ドキュメントは
「Oracle Linux」の関連ドキュメントっぽい扱いになっています。

Oracle Linux 7
Oracle Container Runtime for Docker User's Guide
https://docs.oracle.com/cd/E52668_01/E87205/html/index.html

Oracle Linux 6
Docker User's Guide
https://docs.oracle.com/cd/E37670_01/E75728/html/index.html

Oracle LinuxDocker User's Guide(古め)
https://docs.oracle.com/cd/E77565_01/E75728/html/index.html

Web サイトでも、下記の赤フォーカス部分のように
Docker についてのドキュメントは、
Oracle Linux のドキュメントと一緒においてあります。



上記のドキュメントだけでなく、
OL7 の管理者ガイド(これは日本語版あり)にも Docker についての章があります。
https://docs.oracle.com/cd/E77565_01/e73581/ol7-docker.html



Update 情報は、Oracle Linux の El-errata ML から入手できます。
El-errata -- Errata Announcements for Oracle Linux
https://oss.oracle.com/mailman/listinfo/el-errata

たとえば下記のような情報が得られます。
(これは、最近きた docker-engine のアップデートの例です)
https://linux.oracle.com/errata/ELBA-2017-3628.html



Docker Engine のソフトウェアは ORACLE のサイトにあります。
しかし、Docker 自体は ORACLE の独自機能があるわけではなく、普通のものです。
インストーラと RPM パッケージは、基本的に ORACLE のサイトにあります。
  • OL の ISO は Oracle Software Delivery Cloud (旧 e-Delivery)
  • RPM は、Oracle Public Yum(docker-engine も)
  • Vagrant Box もある。
Vagrant Box は、URL 的には yum.oracle.com の配下にあります。
Box は、デフォルトで Yumのリポジトリが多めに(developerとか、previewとかも)
有効化されていて、Docker などの検証のときにも便利です。



OL Docker でも、普通に Docker レジストリが使えます。
どこのレジストリでも利用できるますが、ORACLE 製品のイメージのダウンロードは、
確実なのは Oracle Container Registry か、Docker Store かなと思います。
  • ORACLE 製品は、まずは Oracle Container Registry からがよさそう。
  • それ以外のイメージ(自分でビルドしたものなど)は、
    Docker Hub など、自由に(パブリックでも、ローカルのものでも)使用できる。
製品サポートがどこまで提供されるかは、よくよくみたら・・・・要確認
ドキュメントだと・・・
https://docs.oracle.com/cd/E52668_01/E87205/html/ol_about_docker.html

パブリックのレジストリとしては、一般的なレジストリ(たとえば下記のような)
が利用できます。
  • Docker Hub
  • Docker Store
  • Oracle Container Registry
また、レジストリ自体を「registry」コンテナで作成する場合は、
Oracle Container Registry にも registry がおかれています。

Docker Hub の「registry」。
https://hub.docker.com/_/registry/



Oracle Container Registry の「registry」。※要ログイン
このイメージは container-registry.oracle.com/os/registry で docker pull できます。



Oracle Linux 特有のソリューションは、基本的に UEK を使う想定になっていて、
Oracle Linux での Docker もそうなっています。
  • OL で Docker 使うときは RHCK にしない。
  • OL6 / OL7 どちらも。
  • ちなみにOracle VM ServerもUEK。
OL Docker では、下記のように docker-engine の RPM に
UEK 4 の依存関係が設定されています。



Oracle Linux と Kubernetes(k8s)。

まず Kubernetes のざっくりイメージを描いてみました。
(この後の説明むけなので、細かいところは はしょっています)



そして、Oracle Linux での Kubernetes は下記のような感じになります。



kubeadm(Kubernetes 自体を Docker コンテナでデプロイする)を
ORACLE 独自のスクリプト「kubeadm-setup.sh」で利用します。
Kubernetes を構成する コンテナ イメージは、
デフォルトでは Oracle container Registry からダウンロードされます。
(gcr.io などではなく)

kubeadm-setup.sh は kubeadm の PRM に含まれていて・・・



下記のような感じのスクリプトです。

役割
  • セットアップ
  • ノードの起動/停止
  • バックアップ・リストア(?)

内容
  • コンテナのDL元を指定。
    (container-registry.oracle.com/kubernetes)
  • Docker サービスの状態。
  • busybox コンテナをダウンロードして pull / run の確認。
  • SELinux の状態。
  • iptables(firewalld)の状態確認~設定。
  • sysctl 設定追加
  • registry 設定
  • kubeadm init
  • DNSサービスの設定
  • オーバーレイ ネットワーク設定(flannel を利用)
  • など

Kubernetes のセットアップは、下記のような流れになります。
Kubernetes 自体のセットアップは、kubeadm-setup.sh up / join だけなので
とても簡素化されています。
  1. Oracle Linux インストール&設定
  2. yum で Docker インストール & 起動
  3. Oracle Container Registry にログイン
    # docker login container-registry.oracle.com
  4. yum で kubeadm インストール。(kubeadm のあるリポジトリ有効に)
    ※最近の Oracle Linux + Kubernetes でリポジトリ変更されました。
    Oracle Container Services Kubernetes 1.1.9 の様子。
  5. マスターで
    # kubeadm-setup.sh up
  6. ワーカーで
    # kubeadm-setup.sh join --token=xxxxxx
詳しくは下記もどうぞ。

Kubernetes でのコンテナの起動は、docker run(のかわりの kubectl run)のように
コマンドラインからの起動も可能ですが、一般的には YAML ファイルを利用する
ことになると思います。

Kubernetes の雰囲気をお伝えするために、
例として ORACLE のドキュメントでコマンド ラインから起動している Pod を、
YAML ファイルに置き換えて起動してみます。
※ hello-world は、さらに短縮して hello にしてしまっています。

下記のような YAML を用意して・・・
※Service と Pod を定義してあります。
※2行目のリンクの YAML のほうが、精査されています。(2018/01/09 追記)

コンテナを起動すると・・・



ワーカー ノードのどれか(nodes)の IP アドレスの
公開されたポート(上記の例だと32666番)でコンテナにアクセスできます。



YAML で Kubernetes を利用してみる様子を、もう少しわかりやすくまとめました。
Oracle Linux 7 の Kubernetes で kubectl Basics。 (2018/01/09追記)

Oracle Linux の Kubernetes の気づき
  • ホストがマルチホーム(複数 NIC)だとkubeadm-setup.shだめでは・・・?
  • マスター ノードの冗長化は・・・ない・・・?
    マスターノードが落ちても Pod などが落ちるわけではないので割り切りか?
  • ORACLE でテストされているのは、 kubeadm-setup.sh のケースとのこと。
  • backup / restore をためしたら・・・
    Checking sha256sum of the backup files ...
    [ERROR] backup file has checksum problem

個人的な感想としては、

ドキュメントに気になる記載があり・・・
The instructions provided here, assume that you are new to Kubernetes and are using the provided kubeadm-setup.sh script to deploy your cluster. This script is developed and tested at Oracle and deployment using this script is fully supported. Alternate configurations and deployment mechanisms are untested by Oracle.

  • セットアップは簡単。「まずはここから」的な感じがよさそうですが、
    Kubernetes を試しに使いだす分には十分かと思います。
  • 今後 Docker がネイティブに k8s サポートするそうなので、
    Oracle Linux の Kubernetes も、すぐに様子が変わるかもしれません。
    試すなら今かなと思います。

Oracle OpenStack と Docker。

なぜ、ここで OpenStack?
  • Docker のパッケージングの例として紹介します。
    • OpenStack 関連サービスを、全部 Docker コンテナでデプロイする。
    • Docker としては「マルチホスト、オーバーレイ ネットワーク・・・」といった使い方はされていない。ここでは、Docker は ただパッケージング ツールとして利用される。
    • サービス展開が簡単。削除もホストを汚さないので簡単。
  • Oracle VM Server でも Docker をインストール・・・

まず、ざっくり OpenStack のイメージをを描いてみました。
(この後の説明むけなので、細かいところは全部はしょっています)


そして、Oracle OpenStack では下記のように展開されます。
基本的に、OS は Oracle Linux を利用して、
Kolla というプロジェクトを利用して
OpenStack コンポーネントが Docker コンテナとしてデプロイされます。
(OpenStack から提供されるサービスや VM までコンテナに変わるわけではないです)
そして、Oracle VM Server もコンピュートノードとしてサポートされます。


    Kolla というものは、ORACLE 独自のものではありません。
    また、Kolla でデプロイされるコンテナは Docker Hub にも置かれています。


    Oracle OpenStack では、R2 以降 Kolla を利用していて、
    コンテナイメージは、Oracle Software Delively Cloud にあります。
    これは、ローカル Docker レジストリにインポートして利用します。
    そして R3 では、Oracle Container Registry にも配置されています。


    ちなみに、Kolla でデプロイされるコンテナ イメージは、
    Docker Hub にも置かれています。


    そしてなんと! Oracle OpenStack では、
    Oracle VM Server(Xen)に Docker 入れてしまいます。

    簡単に Oracle OpenStack のこれまでのバージョンについて。
    (Oracle VM Server 視点)
    • Oracle OpenStack R1
      • packstack(puppet ベース)のインストールだった。
      • Oracle VM Server は当然サポート対象。
    • Oracle OpenStack R2
      • コンポーネントが Docker 化(Kolla)
      • Oracle VM Server がサポートされなくなる。
    • Oracle OpenStack R2.1
      • Oracle VM Server がサポート対象として復活。
      • Xen の Dom-0 に Docker Engine インストールする。
    • Oracle OpenStack R3
      • 引き続き、Oracle VM Server がサポート対象。

    Oracle OpenStack の構築の流れのイメージです。
    OpenStack を構成するすべてのノードに、
    下地として Docker Engine を起動することになります。
    ※ただ、これはちょっと古くて、R3 ではなく R2.1 をデプロイしてみた時のものです。
    ※左右がノードの種類、上下が時間軸です。


    他に ORACLE っぽいところとしては
    デフォルトで Murano の Application カタログとして
    Oracle Database 12c が登録されています。
    (当日は一瞬表示スルーしたスライド)


    デプロイの様子を紹介。

    kollaのグループ(ノードに与えられる役割)には下記があります。
    • Controller
    • Network
    • Storage
    • Database
    • Compute(ハイパーバイザ)

    流れ
    • OSインストール~設定
    • Docker レジストリの準備。(ログインするか、ローカル構築するか)
    • 全ノードに kolla の RPM をインストール。
      (openstack30 チャネル有効に。openstack-kolla-preinstall)
    • kollacli にノードを追加して、プロパティ設定して、Deploy。
    雰囲気をお伝えするため、
    kollacli でコンテナをデプロイする部分だけ、簡単に紹介してみようと思います。
    (この流れは後でちゃんとブログに起こそうかな)

    kollacli で、デプロイ先になるノードを追加します。

    1ノードずつ、セットアップをします。


    チェック・・・


    Kolla で定義しているグループに、ノードを参加させます。
    この例では 5種類定義されているグループすべてに
    別のノードを割り当て(Fully Extended 構成)していますが、
    Compute 以外は兼用することもできます。


    こうなります。


    kollacli で、環境に合わせてプロパティを設定します。
    サービスの有効 / 無効や、用途ごとの NIC 指定などもここで設定します。
    (実際には下記スライドの内容以外にもプロパティを設定します)


    デプロイします。
    $ kollacli deploy

    kollacli は、Ansible を利用しています。
    この例は何度かリトライしつつ成功させた時のものなので、
    ストレートに deploy したときよりも ok / changed がまばらです。


    OpenStack がデプロイされました。
    (できた感がほしかったので、Horizon Dashboard の絵・・・)


    コンテナのデプロイされた様子を見てみよう!
    時間切れ必至&投影的にあまりに細かい絵だったので、
    つづきは Web で・・・下記の投稿をみていただければと思います。

    Oracle OpenStack R3 の Fully Extended の様子。


    Docker に限らないものでも、
    いくつか Oracle OpneStack の特徴をあげておきます。
    (ここも、当日は一瞬スライド表示スルーでした)
    • 名前は、Oracle OpenStack for Oracle Linux
      • R1、R2、R3 というのは ORACLE が独自につけているバージョン。
    • R3 は Mitaka ベース。(ちょっと古い)
    • Kolla で Docker コンテナとしてデプロイ。
      • Kolla 関連の RPM は Oracle Public Yum。
      • Dockerのバージョン形式が変わったせいで古いバージョンの Docker になる。
        (RPM の依存関係により)
      • Dockerイメージは、Software Delivery Cloudにある。
        今は Oracle container Registry にもある。
      • UEK 4.1 必須。
      • Docker のストレージは やはり Btrfs 推しっぽい。
    • クライアントコマンドも Docker コンテナ。
      • たとえば「docker-ostk nova ~」
    • Compute Node は Oracle VM Server / KVM / Hyper-V?
    • Oracle Linux 6 / 7 の OpenStack むけイメージが提供されている。
      (qcow2 形式。KVM 向けな気も)
    • Murano に「Oracle Database 12c」

    まとめ。
    • Oracle Linux の Docker 情報は、まずは ORACLE のサイトから。
      • パッケージも、ドキュメントも。
    • Docker に関係する、k8s / OpenStack を紹介しました。
      • エンタープライズむけっぽくアナウンスしているが、
        モノはわりと入門むけなのでどちらも「まずやってみる」のにおすすめ。

    15分でいろいろ詰め込みすぎが感がありますが、
    おききいただきありがとうございました。
    (途中はしょりましたが)最後のスライドまで行けるとは思いませんでした。

    以上、Oracle Linux と Docker とその周辺のもの でした。

    3 件のコメント:

    1. JPOUG in 15 minutes #6 開催報告
      http://www.jpoug.org/2017/12/30/in15m6report

      返信削除
    2. kubectl 実行例の投稿へのリンクを追記しました。

      返信削除
    3. Oracle Container Services Kubernetes 1.1.9 で Yumリポジトリが
      ol7_preview → ol7_addons になりました。
      http://gowatana.blogspot.jp/2018/03/oracle-k8s119.html

      返信削除