- 파일을 커밋함, 커밋은 .git이라는 파일을 통해서 진행- 테스트 코드는 매우 중요한 자산이다. - 보안 점검까지 마치고 나면 Realase(배포)한다.- CI의 최종 산출물은 아티펙트(자르 or 와르가 포함된 컨테이너 이미지) 파일이다.- CD에서는 배포 전략을 선택해서 적용시킨다. (개발계, 검증계, 배포전략 등이 포함) 인생조언: 회사 다닐때 주식 3년뒤에 줄게 이런곳 절대 가지마라. 개발자면 3년 버티기 힘들다.나눠서 주는 곳만 들어가라 컨테이너 나오기 전 구식 CI/CD 방식- git: github, gitlab, Bitbuket- CI: Jenkins, CircleCI- CD: Jenkins컨테이너 이후 CD 방식 -ArgoCD, Spimnaker. fluxCD- 보통 git action으..
ConfigMap- key & value 쌍으로 데이터 저장- ConfigMap을 읽어서 K8s API를 이용해 Pod 내부에서 수행되는 코드 작성할 때 쓰임- immutable 안쓰면 장애가 날 수 있음 (노드가 수정됐는지 안됐는지를 쿠버네티스가 자꾸 확인하면서 부하가 걸림)- 따라서 imutable = true로 해놓는게 Configmap에서 아주 주용하다 Secret- key & value 쌍으로 데이터 저장- 패스워드 및 인증서와 같은 중요 정보 보관용으로 사용 (Base 64 인코딩, 암호화 X)ConfigMap 볼륨 사용- subPath는 ConfigMap의 특정 key(파일)를 마운트하기 위한 옵션
볼륨 왜 필요한가?기본 이미지 레이어 맨 위는 readonly컨테이너 실행하면 이미지 레이어 맨 위에 readwrite 레이어 생성됨 (이게 이미지 통해 컨테이너 run 해줌)readwrite 레이어는 디스크에 존재하긴 함. 하지만 컨테이너가 종료되면 없어짐컨테이너 종료되면 데이터 다 사라짐그래서 외부 볼륨에 마운트해서 데이터 관리해야 함쿠버네티스에서 볼륨 설정할때 ReadOnly=true를 해놓으면 감시를 안하기에 효율이 올라감볼륨 종류EmptyDirpod가 종료되면 영구적으로 삭제. 즉 pod와 Lifecycle이 동일그럼 왜쓰냐? 대규모 기반 sorting작업에서 공간 확보 위해서HostPathpod가 죽어도 데이터 살아있음상태가 유지되긴 하지만 pod는 항상 다른 노드로 이동 가능성이 존재뭔말이냐..
k8s 서비스장애 전여러 Pod가 각자 IP를 가지고 트래픽을 받음로드밸런서가 Pod IP들로 분산노드 다운 / Pod 장애 발생특정 Pod(10.2.10.2)가 사라짐장애 후Kubernetes가 Pod를 다른 노드에 새로 생성새 Pod는 IP가 바뀜 (10.2.10.5)문제점기존에 정적으로 Pod IP를 바라보던 설정은 전부 깨짐 그래서 정적 라우팅은 문제가 있음그래서 Service가 필요AWS + KubernetesEKS 노드는 Private Subnet에 배치외부 접근은 Public Subnet의 ALB/NLB를 통해 접근ClusterIP고정된 내부 IP 만들어주고, 그 뒤에 여러 pod로 트래픽을 알아서 분산kube-proxy 기반으로 동작 (Iptables/IPVS 모드)iptables 모드: ..
Terraform + GitOps + AWS EKS 인프라 코드 정리Terraform인프라를 선언형 코드로 생성, 변경, 삭제한다. (AWS 인프라 서비스도 선언 가능)GitOpsGit을 사용하여 인프라를 자동배포 흐름으로 운영장점: 변경 이력, 감사, 롤백이 쉬움Terraform이 AWS에 리소스를 만들려면 AWS API 호출 권한이 필요aws configure # AWS CLI 인증키/리전/출력형식 설정(저장)aws configure list # 현재 AWS CLI 설정값(키/리전/출력)과 출처 확인cat ~/.aws/credentials # 저장된 AWS 자격증명(프로파일별 Access/Secret 키) 내용 확인 Terraform 디렉토..