Help us understand the problem. What is going on with this article?

Helion OpenStackの上にRancherでKubernetesクラスタを構築してみる(その1)

More than 3 years have passed since last update.

概要

OpenStack上でのコンテナ管理といえばZunがあり、またOpenStackでKubernetesなどのコンテナオーケストレーターの管理といえばMagnumがありますが、これらプロジェクトの立ち位置はまだ発展途上であり、プロダクションで採用しているOpenStack環境も少数派なんじゃないかと思います(October2016 User SurveyではMagnumのProduction採用率は2%でしたね)。HPEのディストリビューションであるHelion OpenStackもMagnumやZunは今のところ採用していません。
とはいえテナントレベルでは流行りのコンテナオーケストレーションを実現したいので、テナント上にプライベートCaaSを作っちゃえばいいわけです。というわけで、Helion OpenStackのテナント上にRancherでKubernetesクラスタを構築してみます。
まあRancherの場合、構築って言ってもDockerイメージを各Host(仮想マシン)で起動すればあとは勝手にやってくれるんですが、せっかくなんで仮想マシンのデプロイにOpenStack Heatを使うところもやってみたいと思います。

前提

  • 動いているOpenStack環境:
    • ここではHelion OpenStack 4.0 (Mitaka) の環境を使っています
    • イントラネット上にあるプライベートIaaSで、Proxy経由でインターネットにつながります
  • OpenStack上のテナント(プロジェクト)
    • ユーザアカウント
    • テナント内プライベートネットワークがひとつ:10.0.0.0/8
    • Glanceに登録された仮想マシンイメージ:ぶっちゃけdockerが動けばなんでもよくて、AtomicとかCoreOSとか使えば手っ取り早いんですが、ここではCentOS7を使ってみます。なければここからダウンロードしてGlanceに登録します。

作りたいもの

こんな感じ。
3.PNG
何も考えずに作るとk8sの全ノードにPublic IPを振る感じになりますが、通常イントラネットでは使えるIPアドレスが限られていると思います。なのでFloating IPを3つ使って
- Rancher Serverへのアクセス用
- k8sのLoad Balancer用 x2
とし、コンテナ間の通信はプライベートネットワークを使います。

手順

以下OpenStackの操作はコマンドを記載しますが、Horizonのほうが楽な方はそちらで

1.ベースイメージの作成

いちいちノード増やすたびにdockerのインストールとかめんどうなので、CentOS7にDockerをインストールしたベースイメージを作っちゃいます

1.1 仮想マシンの起動

CentOS7のイメージから仮想マシンインスタンスを起動します。dockerをインストールするだけなのでflavorはsmallとかで適当に

$ nova boot --flavor 2 --image <CentOS7のイメージID> --key-name <keypair名> --security-groups <セキュリティーグループID> centos7-docker-base

sshで接続して作業したいのでフローティングIPを振ります。

$ nova floating-ip-list
$ nova floating-ip-associate centos7-docker-base <Floating IPアドレス>

インスタンスが起動したらsshでログインします。

$ ssh -i <keyfile> centos@<Floating IP>

1.2 Dockerのインストール

Dockerをインストールします。

$ export http_proxy=http://web-proxy.example.com:8080
$ export https_proxy=http://web-proxy.example.com:8080
$ sudo -E yum -y update
$ sudo -E curl -fsSL https://get.docker.com/ | sh
$ sudo usermod -aG docker centos
$ sudo systemctl enable docker.service
$ sudo systemctl start docker.service

dockerサービスの環境変数にHTTP_PROXYが設定されてなきゃいけないので、めんどくさいけど以下設定します。CentOS7ではdockerサービスはsystemctlで起動されますので、/etc/systemd/system/docker.service.d/の下に*.confというファイルを置いておけば起動時にパラメータが読み込まれます。
今回はベースとなる仮想マシンイメージにあらかじめ設定を仕込んでしまいますが、各仮想マシンインスタンス起動時にcloud-initスクリプトで設定してもよいです。Heatでデプロイする場合はそのほうがよいかもしれません。

