OpenShift on Azureのデプロイ

Azure での OpenShift の前提条件 | Microsoft Docs の記載の手順にしたがってデプロイする方法を説明します。

OpenShift のデプロイ用の ARM のテンプレートは、cloud provider 設定ができるようになったりしているので Azure 側での事前準備が必要になりましたが、いくつかのコマンドを実行すれば良いだけなの案外簡単です。

OpenShift をデプロイするにあたって、事前準備でAzure CLI を利用します。リソースグループ名やロケーションなどを環境変数に設定しておけば、以降の手順を実行する際に各自好きな名称を設定しても、コピペで作業を進めていけるので、まず、各自で可変になりそうな値は環境数に設定します。

パラメータ名 説明
KVRG keyvaultrg Key Vault用のリソースグループ名
LOCATION eastus リージョン
KVNAME keyvault Key Vault名
SECNAME keysecret Secret名
OCPRG openshift OpenShiftをデプロイするリソースグループ名
OPENSHIFTSP openshiftsp+乱数OpenShift用のサービスプリンリプル サービスプリンリプルは、一位の名前である必要があるのでここでは乱数を付与するようにしていますが、任意の自分のアカウント名などをつけても良いです。

Bash を使っている場合は、次のコマンドを実行します。

export KVRG=keyvaultrg
export LOCATION=eastus
export KVNAME=keyvault
export SECNAME=keysecret
export OCPRG=openshift
export OPENSHIFTSP=openshiftsp$RANDOM

OpenShift をデプロイするための準備

1. CLI を使って azure portal にログイン

az login

2. OpenShiftをデプロイするリソースグループを作成

az group create --name $OCPRG --location $LOCATION

3. Key Vault を保持するリソースグループを作成(OpenShiftをデプロイするリソースグループとは別にする)

az group create --name $KVRG --location $LOCATION

4. Key Vault を作成

az keyvault create --resource-group $KVRG --name $KVNAME \
       --enabled-for-template-deployment true \
       --location $LOCATION

5. SSH キーの生成

ssh-keygen -f ~/.ssh/openshift_rsa -t rsa -N ''

6. Azure Key VaultにSSH秘密鍵を登録

az keyvault secret set --vault-name $KVNAME --name $SECNAME --file ~/.ssh/openshift_rsa

7. サービスプリンリパルの生成

az ad sp create-for-rbac --name $OPENSHIFTSP \
          --role Contributor --password "@dmin9999" \
          --scopes $(az group show --name $OCPRG --query id)

ここで The request did not have a provided subscription. All requests must have an associated subscription Id. というエラーが発生した場合は、--scopes で subscription が正しく取得できていません。その場合は、az group show --name $OCPRG --query id を実行し、そこで出力された値を--scopes のパラメータに利用してください。

az group show --name $OCPRG --query id
"/subscriptions/<数字がいっぱい>/resourceGroups/openshift"   ← 出力される文字列
az ad sp create-for-rbac --name openshiftspkeomizo --role Contributor --password "@dmin9999" --scopes "/subscriptions/<数字がいっぱい>/resourceGroups/openshift"

コマンドが成功すると、次のような文字列が出力されるのでメモ帳などにコピーしておく。

{
  "appId":  "9999999-9999-9999-9999-999999999999"",
  "displayName": "openshiftsp1234",
  "name": "http://openshiftsp1234",
  "password": "@dmin9999",
  "tenant": "9999999-9999-9999-9999-999999999999"
}

MarketplaceからOpenShiftをデプロイ

1. Azure PortalでOpenShiftのリソースグループを選択

f:id:akubicharm:20180905143647p:plain

2. リソース追加ボタンをクリック

f:id:akubicharm:20180905143853p:plain

3. 検索文字列に「OpenShift」を指定してテンプレートを選択

f:id:akubicharm:20180905144136p:plain

4. 下までスクロールして「Create」をクリックしてウィザードを開始

f:id:akubicharm:20180905144313p:plain

5. ウィザードのパラメータを入力

1. Basics

f:id:akubicharm:20180905145345p:plain

パラメータ名 説明
VM Admin User Name clusteradmin デフォルト値のまま変更なし
SSH Public Key for VM Admin User VMssh で接続する時の公開鍵
Subscription 適用するサブスクリプション 仮想サーバを9台デプロイできるだけの余裕があること!!!
Resource Group Use existingを選択。リソースグループ名は$OCPRGに設定した名称 空っぽのリソースグループであること
Location $LOCATIONに設定したリージョン
2. Infrastructure Settings

f:id:akubicharm:20180905145744p:plain

