22日目の記事です.
本当はインスタンスを起動させるとこまでやりたかったのですが, 時間がなかったのでとりあえず今回はkeystoneの導入だけ書きます. 続きはまた今度書きます.
全体の構成
最小構成で試していきます.
Kubernetes用, Compute用, MySQL用の3台のノードを使ってやっていきます.
検証環境はmacOS Catalina環境でvagrantでノードを立ててます.
Kubernetesの導入はスキップします.
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とその他設定ファイルを用意します.
ドキュメント通りにするだけです.
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
[database]
connection = mysql+pymysql://keystone:keystone@mysqlhost/keystone
[token]
provider = fernet
#!/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
#!/bin/bash
set -e
source /etc/apache2/envvars
apache2 -D FOREGROUND
setup.shは初回の設定のとき, exec.shは起動時に使用します.
4. yamlの用意
KubernetesのDeploymentとService用のyamlを用意します.
今回はローカルのコンテナを使用するためimagePullPolicy: IfNotPresentを追加してローカルから取るようにしています.
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"
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(コードジン)