9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

近畿大学Advent Calendar 2019

Day 22

OpenStack on Kubernetesの検証その1 (Keystone)

Posted at

22日目の記事です.
本当はインスタンスを起動させるとこまでやりたかったのですが, 時間がなかったのでとりあえず今回はkeystoneの導入だけ書きます. 続きはまた今度書きます.

全体の構成

最小構成で試していきます.
Kubernetes用, Compute用, MySQL用の3台のノードを使ってやっていきます.
検証環境はmacOS Catalina環境でvagrantでノードを立ててます.
Kubernetesの導入はスキップします.
スクリーンショット 2019-12-22 23.36.48.png

Keystoneとは

OpenStackの認証とエンドポイントを管理するサービスです. OpenStackはマイクロサービスアーキテクチャでできており, 各コンポーネントはKeystoneに問い合わせて認証などを行います.
ここに詳しい説明が載っています.
Keystoneの動作と仕組み~エンドポイントと認証認可 (1/4):CodeZine(コードジン)

導入

導入は基本的にドキュメント通りです.
https://docs.openstack.org/keystone/train/install/keystone-install-ubuntu.html

1. MySQLインストール

チョット試したいだけなのでMySQL用のノードにdockerでさくっと立ててしまいます.

$ docker run -itd --name mysql -v $PWD/mysql:/src -w /src -p 3306:3306  -e MYSQL_ROOT_PASSWORD=pass mysql:5.7

2. DBのセットアップ

先程立てたMySQLコンテナに入りセットアップします.

$ docker exec -it mysql mysql -u root -p
mysql> CREATE DATABASE keystone;
mysql>  GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost'  IDENTIFIED BY 'keystone';
mysql>  GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%'  IDENTIFIED BY 'keystone';

3. Keystone用のコンテナの作成

Dockerfileとその他設定ファイルを用意します.
ドキュメント通りにするだけです.

Dockerfile

FROM ubuntu:18.04

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && \
    apt-get install -y keystone apache2 libapache2-mod-wsgi

COPY keystone.conf /etc/keystone/keystone.conf
COPY setup.sh /root/setup.sh

RUN echo "ServerName keystone-server" >> /etc/apache2/apache2.conf

COPY ./exec.sh /root/exec.sh
RUN chmod +x /root/exec.sh /root/setup.sh

CMD ["/root/exec.sh"]

EXPOSE 5000
keystone.conf
[database]
connection = mysql+pymysql://keystone:keystone@mysqlhost/keystone

[token]
provider = fernet
setup.sh
#!/bin/bash
set -e

# データベースの作成
su -s /bin/sh -c "keystone-manage db_sync" keystone 

# fernetトークンの初期化
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone 
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone 

keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
  --bootstrap-admin-url http://keystone-server:5000/v3/ \
  --bootstrap-internal-url http://keystone-server:5000/v3/ \
  --bootstrap-public-url http://keystone-server:5000/v3/ \
  --bootstrap-region-id RegionOne
exec.sh
#!/bin/bash
set -e

source /etc/apache2/envvars
apache2 -D FOREGROUND

setup.shは初回の設定のとき, exec.shは起動時に使用します.

4. yamlの用意

KubernetesのDeploymentとService用のyamlを用意します.
今回はローカルのコンテナを使用するためimagePullPolicy: IfNotPresentを追加してローカルから取るようにしています.

keystone-deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
  name: keystone-pod
  labels:
    name: keystone-pod
spec:
  replicas: 1
  selector:
    matchLabels:
      name: keystone-pod
  template:
    metadata:
      labels:
        name: keystone-pod
    spec:
      containers:
      - name: keystone-pod
        image: keystone 
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 5000
        env:
        - name: OS_USERNAME
          value: "admin"
        - name: OS_PASSWORD
          value: "ADMIN_PASS"
        - name: OS_PROJECT_NAME
          value: "admin"
        - name: OS_USER_DOMAIN_NAME
          value: "Default"
        - name: OS_PROJECT_DOMAIN_NAME
          value: "Default" 
        - name: OS_AUTH_URL
          value: "http://keystone-server:5000/v3"
        - name: OS_IDENTITY_API_VERSION
          value: "3"
keystone-service.yaml
kind: Service
apiVersion: v1
metadata:
  labels:
    name: keystone-server
  name: keystone-server
spec:
  ports:
  - port: 5000
  selector:
    name: keystone-pod

5. いざデプロイ

先程用意したDockerfileとその他ファイル群をkubernetesノードの同じディレクトリに設置します.
そしてビルド

$ docker build . -t keystone

次にopenstackネームスペースを作りDeploymentとServiceをapply

$ kubectl create namespace openstack
$ kubectl apply -f keystone-deployment.yaml -n openstack
$ kubectl apply -f keystone-service.yaml -n openstack

6. 初期設定

pod名を確認しpodの中に入ります.
そしてsetup.shを実行

$ kubectl get pods -n openstack
$ kubectl exec -it <pod-name> -n openstack /root/setup.sh

おわりに

いかがでしたか? (検索回避)
今回はkeystoneをインストールしました.
次回(があれば)glanceをインストールします.

参考

OpenStack on Kubernetesを、GKEで試してみる - Qiita
OpenStack Docs: Install and configure
Keystoneの動作と仕組み~エンドポイントと認証認可 (1/4):CodeZine(コードジン)

9
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?