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 모드
-
Quick Create 모드로 클러스터 생성 정보를 입력합니다.
-
Review에서 클러스터 생성하지 않고, Save as stack을 클릭하여, Resource Manager의 Stack으로 저장합니다.
-
저장이 완료되면, 저장된 Stack으로 이동합니다
-
Edit 에서 Edit Terraform configuration in code editor를 클릭합니다.
-
열린 Code Editor에서 RESOURCE MANAGER 하위 트리에서 Stack 저장된 Compartment로 이동하여, Stack의 main.tf 파일을 엽니다. 메뉴에서 Edit > Replace를 클릭하여 변환항목에서 OCI_VCN_IP_NATIVE를 FLANNEL_OVERAY로 모두 변경하여 CNI를 flannel로 변경합니다.
-
실제 변경되는 내용 아래 두 부분의 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" } ... }
-
-
Stack 이름을 우클릭한 후, 저장합니다. 여기서는 정확한 확인을 위해 저장 및 Plan action을 실행합니다.
-
Plan action이 수행된 것을 확인후, 적용을 위해 Apply를 클릭합니다.
-
적용이 완료되고 생성된 클러스터를 확인하면, CNI가 FLANNEL인 것을 확인할 수 있습니다.
생성된 클러스터에 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 ...
이 글은 개인으로서, 개인의 시간을 할애하여 작성된 글입니다. 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다.