仮想化通信

日本仮想化技術株式会社の公式エンジニアブログ

JujuでOpenStackを構築して、その上でKubernetesを動かしてみる

JujuでOpenStackを構築して、その上でKubernetesを動かすことができたのでこちらにまとめてみます。 今回の記事の登場人物は次の通りです。

  • Ubuntu Juju
  • OpenStack
  • RancherOS
  • Rancher 2.x
  • Kubernetes

KubernetesはRancher 2でデプロイすることを想定しています。

手順概要

1.あらかじめRancher2をセットアップしておきます。本例ではRancherOSをインストールしてその上でRancher2を稼働させていますが、こちらに掲載のあるOSであれば、Linuxディストリビューションは問いません。手順は下記のような感じです。

2.JujuでOpenStackをデプロイします。Bundleは以下のものを少々カスタマイズしてデプロイをしかけました。

3.OpenStackでそれなりのサイズのフレーバーを使い、インスタンスを作成します。今回はこの構成にしました。

4.インスタンスにFloationg IPアドレスを設定します。

f:id:virtualtech:20190613171213p:plain
今回は2つのインスタンスを利用

5.インスタンスにログインします。

6.インスタンスで次の設定を行います。

  • docker.ioパッケージのインストール
  • 必要に応じてDockerのbipの設定(弊社では172.17.0.0/16を使っているので変更必須)をdaemon.jsonに行います。
  • Ubuntuのhostnameを設定

7.Rancherクラスターを作り、etcdとコントロールプレーンを登録しておきます。

[2019年6月18日追記] ノードオプションの「詳細オプションを表示」をクリックすると、パブリックアドレスとプライベートアドレスを入力できます。

f:id:virtualtech:20190618160954p:plain
ノードの詳細設定

もし、コントロールプレーンもOpenStackインスタンス上で動かすならば、パブリックアドレスにOpenStackインスタンスの「Floating IPアドレス」を、プライベートアドレスにアドレスにOpenStackインスタンスの「Fixed IPアドレス」を入力します。

f:id:virtualtech:20190613171032p:plain
Rancher etcd/ctl plane

8.Rancher2 Web interfaceにアクセスして、ノードとして新しく作成したOpenStackインスタンスを追加します。指定されたコマンドを実行すると、ノードとして使えます。

[2019年6月18日追記] ノードオプションの「詳細オプションを表示」をクリックすると、パブリックアドレスとプライベートアドレスを入力できます。

パブリックアドレスにOpenStackインスタンスの「Floating IPアドレス」を、プライベートアドレスにアドレスにOpenStackインスタンスの「Fixed IPアドレス」を入力します。ノードオプションの「詳細オプションを表示」をクリックすると、パブリックアドレスとプライベートアドレスを入力できます。

f:id:virtualtech:20190613171300p:plain
このコマンドを実行するとWorkerノードとしてKubernetesクラスターに追加されます

実行例

f:id:virtualtech:20190613171517p:plain
指示されたコマンドを各インスタンスで実行

以上で、Kubernetes on OpenStackの出来上がりです。 コンテナー環境のリソースが足りなくなったら、OpenStackにインスタンスを追加してRancherでworkerノードを追加するだけです。簡単ですね!

f:id:virtualtech:20190613171637p:plain
完成

[2019年6月14日追記]

その後、コントロールプレーンとetcdもOpenStackインスタンス側で動かすことにしました。

f:id:virtualtech:20190614183211p:plain
コントロールプレーンとetcdを「master」インスタンスに移動

使ってみる

こんな感じのYAMLを書いてみます。そのあと kubectl apply -f hello-ns.yaml のように書いたYAMLファイルを指定して実行します。

f:id:virtualtech:20190613171712p:plain
K8s YAML例

うまく動かせました。

f:id:virtualtech:20190613172006p:plain
動作確認例

アクセスするときはFloating IPアドレス側のIPアドレスに対してアクセスします。今回は nodeSelector を使って「rancher-node1」を指定したので、「rancher-node1」インスタンスのFloating IPアドレスの「nodePort:30287」に対してアクセスしています。

以上です。ちなみにRancher 2のOpenStack Driverを使うと、もっと簡単にKubernetesクラスター環境が作れるようです。そのうち試したいと思います。

qiita.com