パラメータ名 説明
OCP Cluster Name Prefix ocpcluster デフォルト値のまま変更なし
Master Node Size 3 x Standard D4s V3 メモリ、CPUの要件に合わせて適宜変更。台数は奇数。
Infrastructure Node Size 3 x Standard ES2s v3 メモリ、CPUの要件に合わせて適宜変更
Number of Application Nodes 2 必要な台数に合わせて適宜変更
Application Node Size 2 x Standard D2s v3 メモリ、CPUの要件に合わせて適宜変更
Bastion Host Size 1 x Standard DS2 v2 デフォルト値のまま変更なし
Custom IP subnet No 変更なし
Key Vault Resource Group Name keyvaultrg 事前準備の手順4で指定した Key Vaultのリソースグループ名。$KVRG
Key Vault Name keyvault 事前準備の手順4で指定した Key Vault名。$KVNAME
Secret Name keysecret 事前準備の手順6で指定したsecret名。$SECNAME
3. OpenShift Container Platform Settings

f:id:akubicharm:20180905151311p:plain

パラメータ名 説明
OpenShift Admin User Password @dmin123 任意の文字列
Confirm OpenShift Admin User Password @dmin123
Red Hat SubscriptionManager User Name Red Hat Customer Portalに登録しているメールアドレス
Red Hat Subscription Manager User Password Red Hat Customer Portalに登録しているパスワード
Red Hat Subscription Manager OpenShift Pool ID Red Hatから割り当てられているサブスクリプションのPool ID
Configure Azure Cloud Provider Yes デフォルト値のまま変更なし
Azure AD Service Principal Client ID GUID 事前準備の手順7のサービスプリンシプルの作成で出力された AppID
Azure AD Service Principal Client ID Secret 事前準備の手順7:サービスプリンシプルの作成時に指定したパスワード
4. Additional Settings

f:id:akubicharm:20180905151845p:plain

パラメータ名 説明
Configure Cluster Logging No デフォルト値のまま変更なし。ロギングの設定はインストール後でもできます
Configure Metrics for the Cluster No デフォルト値のまま変更なし。メトリクスの設定はインストール後でもできます
Default Router Subdomein nipio デフォルト値のまま変更なし
5. Summary

バリデーションがパスしたら、「OK」ボタンをクリックします。 f:id:akubicharm:20180905152614p:plain

6. Buy

内容を確認して「Create」ボタンをクリックします。 f:id:akubicharm:20180905152736p:plain

6.完成を気長に待つ

1時間くらいはかかるので、気長に待ちましょう。

OpenShift にログイン

1. Master サーバのパブリックIPアドレスを選択

Azure PortalでOpenShiftのリソースグループを選択し、「master」から始まる Public IP address を選択します。 f:id:akubicharm:20180905153417p:plain

2. MasterサーバのDNS名を確認

詳細画面のDNS Nameをコピーします。

f:id:akubicharm:20180905153726p:plain

3.ブラウザでアクセス

コピーしたDNS Nameを利用してOpenShiftの管理コンソールにログインします。 管理コンソールは8443ポートではなく、443ポートで動作しています。

https://masterdnsxxxxxxxxxx.eastus.cloudapp.azure.com

4. clusteradmin でログイン

f:id:akubicharm:20180905154404p:plain

パラメータ名 説明
Username clusteradmin
Password OpenShiftデプロイのウィザード3: OpenShift Container Platform Settingsで指定したパスワード

5. コンソールの確認

この画面が表示されれば OK です。パチパチパチー。

f:id:akubicharm:20180905154749p:plain

ユーザ管理

マーケットプレイスからデプロイした場合は、ユーザ認証がhtpasswd形式になっています。ユーザを追加する場合は、masterサーバに配置されている/etc/origin/master/htpasswdファイルにユーザのエントリを追加します。

Azure AD を使って認証する方法は、 openshift-playground/AzureADAuthorization.md at master · akubicharm/openshift-playground · GitHub を参照してください。

備忘録:Windowsで管理者特権でコマンドを実行する方法

ドメインユーザではなくローカルの管理者としてコマンドプロンプトを起動すれば、管理者特権が必要なコマンドや.exeを実行できる。

powershell start-process cmd -verb runas

これで、ダイアログが表示されるので、ローカルの管理者ユーザとパスワードを入力

ユーザ:[ホスト名]¥Administrator

備忘録:OpenShift 3.7 を All in One でインストール

いつもAzureを使っているので、AWSも使ってみようと OpenShift の All in One の環境をデプロイした時のメモ。

AWSインスタンスへの設定

  • publicの固定IPを付与するために Elastic IPを設定
  • 管理コンソール(8443)、Web App(80, 443)のInbound accessを許可するためにSecurity Groupを設定

OpenShift のインストール

必要なパッケージのインストール

subscription-manager で登録した後は、必要なパッケージのインストール

subscription-manager repos --disable="*"
subscription-manager repos \
    --enable="rhel-7-server-rpms" \
    --enable="rhel-7-server-extras-rpms" \
    --enable="rhel-7-server-ose-3.7-rpms" \
    --enable="rhel-7-fast-datapath-rpms"


yum -y install wget git net-tools bind-utils iptables-services bridge-utils bash-completion kexec-tools sos psacct
yum -y update
yum -y install atomic-openshift-utils
yum -y install atomic-openshift-excluder atomic-openshift-docker-excluder
atomic-openshift-excluder unexclude


