OpenShift 를 설치 하기위한 구성은 싱글 서버(All-In-One)부터 10대 이상의 구성까지 다양하다. 이번 포스팅에서는 단일서버에 OpenShift 를 설치하는 과정을 기록하고 관리하도록 한다. OpenShift 는 v3로 넘어오면서 Kubernetes 의 Container, Storage, SDN 오케스트레이션을 완성도 있게 구현하여, 한층 단순하고 안정적으로 다룰 수 있게 되었다. 즉 기존의 Gear/Broker/Cartridges 의 생소한 개념들을 걷어내고 Docker/Kubernetes/Docker Images 개념으로 재정립하여 구조적으로 간단해지고, 널리 알려진 인프라 기술이 적용되었으며, 더 나은 UX를 제공하게 된 것이다.
최근에 들어서 기존의 rpm 설치 방식을 간결하게 만든 dockerized 설치 방식이 일반화되고 있으며, 여기서 사용할 OpenShift v3 Origin 버전의 경우도, Dockerized 설치 방식으로 Ansible-playbook 을 통해 로컬서버에 호스팅되는 형식으로 구현되어 있다.
참고로 본 글은, OpenShift 설치와 사용법에 관련한 총 3개의 시리즈 중 첫 번째로, 다음 회에서는 1 Master 2 Node 설치 과정과 Kubernetes를 통한 Docker/Container, Storage, Network의 Orchestration과 Build/Deploy 에 대해 실제 사용 사례(Use Case)별 구현과 체험을 간략히 진행해 보는 것으로 예정하고 있다.
- OpenShift v3 Concepts
사전 설정(Pre-requisites)
- 서버 구성(최소 사양) : 2 CPU, 8 G memory, 20G+20G(추가디스크) Disk
- OS는 CentOS 7.3, Minimal Server 버전
- 추가디스크는 Persistent Storage를 위한 NFS 용 스토리지로, /mnt/persistent-volumes 에 마운트
- 내부 테스트 또는 외부 서비스용 별도 DNS 서버 필요
- 여기서는 내부 테스트용 test.local 도메인을 named 를 통해서 존파일 설정(DNS forwarding 사용)
- DNS forwarding 을 위한 설정 내용을 일단 정리해두고 넘어가자(192.168.0.0/16 네트워크 사용시).
[root@dns ~]# cat /etc/named.conf
options {
listen-on port 53 { any; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; };
recursion yes;
// For non-internal domains
forwarders {
168.126.63.1;
8.8.8.8;
};
auth-nxdomain no; # conform to RFC1035
dnssec-enable yes;
// dnssec-validation yes;
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
[root@dns ~]# cat /etc/named.rfc1912.zones
...(생략)...
zone "0.in-addr.arpa" IN {
type master;
file "named.empty";
allow-update { none; };
};
zone "test.local" IN {
type master; // server type
file "test.local.zone"; // zone file
allow-update {none;}; // none: no slave to sync
};
zone "168.192.in-addr.arpa" IN { // Reverse
type master;
file "/var/named/rev.168.192.in-addr.arpa";
};
[root@dns ~]# cat /var/named/test.local.zone
$ORIGIN .
$TTL 10
test.local. IN SOA dns.test.local. root.test.local. (
2017031402 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; min(Negative cache TTL)
test.local. IN NS dns.test.local.
dns.test.local. IN A 192.168.0.3
$ORIGIN test.local.
openshift3 IN A 192.168.10.145
*.openshift3 IN A 192.168.10.145
[root@dns ~]# cat /var/named/rev.168.192.in-addr.arpa
$TTL 10
@ IN SOA dns.test.local. root.test.local. (
2017031403 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; min(Negative cache TTL)
test.local. IN NS dns.test.local.
dns.test.local. IN A 192.168.0.3
@ IN NS dns.test.local.
3.0 IN PTR dns.test.local.
145.10 IN PTR openshift3.test.local.
- 준비된 노드에서 다음과 같은 사전설치 과정을 따른다
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
...
NETMASK=255.255.0.0
DNS1=192.168.0.3
DNS2=8.8.8.8
# hostnamectl set-hostname openshift14-allinone
# yum install -y bind-utils git iptables-services
# systemctl enable iptables
# systemctl start iptables
# nslookup openshift3.test.local
# dig yahoo.com a
# ssh-keygen
# ssh-copy-id root@openshift3.test.local
# ssh root@openshift3.test.local
OpenShift v3 설치 시작
- EPEL repo를 설정하고 필요한 패키지 설치
# yum install -y epel-release
# yum install -y docker wget ansible
# yum install -y python-cryptography pyOpenSSL.x86_64
- OpenShift Ansible 패키지와 configuration 소스 설치, 설정
# git clone https://github.com/DragOnMe/openshift-ansible.git
# git clone https://github.com/DragOnMe/playbook-allinone-cfg.git
# vi playbook-allinone-cfg/centos7-1node-playbook.cfg
[OSEv3:children]
masters
nodes
[OSEv3:vars]
ansible_ssh_user=root
deployment_type=origin
openshift_master_identity_providers=[{'name': 'htpasswd_auth', 'login': 'true', 'challenge': 'true', 'kind': 'HTPasswdPasswordIdentityProvider', 'filename': '/etc/origin/master/htpasswd'}]
containerized=true
openshift_release=v1.4.1
openshift_image_tag=v1.4.1
openshift_public_hostname=openshift3.test.local
openshift_master_default_subdomain=apps.openshift3.test.local
openshift_hosted_metrics_deploy=false
[masters]
openshift3.test.local openshift_schedulable=true
[nodes]
openshift3.test.local openshift_node_labels="{'region': 'infra', 'zone': 'default'}" openshift_schedulable=true
# ansible-playbook -i ./playbook-allinone-cfg/centos7-1node-playbook.cfg ./openshift-ansible/playbooks/byo/config.yml
- 실행 도중 오류가 나는 경우 진행되었던 설치 과정의 흔적을 Clear 한 후, 각종 문제(주로 selinux 설정, firewalld-iptables 관련 문제 등)을 해결하고 다시 설치를 시도해야 한다
# ansible-playbook -i ./playbook-allinone-cfg/centos7-1node-playbook.cfg ./openshift-ansible/playbooks/adhoc/uninstall.yml
- 최초 OpenShift 계정으로 guest 계정 생성, 접속 테스트
# cd /etc/origin/master/
# cat htpasswd
# htpasswd -b /etc/origin/master/htpasswd guest openshift
# oc login
# oc status
# oc logout
- NFS를 persistent storage 로 설치하기 위해 nfs-server 설치, 설정
# yum groupinstall -y file-server
# systemctl enable rpcbind
# systemctl enable nfs-server
# systemctl start rpcbind
# systemctl start nfs-server
# iptables-save > pre-nfs-firewall-rules-server
# iptables -I INPUT -m state --state NEW -p tcp -m multiport --dport 111,892,2049,32803 -s 0.0.0.0/0 -j ACCEPT
# iptables -I INPUT -m state --state NEW -p udp -m multiport --dport 111,892,2049,32769 -s 0.0.0.0/0 -j ACCEPT
# service iptables save
# setsebool -P virt_use_nfs 1
- OpenShift용 Persistent Volume 생성(1GB * 15)
# vi playbook-allinone-cfg/pv.json
{
"apiVersion": "v1",
"kind": "PersistentVolume",
"metadata": {
"name": "pv001"
},
"spec": {
"capacity": {
"storage": "1Gi"
},
"accessModes": [ "ReadWriteOnce" ],
"nfs": {
"path": "/mnt/persistent-volumes/pv0001",
"server": "192.168.10.145"
},
"persistentVolumeReclaimPolicy": "Recycle"
}
}
# oc login -u system:admin
# for i in `seq -w 001 015`; do \
SHARE=/mnt/persistent-volumes/pv$i; \
mkdir -p $SHARE; chmod 777 $SHARE; \
chown nfsnobody:nfsnobody $SHARE; \
echo "$SHARE 192.168.0.0/16(rw,all_squash)" >>/etc/exports; \
sed s/pv001/pv$i/g /root/playbook-allinone-cfg/pv.json | oc create -f -; \
done
# oc get pv
# oc version
# oc get user
# oc config view
# oc get all
- Guest 및 관리자 계정(admin) 생성
# htpasswd -b /etc/origin/master/htpasswd admin openshift
# oc login -u system:admin
# oadm policy add-cluster-role-to-user cluster-admin admin
마무리 & 테스트 단계
웹브라우저를 통해 https://openshift3.test.local:8443 으로 접속하면 Origin 로그인 화면이 나타난다
다음 회를 기약하며
이번 회에서는 단일 서버 구성의 설치 과정에 대해서만 간단히 정리하고, 다음 #2 회에서 3-노드 설치, 설정과 함께, 3가지의 OpenShift 사용 Use Case를 직접 다뤄 보면서 조금 더 사용법과 개념에 익숙해 지는 기회를 만들고자 한다.
참고로 OpenShift Origin을 VirtualBox 등의 단일 VM내에서 작동시킬 수 있는 MiniShift 도 있으니 한 번 설치, 사용해 볼 만하다. DNS를 통하지 않는 IP 주소 기반의 사용 방식이지만 OpenShift의 대다수 기능들을 그대로 사용할 수 있게 만들어져 있다. 참조 주소는 다음과 같다.
[연관되는 글]
[OpenShift v3 #2] Origin 3-node, CentOS 7 기반 3노드 설치, 사용 방법(2/3)
[OpenShift v3 #3] Origin 3-node, CentOS 7 기반 3노드 설치, 사용 방법(3/3)
- Barracuda -