Engineering/Cloud

[Openshift Origin : OKD] Openshift Origin OKD 3.11 설치 방법

5=0 2020. 4. 10. 10:23

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/

 

Openshift Origin v3.11 설치, App 배포

안녕하세요 오픈소스컨설팅 한철희 입니다. 이번 포스팅에서는 Kubernetes에 기반을 둔 Developer-Oriented PaaS 인 Red Hat Openshift를 살펴볼 것입니다. Openshift 란? OpenShift 는 개발자 및 IT 운영팀을 단일 플랫폼에서 통합하여, 하이브리드 클라우드 및 멀티 클라우드 인프라 전반에서 애플리케이션을 일관되게 구축, 배포 및 관리하도록 지원하는 플랫폼입니다. Openshift 이점 주요 이점 애플리케이션

tech.osci.kr

[OpenShift Origin] Solution Guide V0.95.pdf
3.46MB