yum -y install docker


sed -i '/OPTIONS=.*/c\OPTIONS="--selinux-enabled --insecure-registry 172.30.0.0/16"' /etc/sysconfig/docker

systemctl enable docker
systemctl start docker

インベントリファイル

Docker用のストレージを作らなかったり、リソースが少なめだったりするので事前チェックをすり抜けるためのパラメータ openshift_disable_check=memory_availability,disk_availability,docker_storage  を設定

!!!本当は、ちゃんとシステム要件を満たすリソースを割りあてないとダメです!!!

[OSEv3:children]
masters
nodes
etcd

# Set variables common for all OSEv3 hosts
[OSEv3:vars]
# SSH user, this user should allow ssh based auth without requiring a password
ansible_ssh_user=ec2-user

# If ansible_ssh_user is not root, ansible_become must be set to true
ansible_become=true

openshift_deployment_type=openshift-enterprise

openshift_disable_check=memory_availability,disk_availability,docker_storage

openshift_master_default_subdomain=000.000.000.000.nip.io

# uncomment the following to enable htpasswd authentication; defaults to DenyAllPasswordIdentityProvider
openshift_master_identity_providers=[{'name': 'htpasswd_auth', 'login': 'true', 'challenge': 'true', 'kind': 'HTPasswdPasswordIdentityProvider', 'filename': '/etc/origin/master/htpasswd'}]

# host group for masters
[masters]
ec2-000-000-000-000.ap-northeast-1.compute.amazonaws.com

# host group for etcd
[etcd]
ec2-000-000-000-000.ap-northeast-1.compute.amazonaws.com

# host group for nodes, includes region info
[nodes]
ec2-000-000-000-000.ap-northeast-1.compute.amazonaws.com openshift_schedulable=true openshift_node_labels="{'region': 'infra', 'zone': 'default'}" openshift_public_hostname=ec2-000-000-000-000.ap-northeast-1.compute.amazonaws.com openshift_hostname=ip-172-31-000-000.ap-northeast-1.compute.internal

PV を NFS で提供

NFS サーバの設定

パッケージのインストール

yum -y install nfs-utils

NFS の設定

mkdir -p /var/export/pvs/pv{1..10}
chown -R nfsnobody:nfsnobody /var/export/pvs
chmod -R 2770 /var/export/pvs

for volume in pv{1..10} ; do
echo Creating export for volume $volume;
echo "/var/export/pvs/${volume} *(rw,sync,root_squash)" >> /etc/exports; done;

systemctl enable rpcbind nfs-server
systemctl start rpcbind nfs-server nfs-lock nfs-idmap
systemctl stop firewalld
systemctl disable firewalld

setsebool -P virt_use_nfs=true;

で、動作確認

ssh [クライアントIPアドレス]
mkdir /tmp/test
mount -v [NFSサーバ名]:/var/export/pvs/pv1 /tmp/test

umount /tmp/test
exit

詳細はこの辺を参照。 Using NFS - Configuring Persistent Storage | Installation and Configuration | OpenShift Container Platform 3.7

PV の作成

PV の定義作成

export volsize=1Gi

for volume in pv{1..10} ; do cat << EOF > ${volume}.yaml
{
"apiVersion": "v1", "kind": "PersistentVolume", "metadata": {
"name": "${volume}" },
"spec": { "capacity": {
"storage": "${volsize}" },
"accessModes": [ "ReadWriteOnce" ], "nfs": {
"path": "/var/export/pvs/${volume}",
"server": "$NFS_SERVER" },
"persistentVolumeReclaimPolicy": "Recycle" }
}
EOF
echo "Created def file for ${volume}"; done;

PVの作成

 for f in *.yaml; do oc create -f $f; done

 トラブルシューティング

Service Catalog がデプロイされない問題

Bug 1523625 – service catalog deployment fails

こんな感じで、kube-service-catalog プロジェクトの controller-manager がちゃんとデプロイされていない場合。

$ oc get po --all-namespaces
NAMESPACE                           NAME                                      READY     STATUS             RESTARTS   AGE
kube-service-catalog                controller-manager-8r8vt                  0/1       CrashLoopBackOff   19         1d

まずは、 oc logs controller-manager-8r8vt --previous で、ログを確認して証明書のエラーが発生している場合は、証明書を置き換えてあげる必要があります。

エラーの例

F1206 08:45:28.713230       1 controller_manager.go:198] error running controllers: failed to get supported resources from server: unable to retrieve the complete list of server APIs: servicecatalog.k8s.io/v1beta1: an error on the server ("Error: 'x509: certificate signed by unknown authority (possibly because of \"crypto/rsa: verification error\" while trying to verify candidate authority certificate \"service-catalog-signer\")'\nTrying to reach: 'https://172.30.72.245:443/apis/servicecatalog.k8s.io/v1beta1' ") has prevented the request from succeeding 

以下の手順で証明書を書き換えます。

cat /etc/origin/service-catalog/ca.crt | base64
=>結果をコピーして、1行にまとめておく

oc edit apiservice/v1beta1.servicecatalog.k8s.io
=>ca_bundleフィールドを置き換える

追記

2018-03-23

docker-1.12.x をインストールしているにもかかわらず、docker-1.13 のリポジトリが見えているというエラーが発生する場合は、openshift_disable_checkパラメータにpackage_versionを指定する。

openshift_disable_check=memory_availability,disk_availability,docker_storage,package_version

OpenShiftのトラブルシューティングの第一歩

現象によって調べるポイントは色々ありますが、トラブルシューティングの第一歩としてまずチェックしているログをご紹介します。

OS レベルでのログをチェック

journal の確認

OpenShift のマスタサーバでは、atomic-openshift-master-controllers、atomic-openshift-master-api と atomic-openshift-node というデーモンが動いてます。 ノードサーバでは、atomic-openshift-node が動いています。

v3.6 まではマスターサーバがシングル構成の場合は atomic-openshift-master というデーモンが動いていましたが、v3.7 からはシングルマスター構成の場合でも、HA構成と同様に2つのデーモンに別れました。

これらのデーモンの journal をチェックします。

journalctl -xe -f -u atomic-openshift-master-controllers
journalctl -xe -f -u atomic-openshift-master-api
journalctl -xe -f -u atomic-openshift-node

ログレベルの変更

ログの出力内容を増やして細かく調査したい場合には、ログレベルを変更します。ログレベルを変更する場合は、/etc/sysconfig ディレクトリにある atomic-openshift-master-controllers, atomic-openshift-master-api, atomic-openshift-node というファイルのログレベルを変更してデーモンを再起動します。例えば、atomic-openshift-master-controllers の再起動は

systemctl restart atomic-openshift-master-controllers

というコマンドを実行します。

設定可能なログレベルは、以下の通りです。

ログレベル 表示されるログ
0 Error と Warningのみ表示
2 デフォルトのログレベル。Information レベルのログを表示
4 Debug レベルのログを表示
6 Request/Response のAPIレベルのデバッグログを表示
8 Request/Response のボディレベルのデバッグログを表示

詳細は OpenShift のドキュメントのログレベルの設定を参照してください。

その他のデーモンのログレベルの変更

etcd などのログレベルの変更方法は、Red Hat のカスタマーポータルのナレッジを参照してください。

OC コマンドでのログ出力

OpenShift の CLI(Command Line Interface)の実行時に --loglevel=8 のようにログレベルを設定することで、REST のリクエストの内容を出力させることができます。

# oc whoami --loglevel=8
I0129 17:07:04.917363    9103 loader.go:357] Config loaded from file /root/.kube/config
I0129 17:07:04.918401    9103 round_trippers.go:383] GET https://master.example.com:8443/apis/user.openshift.io/v1/users/~
I0129 17:07:04.918434    9103 round_trippers.go:390] Request Headers:
I0129 17:07:04.918456    9103 round_trippers.go:393]     Accept: application/json, */*
I0129 17:07:04.918468    9103 round_trippers.go:393]     User-Agent: oc/v1.7.6+a08f5eeb62 (linux/amd64) kubernetes/c84beff
I0129 17:07:04.970330    9103 round_trippers.go:408] Response Status: 200 OK in 51 milliseconds
I0129 17:07:04.970359    9103 round_trippers.go:411] Response Headers:
I0129 17:07:04.970370    9103 round_trippers.go:414]     Cache-Control: no-store
I0129 17:07:04.970381    9103 round_trippers.go:414]     Content-Type: application/json
I0129 17:07:04.970404    9103 round_trippers.go:414]     Content-Length: 224
I0129 17:07:04.970415    9103 round_trippers.go:414]     Date: Mon, 29 Jan 2018 17:07:04 GMT
I0129 17:07:04.970522    9103 request.go:994] Response Body: {"kind":"User","apiVersion":"user.openshift.io/v1","metadata":{"name":"system:admin","selfLink":"/apis/user.openshift.io/v1/users/system%3Aadmin","creationTimestamp":null},"identities":[],"groups":["system:cluster-admins"]}
system:admin

アプリケーションのログをチェック

実行中のアプリケーションのログの確認

アプリケーションの動作がおかしい場合は、アプリケーションのPodのログをチェックします。 まずは、Pod名を確認します。

oc get pods

ログをチェックしたい Pod 名を指定して、Podのログを確認します。

oc logs app-2-n5jjz 

Crash Loopback になってしまうアプリケーションのログの確認

デプロイに失敗して、Crash Loopback になってしまった場合には、oc logs コマンドに --previous オプションを指定して起動しようとした時のログを確認します。

# oc get pods
NAME            READY     STATUS             RESTARTS   AGE
mysql-1-fd6p7   0/1       CrashLoopBackOff   3          2m
# oc logs mysql-1-fd6p7 --previous
error: database is uninitialized and password option is not specified 
  You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD

イベントをチェック

Pod のデプロイを開始したけど、ステータスが Pending のままだったり、Container Creating で止まってしまった場合は、コンテナが起動していないのでコンテナのログではなく、コンテナのイベントをチェックします。

oc get events

Azure と AWS上でOpenShiftをワンクリックでデプロイ - Azure 編 -

AWSとAzure 上で、テンプレートを利用して簡単にOpenShiftがデプロイできるようになったので、その方法を2回に分けてご紹介します。

BYOL を利用するメリット

OpenShift DedicatedのようなマネージドなOpenShift環境では、管理せずに利用することができるので、すぐに使いたいというニーズにあっています。一方で、インフラ管理面などは管理者に依存する部分もあるので、インフラを自由に構成することが難しいという点もあります。

インフラ構成や管理は自分たちでできるけど、構築の手間はかけずにすぐに環境が欲しいという場合には非常に有効な方法です。

作業の流れは、AWS、Azureのいずれの場合も 1. クラウドアクセスの登録 2. テンプレートを選択してデプロイ

まず、1回目はAzureへのデプロイ方法をご紹介します。

Azureでのインフラ構成

Azureでは3種類の構成が選択できるようになっています。

Small

シングルマスター構成の小さな環境です。まずは、ちょっと使ってみようという場合に手軽に利用できる環境です。

種別 ノード数
Master 1
Infranode 1
Application Node 2
Bastion Host 1
合計 5インスタンス, 10core

Medium

HA構成の小さな環境です。HA構成で使ってみようという場合に手軽に利用できる環境です。

種別 ノード数
Master 3
Infranode 2
Application Node 4
Bastion Host 1
合計 10インスタンス、38core

Large

HA構成で中くらいの環境です。HA構成である程度の数のアプリケーションを実行するために利用できる環境です。

種別 ノード数
Master 3
Infranode 2
Application Node 6
Bastion Host 1
合計 12インスタンス、70core

OpenShiftの構成

  • ユーザ認証
    認証方式はhtpasswdになっており、ファイルはMasterサーバの/etc/orign/master/htpasswdファイルです。 初期状態では、clusteradminというユーザにウィザードの3ステップ目で指定したOpenShift Admin User Passwordが設定されています。 OpenShiftの管理コンソールへログインするためのユーザ認証は、HTTDPassword方式になってoインストール直後はclusteradminユーザにウィザードで設定したパスワードが設定されています。

  • マスターサーバのホスト名
    Masterサーバにはクライアントからアクセスするためのパブリックなホスト名とIPアドレスが付与されています。 命名規則masterdns<暗号みたいな文字列>.<データセンターのリージョン名>.cloudapp.azure.comとなっています。

  • アプリケーションのサブドメイン
    <マスターサーバのIPアドレス>.nip.io

  • Persistent Storage
    Persistent Storageは作成されていないので、必要に応じて別途準備する必要があります。


構成などなどがわかったところで、BYOL(Bring Your Own License)のテンプレートを使ってAzureにOpenShiftをデプロイしていきましょう。

デプロイの準備

Red Hat Cloud Access への登録や、BYOLでのデプロイ途中で必要な情報を取得しておきます。

AzureのSubscription

Azure PortalにログインしてSubscriptionsを参照して、自分のSUBSCRIPTION IDをチェックします。

Red HatのSubscription

Subscriptionが割り当てられている Account と PoolID を確認します。

デプロイの作業

BYOLを利用してデプロイするには、2つのリソースグループを利用します。 一つはkeyvaultを登録しておくもの、もう一つはOpenShiftのクラスタを構築するものです。

Red Hat Cloud Accessの登録

Red Hat Cloud Access のサイトから登録します。 f:id:akubicharm:20171218165642p:plain

# パラメータ名 備考
1 Cloud Provider Microsoft Azure プルダウンメニューから選択
2 Microsoft Subscription Number/s Azure Portalで確認したSubscriptionIDを入力
3 Product Name 割り当てらているOpenShiftのサブスクリプションを選択
4 Quantity 必要な本数を設定。Azureの場合は、2coreモデルのサブスクリプションが適用されるので、必要な Core数の満たす分を登録。smallならばApplicationNodeは2core x 2ノードなので2です。ただし、検証用Subscriptionの場合には、Master/Infranode分が含まれていませんので、Small の場合 10core / 2 = 5本となります。

登録が完了すると証明書のような画面が表示されます。 f:id:akubicharm:20171218165711p:plain

Azureでのデプロイ

Keyvaultの作成

OpenShiftのインストールにはansibleを利用します。bationサーバからMaster/Nodeに鍵認証でアクセスするため、事前にkeyvaultを作成します。

  1. RSA の鍵作成
% ssh-keygen
  1. 作成した鍵を使って Secret 登録
% az group create --name examplegroup --location 'South Central US’
% az keyvault create \
  --name myvault \
  --resource-group examplegroup\
  --location 'South Central US' \
  --enabled-for-template-deployment true
% az keyvault secret set --vault-name myvault --name mysecret --file ./id_rsa

OpenShiftのデプロイ

  1. Market PlaceからBYOLのテンプレートの選択 検索キーワードに"OpenShift"を入力して検索し、「Red Hat OpenShift Container Platform (BYOL)」を選択します。 f:id:akubicharm:20171218165900p:plain

  2. ウィザード開始 テンプレートの詳細を確認し、画面下部の"Create"ボタンをクリックしてウィザードを開始します。 f:id:akubicharm:20171218165921p:plain

  3. パラメータ入力

1 Basic Configure basic settings

f:id:akubicharm:20171218165938j:plain

以下のパラメータを入力します。

# パラメータ名 備考
1 VM Admin UserName clusteradmin 仮想サーバへSSHでログインするためのユーザを指定
2 SSH Public Key for VM Admin User 仮想サーバへSSHでログインするための公開鍵を指定
3 Subscription 利用可能なAzureのサブスクリプションをプルダウンメニューから選択
4 Resource group OpenShiftをデプロイするResource Groupを指定。keyvaultとは異なるResource Groupを指定
5 Location VMをデプロイするリージョンを指定

2 Infrastructure Settings Confgure Infrastructure settings

f:id:akubicharm:20171218165951j:plain

以下のパラメータを入力します。

# パラメータ名 備考
1 OCP Cluster Name Prefix ocpcluster
2 OpenShift Cluster Size Small Small, Medium, Large からクラスタサイズを選択
3 Key Vault Resource Group Name Keyvaultを作成したResource Groupを指定
4 Secret Name Keyvaultに登録したSecret名を指定

3 OpenShift Container Platform Configure OpenShift Container Plartform

Azure Disk 利用の設定があるので、追記を読んでください!!!

f:id:akubicharm:20171218170005j:plain

# パラメータ名 備考
1 OpenShift Admin User Password OpenShiftの管理コンソールへログインするユーザ(system:admin権限を保持)のパスワードを指定する)
2 Confirm OpenShift Admin User Password 上記のパスワードと同じものを入力
3 Red Hat Subscription Manager User Name or Activation Key Red Hat Customer Portalへのログインに利用するユーザ名またはActivationKey
4 Red Hat Subscription Manager User Password or Org ID Red Hat Customer Portalへのログインに利用するパスワードまたはOrg ID
5 Red Hat Subscription Manager Pool ID Subscriptionに紐づけられたPoolID
6 Default Router Subdomain アプリケーションのRouterに利用するサブドメンをプルダウンから指定

4 Summary

f:id:akubicharm:20171218170021j:plain

内容を確認して"OK"ボタンをクリックしてデプロイを開始します。

デプロイが完了すると、Bastionノード、Masterサーバ、InfranodeサーバとNodeサーバが2台います。 f:id:akubicharm:20171218170035p:plain

おまけ

basion サーバには、OpenShiftのインストール時に利用するインベントリファイルが保存されています。内容はこんな感じです。 IPアドレスは 00.00.00.00 に書き換えています。

# Create an OSEv3 group that contains the masters and nodes groups
[OSEv3:children]
masters
nodes
master0
new_nodes

# Set variables common for all OSEv3 hosts
[OSEv3:vars]
ansible_ssh_user=clusteradmin
ansible_become=yes
openshift_install_examples=true
deployment_type=openshift-enterprise
openshift_release=v3.6
docker_udev_workaround=True
openshift_use_dnsmasq=True
openshift_master_default_subdomain=00.00.00.00.nip.io
openshift_override_hostname_check=true
#osm_use_cockpit=false
os_sdn_network_plugin_name='redhat/openshift-ovs-multitenant'
console_port=443
openshift_cloudprovider_kind=azure
osm_default_node_selector='type=app'
openshift_disable_check=memory_availability,docker_image_availability

# default selectors for router and registry services
openshift_router_selector='type=infra'
openshift_registry_selector='type=infra'

openshift_master_cluster_hostname=masterdnszwtikzua45vga.koreacentral.cloudapp.azure.com
openshift_master_cluster_public_hostname=masterdnszwtikzua45vga.koreacentral.cloudapp.azure.com
openshift_master_cluster_public_vip=00.00.00.00

# Enable HTPasswdPasswordIdentityProvider
openshift_master_identity_providers=[{'name': 'htpasswd_auth', 'login': 'true', 'challenge': 'true', 'kind': 'HTPasswdPasswordIdentityProvider', 'filename': '/etc/origin/master/htpasswd'}]

# Setup metrics
openshift_hosted_metrics_deploy=false
#openshift_metrics_cassandra_storage_type=dynamic
openshift_metrics_start_cluster=true
openshift_metrics_hawkular_nodeselector={"type":"infra"}
openshift_metrics_cassandra_nodeselector={"type":"infra"}
openshift_metrics_heapster_nodeselector={"type":"infra"}
openshift_hosted_metrics_public_url=https://metrics.00.00.00.00.nip.io/hawkular/metrics

# Setup logging
openshift_hosted_logging_deploy=false
#openshift_hosted_logging_storage_kind=dynamic
openshift_logging_fluentd_nodeselector={"logging":"true"}
openshift_logging_es_nodeselector={"type":"infra"}
openshift_logging_kibana_nodeselector={"type":"infra"}
openshift_logging_curator_nodeselector={"type":"infra"}
openshift_master_logging_public_url=https://kibana.00.00.00.00.nip.io

# host group for masters
[masters]
ocpcluster-master-0

[master0]
ocpcluster-master-0

# host group for nodes
[nodes]
ocpcluster-master-0 openshift_node_labels="{'type': 'master', 'zone': 'default'}" openshift_hostname=ocpcluster-master-0
ocpcluster-infra-0 openshift_node_labels="{'type': 'infra', 'zone': 'default'}" openshift_hostname=ocpcluster-infra-0
ocpcluster-node-0 openshift_node_labels="{'type': 'app', 'zone': 'default'}" openshift_hostname=ocpcluster-node-0
ocpcluster-node-1 openshift_node_labels="{'type': 'app', 'zone': 'default'}" openshift_hostname=ocpcluster-node-1

# host group for adding new nodes
[new_nodes]

f:id:akubicharm:20171218165642p:plainf:id:akubicharm:20171218165711p:plain

追記

2018-02-27

Azure Disk をストレージとして利用するため Cloud Provider の設定が必要となりました。 ウィザードの3番目で、以下のパラメータを設定する必要があります。

# パラメータ名
1 Confiure Azure Cloud Provider Yes
2 Azure AD Service Principal Client ID GUID Azure AD Service Principal Client ID GUID - also known as AppID
3 Azure AD Service Principal Client ID Secret Azure AD Service Principal Client ID Secret

手順はこちらを参照してください。

私の場合、1番目の方法で azure cli でうまくいかなかったので、2番目の方法で azure portal から設定しました。

1. Azure AD でアプリケーションを登録

Create identity for Azure app in portal | Microsoft Docs

# パラメータ名
1 Name openshiftsp
2 Application Type Web app/API
3 Sign-on URL https://openshiftsp

2. アプリケーションIDと認証キーの作成

Create identity for Azure app in portal | Microsoft Docs

Azure AD に登録したアプリケーション(ここでは openshiftsp)の Application ID を、ウィザードの"Azure AD Service Principal Client ID GUID"パラメータに設定します。

Key を保存した時にVALUEに表示される値を、ウィザードの"Azure AD Service Principal Client ID Secret"パラメータに設定します。

3. アプリケーションへの権限付与

Create identity for Azure app in portal | Microsoft Docs

Azure AD に登録したアプリケーション(ここでは openshiftsp)に Contributor の権限を付与します。

Masterサーバに /etc/azure/azure.conf というファイルができています。

{"aadClientSecret": "ウィザードで指定した Application Secret",
 "aadClientID": "ウィザードで指定した Application ID",
 "tenantID": "Azure AD の Directory ID",
 "resourceGroup": "ウィザードで指定したリソースグループ名",
 "location": "ウィザードで指定したリージョン",
 "subscriptionID": "Azure のサブスクリプションID"}

HA構成のOpenShift on Azure で Cockpit を有効にする

Cockpit を利用するとOpenShiftに作成したプロジェクトやコンテナを横断的に管理することができます。

Cockpitのインストール手順は以下を参照してください。

ちょっとした動作確認で、All in One 構成の場合は上記の手順通りで簡単に利用できるのですが、Azure上にHA構成で構築している場合はLBの設定などに変更が必要です。

Azureの設定変更

Inboudセキュリティルールの追加

Masterサーバのネットワークセキュリティグループ(masterSubnetNSG)に Inboundのポートを追加します。

  1. リソースグループのOverview画面でmasterSubnetNSGを選択
  2. masterSubnetNSGのSettingsメニューからInbound security rulesを選択
  3. 画面上部の「+Add」ボタンをクリックしてルールを追加
項目名
Name cockpit
Priority 変更せず
Source Any
Service Custom
Protocol TCP
Port range 9090
Action Allow

LBのルールの追加

Masterサーバ用のロードバランサ(masterLB)に9090ポートへのロードバランスルールを追加します。

  1. リソースグループのOverview画面でmasterLBを選択
  2. masterLBのSettingsメニューからLoad balancing rulesを選択
  3. 画面上部の「+Add」をクリックしてルールを追加
項目名
Name cockpitRule
IP Version IPv4
Frontend IP address masterLBFrontEndを選択
Protocol TCP
Port 9090
BackendPort 9090
Backend pool 変更せず
TcpProbe(TCP:8443) 変更せず
Session persistence None

ユーザ設定

Cockpitのログインユーザが、OpenShiftのクラスタ情報にアクセスできるように設定します。 ここでは myadmin とユーザで設定します。

ユーザ作成

myadmin ユーザが各Nodeに鍵認証でログインできるように設定します。

作業対象:全サーバ

  1. myadmin ユーザを作成
  2. myadmin ユーザの鍵を配布
  3. myadmin ユーザのパスワード設定(ここで設定したパスワードは、Cockpitのログインで使います)

myadminユーザの設定

myadminユーザが system:admin 権限で OpenShift のクラスタ管理ができるようにします。

作業対象:Masterサーバ

  1. /etc/origin/master/admin.kubeconfig ファイルを ~myadmin/.kube/config ファイルにコピー
cp /etc/origin/master/admin.kubeconfig ~myadmin/.kube/config

あとは、cockpit の管理画面にブラウザでアクセスすれば、OpenShiftのNodeやコンテナの情報が参照可能になります。

f:id:akubicharm:20170815193047p:plain

f:id:akubicharm:20170815193057p:plain

OpenShift 3 Online がリリース

OpenShift Online が v3 に対応し、無償で OpenShift の最新版が使えるようになりました。ということで、今回はエントリ方法を紹介します。

OpenShift Onlineとは

OpenShift Onlineは、Red Hat が管理運用している Public な OpenShift Container Platform の環境です。Free Plan も用意されているので、OpenShift を開発者として利用したい場合には非常に便利です。

利用プラン

まずは、Free Planがリリースされました。 Free Plan では、Project(Kubernetes の Namespace を拡張した概念)を一つ作成することができます。Web App, DB, Jenkins を使ったCI/CDを試すには十分でしょう。今後、有償プランもリリースされていく予定です。

使えるアプリケーション

アプリケーションの実行環境を選択するテンプレートがカテゴリ別に用意されています。テンプレートでは、プログラミング言語の単体の実行環境や、Data Store と連携させるテンプレートなどが提供されています。

プログラミング言語

Java
OpenJDK1.8、Red Hatエンタープライズ向けに提供しているTomcat 7/8 であるRed Hat JBoss Web Server、Red Hat JBoss EAP のアップストリーム版である WildFly
Java Script
Node.jsの実行環境と、Node.js + MongoDB の実行環境
.NET
.NET Core 1.1
Perl
Perl5の実行環境と、Dancer サンプルアプリケーション + MySQL の実行環境
PHP
PHP7の実行環境と、CakePHPサンプルアプリケーション + MySQLの実行環境、Laravel サンプルアプリケーション + MySQL の実行環境
Python
Python3.5の実行環境と、Djangoサンプルアプリケーション + PostgreSQLの実行環境
Ruby
Ruby2.3の実行環境と、Railsサンプルアプリケーション+ PostgreSQLの実行環境

テクノロジ

CI/CD
Jenkins2.0の実行環境
Data Store
MariaDB、MongoDB、MySQLPostgreSQL、Redisの実行環境

f:id:akubicharm:20170507151950p:plain

ユーザ認証

ユーザ認証は、Red Hat Customer Portal のアカウントの他に、Github.com、JBoss Developerといった開発者系のWebアカウントのほか TwitterFacebookなどのSNSでの認証も可能になっています。

使ってみよう

パート1 エントリ

(1)OpenShift OnlineのURLにアクセス

https://www.openshift.com/にアクセスし、画面右上部のSIGN UP FOR FREEをクリックします。

f:id:akubicharm:20170508025139p:plain

(2)ログイン画面からサインアップ

画面中央のLOGIN WITH RED HATをクリックしサインアップ画面に遷移します。

f:id:akubicharm:20170508025153p:plain

(3)認証方式を選択します

Red Hatのカスタマーポータルのアカウントでログインする場合

f:id:akubicharm:20170508025544p:plain

 

フィールド名 説明
Email address or other Red Hat Login ID Red Hatのカスタマポータルで利用しているE-Mailアドレス
Password パスワード

SNSのアカウントなどで認証を行う場合は、画面を下にスクロールし連携させたい外部のサービスを選択します。

f:id:akubicharm:20170508025227p:plain

ここからプラン選択のウィザードでプランを選択していきます。

(4)プラン選択

FREE プランなので、画面下部のFREEボタンをクリックします。

f:id:akubicharm:20170508025243p:plain

(5)リージョン選択

ここも選択肢がないので、画面下部のUS East (Virginia)ボタンをクリックします。

f:id:akubicharm:20170508025252p:plain

(6)プランの確認

選択したプランの内容を確認し、画面下部のConfirm subscriptionボタンをクリックします。

f:id:akubicharm:20170508025303p:plain

アカウントプロビジョニング中の画面が表示されます。

f:id:akubicharm:20170508025330p:plain

少し待ってからリロードし、Open Web Consoleボタンをクリックして、OpenShift OnlineのWebコンソール画面に遷移します。

f:id:akubicharm:20170508025644p:plain