본문 바로가기

Kubernetes31

init-container와 empty-dir 상황 1. main(envoy)는 시작할 때 main(envoy) 내의 유효한 위치에 config파일이 있어야 원하는 구성 대로 만들어지고, 이후 인증서와 grpc용 proto 파일 등도 유효한 위치에 있어야 정상 통신가능하다. 2. 해당 인증서는 만료일이 있어서 일정 주기마다 원격 CA서버로 부터 인증서를 받아 교체해 줘야 한다. 3. 원래 테스트할 땐 main(envoy)는 server file-system dir에서 바로 마운트 해서 해당 파일들을 바로 꽂아줬었다. 4.하지만 이 아키텍쳐 대로 prod 환경이 되면 고객에게 구축해 주기도 복잡하고, 고객도 인증서 넣었다 뺐다 복잡해한다. 무엇 보다 해당 아키택쳐(config파일의 존재, 인증서가 어떻게 main에 들어가는지)가 고객에게 노출된다. 테.. 2023. 11. 30.
Ingress 회사에서 기존 서버 서비스 앞단에 쓰던 Proxy를 ingress로 교체하게 된 이유 1. front의 경우 app 재배포시 proxy도 매번 삭제했다가 재생성 해야하는 번거로움 2. 이로 인해 jenkin에서 자동화시 번거로움 등 3. string 주소로 하면 관리가 편하다 기존에 proxy 아래에 있던 app들이 7개나 되는데 각각 다 다른 설정을 해줘야 해서 번거롭다. ingress에 대해 간단하게 표현하자면 아래와 같이 7계층 string 주소로 서비스를 포워딩해줘서 알맞은 app으로 통신하도록 해주는 LB다. ingress는 크게 두종류가 있는데, nginx가 정보가 더 많아서 NGINX Ingress Controller 로 선택했다. (하지만 나중에 결국 세번째 종류인 Traefik도 맛보게 .. 2023. 11. 30.
테스트용 Nginx 띄우기 약 7개월간 K8S를 다루면서 많은 구축을 해보았는데, 그 중 겪는 곤란한 일 중에 하나는 정상 작동 여부를 검증하는 일이었다. 검증의 방법 중 하나로 테스트용 nginx를 띄우는 법에 대해 작성한다. nginx를 쓰는 이유는 간단하다 1. 웹페이지가 뜨기 때문에 가시적인 성공여부 확인이 되고 2. 관련 자료가 많다 복잡하게 작성한 yaml이 작동 안할때 nginx로 이미지를 바꿔서 테스트해서 트슛한 적도 있고, argocd 구축에서도 잘 배포되는지 여부 확인에 유용하게 쓰였고, 이후 앱구동 상태를 전송하는 webhook 테스트라던지, ingress 테스트라던지, ELK 로그를 전송하는 app 역할이라던지 인증서나 토큰 Secret 테스트용이라던지... 등등 신세를 많이 졌다. 아래 띄우는 방법들은 번호.. 2023. 11. 3.
NodePort, port, targetPort 1. 서비스가 지정하는 포트 설정 nodeport 설정 yaml을 예시로 보겠다. //nodeport-service.yaml apiVersion: v1 kind: Service metadata: name: nodeport-service spec: type: NodePort selector: app: nginx-for-svc ports: - protocol: TCP port: 80 targetPort: 8080 nodePort: 30000 위와 같은 yaml에서도보듯 서비스를 생성하는 설정 파일을 보면 위와 같이(port, targetPort, nodePort) 3개의 포트 정보를 설정하게 된다. Nodeport는 클러스터 외부에서 클러스터 내부로 접근이 가능하도록 서비스는 트래픽을 중개하는 역할을 하는 .. 2023. 5. 24.
파드의 동작 보증 기능 쿠버네티스는 파드 자체에 문제가 발생하면 파드를 자동으로 복구해 파드가 항상 동작하도록 보장 하는 기능도 있다. ​ 디플로이먼트에 속한 파드가 아니면 어떤 컨트롤러도 이 파드를 관리하지 않기 때문에 바로 삭제된다. ​ echo-hname은 디플로이먼트에 속한 파드입니다. 앞에서 속한 파드를 항상 6개로 replicas에서 선언했다. 따라서 임의로 파드를 삭제하면 repliocas가 삭제된 파트를 확인하고 파드의 총 개수를 6개로 맞추기 위해 새로운 파드를 1개 생성한다. 디플로이먼트에 속한 파드를 삭제하는 방법은? 디플로이먼트를 삭제해야 삭제된다. ​ kubectl delete deployment echo-hname 하면 된다. 디플로이먼트 삭제 명령 ​ 2023. 3. 27.
Liveness Probe / Readiness probe 공부 Liveness probe는 컨테이너의 상태를 주기적으로 체크해서, 응답이 없으면 컨테이너를 자동으로 재시작해준다. 컨테이너가 정상적으로 기동중인지를 체크하는 기능이다. Liveness probe는 Pod의 상태를 체크하다가, Pod의 상태가 비정상인 경우 kubelet을 통해서 재 시작한다. Readiness prob는 컨테이너의 상태 체크중에 liveness의 경우에는 컨테이너가 비정상적으로 작동이 불가능한 경우도 있지만, Configuration을 로딩하거나, 많은 데이타를 로딩하거나, 외부 서비스를 호출하는 경우에는 일시적으로 서비스가 불가능한 상태가 될 수 있다. 이런 경우에는 컨테이너를 재시작한다 하더라도 정상적으로 서비스가 불가능할 수 있다. 이런 경우에는 컨테이너를 일시적으로 서비스가 불가.. 2023. 3. 23.