Category Archives: DevOps

Serverless 서비스 사용 툴

인프라

  • Knative
  • AWS Lambda
  • GCP CloudFunction
  • Kubeless
  • Azure
  • OpenWhisk
  • Tencent Cloud
  • Alibaba Cloud
  • CloudFlare
  • fn??
  • spotinst

프레임웤?툴? 엄청많음

그중 오픈소스+무료가능 확인된것들

  • serverless
  • jets

DevOps 환경별 구분

개발 및 배포 단계

  • Dev,Devel,Development – 개발자 개발중
  • QA,Alpha – QA자 QA중
  • PreProduction,Staging – 라이브자 라이브전
  • Live,Real,Production – 라이브자 라이브중

서버의 성격/위치

  • 개발자 본인 장비 – 개인용
  • 공동 관리하는 서버 – 사무실 서버,IDC,Cloud
  • 서비스 서버 – IDC,Cloud

세분화된 개발환경 구분

  • Dev Local Mock – 한개 서비스에서 연동서비스는 Mock 데이터
  • Dev Local/Remote Integration – 개발용 인프라에 연동서비스 함께
  • Test Remote Feature – 특정 기능 요소별로 테스트가능한 환경
  • Test Remote QA – QA 및 업무담당자 테스트환경 (수동 및 자동)
  • Live Remote Pre-Production – Production의 데이터까지 복제해서 만든 환경에 배포 결제 등 외부서비스 Real 연동
  • Live Remote Production – 실제 서비스 환경

테스트 종류

  • Manual Test
  • Unit Test
    • Mock API
    • Mock Data
  • Dev Integration Test
    • Real API
    • Seed Data
  • Live Integration Test
    • Real API
    • Real Data
  • Health Check

테스트 방법

  • Manual
  • Script

단계 구분

  1. Dev
    1. Local Dev Unit Test(Automatic)
    2. Local Dev Integration Test(Automatic)
    3. Git push – dev
    4. CI Build Unit Test
    5. Remote Dev Integration Test(Manual)
  2. Test
    1. Feature Test
    2. QA Test
    3. Success/Fail
  3. Live
    1. Pre-Production Test
    2. Production

현재까지의 순서

Terraform – AWS 사용 후기

사용법은 매우 간단해서 몇 시간 삽질해보면 금방 익힐 수 있는 수준

그래도 tutorial은 필요해 보인다

  • install terraform
  • provider
  • terraform init
  • vpc, subnet, ec2, rds 작성
  • terraform plan
  • terraform apply
  • terraform destroy

세부적인 부분은 도큐먼트가 잘 나와있어서 검색하면서 추가하면 될 것 같다
https://www.terraform.io/docs/providers/aws

웹 콘솔을 켜놓고 확인하면서 돌려봤는데 의도한 대로 잘 만들어지는 편이다.

좀 힘들다 싶으면 기존 웹콘솔로 설정을 한 다음에 떠다가 써도 될 것 같다
https://github.com/dtan4/terraforming
cloud formation도 복잡한 설정은 이런식으로 하는게 편했는데

cloud formation을 사용하지 않고 로컬에 .tfstate파일에 서버 상태를 저장한다

이걸 git에 저장 해 놓고 관리해야 하는데

.tfstate를 ignore 하라고 돼 있다. 어째야하는거지?

상태값은 git에 올리지 말고 별도로 관리하라는건가?

서버에 상태값이 명확히 관리되지 않는다면 그리고 aws 콘솔에서 인프라를 수정해서 state파일과 값이 맞지 않게 되는경우 문제가 발생할 가능성이 있어 보인다.
이건 cloud formation에서도 마찬가지였지만

코드화를 하려면 격리수준을 잘 잡아놔야 할 것 같다.

vpc단계, 태그, organization 등등 여러 방법이 있겠지만…

Organization을 아예 서비스별로 분리해서관리하면 문제가 발생할 여지가 작아질 것 같다.
terraform destroy가 company destroy가 되지 않도록 하는 안전장치도 별도로 마련해야 할 것 같고

