top of page
작성자 사진LoxiLB

OCP with LoxiLB in-cluster mode

이 포스트에서는 OCP 설치 방법과, OCP에 LoxiLB in-cluster mode 배포 방법을 설명합니다.

OCP 설치 과정을 진행하기 위해서는 먼저 https://connect.redhat.com 에 가입된 계정이 있어야 합니다.


OCP 설치

Red Hat 는 web console에서 바로 OCP를 설치할 수 있는 Assisted Installer 라는 기능을 제공합니다. 이 포스트에서는 해당 기능을 사용하여 5개의 VM에 OCP를 설치할 것입니다.


https://console.redhat.com/openshift/create 페이지에 접속한 후, https://connect.redhat.com 에서 가입했던 계정 정보를 입력하여 로그인하면 아래와 같은 화면이 뜹니다.



왼쪽 메뉴에서 Cluster를 클릭하면 현재 생성된 Cluster 리스트를 확인할 수 있습니다.



Create cluster 버튼을 누르고, Select an OpenShift cluster type to create 페이지가 뜨면Datacenter 탭을 선택합니다.



그리고 다시 Create cluster 버튼을 누르면 설치 페이지로 넘어갑니다.



Cluster details 에서는 * 표시가 된 항목을 입력합니다.

  • Cluster name: 클러스터 이름입니다. 이 포스트에서는 test1로 하겠습니다.

  • Base domain: 로컬호스트에서 사용할 도메인 이름을 입력합니다. 생성 후에는 변경할 수 없습니다. 이 포스트에서는 loxilb.io를 사용합니다. 이후 클러스터를 생성한 다음 API 서버를 접근할 때 해당 도메인으로 구성된 URL을 사용하게 됩니다.

  • OpenShift version : 사용할 OpenShift의 버전을 지정합니다. 이 포스트에서는 현재 최신 버전인 4.14.1을 사용합니다.

그 외에는 특별히 선택하지 않고 다음으로 넘어갑니다. 추가로 Host’s network configuration 항목은 DHCP 혹은 Static IP를 선택할 수 있는데, OCP 구성에 사용할 VM이 IP를 DHCP로 할당받는다면 DHCP를, 고정 IP를 사용한다면 Static IP를 선택합니다.

Next를 누르면 다음과 같이 Operators 선택 화면으로 넘어갑니다.



Operators 선택 화면에서는 아무것도 선택하지 않고 다음으로 넘어가도록 하겠습니다.



Host discovery 화면은 Cluster 노드용으로 등록된 서버들의 리스트를 보여줍니다. 현재는 아무 호스트도 등록되지 않은 상태입니다. Add hosts 버튼을 클릭합니다.



버튼을 클릭하면 OCP 노드로 사용할 VM 부팅용 이미지 생성 팝업이 뜹니다.

  • Provisioning type: 생성할 이미지 타입을 지정합니다. Full Image file을 선택합니다.

  • SSH public key: 외부 서버에서 OCP 노드에 SSH로 접근할 수 있도록 public key를 등록합니다. 원하는 서버에서 ssh key를 생성한 후 public key 내용을 복사하여 붙여넣으면 됩니다.

그다음 Generate Discovery ISO 버튼을 클릭하면 다음과 같이 Discovery ISO를 다운받을 수 있는 경로를 제공합니다. wget 경로를 복사하거나 Download Discovery ISO 버튼을 눌러 이미지 파일을 다운로드하면 됩니다.



이제 다운로드한 Discovery ISO 파일로 VM을 부팅합니다. Assisted Installer는 Discovery ISO로 부팅된 서버 정보를 자동으로 수집하여 OCP 호스트로 등록합니다. Discovery ISO는 각 클러스터마다 따로 생성되기 때문에 이 이미지 파일을 다른 클러스터의 호스트를 등록하는 데 사용할 수는 없습니다.

생성하는 VM은 다음과 같은 요구사항을 만족해야 합니다.

  • OCP가 요구하는 최소 사양인 램 16G + 4 core + 100G HDD 이상

  • 외부와 통신이 가능한 네트워크 인터페이스

  • OCP 구성에 필요한 최소 3개 이상의 호스트. SCTP 사용을 원할 시, 최소 4개 이상이어야 함 (Worker 노드가 없을 경우 SCTP enable이 제대로 되지 않음)

