OpenShift Container Platform 3.7をシングルノードでインストールする
OpenShift 全部俺 Advent Calendar 2017
商用版のOpenShift Container Platform 3.7をシングルノードでインストールしてみます。
利用する/etc/ansible/hosts
ファイルの中身はこんな感じです。OpenShift Container Platform 3.6以前ではシングルマスター構成ではmaster-api, master-controllers, etcdが全部一つのプロセスmasterで動作する構成でしたが、管理性向上のため3.7ではこれは廃止され、マルチマスターと同一のプロセス構成になりました。
[OSEv3:children] masters etcd nodes [OSEv3:vars] ansible_ssh_user=nekop ansible_become=true deployment_type=openshift-enterprise openshift_master_identity_providers=[{'name': 'allow_all', 'login': 'true', 'challenge': 'true', 'kind': 'AllowAllPasswordIdentityProvider'}] os_sdn_network_plugin_name=redhat/openshift-ovs-multitenant openshift_node_kubelet_args={'kube-reserved': ['cpu=100m,memory=100Mi'], 'system-reserved': ['cpu=100m,memory=100Mi'], 'eviction-hard': [ 'memory.available<4%', 'nodefs.available<4%', 'nodefs.inodesFree<4%', 'imagefs.available<4%', 'imagefs.inodesFree<4%' ], 'eviction-soft': [ 'memory.available<8%', 'nodefs.available<8%', 'nodefs.inodesFree<8%', 'imagefs.available<8%', 'imagefs.inodesFree<8%' ], 'eviction-soft-grace-period': [ 'memory.available=1m30s', 'nodefs.available=1m30s', 'nodefs.inodesFree=1m30s', 'imagefs.available=1m30s', 'imagefs.inodesFree=1m30s' ]} openshift_disable_check=memory_availability,disk_availability openshift_master_default_subdomain=apps.example.com [masters] s37.example.com [etcd] s37.example.com [nodes] s37.example.com openshift_node_labels="{'region': 'infra'}" openshift_schedulable=true
rootでssh-copy-idしてあるstatic IPを持つRHEL 7.4 VMからスタートし、インストールの事前準備はこんな感じで流しています。dockerのstorage driverはoverlay2を指定します。
HOSTNAME=s37.example.com RHSM_USERNAME= RHSM_PASSWORD= RHSM_POOLID= OPENSHIFT_VERSION=3.7 hostnamectl set-hostname $HOSTNAME timedatectl set-timezone Asia/Tokyo adduser -G wheel nekop cat << EOM > /etc/sudoers.d/wheel %wheel ALL=(ALL) NOPASSWD: ALL Defaults:%wheel !requiretty EOM mkdir /home/nekop/.ssh/ cp -a /root/.ssh/authorized_keys /home/nekop/.ssh/ chown nekop.nekop -R /home/nekop/.ssh/ subscription-manager register --username=$RHSM_USERNAME --password=$RHSM_PASSWORD subscription-manager attach --pool $RHSM_POOLID subscription-manager repos --disable=* subscription-manager repos \ --enable=rhel-7-server-rpms \ --enable=rhel-7-server-extras-rpms \ --enable=rhel-7-server-optional-rpms \ --enable=rhel-7-server-rh-common-rpms \ --enable=rhel-7-fast-datapath-rpms \ --enable=rhel-7-server-ose-$OPENSHIFT_VERSION-rpms yum update -y yum install chrony wget git net-tools bind-utils iptables-services bridge-utils nfs-utils sos sysstat bash-completion lsof tcpdump yum-utils yum-cron docker atomic-openshift-utils -y sed -i 's/DOCKER_STORAGE_OPTIONS=/DOCKER_STORAGE_OPTIONS="--storage-driver overlay2"/' /etc/sysconfig/docker-storage systemctl enable chronyd docker reboot
これでインストールの準備が整ったので、ログインしなおした後にssh keyを用意してssh-copy-idしてansibleします。問題なければ再度確認も兼ねて一応rebootするようにしています。
ssh nekop@s37.example.com ssh-keygen ssh-copy-id s37.example.com vi /etc/ansible/hosts ansible-playbook -vvvv /usr/share/ansible/openshift-ansible/playbooks/byo/config.yml | tee -a openshift-install-$(date +%Y%m%d%H%M%S).log reboot
マルチノードの場合はglusterも一緒にセットアップできるのでglusterでPVを使えるようにするのがラクなんですが、シングルノードなのでhostPath
でPVを作成しておきます。SELinuxでコンテナからのアクセスを許可するのにchconでsvirt_sandbox_file_t
を設定します。
COUNT=100 sudo mkdir -p /var/lib/origin/openshift.local.pv/ for i in $(seq 1 $COUNT); do PVNAME=pv$(printf %04d $i) sudo mkdir -p /var/lib/origin/openshift.local.pv/$PVNAME cat <<EOF | oc create -f - apiVersion: v1 kind: PersistentVolume metadata: name: $PVNAME spec: accessModes: - ReadWriteOnce - ReadWriteMany - ReadOnlyMany capacity: storage: 100Gi persistentVolumeReclaimPolicy: Retain hostPath: path: /var/lib/origin/openshift.local.pv/$PVNAME EOF done sudo chcon -R -t svirt_sandbox_file_t /var/lib/origin/openshift.local.pv/ sudo chmod -R 777 /var/lib/origin/openshift.local.pv/