2020. 4. 10. 10:23ㆍEngineering/Cloud
Content
1. Requirements
2. 사전작업
2-1. DNS 서버 설정
2-2. hostname 설정
2-3. selinux 설정
2-4. NMCONTROLLED 설정
2-5. Docker 설치 및 가동
3. Ansible 및 openshift-ansbile playbook 설치
4. ansible 인벤토리 작성
5. ansible 실행
6. OKD 웹 콘솔 접속
OpenShit 커뮤니티 버전인 OpenShift Origin (OKD) 3.11 버전을 설치하는 방법에 대해 알아봅니다.
1. Requirements
OKD 설치에 필요한 host들의 최소 요구 조건들이 있습니다.
자세한 내용은 OKD 공식 가이드 페이지를 참고 하시길 바랍니다.
https://docs.okd.io/3.11/install/prerequisites.html#install-config-install-prerequisites
1-1. Master/Worker 노드 Requirements
Master 노드와 Worker 노드는 아래 최소 요구 사항들을 만족하는 서버들로 준비 해주시기 바랍니다.
(*자세한 내용은 OKD 공식 가이드 참고하시기 바랍니다.)
- Master 노드 :
- OS :Fedora 21, CentOS 7.5 이상, RHEL 7.5 이상
- 사양 : 4vCPU/16GB RAM/ 50GB HDD 이상
- Worker 노드 :
- OS : Fedora 21, CentOS 75이상, RHEL 7.5 이상
- 사양 : 1vCPU/8GB RAM/20GB HDD 이상
1-2. DNS Requirements
OKD 설치를 위해서는 OKD 클러스터를 구성하는 호스트간의 DNS 서버가 필수입니다.
본 글에서는 내부 DNS 서버가 구축되어 있는 상황을 가정합니다.
따라서 DNS서버 구축 방법에 대한 내용은 따로 다루지 않겠습니다.
* 저의 경우는 KT Cloud의 Server 상품을 사용하여 OKD 클러스터를 구축하였습니다.
KT Cloud Server 상품의 경우, 내부 DNS 자동으로 구축 및 설정 됩니다.
따로 DNS 서버 구축/설정 없이, KT Cloud의 Default 설정을 그대로 사용하였습니다.
자세한 내용은 '2-1. DNS 서버 설정'에서 설명 하겠습니다.
1-3. 실습환경
본 글에서는 Master노드 1대, Worker노드 1대로 이루어진 OKD 클러스터를 구축합니다.
각 노드의 스펙 정보는 아래와 같습니다.
|
OS |
vCore |
RAM |
Disk |
hostname |
Master노드#1 |
CentOS 7.6 |
8 |
16GB |
100GB |
eyoh-diy-okd-1.cs9798cloud.internal |
Worker노드#1 |
CentOS 7.6 |
8 |
16GB |
100GB |
eyoh-diy-okd-2.cs9798cloud.internal |
2. 사전작업
2-1. DNS 서버 설정
1장에서 설명했듯이, OKD 설치를 위해서는 OKD 클러스터 내부 DNS 구축이 필수입니다.
본 글에서는 내부 DNS 서버가 구축되어 있는 상황을 기준으로 설명합니다.
내부 DNS 서버가 이미 구축 되어 있다면,
각 master 및 worker 노드가 바라보는 DNS 서버를 해당 내부 DNS 서버로 설정만 해주면 됩니다.
각 노드의 DNS 서버 설정은 '/etc/resolv.conf' 파일에 명시 되어 있습니다.
@모든 노드 (Master, Worker 노드)
모든 노드의 /etc/resolv.conf 파일에 아래와 같은 내용만 추가하면 됩니다.
# /etc/resolv.conf
search [클러스터 구성 노드들의 도메인 suffix]
nameserver [DNS 서버 IP]
본 글에서는 KT Cloud Server를 사용합니다.
KT Cloud Server 사용 시 내부 DNS 관련 설정이 Default 설정으로 제공되므로,
본 글에서는 KT Cloud Server의 DNS 설정을 그대로 사용합니다.
KT Cloud Server의 DNS 설정을 간단히 확인만 해보겠습니다.
KT Cloud Server를 하나 신청하고, 해당 서버의 /etc/resolv.conf 파일을 확인해보면 아래와 같은 형태 입니다.
내부 172.27.0.1 IP를 갖는 DNS가 설정 되어 있는 것을 확인할 수 있습니다.
@모든 노드 (Master, Worker 노드)
$ cat /etc/resolv.conf
2-2. hostname 설정
OKD 클러스터를 구성하는 모든 노드의 hostname을 설정하여 줍니다.
물론 내부 DNS에 등록되어 있는 각 노드의 도메인을 사용하셔야 하며,
full name을 사용을 권장 드립니다.
@ 모든 노드 (Master, Worker 노드)
현재 hostname의 full name 확인은
$ hostname -f
명령으로 확인 가능하며,
@ 모든 노드 (Master, Worker 노드)
hostname 변경은
$ hostnamectl set-hostname [new_hostname]
명령으로 가능합니다.
KT Cloud Server의 경우, hostname도 자동으로 설정됩니다.
따라서 이 글에서는 KT Cloud Server의 hostname을 그대로 사용하며,
역시 KT Cloud Server의 hostname 기본 설정만 확인해보도록 하겠습니다.
@ Master 노드
$ hostname -f
@ Worker 노드
$ hostname -f
마스터 노드와 워커 노드에 각각 hostname이 제대로 설정되어 있는 것을 확인할 수 있습니다.
2-3. Selinux 설정
OKD 설치를 위해서는 모든 노드의 selinux 설정을 enable 해야 합니다.
Selinux 설정은 '/etc/selinux/config' 파일에서 수정 가능하고, reboot을 해야만 설정 변경이 반영 됩니다.
이때, OKD 공식 가이드에서는 SELINUX=enforcing 사용을 권장하지만,
! 저와 같이 원격 서버를 할당 받아 사용 하는 경우 SELINUX=permissive로 설정해야 합니다. !
SELINUX=enforcing인 경우 ssh 원격 접속이 불가하여 reboot 이후 VM에 접속할 수 없는 난감한 상황이 발생합니다.
@ 모든 노드 (Master, Worker 노드)
$ vi /etc/selinux/config
SELINUX=permissive
SELINUX=targeted 로 수정 후 저장
selinux 설정 변경사항 반영을 위해, 서버를 재기동합니다.
$ sudo reboot
재기동 후, 현재 selinux 설정이 제대로 변경되었는지 확인합니다.
$ sestatus
SELinux의 Current mode가 permissive로 변경되어 있는 것을 확인할 수 있습니다.
2-4. NMCONTROLLED 설정
OKD 공식 문서에 따르면 OKD 설치를 위해서는 모든 노드의 NMCONTROLLED=yes로 설정해야 합니다.
NMCONTROLLED 옵션은 '/etc/sysconfig/network-scripts/ifcfg-eth0' 파일에서 변경 할 수 있습니다.
마찬가지로 변경사항 반영을 위해서는 서버 reboot이 필요합니다.
@모든 노드 (Master, Worker 노드)
$ vi /etc/sysconfig/network-scripts/ifcfg-eth0
NMCONTROLLED=yes 로 수정
NMCONTROLLED 설정 변경사항 반영을 위해, 서버를 재기동합니다.
$ sudo reboot
참고로,
이 옵션을 설정하지 않고, 5장의 ansible을 바로 실행하는 경우 아래와 같은 에러가 발생합니다.
2-5. Docker 설치 및 기동
OKD 설치를 위해 모든 노드에 docker 설치는 필수 입니다.
OKD 설치 가이드에 따르면, RHEL 7 system엔 docker 1.13설치를 권장합니다.
따라서 모든 노드에 docker 1.13 을 설치하고 설치된 docker 데몬을 구동해줍니다.
@ 모든 노드 (Master, Worker 노드)
docker를 설치 합니다.
$ yum install docker-1.13.1
Docker를 데몬으로 등록 합니다.
$ systemctl enable docker
Docker 데몬을 구동합니다.
$ systemctl start docker
제대로 기동이 됐으면 docker info 정보가 아래와 같이 출력됩니다.
$ docker info
3. Ansible 및 openshift-ansible playbook 설치
OKD는 Ansible을 사용하여 설치되며,
OKD 설치를 위한 ansible 스크립트인 openshift-ansible playbook을 다운받아 실행하실 수 있습니다.
Ansible이 원격 노드들을 한 노드에서 관리할 수 있도록 해주는 도구 이므로,
OKD 설치를 위한 ansible 스크립트는 master 노드에서만 실행해주면 됩니다.
따라서 ansbile 관련 파일은 master 노드에만 설치합니다.
(Ansible에 관한 자세한 설명은 이전글을 확인 하시기 바랍니다.)
@ Master 노드
먼저 ansible 및 openshift-ansible playbook 다운을 위한 yum epel 레포를 추가합니다.
$ yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
그리고 ansible을 설치합니다.
! 이때, ansible-2.6.20 버전을 설치해야 합니다. !
최신 ansible 버전(2.9버전)을 사용하는 경우 5. ansible 실행에서 아래와 같은 에러가 발생합니다.
저는 pip을 통해 ansible을 설치 하였습니다. (pip이 설치되지 않은 경우, pip부터 설치 하셔야 합니다.)
$ pip install ansible==2.6.20
Ansible 2.6.20 버전이 정상적으로 설치되었는지 확인해봅니다.
$ ansible --version
다음으로, OKD 설치 스크립트인 openshift-ansible playbook 설치를 위해 해당 레포지토리를 추가합니다.
$ yum install centos-release-openshift-origin311.noarch
Openshift-ansible 스크립트를 다운 받습니다.
$ yum install openshift-ansible
설치된 Openshift-ansible playbook은 아래 경로에서 확인하실 수 있습니다.
$ ls /usr/share/ansbile/openshift-ansible/playbooks
4. Ansible 인벤토리 작성
Ansible 인벤토리는 ansible이 관리할 노드들에 대한 정보를 기술한 파일 입니다.
파일 경로는 '/etc/ansbile/hosts' 입니다.
사실상 저희가 설치하려는 OKD 클러스터에 대한 세부 설정을 이 파일에 명세하게 됩니다.
OKD 클러스터 설정에 대한 다양한 관련 옵션들이 있어,
이를 적절히 사용하여 인벤토리 파일을 작성 하는것이 OKD 설치의 핵심입니다.
자세한 인벤토리 파일의 옵션들은 OKD 설치 가이드에 'Configuring your inventory file'에 설명 되어 있습니다.
(https://docs.okd.io/3.11/install/configuring_inventory_file.html)
저희는 ansible을 master 노드에 설치 했으므로,
Master 노드의 '/etc/ansbile/hosts' 파일에 인벤토리 파일 내용을 작성해야 합니다.
제가 사용한 인벤토리 파일은 아래와 같습니다.
*자세한 내용을 모두 이해하시려면, 위에 말씀드린 OKD 설치가이드 'Configuring your inventory file' 과
Ansible 인벤토리 파일 작성 법을 숙지하셔야 합니다.
간단한 설명은 주석으로 달아 두었습니다.
[OSEv3:vars]
# Ansible
ansible_python_interpreter=/usr/bin/python2.7
ansible_user=root
ansible_ssh_private_key_file=~/.ssh/id_rsa
openshift_deployment_type=origin
openshift_release="3.11"
openshift_disable_check=memory_availability,docker_storage,docker_image_availability,disk_availability
# Cluster
openshift_master_cluster_method=native
openshift_master_default_subdomain=[master노드 Default 노출 서브도메인]
openshift_master_cluster_hostname= [master노드 hostname]
openshift_master_cluster_public_hostname=master-console.14-63-223-242.nip.io #OKD웹콘솔 노출 URL
openshift_public_hostname=console.14-63-223-242.nip.io
openshift_master_identity_providers=[{'name': 'htpasswd_auth', 'login': 'true', 'challenge': 'true', 'kind': 'HTPasswdPasswordIdentityProvider'}]
openshift_master_api_port=8443 #OKD API 포트
openshift_master_console_port=8443 #OKD console API 포트
# Hostname Validate
openshift_set_hostname=false
openshift_hostname_check=false
openshift_override_hostname_check=true
# Cockpit Dashboard
osm_use_cockpit=true
# Docker
#openshift_docker_disable_push_dockerhub=true
openshift_docker_insecure_registries=[your_registry_domain:your_registry_port] #사용하려는 도커 레지스트리 주소
openshift_docker_additional_registries=[your_registry_domain:your_registry_port] #사용하려는 도커 레지스트리 주소
openshift_docker_options="--insecure-registry 172.30.0.0/16 --insecure-registry docker-registry.default.svc:5000 --insecure-registry [your_registry_domain:your_registry_port] -l warn --log-opt max-size=20M --log-opt max-file=3"
docker_udev_workaround=true
openshift_hosted_manage_registry_console=false
# Openshift example
openshift_install_examples=true
openshift_examples_modify_imagestreams=true
# Ansible Service Catalog
openshift_enable_service_catalog=false
ansible_service_broker_install=false
ansible_service_broker_local_registry_whitelist=['.*-apb$']
template_service_broker_install=false
openshift_template_service_broker_namespaces=['openshift']
# Openshift SDN
openshift_portal_net=192.168.0.0/16
osm_cluster_network_cidr=10.1.0.0/16
os_sdn_network_plugin_name='redhat/openshift-ovs-networkpolicy'
# Certification setting
etcd_ca_default_days=3650
openshift_ca_cert_expire_days=3650
openshift_node_cert_expire_days=3650
openshift_master_cert_expire_days=3650
openshift_hosted_registry_cert_expire_days=3650
# Logging
openshift_logging_install_logging=false
openshift_logging=openshift-logging
openshift_logging_master_url=https://kubernetes.default.svc
openshift_logging_master_public_url=https://console.14-63-223-242.nip.io
# Nodes
# 마스터 노드를 etcd 노드로 구성
# 모든 워커 노드를 infra 노드로 구성
openshift_node_groups=[{'name': 'master', 'labels': ['node-role.kubernetes.io/master=true','runtime=docker']}, {'name': 'node', 'labels': ['node-role.kubernetes.io/node=true','node-role.kubernetes.io/infra=true','router=true','runtime=docker']}]
osm_default_node_selector='node-role.kubernetes.io/node=true'
## 노드 그룹 설정
[OSEv3:children]
masters
nodes
etcd
[masters]
eyoh-diy-okd-1.cs9798cloud.internal
[etcd]
eyoh-diy-okd-1.cs9798cloud.internal
[nodes]
eyoh-diy-okd-1.cs9798cloud.internal openshift_node_group_name="master" openshift_schedulable=true
eyoh-diy-okd-2.cs9798cloud.internal openshift_node_group_name="node" openshift_schedulable=true
5. Ansible 실행
이제 실제 OKD 설치를 시작합니다.
먼저 prerequisite 패키지들을 설치가 필요합니다.
Openshift-ansible playbook에 Prerequisite 패키지 설치를 위한 스크립트가 포함되어 제공됩니다.
Prerequisite 설치 스크립트는 '/usr/share/ansible/openshift-ansible/playbooks/prerequisites.yml' 경로에 있습니다.
그럼, 해당 prerequisite 스크립트를 실행합니다.
'-i' 옵션은 저희가 사용할 인벤토리 파일을 지정하는 옵션입니다.
저희는 4장에서 작성한 인벤토리 파일이 '/etc/ansbile/hosts' 경로에 있으므로 이 경로를 입력합니다.
$ ansbile-playbook -i [인벤토리파일] /usr/share/ansible/openshift-ansible/playbooks/prerequisites.yml
문제 없이 잘 수행 되면 위 사진과 같이 맨 마지막에 'Complete' 문구가 노출됩니다.
다음으로는 실제 OKD를 설치하는 스크립트를 수행합니다.
OKD 설치 스크립트 또한 openshift-ansible에 포함되어 있으며,
파일 경로는 '/usr/share/ansible/openshift-ansible/playbooks/deploy_cluster.yml' 입니다.
OKD 설치 스크립트를 실행 합니다.
Prerequisite 설치와 마찬가지로 '-i' 옵션을 통해, 저희가 작성한 인벤토리 파일 위치인 '/etc/ansbile/hosts'을 지정합니다.
$ ansible-playbook -i [인벤토리파일] /usr/share/ansible/openshift-ansible/playbooks/deploy_cluster.yml
설치가 정상적으로 수행되면, INSTALLER STATUS의 모든 항목이 'Complete'로 노출됩니다.
최종적으로 openshift 명령어들로 노드 상태나,
Default pod들의 배포 상태를 확인 할 수 있습니다.
@ 마스터 노드
$ oc get nodes
$ oc get all
6. OKD 웹 콘솔 접속
마지막으로 OKD 웹 콘솔에 접속해보도록 하겠습니다.
기본적으로 4장에서 작성한 인벤토리 파일의 설정대로 OKD 웹콘솔 파드가 외부로 노출됩니다.
인벤토리 파일에서 OKD 웹 콘솔 관련 설정 부분만 다시 확인해보겠습니다.
openshift_master_cluster_public_hostname=master-console.14-63-223-242.nip.io #OKD웹콘솔 노출 URL
openshift_master_console_port=8443 #OKD console API 포트
위 설정은 OKD 웹콘솔 도메인을 'master-console.14-63-223-242.nip.io'로 노출 시키고,
OKD 웹콘솔의 포트는 8443번을 사용하겠다는 의미 입니다 .
따라서, 웹브라우저에 'https://master-console.14-63-223-242.nip.io:8443' 을 입력하면
(단, Master노드에 8443번 포트포워딩 설정은 꼭 해주셔야 합니다.)
아래와 같이 OKD 웹 콘솔에 접속 할 수 있습니다.
이 때, 계정이 필요한데 이는 OKD 사용법에 따라 계정을 만드셔서 사용하시면 됩니다!
수고 많으셨습니다!!!!!
Reference
https://tech.osci.kr/2019/06/10/78611423/
'Engineering > Cloud' 카테고리의 다른 글
[Ansible] 앤서블(Ansible) 개념과 설치/사용법 (w/ CentOS 7.6) (6) | 2020.03.10 |
---|