이 포스트에서는 리눅스 서버에 libvirt를 사용하여 VM을 생성하겠습니다. 이 포스트에서 사용하는 서버는 eno5 네트워크 인터페이스로 외부 통신이 가능하므로, VM에 할당하는 인터페이스는 eno5 인터페이스의 macvlan으로 만듭니다.







VM이 Discovery Image로 부팅이 된 다음 시간이 지나면 (몇 분 정도 소요됩니다) 콘솔창에 자동으로 노드가 추가됩니다. 노드가 추가되면 노드의 정보를 콘솔 화면에서도 확인할 수 있습니다.



사용할 VM들이 전부 추가되었으면 Next 버튼을 클릭합니다.


Storage 화면이 나옵니다. 마찬가지로 Next 버튼을 눌러 다음으로 넘어갑니다.



Networking 설정 화면에서는 Network Management를 Cluster-managed networking, Network type을 SDN으로 설정하겠습니다. API IP와 Ingress IP는 각자 네트워크 설정에 맞게 입력하시면 됩니다. 이 포스트에서는 노드들이 192.168.20.0/24 대역대를 사용하므로, API IP를 192.168.20.254, Ingress IP를 192.168.20.253 으로 설정했습니다. 설정을 마치면 Next를 눌러 다음 화면으로 넘어갑니다.



마지막으로 설정을 확인한 후 Install cluster 버튼을 누르면 설치가 시작됩니다. 설치는 대략 40분 정도 소요됩니다.



설치가 정상적으로 완료되면 아래 그림처럼 설치 화면에 해당 클러스터의 Web console에 접근할 수 있는 링크가 표시되며 kubeconfig을 다운로드할 수 있습니다. 또한 Web console에 접속하기 위해 필요한 Username과 Password 역시 제공됩니다.



단, Web console URL에 접근하기 위해선 다음 조건이 필요합니다.

  1. OCP 클러스터의 API IP와 같은 네트워크거나 해당 네트워크에 접근 가능한 구성.

  2. Web console 접근에 필요한 호스트 정보가 DNS 서버 또는 hosts 파일에 등록되어 있어야 함.

이 포스트에서 사용하는 서버는 API IP와 같은 네트워크 대역대(192.168.20.0/24) 를 사용하고 있습니다. 그러므로 호스트 정보를 추가하는 방법만 설명하겠습니다. Web Console URL 아래에 Not able to access the Web Console? 을 클릭하면 다음 그림처럼 DNS / hosts 에 추가해야 하는 호스트들의 정보를 확인할 수 있습니다.



리눅스의 경우, /etc/hosts 파일에 위 정보를 추가하면 Web console에 접근할 수 있습니다. (설치 과정에서 인증서 관련 설정을 체크하지 않았다면, 경고가 뜰 수 있습니다.)



SCTP enable


OCP에서 사용하는 OS인 RHCOS는 기본적으로 SCTP 모듈이 disable된 상태입니다. 이를 enable하기 위해서는 machineConfig을 추가해야 합니다.


machineConfig을 OCP에 추가하기 위해서는 openshift CLI (oc) 혹은 kubectl을 사용해야 합니다. oc를 사용하기 위해 먼저 kubeconfig 파일을 Web console 화면에서 다운로드합니다.



다운로드한 kubeconfig 파일을 OCP 노드 중 하나에 복사합니다. (OCP의 모든 노드에는 oc와 kubectl이 설치되어 있기 때문에 원하는 노드 어디에 복사해도 상관 없습니다.) 이 포스트에서는 노드 외부 서버에 파일을 다운로드 한 후 scp를 사용해 OCP 노드에 복사하겠습니다. Discovery ISO 파일을 생성할 때 서버의 public key를 등록했기 때문에 비밀번호 없이도 SSH 접근이 가능합니다.



scp /home/netlox/Downloads/kubeconfig core@192.168.20.72:~/

파일을 복사했으면 해당 노드에 SSH로 접속한 후, ~/.kube 디렉토리를 생성하고, kubeconfig 파일을 config 이라는 이름으로 .kube 디렉토리에 복사합니다. 복사가 완료되면 Openshift CLI를 사용할 수 있습니다.


