목록프로젝트&&스터디/DOIK 스터디 (11)
후니의 IT인프라 사전
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bfoxQJ/btrFGyKitQZ/mZhXeUkiVRAtVRMMg56ntk/img.png)
2022년 5월 22 ~ 6월 19일 까지 총 5주간 진행한 DOIK 1기를 참가하였습니다. 기존에 스터디는 많이 참여해보았으나 이렇게 양질의 자료와 돈주고도 못배울 강의들을 많이 들은 적은 처음입니다. 특히. 스터디 장이신 가시다님을 처음 뵈었는데(온라인상..ㅎㅎ) 이렇게 쉬운 설명, 열정, 양질의 자료를 많이 제공해주셔서 너무 많이 감사드렸고, 앞으로 스터디 있으면 무조건 참가 신청하려고 생각하고 있습니다 ㅎㅎㅎㅎㅎ 스터디가 이번 주면 과제 제출 후 모두 종료되어 짧게나마 회고를 해봅니다. 1. 배운점 - 쿠버네티스 운영 지식과 DB 기초 지식을 배웠습니다. - 블로그 운영 해보자 해보자 했는데 스터디에서 강제로 시켜줘서 업로드 엄청 하였습니다. (특히 다른 분들 포스팅 보면 너무 부끄러워서 계속 여..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/zLJc4/btrFGzoT0qZ/ZYGdA66UeDflOfdWkYlKXK/img.png)
1. AWS CLI를 설치합니다. # Install aws cli v2 curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" apt install unzip -y && unzip awscliv2.zip sudo ./aws/install complete -C '/usr/local/bin/aws_completer' aws # 이후 aws configure 작업 실시 aws configure 2. 백업할 S3 버킷 생성 # S3 버킷 생성 aws s3 mb s3://버킷(유일한 이름) --region ap-northeast-2 3. S3 버킷에 대해 Secret으로 유저정보를 저장 # My BUCKET Name 변수 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bTxzCp/btrFHFBxKNv/4uMVZbwk19tKLs4tJ2pbLk/img.png)
1. PostgreSQL의 개요 (블로그) - 오픈소스 RDBMS로 무료 라이센스를 사용하며, 오래된 오픈소스의 안정성 등의 다양한 특징을 담고 있다. 2. CloudNativePG(CNPG) 소개 - 쿠버네티스 환경에서 PostgreSQL 워크로드를 관리해주는 오퍼레이터 2.1 구조와 아키텍처 - 비동기 혹은 동기 스트리밍 복제 구성의 클러스터 지원 - 하나의 Primary 노드와, 다수의 standby replicas로 동작합니다. - RW : 요청 작업을 Primary에서만 처리합니다. - RO : standby replicas와만 소통합니다. - R : Read-Only작업을 모든 노드와 소통하며 처리합니다. 3. CNPG 배포 helm을 통해서 cnpg 오퍼레이터를 설치할 수 있습니다. # Po..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/mIONM/btrFGlKA5vW/Oc2q9HVjgDgubw3I3iSiK1/img.png)
1. MongoDB 개요 - 대표적인 NoSQL 데이터 베이스 - document 지향 DB로 key:value값으로 저장이 가능하며, 손쉬운 확장이 가능함. - Percona 오퍼레이터를 통해서 MongoDB 클러스터를 관리할 수 있다. 2. Percona 오퍼레이터 설치 (공식문서) 2.1 percona-server-mongodb-operator 파일을 가져옵니다. git clone -b v1.12.0 https://github.com/percona/percona-server-mongodb-operator cd percona-server-mongodb-operator 2.2 먼저 crd를 배포합니다. kubectl apply --server-side -f deploy/crd.yaml 2.3 names..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dmtmBc/btrFKaupN93/gXnYZww16XX7eUnxb8PfK1/img.png)
1. 카프카 소개 비동기 방식의 스트리밍 플랫폼이다. 분산 데이터 스트리밍 플랫폼 1.1 특징 - 높은 처리량 : 묶음 단위 배치 처리로 대용량 실시간 로그 데이터 처리에 적합 - 높은 확장성 : 브로커을 통해 scale in/out이 편리 - 높은 영속성 : 데이터를 캐싱 메모리를 통해 일시적으로 저장하고 빠르게 불러올 수 있음 - 높은 가용성 : 데이터 복제를 통해 장애 상황에 대비 1.2 기본 용어정리 - Producer : 데이터 제공자. 데이터(메시지, 이벤트)를 생성하여 카프카로 전달함. - Consumer : 데이터 소비자. 카프카로 부터 데이터를 받아 필요한 상태로 가공하여 사용함. - Brokers : Kafka 클러스터를 이루는 구성 단위이며, 쿠버네티스의 워커노드와 비슷한 느낌이다. ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bPFTj1/btrFGgXrfi7/RofykmbmytzFqbv7bJjJHK/img.png)
1. Helm을 통해서 mysql 오퍼레이터를 설치 helm repo add mysql-operator https://mysql.github.io/mysql-operator/ helm repo update helm install mysql-operator mysql-operator/mysql-operator --namespace mysql-operator --create-namespace 2. MySQL 오퍼레이터 CRD 확인 kubectl get crd | grep mysql kubectl get deploy,pod -n mysql-operator 3. MySQL InnoDB 클러스터 설치 helm install mycluster mysql-operator/mysql-innodbcluster \ --s..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cDxzzH/btrFGSogmb9/NFBKyqwRFBBI8suer2f8K0/img.png)
1. 쿠버네티스 오퍼레이터 - 오퍼레이터는 쿠버네티스 추상화를 통해 관리 대상 소프트웨어의 전체 라이프사이클을 자동화, 애플리케이션을 패키징-배포-관리하는 툴입니다. (공식문서) - CRD(Custom REsource Definition) : 오퍼레이터로 사용할 상태 관리용 객체 Spec 정의 - CR(Custom Resource) : CRD의 spec을 지키는 객체들의 실제 상태 데이터 조합 - CC(Custom Controller) : CR에 규정된 상태를 유지하기 위한 컨트롤 루프 2. DB 기본지식 2.1. DB에서의 Transaction이란? - (일반적 정의) 쪼갤 수 없는 업무 처리의 최소 단위 - (DB적 정의) 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위 - (또 다른 정의..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bfIxWF/btrFKaaK0LL/bSe4kgGe469ObwobuF8fP1/img.png)
1. 실습가이드 (링크) Redis를 이용한 PHP 방명록 애플리케이션을 구성합니다. 해당 실습을 통해서 deploy 형태의 pod 배포, Redis의 Leader-Follower 구성, service를 통한 배포, frontend web과 연결, 파드 스케일 증가를 확인할 수 있다. 2. Redis는 무엇인가? In Memory Cache 시스템으로 메모리 속에 자료를 저장하여 처리 속도가 매우 빠른 장점이 있다. Key-Value 저장소로, 다양한 형식의 데이터를 지원하며 NoSQL 형태이다. (참고블로그) Redis는 메모리 상의 DB라는 점에서 영속성을 문제를 가질 수 밖에 없는데, 이를 보완하기 위해서 데이터를 Disk에 저장할 수 있도록 하여 영속성을 보장하도록 했다. 데이터를 DISK에 저장..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b1tHXm/btrFHsphlYo/gLEGQfsFy8LbdC4BRMZqbK/img.png)
1. stateless vs stateful - stateless는 쉽게 말해서 상태가 보존되지 않는 다고 생각하면 됩니다. 삭제되고 다시 살아나면서 hostname등의 기본적인 정보가 변경됩니다. - stateful의 경우 이와 반대로 동일한 형태가 유지되는 것이라고 할 수 있습니다. - 특히나 nginx와 같이 웹서버 등은 만약 하나의 pod가 죽어도, 생성되는 pod가 같은 nginx pod 이기만 하면됩니다. 그러나 DB와 같이 내부의 내용까지 보존되어야 하는경우 hostname이나 volume 연결정보 등 부터 모두 기존의 내용과 동일해야하므로 반드시 같은 내용의 pod가 등장해야 합니다. 2. stateful 및 headless 소개 - 이처럼 stateful 상태에서는 변동되는 IP와 같이 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/qA0xR/btrFJlwdnU0/P1jOSMB8gIElNxATzZdP81/img.png)
1. Service 개요 - 기본적으로 pod를 생성하면 클러스터 내부에서만 소통이 가능합니다. pod를 외부로 노출시키려면 service를 이용해야합니다. - Cluster Type : 다수의 파드에 접속할 수 있는 Pod-LB역할을 하는 service를 생성합니다. - NodePort Type : 실제 외부 클라이언트가 클러스터 내부로 접속할 수 있도록 하는 서비스 입니다. 2. cluster IP 실습 - 목적지로 사용할 3개의 pod를 yaml로 생성합니다. cat
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/yiAt9/btrFHJjZPAA/jq6jxtanpzprfOK6rtNYwk/img.png)
1. 스토리지 소개 - 쿠버네티스에 사용되는 스토리지는 emptyDir / hostPath / PV가 있습니다. 하나씩 가볍게 살펴보겠습니다. 2. emptyDir - Pod 생성시 기본적으로 설치되는 볼륨으로 해당 pod의 볼륨입니다. - pod가 삭제되면 바로 같이 삭제되므로 일시적인 사용에만 적절합니다. 3. hostPath - node 볼륨이라고 이해하면 쉽습니다. - 해당 node에 설치되는 볼륨으로 같은 node를 공유하는 pod끼리 공유가 가능합니다. - hostPath는 pod볼륨이므로 pod로 생성됩니다. - hostPath를 만드는 yaml은 아래와 같습니다. cat