DevOps

    [이럴땐이렇게] Kubernetes(쿠버네티스)에서 namespace 삭제가 안 될 때 강제 삭제하기

    [이럴땐이렇게] Kubernetes(쿠버네티스)에서 namespace 삭제가 안 될 때 강제 삭제하기

    안녕하세요~ 요즘 집이나 회사나 처리할 일이 많아서ㅜㅜ 짬이 통 나질 않네요.. 금요일 오후 늦게부터는 시간이 좀 되니까 Multi-AZ 환경에서의 statefulset 배포시 주의점이나 아니면 Rancher 연동으로 꼭! 찾아오겠습니다. 짧게라도 ... Kubernetes에서 kubectl delete ns ${NAME} 이런식으로 namespace를 삭제하실 때 행이 걸리고 namespace는 삭제되지 않은 채 kubectl get ns ${NAME} 이런식으로 확인해 보면 terminating 상태로 계속 대기중인 경우가 종종 있습니다. 이 경우 finalizer를 비워 주시면 되는데요, finalizer를 비워주시는 방법은 API를 이용한 방법이 아래에 소개드릴 방법보다 더 정석이라고 생각해서 먼..

    [이럴땐이렇게] Jenkins에서 배포한 지 오래 된 Job 찾기! 마지막 배포로부터 n일 이상 된 잡을 찾아보자~!

    [이럴땐이렇게] Jenkins에서 배포한 지 오래 된 Job 찾기! 마지막 배포로부터 n일 이상 된 잡을 찾아보자~!

    Jenkins에서 일정 기간 이상 배포하지 않은 잡 찾기 오늘은 위의 주제로 찾아왔습니다! 사실 정말 간단한데, 사용이 익숙하지 않으신 분들은 폴더 하나씩 뒤져가며 찾으실 수도 있어서 좀더 편하게 쓰시라고 복붙을 위한 파이프라인을 준비하였습니다. 왜 필요한가요? Jenkins를 운영하다 보면 너무 긴 기간동안 사용하지 않은 잡을 삭제하기도 하고, 부득이하게^^... 전체 배포를 해야 하는 경우가 발생하는데요, 그럴 때 배포가 잘 일어나지 않는 것들을 추려내기 위해서 사용하기도 합니다. 어떻게 하나요? Jenkins pipeline을 사용할 줄 안다는 전제 하에 말씀드립니다. 1. 잡 생성에서 아래의 pipeline job을 하나 생성합니다. 2. pipeline에 아래의 내용을 복사 붙여넣기합니다. im..

    [Kubernetes] RBAC을 이용하여 특정 namespace에만 권한 주기

    [Kubernetes] RBAC을 이용하여 특정 namespace에만 권한 주기

    안녕하세요! 오늘은 특정 NAMESPACE에만 권한을 부여하고, 이 권한에 대한 kubeconfig 를 생성하는 방법에 대해 알아보겠습니다. 특정 namespace용 kubeconfig 만들기 TL;DR; Kubernetes에서 제공하는 role, role binding, service account를 이용합니다. 관련문서: https://kubernetes.io/docs/reference/access-authn-authz/rbac/ 특정 namespace에 read/write 권한을 갖는 role을 생성하고, 시스템 어카운트인 serviceaccount를 생성하고, rolebindingd을 통해 앞서 정의한 role을 생성한 serviceaccount에 바인딩합니다. 상황 클러스터를 관리하고 있는 ad..

    [Kubernetes & Azure] TLS 인증서(SSL 인증서) Keyvault 연동하기

    [Kubernetes & Azure] TLS 인증서(SSL 인증서) Keyvault 연동하기

    위에는 CSI 드라이버를 이용한 방법이구요, 아래는 오픈소스를 이용한 방법인데요~ 저는 1번이 번거로워서 아래 방식(2번)으로 진행하였으니 참고 부탁 드립니다. CSI 드라이버를 이용한 방법 공식문서: https://docs.microsoft.com/ko-kr/azure/aks/csi-secrets-store-nginx-tls#bind-certificate-to-ingress-controller TLS를 사용하여 nginx ingress controller를 사용하는 secret storage CSI 드라이버 설정 어플리케이션에 설정하는 방법: deployment에 volume mount하여 certificate사용 Ingress controller에 설정하는 방법: 어플리케이션 pod는 tls 인증서에..

    [Kubernetes] Application Gateway의 기본 기능, Connection Draining에 대해 알아보자!

    야근하고와서 약간 피곤하긴 한데... 그래도 꾸준히 적어야 이 작고 소중한 블로그에 한 명이라도 더 온다는 마음으로 짧게나마 적어보겠습니다 ! Connection draining은 쿠버네티스 환경에서 배포가 일어날 때 기존 파드가 terminate 되는 과정에서 세션이 빠지기를 기다려 주는, active connection waiting 같은 기능입니다. Azure application gateway에 국한되는 이야기는 아니고, 물리 L7 장비나 AWS에서 제공하는 로드밸런서에도 (당연히) 존재합니다. 쿠버네티스 환경에서의 배포라고 하면, 새로 파드 생성되면서 신규 파드 헬스체크 완료되고 나서 기존 파드 내리는거니까 이미 무중단이 구현된 것 아니야?(블루 그린 방식이니) 라고 생각하실 수도 있는데요, 쿠..

    [Kubernetes] Node selector vs. Node affinity, 어떤 것을 사용할까?

    [Kubernetes] Node selector vs. Node affinity, 어떤 것을 사용할까?

    Node selector vs. Node affinity, 어떤 것을 사용할까? 오늘의 주제는 node selector와 node affinity 입니다. Kubernetes에서 pod가 스케쥴링 될 node를 지정하는 기능에 대한 이야기인데요, 고민하지 마시고 node affinity를 사용하시면 됩니다. - 끝 - 농담입니다 😉 결론이 저거는 맞는데 저렇게 포스팅하면 안 되고, 차근히 알아보도록 하겠습니다. 주의: 제가 여기서 이야기하는 '서비스'는 회사 입장에서의 '서비스'이고, 쿠버네티스의 service 타입 리소스에 국한되어 언급하는 것이 아닙니다. deployment 타입을 포함하며 특정 리소스 타입에 국한되지 않는, 예를 들어 로그인 서버라고 한다면 로그인 서비스와 같은 추상적이고 포괄적인 ..