목록프로젝트&&스터디 (17)
후니의 IT인프라 사전
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/QCejy/btrTiU0GM66/pBg00wocNKofMgtZKydCd1/img.png)
테라폼은 tfstate 파일이라는 상태파일을 저장합니다. 사실상 이 파일이 테라폼이 자원을 관리하는 방식이고 테라폼을 실행할 때는 이 tfstate 파일을 현재 리소스와 비교해서 작업을 진행합니다. 그렇기 때문에 tfstate 파일에는 매우 중요한 정보들이 많이 있고, 이게 없어지거나 하나의 부분만 빠져도 사실상 리소스를 관리할 수 없게됩니다. 기본적인 저장위치는 local이지만, 테라폼에서는 원하는 지정 저장소에 tfstate파일을 저장할 수 있도록 하고 있습니다. 대표적인게 AWS S3입니다. S3를 백앤드로 쓰면 S3의 기능을 장점으로 활용할 수 있습니다. - AWS 리소스를 이용할 경우 (그 외에도) 중앙 저장소가 필요한데 S3를 통해서 중앙 저장소로 활용할 수 있다. - S3의 versionin..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/6sDdu/btrThfxTvYQ/rmLiZQBnujgmxxA4SOKxgk/img.png)
이번 시간에는 Terraform을 통해서 NKS 클러스터를 구성해보도록 하겠습니다. 대략적인 구성은 아래와 같은 모습이고 NKS 서비스 자체가 managed master node이기 때문에 대부분의 클라우드 벤더사와 같이 kubernetes service 구성과 worker node pool을 별도로 구성하여 생성합니다. 1. bastion.tf 대부분 클러스터는 프라이빗 서브넷에 존재시키고 bastion에 kube-config정보를 등록하고 실행시키도록 구성하였습니다. bastion은 퍼블릭 서브넷에 존재하고, 접속을 위한 public IP를 받을 수 있도록 생성합니다. 그리고 login_key는 추후에 생성할 login pem키를 작성합니다. resource "ncloud_server" "bastio..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c2raj2/btrQ2SiTle4/TlxGfAqxvseBTYPwlB9Bj0/img.png)
구조 파악 완성된 code는 github에서 확인할 수 있다. 사전 작업 이전글인 단일 웹서버 배포에서 구성했던 VPC, Subnet, ACG를 사용한다는 전제하에 작업을 진행합니다. 해당 리소스들이 규정되어있지 않다면 이전글을 참조해주기 바랍니다. Auto Scaling 구성 auto scaling은 기본적으로 launch configuration을 먼저 규정하여 해당 configuration의 이미지를 통해서 scaling 작업을 진행합니다. 따라서 autoscaling.tf 파일을 구성할 내용을 작성해보겠습니다. 1. launch_configuration 생성 resource "ncloud_launch_configuration" "lc" { name = "my-lc" server_image_prod..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cMhtnv/btrQ0kOp6Ed/9zbQG6KJj0UsWwLLsTst8K/img.png)
당연하지만 우리는 클라우드 벤더사의 자원을 생성할 것이고, CLI를 이용하기 때문에 반드시 사전작업을 먼저 진행해야한다. 사전 작업을 진행했다는 전제 하에 다음 작업을 수행할 수 있다. 완성된 코드는 github에서 확인할 수 있다. 작업 디렉토리 생성 앞서 말했듯 테라폼에서는 작업 디렉토리 단위로 작업을 편성하고 이를 마치 프로젝트라고 생각하면 된다. 우리는 web-dev라는 하나의 프로젝트를 구성하겠다. mkdir single-web-server cd single-web-server provider 규정 가장 먼저 할 일은 내가 사용할 provider가 무엇인지 테라폼에게 알려주는 일이다. 따라서 provider 선언을 해주고 terraform init명령어를 통해서 해당 디렉토리를 해당 환경으로 규..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bTB2vy/btrQ1fr7GPc/kpYWK6Y1oisPYtxOvYBWyK/img.png)
테라폼의 구조 테라폼은 기본적으로 하나의 디렉터리를 작업 단위로 생각한다. 따라서 원하는 작업의 영역은 디렉터리로 구분해서 편성할 수 있다. 대부분의 작업 환경인 web의 prod, dev 환경으로 두 가지를 구분하면 다음과 같이 편성할 수 있다. Provider 작업할 리소스 공급자를 작성하고 해당 provider를 통해서 내가 작업할 환경을 세팅할 수 있다. 예를들어 aws를 사용하여 인프라를 편성하고자 한다면 aws provider를 등록해야한다. Terraform file 작업 디렉토리가 선정되면 해당 디렉토리 안에 terraform 파일을 저장한다. 확장자는 .tf 혹은 .tf.json 파일로 작성한다. tf 파일에서 작성하는 언어는 HCL 문법을 따르고 json형식을 원한다면 tf.sjon에 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/LNHyR/btrQ0YxiQuJ/TJAFzeIzydvDWuLKffMp3K/img.png)
도입 Terraform은 HashiCorp 사에서 발표한 대표적인 IaC(Infrastructure as Code) 도구로 코드를 통한 인프라 관리를 자동화시켜주는 툴이다. 기존 인프라 뿐 아니라 대부분의 클라우드 벤더사도 테라폼이 지원하게 되면서 정말 대중화되어 폭넓게 사용되는 툴이다. 장점 IaC의 Code를 활용하고 있기 때문에 대부분 Code형 시스템에서 갖추는 장점을 모두 활용할 수 있다. - 인프라를 코드 형태로 서술하여 실행시키지 않아도 코드로 인프라 구조를 파악할 수 있다. - 팀원들 간에 리뷰가 가능하다. - 작성된 코드를 승인 후 작동시킬 수 있도록 업무 프로세스를 만들 수 있다. - 인프라 공유가 용이하다. - git을 통한 버전관리를 할 수 있다. - 동일한 인프라 환경을 매우 쉽게..
![](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..