PaaS/Kubernetes 85

솔루션 별 적합한 Kubernetes 배포 리소스는 어떤것이 있을까?

1. Frontend/Backend Application : Argo Rollout 혹은 Deployment 적합 ※ HPA도 같이 배포한다. 2. 영속성 솔루션 (DBMS, ElasticSearch..) : StatefulSet 적합 ※ 다만 Mount 시키는 Persist Volume은 Share할수 있는 Volume으로 하는것이 좋음. 어쩔수 없이 Drain 또는 노드 셧다운 요구사항이 발생함 3. Monitoring Agent : DaemonSet 적합 4. 네트워크 리소스(Flannel, Ingress) : DaemonSet 적합 ※ Igress Controller : IngressController가 감당할 부하를 고려하여 노드별로 생성하는 것이 좋다. 5. Cluter 구성이 필요한 비영속성..

PaaS/Kubernetes 2023.11.23

Argo Rollout으로 배포한 Replica도 HPA를 탈까?

문득 Argo Rollout으로 배포한 ReplicaSet이 Deployment와 똑같은 매커니즘으로 HPA 적용을 받는지 의문이 들었다. 일단 공식문서에는 적용된다고 설명이 되있긴 하다. https://argo-rollouts.readthedocs.io/en/stable/features/hpa-support/ HPA - Argo Rollouts - Kubernetes Progressive Delivery Controller Horizontal Pod Autoscaling Horizontal Pod Autoscaling (HPA) automatically scales the number of pods in owned by a Kubernetes resource based on observed CPU ut..

PaaS/Kubernetes 2023.11.21

permission denied on key "vm.max_map_count", ignoring 오류 해결하기

컨테이너로 오픈소스를 배포하다보면 아래와같이 init container에서 권한오류가 발생하는 경우가 종종있다. 특히 ElasticSearch 를 배포하는 경우 자주 발생한다. sysctl: permission denied on key "vm.max_map_count", ignoring ulimit: open files: cannot modify limit: Operation not permitted 이유는 /tmp/scripts/init_sysctl.sh 라는 BootStrap을 만들었는데, 이 Shell이 하려는 일의 권한과 설정된 컨테이너 권한이 안맞아서 발생하는 문제이다. 이를 해결하기 위해 다양한 방법이 있겠지만, 필자의 경우에는 다음의 방법을 사용하였다. initContainer가 정의되어 있..

PaaS/Kubernetes 2023.11.19

SonarQube를 k8s에 컨테이너로 배포해보자

SonarQube는 하위에 여러 오픈소스가 배포된다. PostgreSQL, ElasticSearch 를 포함하여 여러 오픈소스가 install된다. SonarQube 공식사이트에 Docker 기반 배포에 대한 가이드가 있는데, 약간 부실하다. 디테일이 빠져있다. https://docs.sonarsource.com/sonarqube/8.9/setup-and-upgrade/deploy-sonarqube-on-kubernetes/ Deploy SonarQube on Kubernetes Learn how to deploy SonarQube on Kubernetes. docs.sonarsource.com 우선 서두에 언급한 바와 같이 SonarQube는 여러 컨테이너로 구성되어 있는데, 이중 sonarqube -..

PaaS/Kubernetes 2023.11.19

k8s 에서 Database Provisioning시 Permission denied

가끔 HostPath를 쓰거나 PV를 써서 로컬 볼륨을 참조할때 Permission 오류가 뜬다. 이때 확인할 내용은 다음과 같다. 해당 Pod가 Provisioning 되는 Node의 kubelet 및 Docker Runtime 수행 권한이 해당 로컬 볼륨을 쓰기에 충분한 권한인지? 배포중인 StatefulSet / Deployment / Pod 의 제약사항에 securityContext가 정의되어 있는지? 필자의 경우에는 두번째 이슈가 있었고 아래와 같이 runAsNonRoot 와 runAsUser가 세팅되어 있었다. 그래서 로컬볼륨 권한은 그냥 1001:1001로 바꾸어 버렸다. $ chown -R 1001:1001 /data

PaaS/Kubernetes 2023.11.16

KubeScape 란?

KubeScape란 IDE, CI/CD, cluster내부에 적용할 수 있는 Kubernetes관련 오픈소스 플랫폼이다. 여기에는 위험 분석, 보안 규정 준수 및 잘못된 구성 검색이 포함됩니다. DevSecOps 실무자 또는 플랫폼 엔지니어를 대상으로 하는 이 제품은 사용하기 쉬운 CLI 인터페이스, 유연한 출력 형식 및 자동화된 스캔 기능을 제공합니다. Kubernetes 사용자와 관리자의 귀중한 시간, 노력, 리소스를 절약해 줍니다. Kubescape는 클러스터, YAML 파일 및 Helm 차트를 스캔합니다. 여러 프레임워크( NSA-CISA , MITRE ATT&CK® 및 CIS Benchmark 포함 ) 에 따라 잘못된 구성을 감지합니다 . IDE에 적용하는 방법을 소개코자 한다. VSCode 에..

PaaS/Kubernetes 2023.11.15

Kubernetes Resource가 잘 안지워질때

가끔씩 delete force로 해도 안지워 질 때가 있다. 이때 배포한 리소스를 보면 finalizers가 정의되어 있는경우가 있다. 이것은 삭제에 필요한 전제조건으로 이 조건에서 문제가 되는 경우가 가끔있다. 특히 ArgoCD의 Application을 삭제할때 OutOfSync 상태, Deleting 으로 빠져있는 경우가 있다. 이때는 해당 리소스 YAML을 수정해서 metadata.finalizers 를 날려버리자.

PaaS/Kubernetes 2023.11.15

Kubernetes Dashboard를 외부로 노출시키기 위한 Ingress 작업

Kubernetes Dashboard를 외부에 오픈하기 위해 NodePort나 Loadbalancer로 노출시키는 사례도 많은데, 가급적이면 서비스는 Ingress나 Gateway 리소스를 쓰는것이 좋다. 우선 Ingress Controller가 있는지 확인하고 없다면 설치하자. ingress controller 설치 https://kubernetes.github.io/ingress-nginx/deploy/ $ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/baremetal/deploy.yaml Kubernetes 어플리케이션을 배포하자 Kub..

PaaS/Kubernetes 2023.11.13