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でそれなりのサイズのフレーバーを使い、インスタンスを作成します。今回はこの構成にしました。
- 3 vCPU
- 4GBメモリー
- 40GB Disk (Cinder Volumeで/dev/vdaを割り当て)
- Ubuntu 16.04 Official Cloud Image
4.インスタンスにFloationg IPアドレスを設定します。
5.インスタンスにログインします。
6.インスタンスで次の設定を行います。
- docker.ioパッケージのインストール
- 必要に応じてDockerのbipの設定(弊社では172.17.0.0/16を使っているので変更必須)をdaemon.jsonに行います。
- Ubuntuのhostnameを設定
7.Rancherクラスターを作り、etcdとコントロールプレーンを登録しておきます。
[2019年6月18日追記] ノードオプションの「詳細オプションを表示」をクリックすると、パブリックアドレスとプライベートアドレスを入力できます。
もし、コントロールプレーンもOpenStackインスタンス上で動かすならば、パブリックアドレスにOpenStackインスタンスの「Floating IPアドレス」を、プライベートアドレスにアドレスにOpenStackインスタンスの「Fixed IPアドレス」を入力します。
8.Rancher2 Web interfaceにアクセスして、ノードとして新しく作成したOpenStackインスタンスを追加します。指定されたコマンドを実行すると、ノードとして使えます。
[2019年6月18日追記] ノードオプションの「詳細オプションを表示」をクリックすると、パブリックアドレスとプライベートアドレスを入力できます。
パブリックアドレスにOpenStackインスタンスの「Floating IPアドレス」を、プライベートアドレスにアドレスにOpenStackインスタンスの「Fixed IPアドレス」を入力します。ノードオプションの「詳細オプションを表示」をクリックすると、パブリックアドレスとプライベートアドレスを入力できます。
実行例
以上で、Kubernetes on OpenStackの出来上がりです。 コンテナー環境のリソースが足りなくなったら、OpenStackにインスタンスを追加してRancherでworkerノードを追加するだけです。簡単ですね!
[2019年6月14日追記]
その後、コントロールプレーンとetcdもOpenStackインスタンス側で動かすことにしました。
使ってみる
こんな感じのYAMLを書いてみます。そのあと kubectl apply -f hello-ns.yaml
のように書いたYAMLファイルを指定して実行します。
うまく動かせました。
アクセスするときはFloating IPアドレス側のIPアドレスに対してアクセスします。今回は nodeSelector
を使って「rancher-node1」を指定したので、「rancher-node1」インスタンスのFloating IPアドレスの「nodePort:30287」に対してアクセスしています。
以上です。ちなみにRancher 2のOpenStack Driverを使うと、もっと簡単にKubernetesクラスター環境が作れるようです。そのうち試したいと思います。