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