~~

CloudFormation은 Provider에 따라
* Mailgun
* AWS
* Docker
* Github
* Yandex
* Helm
* Trello
* Tumblr

별 쓸데없는것까지 다 할 수 있는 것 같다.
요즘엔 클라우드 엔지니어도 아닌데 인프라만 너무 만지는거 아닌가

윈도우 작업용 Windows Workstation

오픈쏘쓰

한방설치 스크립트. 툴까지 설치는 아니고 라이브러리류만인듯 중복되는 부분 확인 못해서 아직 사용안함
https://github.com/microsoft/windows-dev-box-setup-scripts

설치

WSL

https://aka.ms/wslinstall
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

윈도우 앱스토어

여긴 자동화가 되나 모르겠다 수동으로 클릭

OneNote
Slack
Arduino IDE
Ubuntu
Ubuntu 18.04 LTS
WIndowsTerminal (Preview)
Terminus – SSH client
DBeaver CE
NuGet Package Explorer
Microsoft Edge DevTools Preview
MQTTBox

Ubuntu 실행하면 설치 진행

Scoop ( https://scoop.sh )

윈도우+x - a 
Set-ExecutionPolicy RemoteSigned -scope CurrentUser
Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')
scoop install -g `
7zip `
git `
gzip `
less `
nano `
sed `
curl `
grep
scoop bucket add java
scoop install openjdk11
scoop install `
adb `
eksctl `
aws-iam-authenticator `
aws `
aws-vault `
terraform `
go `
ghostwriter `
github `
gradle `
grails `
graphviz `
groovy `
haskell stack `
kotlin `
lua-for-windows `
maven `
mono `
nvm `
perl `
putty `
r `
sbt `
scala

scoop install `
erlang `
flyway ` 

scoop bucket add extras
scoop install `
gcloud

#scoop install -g  wireshark nmap

scoop install  `
jetbrains-toolbox `
winscp `
postman `
foobar2000 `
rufus

# 그냥 수동설치
# android-sdk
# flutter

oh-my-posh

scoop install conemu
scoop install conemu-color-themes
Install-Module posh-git -Scope CurrentUser
Install-Module oh-my-posh -Scope CurrentUser
# Start the default settings
Set-Prompt
# Alternatively set the desired theme:
Set-Theme Agnoster
# https://github.com/gluons/powershell-git-aliases
Install-Module git-aliases -Scope CurrentUser -AllowClobber

Chocolatey ( https://chocolatey.org/ )

윈도우+x - a
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
choco install -y anaconda3

choco install -y `
googlechrome `
firefox `
ccleaner `
notion `
filezilla `
hostsman `
bandizip `
notepadplusplus `
vscode `
atom `
gimp `
inkscape `
packer `
googledrive `
dropbox `
synologydrive `
dolphin `
ninja `
openoffice `
mysql.workbench `
pgadmin3 `
gow `
cygwin `
cyg-get `
wsltty `
msys2 `
sourcetree

choco install -y bitwarden 1password keepassx

choco install -y ruby
choco install -y wireshark

choco install -y `
microsoft-windows-terminal `
visualstudio2019community

# autohotkey.portable \ # scoop
# teamviewer \ # 안써서
# virtualbox \ # hyperv
# virtualbox-guest-additions-guest.install # hyperv

# nuget.commandline \ # scoop???
# slack \ # marketplace

Babun ( http://babun.github.io/ )

개발중단..

pact install tmux

Babun에서는 안쓰는게 좋을것같고 윈도우+x – i

강화 PowerShell (oh-my-posh)

https://github.com/JanDeDobbeleer/oh-my-posh

# https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-6
# All Users, All Hosts
 $PSHOME\Profile.ps1
# All Users, Current Host
 $PSHOME\Microsoft.PowerShell_profile.ps1
# Current User, All Hosts
 $Home\[My ]Documents\PowerShell\Profile.ps1
# Current user, Current Host
 $Home\[My ]Documents\PowerShell\
Microsoft.PowerShell_profile.ps1

# 위에거 다 안되고 아래걸로. 원드라이브 Documents가 따로 잡혀있으면 거기로
# $Home\[My ]Documents\WindowsPowerShell\
Profile.ps1 
Import-Module posh-git
Import-Module oh-my-posh
Set-Theme Paradox
Import-Module git-aliases -DisableNameChecking

미확인

noobs-term ( https://noobs-term.com/ )

가상환경

virtualbox는 같은 vagrant 소스로 리눅스 맥에서도 사용가능
그래도 윈도우에서는 hyperv쓰는게 편하긴한데
https://stefanscherer.github.io/how-to-install-docker-the-chocolatey-way/

VirtualBox

choco install -y `
virtualbox `
docker-toolbox

Hyper-V

https://docs.microsoft.com/ko-kr/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
choco install -y docker-desktop docker-kitematic

추가설치

scoop install `
vagrant minikube kubectl`
# docker docker-compose

https://github.com/hashicorp/vagrant/wiki/Available-Vagrant-Plugins

vagrant plugin install `
sahara `
vagrant-aws-dns `
rubber

Docker Volume 중첩해서 셋팅하는 경우 발생하는 문제 확인

초기 디렉토리 구조 생성

➜  $ tree
 .
 ├── test1
 │   ├── test1
 └── test2
     └── test2
$ cat test1/test1
test1 file
$ cat test2/test2
test2 file

도커에서 볼륨을 셋팅하고 실행

$ docker run --rm -it \
-v $(pwd)/test1:/test \
-v $(pwd)/test2:/test/kkk \
-v $(pwd)/test2/test2:/test/test2file \
-v $(pwd)/test1/test1:/test/test1file \
-v $(pwd)/test2:/test/kkk1 \
alpine sh

도커 실행 후 HOST에서 봤을 때 변경된 파일구조

$ tree
 .
 ├── test1
 │   ├── kkk
 │   ├── kkk1
 │   ├── test1
 │   ├── test1file
 │   └── test2file
 └── test2
     └── test2

도커 실행 후 Container 내부에서 변경된 파일구조

# tree
 .
 ├── kkk
 │   └── test2
 ├── kkk1
 │   └── test2
 ├── test1
 ├── test1file
 └── test2file

volume 마운트 시켰는데 파일이 복사돼버림

중복된 마운트를 할 경우 생각과 다르게 동작할 가능성

Vagrant box 추천

vagrant 박스 – 공식 박스가 배포되는 경우

debian/stretch64
ubuntu/bionic64
centos/7

공식은 아니지만 여기도 종종 사용하고
bento/ubuntu-18.04이렇게 공식박스를 제공하는 곳도 있지만…

문제는.. 
openbsd, fedora 등 오픈소스진영은 배포자가 관리 주체가 불확실한 경우가 많다
대부분 virtualbox 버전만 제공된다.

parallels, hyperv는 개인이 만든걸 쓰거나 직접 만들어야된다.

그래서 윈도우에 virtualbox를 깔고 쓰게 되는데…

그러다가 발견한 이 계정.

https://app.vagrantup.com/generic

1) hyperv
2) libvirt
3) parallels
4) virtualbox
5) vmware_desktop

다있음.

Docker Registry 사용

로컬과 클라우드

로컬 레지스트리는 거의 필요가 없다.

인터넷 환경이 안좋거나 로컬 kubernetes 클러스터를 구축해서 쓸게 아니라면..

보통은 도커 이미지 공개해도 별 상관없고 실행코드는 실행시간에 로컬 빌드해서 집어넣는게 보통이니까..

kuebernetes 클러스터를 로컬에서 쓰는일도 잘 없다. 보통 구글클라우드같은데다 깔아서 쓰니까 로컬에 놓으면 비효율적… 테스트 용도라면 로컬에 저장해도 되니까 레지스트리까지 필요없고

그냥 클라우드 쓰자.

로컬

Nexus (sonatype/nexus3)

도커로 설치해서 쓰면 된다.
https://hub.docker.com/r/sonatype/nexus3/

OpenStack Swift

깔기 쉽나?

클라우드

DockerHub(hub.docker.com)

기본적으로 공개

유료서비스 사용시 프라이빗

Quay(quay.io)

안써봄.
CoreOS에서 제공

AWS EC2 Container Registry

아뭐존
AWS 쓸 때 씀.

Google Container Registry

구글
GCP 쓸 때 씀

DevOps – CI/CD 시스템 구축

시스템 구성

  • 빌드, 컴파일, 유닛테스트
  • 배포 – 테스트환경 – 버전별로 분기해서 동작
    ex) ver 20171021, ver 20171106

두 버전이 동시에 돌아갈 수 있음.

latest사용 또는 특정버전 사용

  • health check

시나리오 테스트

Real서버배포 – aws, gcp 등 cloud환경 배포시 배포 완료 후 ssh daemon 종료. 접속불가. immutable. 삭제만 가능.

 

참고글

https://cloud.google.com/container-registry/

https://cloud.google.com/container-registry/docs/continuous-delivery

https://cloud.google.com/solutions/spinnaker-on-compute-engine

https://martinfowler.com/articles/continuousIntegration.html
https://martinfowler.com/bliki/ContinuousDelivery.html

요약정리는 읽어본 후

추가 다른글
https://trello.com/c/rOmLEI0u/9-%EB%A7%88%ED%8B%B4-%ED%8C%8C%EC%9A%B8%EB%9F%AC%EC%9D%98-is-design-dead

http://blog.naver.com/j6040148/120015111138

https://martinfowler.com/articles/designDead.html

https://www.gocd.org/2017/07/10/gocd-vs-spinnaker/

MSA – 의존성 관리 방법

Global Dependency Dictionary System 정도로 불러도 되려나

MSA로 서비스를 구성할 때 발생하는 문제가

어떤 서비스를 Deprecated를 시켰을 때 이전 버전을 언제까지 유지시켜야 할지가 애매하다.

즉각적으로?

한달이상 호출이 없을 때?

모니터링 툴 돌리다가 수동으로?

그냥 소스코드 내부에 /v1 /v2 /v20171001 같은식으로 계속 유지시켜버릴까?

이런 방법은 다 확살하지 않거나 관리가 불편하거나 다양한 문제가 있다.

디비를 변경해야 하는경우에 버전업을 할 때 오류발생 가능성도 있고

 

배포시에 사전을 만들고 의존성을 갖는 프로젝트간의 관계를 가지고 있는게 좋을 것 같다.

일반적인 형태의 라이브러리나 프레임워크로 만들기는 힘들 것 같고

규칙성을 갖게 버저닝을 하고 배포를 해야할 것 같다.

v{메인버전_호환안될수있음}-버그픽스

v1_20171001-1

v1_20171001-2

버전 표기방식으로 흔히 쓰는건 이정도 아닌가

 

버그픽스버전의 경우

3번째칸은 변경되도 호환성에 문제가 없어야하고 1,2번칸이 변경될 경우 호환이 안될 가능성이 생기는걸로

버그픽스 버전이 배포되는 경우 유닛테스트 실행. 이상이 없어야만 배포허용.

 

버전업이 되는 경우

배포시 의존성을 갖는 서비스의 관리자에게 알림이 가고

유닛테스트가 실행. 오류가 나면 오류알림(해당서비스와 의존성을 갖는 서비스의 담당자)

의존성을 갖는 서비스의 담당자는 일정시일(1개월?)이내에 업데이트 권장

긴급수정 사항은 바로 업데이트

 

이 경우 배포툴에 각 개발자의 정보가 담겨있어야한다.