$ sudo su
# vi /etc/systemd/system/docker.service.d/20-http-proxy.conf
20-http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://web-proxy.example.com:8080"
# systemctl daemon-reload
# systemctl restart docker

1.3 Dockerの動作確認

一般ユーザでログインしなおして動作確認

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c04b14da8d14: Pull complete
Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

dockerサービスにProxyが正しく設定されていないとimageのpullができずエラーになります。

1.4 SnapShotの取得

仮想マシンインスタンスをシャットダウンします。
スナップショットを取得します。
$ nova image-create centos7-docker-base centos7-docker-base-image

2 Rancher+Kubernetesクラスタのセットアップ

2.1 ノードの起動

1.で作成したイメージ(スナップショット)をつかって仮想マシンをデプロイします。ここでは5ノード一気にデプロイします。このへんがOpenStackは楽ですね。

$ nova boot --image centos7-docker-base-image --min-count 5 --key-name <keypair名> --security-groups <セキュリティグループ名> --flavor 3 rancher-k8s
$ nova list | grep rancher-k8s
| 526eb62b-a2ba-44ce-8309-f6f400c8468a | rancher-k8s-1 | ACTIVE  | -          | Running     | junichi-private=10.0.0.25                 |
| de77f2dd-d8b0-416a-9277-e1fe97a1a32c | rancher-k8s-2 | ACTIVE  | -          | Running     | junichi-private=10.0.0.26                 |
| 86cefc4d-7ea9-4d83-ae85-5da19ea6f40c | rancher-k8s-3 | ACTIVE  | -          | Running     | junichi-private=10.0.0.27                 |
| 1484ac47-c602-46f2-af3d-24dacaed1f83 | rancher-k8s-4 | ACTIVE  | -          | Running     | junichi-private=10.0.0.28                 |
| 6ec885b6-edc8-4bab-a96b-de1d8d4c668c | rancher-k8s-5 | ACTIVE  | -          | Running     | junichi-private=10.0.0.29                 |

2.2 Rancher Serverのセットアップ

ここから先はhttp://docs.rancher.com/のドキュメントに書いてある通りです。zembutsuさんのこちらもわかりやすいです。
なので以下、違うところだけ書きます。

1台目(rancher-k8s-1)にRancherをインストールします。
まずFloating IPを振ります。

$ nova floating-ip-associate rancher-k8s-1 <Floating IPアドレス>

sshでログインします。

$ ssh -i <keyfile> centos@<Floating IPアドレス>

すでに元のイメージにDockerがインストールされていてProxyも設定してあるので、Rancher Serverのインストールはdocker run一発です。

$ sudo docker run -d --restart=unless-stopped -p 8080:8080 rancher/server
Unable to find image 'rancher/server:latest' locally
latest: Pulling from rancher/server
96c6a1f3c3b0: Downloading 32.44 MB/65.7 MB
ed40d4bcb313: Download complete
b171f9dbc13b: Download complete
...

2.3 Kubernetesのセットアップ

rancher-k8s-1に振ったFloating IPのポート8080にブラウザでアクセスします。
EnvironmentでKubernetesを登録します。
最初のHostを登録する際に、Rancher ServerのURLを聞かれますが、クラスタ内の通信はプライベートネットワークを使いたいので、プライベートのIPアドレスで登録します。
1.PNG
あとはホストを登録していきます。ホストの登録はWeb画面の指示に従い、各ノードにsshで入ってコマンドを叩くだけです。

$ sudo docker run -e CATTLE_AGENT_IP="10.0.0.27"  -d --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.0.2 http://10.0.0.25:8080/v1/scripts/E0A1E9AE5212FFF56845:1480078800000:57ZANJblcGjSP7tU2740ygNlctw

4台目以降のノードにはFloating IPを振らないので、1台目のノードを踏み台とします。そのため1台目のノードにはkeyfileをコピーしておきます。
クラスタの構成が終わるとこんな感じになります([INFRASTRUCTURE]-[Hosts])。
4.PNG

続きは次回。

jyoshise
HPEでクラウド技術に関する仕事をするふりをしながらギターを弾いています。多くの記事は仕事内容に関連していますが、所属する会社および組織の見解と必ずしも一致するものではありません。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした