仮想化通信

日本仮想化技術株式会社の公式エンジニアブログ

OpenShift 3.11をCentOS 7で使ってみた

OpenShift-Ansibleというプロジェクトを見つけたので、これを使ってOpenShiftを構築してみることにしました。

github.com

CentOS 7にはOpenShift用のRPMパッケージが用意されていますので、OpenShiftの3.11バージョンまでは比較的に簡単にセットアップできます。

今回はまずAll-in-One構成でセットアップしてみます。

セットアップの前に

必須コンポーネント

Network Managerとgitコマンドが必要です。CentOS 7をセットアップするとNetwork Managerは標準でインストールされているはずですが、インストールされていない場合は次のようにインストールしてください。

# yum install NetworkManager git

インストール後、サービスを有効化しておきます。

 # systemctl enable --now NetworkManager

Ansible

Ansibleを使ってOpenShiftをデプロイするわけですが、必要なのは2.6.xのAnsibleだそうです。現在、EPELリポジトリーで公開されているのは2.9系のAnsibleになっています。EPELリポジトリーが有効な状態だと想定より新しいバージョンのAnsibleがインストールされるので注意してください。時間がかかった挙げ句、デプロイに失敗して悲しい思いをします。

必要なAnsibleは次の手順に従うことで必要なパッケージを配布するリポジトリーを有効化しますので、CentOS公式のリポジトリー以外が有効化されていないか確認するだけでOKです。

# yum-config-manager --disable epel

Ansibleを使ったOpenShiftのセットアップ

インベントリーの作成

サンプルをベースとして、インベントリーファイルを作成します。

# mkdir -p /root/ansible/
# vi /root/ansible/host.localhost
...
#bare minimum hostfile

[OSEv3:children]
masters
nodes
etcd

[OSEv3:vars]
# if your target hosts are Fedora uncomment this
#ansible_python_interpreter=/usr/bin/python3
openshift_deployment_type=origin
openshift_portal_net=172.30.0.0/16
# localhost likely doesn't meet the minimum requirements
openshift_disable_check=disk_availability,memory_availability

openshift_node_groups=[{'name': 'node-config-all-in-one', 'labels': ['node-role.kubernetes.io/master=true', 'node-role.kubernetes.io/infra=true', 'node-role.kubernetes.io/compute=true']}]


[masters]
localhost ansible_connection=local

[etcd]
localhost ansible_connection=local

[nodes]
# openshift_node_group_name should refer to a dictionary with matching key of name in list openshift_node_groups.
localhost ansible_connection=local openshift_node_group_name="node-config-all-in-one"

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

OpenShift Ansibleのrpmパッケージをインストールします。

# yum install -y centos-release-openshift-origin311 
# yum install -y openshift-ansible-docs openshift-ansible-playbooks openshift-ansible-roles openshift-ansible-test

要件の確認とセットアップ

次のようにコマンドを実行して、要件の確認とセットアップを行います。基盤に必要なパッケージ(例えばDockerなど)のセットアップもここで行われます。

# ansible-playbook -i /root/ansible/host.localhost /usr/share/ansible/openshift-ansible/playbooks/prerequisites.yml 

OpenShiftのセットアップ

次にOpenShiftのデプロイを行います。シングルノードでも deploy_cluster.yml を利用します。

# ansible-playbook -i /root/ansible/host.localhost /usr/share/ansible/openshift-ansible/playbooks/deploy_cluster.yml

次のように出力されたら完成です。

...
PLAY RECAP *************************************************************************************************
localhost                  : ok=621  changed=274  unreachable=0    failed=0   


INSTALLER STATUS *******************************************************************************************
Initialization               : Complete (0:00:19)
Health Check                 : Complete (0:00:43)
Node Bootstrap Preparation   : Complete (0:29:13)
etcd Install                 : Complete (0:00:54)
Master Install               : Complete (0:06:46)
Master Additional Install    : Complete (0:00:32)
Node Join                    : Complete (0:00:08)
Hosted Install               : Complete (0:00:48)
Cluster Monitoring Operator  : Complete (0:02:20)
Web Console Install          : Complete (0:00:52)
Console Install              : Complete (0:00:26)
metrics-server Install       : Complete (0:00:02)
Service Catalog Install      : Complete (0:02:01) 

使ってみる

ログインします。

# oc login -u system:admin

次のようなYAMLを用意します。

# cat hello.yml

apiVersion: v1
kind: Pod
metadata:
  name: hello-world
spec:
  containers:
    - name: busybox
      image: busybox
      tty: true

プロジェクトを作成します。

# oc new-project hello

Podを作成します。

# oc create -n hello -f hello.yml
pod/hello-world created

# oc get po -n=hello
NAME          READY     STATUS    RESTARTS   AGE
hello-world   1/1       Running   0          1m

Podを削除します。

# oc delete -n hello -f hello.yml
pod "hello-world" deleted

以上で、CentOS 7でOpenShiftは簡単に導入できます。

このあと、こちらに公開されているチュートリアルや、こちらに公開されているテンプレートを試すとよりOpenShiftの理解が進みそうです。

今回は1台のマシンにセットアップしましたが、今後マルチノードも挑戦してみようと思います。

最後にお試しする際は、くれぐれもAnsibleのバージョンに注意してください!

おまけ

デプロイを開始してからAnsibleのバージョンが新しいことに気がついた場合は、次のように設定するとOSのインストールから実行し直すという悲しい思いはせずにすみます。一旦 playbooks/deploy_cluster.yml を実行して失敗したら以下の操作を行い、再度 playbooks/deploy_cluster.yml を実行してください。

#Ansible 2.6.xじゃないバージョンを消す
rpm --nodeps -e ansible

#EPEL(などのCentOS以外のリポジトリーがあれば)無効化
yum-config-manager --disable epel

#Ansibleを入れ直し
yum install ansible