여러가지 pod 스케쥴링 기법을 적절하게 잘 활용하여야 한다 일반적인 배포방법 (deploy,statefulset,daemonset) 각각의 pod 컨트롤러를 사용하여 기본적으로 배치 deployment = 수량에 맞게 적절하게 배포됨 statefulset = 수량에 맞게 순서대로 headless서비스와 pv를 붙힐수 있음 daemonset = 모든 노드에(혹은 노드셀렉터 사용) 원하는 파드를 배치 일반적인 배포 + 노드셀렉터 사용 파드를 배치할때 노드 셀럭터를 이용하여 특정 노드나 특정 노드그룹에만 파드를 스케쥴 할 수 있음 일반적인 배포 + 어피니티 사용 어피니티를 사용하면 좀더 복잡한 전략을 사용하여 파드를 스케쥴링 할 수 있음 어피니티도 기본은 레이블링 이지만 노드/파드를 다 선택하여 파드를 배치..
configmap과 secret은 쿠버네티스의 데이터를 저장하거나 기밀 정보를 저장하는대 사용 된다 민감한 항목의 경우 secret을 기밀데이터가 아닌 경우 configmap을 사용 하면 됨 일반적으로 configmap의 경우 key: value 데이터를 secret의 경우 인증정보를 저장해놓고 pod를 생성할때 변수로 사용하거나 직접 volume으로 마운트 할 수 있음 변수는 개별 변수를 직접 선언하여 사용할수도 있고 configmap이나 secret을 통으로 변수로 불러들여 사용 할수도 있다 또한 configmap을 이용하여 key: value형식이 아닌 conf등 파일등을 저장하여 pod에 mount하여 사용할수도 있다 일반적으로 pod내 데이터는 휘발성이고 이를 유지하려면 pv를 사용하여야 한다,..
EKS에서 서비스 생성할때 별다른 설정을 안해주면 External LB타입으로 생성이 된다 외부노출이 필요하지 않는 경우 External로하면 보안 문제가 발생된다 해서 이럴때 사용할수 있는 Internal LB생성에 대한 방법 정리 먼저 서브넷에 아래와 같은 태그가 있어야 한다(보통은 프라이빗 서브넷) kubernetes.io/role/internal-elb: 1 Internal LB는 해당 태그가 붙어있는 서브넷에 생성됨 위 태그가 있는 서브넷이 있다면 서비스를 생성할때 아래와 같이 어노테이션을 주어 생성한다 metadata: annotations: service.beta.kubernetes.io/aws-load-balancer-internal: "true" service.beta.kubernetes..
기본값으로 비활성화 되어있는 인증관련설정을 활성화 함 7버전부터 인증설정이 없으면 익명사용자로 작업시 경고 메시지 출력됨 09:01:10 WARN org.elasticsearch.client.RestClient - request [GET ] returned 1 warnings: [299 Elasticsearch-7.17.1-e5acb99f822233d62d6444ce45a4543dc1c8059a "Elasticsearch built-in security features are not enabled. Without authentication, your cluster could be accessible to anyone. See to enable security." 아무런 인증없이 엘라스틱서치/키바나 사용할..
Pod를 배포할때 컨테이너가 사용할 자원에 대한 제한을 걸 수 있다 제한이 없는 Pod가 노드에 할당되면 Pod는 필요시 노드의 모든 자원을 사용 할 수 있음 제한 할 수 있는 리소스는 CPU,Memory,ephemeral(임시)스토리지 1.CPU제한 CPU는 밀리코어(m)로 표현 합니다 실제 물리 코어 1이 1000m코어이며 1코어를 1000개의 밀리코어로 나누어 할당할만큼 정확하게 작동하며 제한 됩니다 2.Memory 메모리는 일반적으로 사용하는 K,M,G,T,P 단위를 이용하여 제한 할 수 있습니다 3.임시 스토리지 emptydir등 pod에서 임시로 사용하는 스토리지에 대한 제한 입니다 메모리와 마찬가지로 데이터 단위를 이용하여 제한 할 수 있습니다 --- apiVersion: apps/v1 ki..
Kubernetes에서 Pod내 서비스나 상태를 직접 모니터링 하여 알맞은 조치를 취하게 함 총 3가지 Probe가 있음 여러개의 프로브를 여러가지 체크 메커니즘을 이용하여 복합적으로 사용할수도 있음 일반적으로 Readiness와 Liveness를 모두 설정하는것이 좋다 쿠버네티스 구조상 프로브 없이는 파드내 pid1번만 감시하므로 실제 서비스 장애나 로직 문제에 대응할수 없음 운영 앱에 대한 프로브 설정은 필수 사항 liveness프로브를 설정하지 않을경우 실제 앱이 구동되기전에 트래픽이 가기 시작하므로 짧은시간이지만 장애가 발생할수 있음 가장 좋은 방법은 probe로 실제 앱의 로직을 테스트 하는것 Readiness Probe 준비성 프로브의 경우 파드의 준비 상태를 체크 한다 기본적으로 설정되어있지..
기본적으로 alb-ingress사용시 아무런 옵션이 없이 ingress를 생성한다면 새로운 alb가 생성되고 all open sg(allow 0.0.0.0 80/443) 1개와 k8s 관리용 shared backend sg해서 2개의 sg가 할당됩니다 이중 후자는 lb에서 클러스터에 접근할때 사용하는 backend용 sg입니다 클러스터 sg에서 해당 sg를 선택하여 정책을 제어 합니다 전자는 기본값으로 all open 되어지며 lb생성시마다 새로 생성 됩니다 제가 사용하는 환경에서는 위와같이 실제 서비스 용도도 있지만 보안을 위하여 특정 ip에만 open된 ingress도 있습니다 또한 많은 alb가 있어 alb마다 똑같은 정책의 sg가 새로 생성되는것을 피하고자 해서 아래의 방법을 사용 하였습니다 기 ..