TheKoguryo's 기술 블로그

 Version 2024.11.15

1.11.1 Arm 기반으로 OKE 사용시 유의할 점

# fluent-bit 설치 이슈

OCI 콘솔에서 Quick Create 모드로 기본 설치하게 되면, 선택사항 없이 VCN-Native Pod Networking CNI로 설치되게 됩니다. 해당 CNI에서 이후 Service Mesh를 사용할 것을 가정하면, Worker Node Image를 Oracle Linux 7.x로 선택해야 합니다.

해당 조건으로 생성된 OKE 클러스터에 로깅을 위해 fluent-bit 설치시 Pod가 정상 기동되지 않는 것을 볼 수 있습니다.

  • 대상 OKE 클러스터

    • Shape CPU: Arm - Ampere
    • CNI: VCN-Native Pod Networking CNI
    • Worker Node Image: Oracle Linux 7.x
  • fluent-bit 설치시 오류

    $ kubectl get pod -n logging
    NAME                                    READY   STATUS             RESTARTS         AGE
    fluent-bit-7zthn                        0/1     CrashLoopBackOff   16 (3m47s ago)   62m
    fluent-bit-sz9cj                        0/1     Pending            0                62m
    fluent-bit-tsbfr                        0/1     CrashLoopBackOff   16 (4m38s ago)   62m
    ...
    
    $ kubectl logs -n logging -f fluent-bit-7zthn
    ...
    <jemalloc>: Unsupported system page size
    Error in GnuTLS initialization: ASN1 parser: Element was not found.
    <jemalloc>: Unsupported system page size
    <jemalloc>: Unsupported system page size
    <jemalloc>: Unsupported system page size
    <jemalloc>: Unsupported system page size
    <jemalloc>: Unsupported system page size
    [2024/04/23 04:35:30] [error] [/src/fluent-bit/src/config_format/flb_config_format.c:107 errno=12] Cannot allocate memory
    

동일한 내용을 fluent-bit에 보고된 이슈에서 확인할 수 있습니다. PAGESIZE를 변경후 OS 이미지를 다시 빌드하는 방법외에 다른 해결책이 없습니다.

실제 생성된 Worker Node 인스턴스에 SSH로 접속하여 PAGESIZE를 조회하면 다음과 같습니다.

$ getconf PAGESIZE
65536

Compute VM을 조건을 달리하여 만들어 PAGESIZE를 조회해 보면 다음과 같습니다.

  • OKE Worker Node로는 현재 7.9, 8만 지원합니다. 9 버전은 참고용입니다.
    OS CPU Architecture PAGESIZE
    Oracle Linux 9 2024.3.25 X86 4096
    Oracle Linux 8 2024.3.25 X86 4096
    Oracle Linux 7.9 2024.3.28 X86 4096
    Oracle Linux 9 2024.3.25 ARM 4096
    Oracle Linux 8 2024.3.28 ARM 4096
    Oracle Linux 7.9 2024.3.28 ARM 65536

현재 ARM 기반 OKE 클러스터상에서 가져온 fluent-bit 이미지를 그대로 사용하기 위해서는 Oracle Linux 7.9의 경우에는 PAGESIZE를 변경후 OS 이미지를 다시 빌드하는 방법외에 다른 해결책이 없습니다. 이미 릴리즈된지 한참된 것을 다시 변경해주긴 쉽지 않을 테니, Oracle Linux 8 버전이외에 다른 선택사항이 없습니다. 이후 fluent-bit 이외에 다른 이미지도 일반적인 페이지 사이즈인 4096 기준 빌드되었을 것을 고려하면, Oracle Linux 8을 선택할 수 밖에 없습니다.

하지만, VCN-Native Pod Networking CNI에서 Service Mesh를 사용하기 위해서는 현재는 Oracle Linux 8을 사용할 수도 없는 상황입니다.

결론적으로 ARM 기반 OKE 클러스터 생성시

  • OS Image: Oracle Linux 8 선택
  • CNI: flannel CNI 선택

Arm 기반으로 OKE 클러스터 만들기 - Quick Create 모드

  1. Quick Create 모드로 클러스터 생성 정보를 입력합니다.

  2. Review에서 클러스터 생성하지 않고, Save as stack을 클릭하여, Resource Manager의 Stack으로 저장합니다.

    image-20240511231404440

  3. 저장이 완료되면, 저장된 Stack으로 이동합니다

  4. Edit 에서 Edit Terraform configuration in code editor를 클릭합니다.

    image-20240511231626629

  5. 열린 Code Editor에서 RESOURCE MANAGER 하위 트리에서 Stack 저장된 Compartment로 이동하여, Stack의 main.tf 파일을 엽니다. 메뉴에서 Edit > Replace를 클릭하여 변환항목에서 OCI_VCN_IP_NATIVEFLANNEL_OVERAY로 모두 변경하여 CNI를 flannel로 변경합니다.

    image-20240511231901222

    • 실제 변경되는 내용 아래 두 부분의 cni_type이 변경됩니다.

      resource "oci_containerengine_cluster" "generated_oci_containerengine_cluster" {
      	cluster_pod_network_options {
      		cni_type = "FLANNEL_OVERLAY"
      	}
      	...
      }
      
      resource "oci_containerengine_node_pool" "create_node_pool_details0" {
      	...
      	name = "pool1"
      	node_config_details {
      		...
      		node_pool_pod_network_option_details {
      			cni_type = "FLANNEL_OVERLAY"
      		}
      	...
      }
      
  6. Stack 이름을 우클릭한 후, 저장합니다. 여기서는 정확한 확인을 위해 저장 및 Plan action을 실행합니다.

    image-20240511232553998

  7. Plan action이 수행된 것을 확인후, 적용을 위해 Apply를 클릭합니다.

    image-20240511232746903

  8. 적용이 완료되고 생성된 클러스터를 확인하면, CNI가 FLANNEL인 것을 확인할 수 있습니다.

    image-20240511233938171

생성된 클러스터에 fluent-bit 설치 결과 확인

  • 대상 OKE 클러스터

    • Shape CPU: Arm - Ampere
    • CNI: flannel CNI 선택
    • Worker Node Image: Oracle Linux 8 선택
  • fluent-bit 설치후 확인하면 정상 기동한 것을 볼 수 있습니다.

    $ kubectl get nodes -L kubernetes.io/arch,name
    NAME          STATUS   ROLES   AGE   VERSION   ARCH    NAME
    10.0.10.183   Ready    node    17d   v1.28.2   arm64   oke-cluster-arm
    10.0.10.186   Ready    node    17d   v1.28.2   arm64   oke-cluster-arm
    10.0.10.56    Ready    node    17d   v1.28.2   arm64   oke-cluster-arm
    
    $ kubectl get pod -n logging
    NAME                                    READY   STATUS     RESTARTS   AGE
    fluent-bit-d6jf6                        1/1     Running    0          102s
    fluent-bit-kcgjq                        1/1     Running    0          103s
    fluent-bit-npt42                        1/1     Running    0          101s
    ...
    


이 글은 개인으로서, 개인의 시간을 할애하여 작성된 글입니다. 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다.

Last updated on 29 May 2024