$ ssh core@192.168.20.72
Red Hat Enterprise Linux CoreOS 414.92.202310270216-0
  Part of OpenShift 4.14, RHCOS is a Kubernetes native operating system
  managed by the Machine Config Operator (`clusteroperator/machine-config`).

WARNING: Direct SSH access to machines is not recommended; instead,
make configuration changes via `machineconfig` objects:
  https://docs.openshift.com/container-platform/4.14/architecture/architecture-rhcos.html

---
Last login: Mon Nov  6 07:39:26 2023 from 192.168.20.218

$ mkdir -p ~/.kube
$ mv ~/.kube/kubeconfig ~/.kube/config
$ oc get nodes
NAME                STATUS   ROLES                  AGE     VERSION
52-54-00-1b-1a-cd   Ready    worker                 3h19m   v1.27.6+f67aeb3
52-54-00-25-a3-7e   Ready    control-plane,master   3h48m   v1.27.6+f67aeb3
52-54-00-30-6c-31   Ready    control-plane,master   3h10m   v1.27.6+f67aeb3
52-54-00-54-81-be   Ready    control-plane,master   3h48m   v1.27.6+f67aeb3
52-54-00-8e-aa-d4   Ready    worker                 3h19m   v1.27.6+f67aeb3

이제 다음과 같이 load-sctp-module.yaml 파일을 생성합니다.


apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
  name: load-sctp-module
  labels:
    machineconfiguration.openshift.io/role: worker
spec:
  config:
    ignition:
      version: 3.2.0
    storage:
      files:
        - path: /etc/modprobe.d/sctp-blacklist.conf
          mode: 0644
          overwrite: true
          contents:
            source: data:,
        - path: /etc/modules-load.d/sctp-load.conf
          mode: 0644
          overwrite: true
          contents:
            source: data:,sctp

파일을 생성했으면, 다음 명령어로 machineConfig을 추가합니다.


$ oc create -f load-sctp-module.yaml

몇 분 정도 기다리면 Worker 노드들이 자동으로 재시작됩니다. 재시작 후 모두 상태가 Ready로 바뀌면 이제 SCTP를 사용할 수 있습니다.


LoxiLB 배포

다음 명령어로 LoxiLB 배포에 필요한 매니페스트 파일들을 다운로드할 수 있습니다. 매니페스트 파일은 oc를 사용 가능한 서버에 다운로드합니다.


wget https://raw.githubusercontent.com/loxilb-io/kube-loxilb/main/manifest/in-cluster/kube-loxilb.yaml
wget https://raw.githubusercontent.com/loxilb-io/kube-loxilb/main/manifest/in-cluster/loxilb.yaml
wget https://raw.githubusercontent.com/loxilb-io/kube-loxilb/main/manifest/in-cluster/loxilb-peer.yml

다음 명령어로 kube-loxilb를 배포합니다


$ oc create -f kube-loxilb.yaml
serviceaccount/kube-loxilb created
clusterrole.rbac.authorization.k8s.io/kube-loxilb created
clusterrolebinding.rbac.authorization.k8s.io/kube-loxilb created
deployment.apps/kube-loxilb created

다음 명령어로 loxilb-peer를 배포합니다.


$ oc create -f loxilb-peer.yml
daemonset.apps/loxilb-peer created
service/loxilb-peer-service created

마지막으로 loxilb를 배포하기 위해, loxilb.yaml 파일을 열고 command 항목을 찾아 —blacklist 옵션을 다음과 같이 수정합니다.


containers:
      - name: loxilb-app
        image: "ghcr.io/loxilb-io/loxilb:ocp-beta"
        imagePullPolicy: Always
        command: [ "/root/loxilb-io/loxilb/loxilb", "--egr-hooks", "--blacklist=ovs.|br.|vxlan.|tun.|veth." ]
        ports:

수정 내용을 저장한 후, 다음 명령어로 loxilb를 배포합니다.


$ oc create -f loxilb.yaml
daemonset.apps/loxilb-lb created
service/loxilb-lb-service created



조회수 144회댓글 0개

최근 게시물

전체 보기

Comments


GIThub

Learn, Contribute & Share

GETTING STARTED

Get started with deploying LoxiLB in your cluster

Documentation

Check LoxiLB Documentation for more information.

Join the LoxiLB slack channel to chat with the developers community.

bottom of page