๋ฐ˜์‘ํ˜•
๋ชฉ์ 

์†Œ์Šค์ฝ”๋“œ๋ฅผ github์— ๋ฐ˜์˜ & Local ์„œ๋ฒ„(Mac OS) ๋‚ด docker ์— ๋ฐฐํฌํ•ด๋ณด๊ธฐ (+dockerHub์—๋„ ๋ฐ˜์˜)
โ€ฃ jenkins pipeline ์ด์šฉ 

 

โญ๏ธ  https://www.youtube.com/watch?v=PKcGy9oPVXg  ์„ ๋ณด๊ณ  ์‹ค์Šตํ•˜๋ฉด์„œ ์ •๋ฆฌํ•ด๋ด„! โญ๏ธ

 

์ž‘์—…์ˆœ์„œ

1๏ธโƒฃ ํ”„๋กœ์ ํŠธ ์…‹ํŒ… ๋ฐ github push

1-1. ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
โ€ฃ ๋‚˜์˜ ๊ฒฝ์šฐ, spring Initializr or https://start.spring.io์œผ๋กœ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ 

# DockerFile
FROM openjdk:11
EXPOSE 8081
ADD build/libs/cicd-study.jar cicd-study.jar
ENTRYPOINT ["java", "-jar", "/cicd-study.jar"]



...
# application.yml
server:
  port: 8081
  
  
  
...
@RestController
@SpringBootApplication
public class MainApplication {

	@GetMapping
	public String message() {
		return "HELLO !!!!!!!!!!";
	}
	public static void main(String[] args) {
		SpringApplication.run(MainApplication.class, args);
	}

}

 

 

1-2. github ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๋ฐ push

git repository ์ƒ์„ฑ

 

terminal ์— [...or create a new repository on the command line] ์‹คํ–‰

$ git init
$ add .
$ git commit -m "first commit"
$ git branch -M main
$ git remote add origin git@github.com:mumgmangmange/test2.git
$ push -u origin main

๋งŒ์•ฝ, git add . ๊ฐ€ ์•ˆ๋˜๊ฑฐ๋“ , ./gradlew clean ์‹คํ–‰

โ€ป gradle or gradlew ์‚ฌ์šฉ์˜ ์ฐจ์ด?
Wrapper๋Š” ์„ ์–ธ๋œ ๋ฒ„์ „์˜ Gradle์„ ํ˜ธ์ถœํ•˜๊ณ  ํ•„์š”์— ๋”ฐ๋ผ ๋ฏธ๋ฆฌ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ์ด๋‹ค.
์ž‘์—…ํ™˜๊ฒฝ ๋‚ด ๋‹ค๋ฅธ๋ฒ„์ „์˜ gradle์ด ์žˆ๋”๋ผ๋„ ๋”ฐ๋กœ ์„ค์น˜๊ฐ€ ํ•„์š” ์—†์Œ (์‹œ๊ฐ„ ๋ฐ ๋ˆ ์ ˆ์•ฝ ๊ฐ€๋Šฅ)

http://daplus.net/gradle-gradlew%EC%99%80-gradle-%EC%82%AC%EC%9A%A9%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90/

 

2๏ธโƒฃ docker ์‹คํ–‰ (์„œ๋ฒ„ ๋‚ด ์—†์œผ๋ฉด ์„ค์น˜ ํ•„์š”)

 

Install Docker Desktop on Mac

 

docs.docker.com

...์นฉ์…‹ ํ™•์ธ (์ธํ…”์นฉ,,๋งฅ์นฉ,,)

์„ค์น˜ ์™„๋ฃŒํ•˜๋ฉด, docker-compose ๋ฐ docker version ์„ค์น˜๋จ

 

3๏ธโƒฃ jenkins ์‹คํ–‰ (์„œ๋ฒ„ ๋‚ด ์—†์œผ๋ฉด ์„ค์น˜ ํ•„์š”)
โ€ฃ ๋‚˜๋Š” brew ์œผ๋กœ ์„ค์น˜ํ•จ
โ€ฃ ๊ทธ๋ฆฌ๊ณ  jenkins ๊ณ„์ •์ƒ์„ฑ ๊ด€๋ จ โ†’ ํ•ด๋‹น ๋งํฌ ๋‚ด 2-5 ํ™•์ธ 

-- jenkins ์„ค์น˜
$ brew install jenkins 

-- jenkins ์‹คํ–‰
$ brew services start jenkins

 

 

4๏ธโƒฃ jenkins ํ”„๋กœ์ ํŠธ ์…‹ํŒ… ๋ฐ ๋ฐฐํฌํ™˜๊ฒฝ ์„ค์ • 

โ†“โ†“โ†“ ํŒŒ์ดํ”„๋ผ์ธ ์Šคํฌ๋ฆฝํŠธ ๋‚ด์šฉ โ†“โ†“โ†“

pipeline {
    agent any
    stages { 
        stage('Build Gradle') { // github ์˜ ์†Œ์ŠคํŒŒ์ผ ๋ถˆ๋Ÿฌ์˜ค๊ณ , build clean ๋ฐ build
            steps {
                checkout([$class: 'GitSCM', branches: [[name: '*/main']], extensions: [], userRemoteConfigs: [[url: 'git@github.com:xxxxx/xxx.git']]])
                sh './gradlew clean build'
            }
        }
        stage('Build docker image') { // ๋„์ปค ์ด๋ฏธ์ง€ ๋นŒ๋“œ 
            steps {
                // withEnv ๋ธ”๋ก ๋‚ด ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•จ 
                withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin']) {
                    sh 'docker rmi -f ๋„์ปค์ด๋ฏธ์ง€๋ช…[:TAG]'
                    sh 'docker build -t ๋„์ปค์ด๋ฏธ์ง€๋ช…[:TAG] .'
                }
            }
        }
        stage('Push image to Hub') { // docker hub ์— image ํ‘ธ์‹œ 
            steps {
                withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin']) { // /usr/local/bin ์‚ฌ์šฉ ์œ„ํ•ด withEnv ์‚ฌ์šฉ 
                    withCredentials([string(credentialsId: 'docker๊ณ„์ •๋ช…', variable: 'dockerpwd')]) {
                        sh 'docker login -u ๋„์ปค๊ณ„์ •์•„์ด๋”” -p ${dockerpwd}'
                    }
                    sh 'docker push [OPTIONS] ๋„์ปค์ด๋ฏธ์ง€๋ช…[:TAG]'
                }
            }
        }
        stage('Image Execute') { // ์ด๋ฏธ์ง€ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ 
            steps {
                withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin']) {
                        sh '''docker run --name cicd-study \
    -v //var/run/docker.sock:/var/run/docker.sock  \
    --privileged \
    -p 8081:8081 \
    -d \
     ๋„์ปค์ด๋ฏธ์ง€๋ช…[:TAG]'''
                }
            }
        }
    }
}

 

 

 

 

โ—๏ธโ—๏ธ dockerHub ์—…๋กœ๋“œ ์ƒ๋žตํ•˜๋ ค๋ฉด ํŒŒ์ดํ”„๋ผ์ธ ์†Œ์Šค ๊ด€๋ จ ์ฃผ์„์ฒ˜๋ฆฌํ•ด๋„๋ ๋“ฏ!
๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด, 
https://hub.docker.com/settings/security?generateToken=true ์ ‘์† ๋ฐ accessToken ์ƒ์„ฑํ•ด๋‘๊ณ , jenkins credentials ์— ๋“ฑ๋ก

https://hub.docker.com/settings/security?generateToken=true
http://jenkins์ฃผ์†Œ/credentials/store/system/domain/_/newCredentials ์ ‘์† ๋ฐ secret ์— accessToken ๋“ฑ๋ก

 

 

5๏ธโƒฃ ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ ์„ฑ๊ณต 

jenkins

 

docker container

 

docker hub
๋„์ปค ์ปจํ…Œ์ด๋„ˆ ๋‚ด ๋ฐฐํฌ ์ ์šฉ ๊ฑด ํ˜ธ์ถœ (port 8081 ์œผ๋กœ)

 

 


์ฐธ๊ณ 

https://bcp0109.tistory.com/352

https://chinsun9.github.io/2020/10/22/denied-requested-access-to-the-resource-is-denied/

https://i5i5.tistory.com/527

https://www.inflearn.com/questions/229989

https://m.blog.naver.com/wideeyed/221533279838

https://unix.stackexchange.com/questions/4186/what-is-usr-local-bin

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=special9486&logNo=220274932377

 

๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•

Guest OS ์œ ๋ฌด์˜ ์ฐจ์ด๊ฐ€ ์กด์žฌํ•จ.

 

VM(Virtual machine)

โ–ช๏ธŽ ํ•˜์ดํผ๋ฐ”์ด์ €(hypervisor)๋ผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ด์šฉํ•ด ํ•˜๋‚˜์˜ ์‹œ์Šคํ…œ์—์„œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์šด์˜์ฒด์ œ๋ฅผ ์‚ฌ์šฉ
โ–ช๏ธŽ ๊ฒŒ์ŠคํŠธ os์„ ๊ด€๋ฆฌ๋กœ ์ธํ•œ ์˜ค๋ฒ„ํ—ค๋“œ ๋ฐœ์ƒ, ์ด๋ฏธ์ง€๋„ ํผ
โ–ช๏ธŽ ๋ฐฐํฌ์†๋„ ๋ฐ ๋ถ€ํŒ…์†๋„ ๋Š๋ฆผ

 

Container

โ–ช๏ธŽ ํ•˜์ดํผ๋ฐ”์ด์ €(hypervisor) ์—†์ด ์ปจํ…Œ์ด๋„ˆ ์—”์ง„์„ ์‚ฌ์šฉํ•ด ๊ฐ€์ƒ์˜ ๊ฒฉ๋ฆฌ๋œ ๊ณต๊ฐ„์„ ์ƒ์„ฑ
โ–ช๏ธŽ ํ˜ธ์ŠคํŠธ์˜ ์ปค๋„ ๊ณต์œ ํ•จ 
โ–ช๏ธŽ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ & ์‹คํ–‰ํŒŒ์ผ๋งŒ ์กด์žฌ
โ–ช๏ธŽ ์šฉ๋Ÿ‰ ์ ๊ณ , ์ปค๋„์„ ํฌํ•จํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐํฌ ๋น ๋ฅด๊ณ  ์„ฑ๋Šฅ ์†์‹ค์ด ๊ฑฐ์˜ ์—†์Œ
โ–ช๏ธŽ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค์— ์šฉ์ด 
โ–ช๏ธŽ ๊ด€๋ จ ๊ธฐ์ˆ ๋กœ ๋„์ปค(Docker)๋ฅผ ๋งŽ์ด ์‚ฌ์šฉ

 

Docker

โ–ช๏ธŽ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ธํ”„๋ผ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ.
โ–ช๏ธŽ ์ด์‹์„ฑ, ์‹ ์†์„ฑ, ์žฌ์‚ฌ์šฉ์„ฑ 
โ–ช๏ธŽ Dockerfile ๋กœ ๋„์ปค ์ด๋ฏธ์ง€ ์ƒ์„ฑ ์ž๋™ํ™” 

 

โ‰ ๋„์ปค ์ด๋ฏธ์ง€๋Š” ์‹คํ–‰ํ™˜๊ฒฝ, ์†Œ์Šค์ฝ”๋“œ, ์‰˜ ์Šคํฌ๋ฆฝํŠธ ๋“ฑ์„ ํŒŒ์ผ์„ ๋ฌถ์€ ํ˜•ํƒœ์ด๊ณ , ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•œ ์ƒํƒœ

 

+ ๊ทธ๋ฆฌ๊ณ  ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ ์ด ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜!
์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๊ด€๋ จ ๋„๊ตฌ๋กœ ์œ ๋ช…ํ•œ๊ฒƒ์ด k8s (์ฟ ๋ฒ„๋„คํ‹ฐ์Šค!)

 

 

 


์ฐธ๊ณ 

- ์ฑ…: ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐœ๋ฐœ 
- ๋งํฌ: http://koushki.net/2018/06/the-difference-between-vm-and-container/

 

The difference between VM and Container? - The blog on Virtualization and Cloud solutions

One of the most interesting terms in virtualization that is appeared recently is containers. The containers offering a new layer of virtualization that are fit for packaging application. This type of virtualization allows to quickly build and deploy a larg

koushki.net

- ๋งํฌ: https://docs.docker.com/get-docker/

๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•
CI/CD ๋ž€
์„ค๋ช…

โ€ข ๊ฐ๊ฐ์˜ ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ฐœ๋ฐœํ•˜๋Š” ํ™˜๊ฒฝ์„ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์„œ๋น„์Šค๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ชจ๋“  ๊ณผ์ •์„ 
์ง€์† ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ํ˜น์€ ์ž๋™์œผ๋กœ ํ•˜์—ฌ ๊ฐœ๋ฐœ์ž ๋ฐ ์‚ฌ์šฉ์ž ์‚ฌ์ด์˜ ๊ฒฉ์ฐจ๋ฅผ ์—†์• ๋Š”๊ฒƒ
โ€ข ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ๋ฅผ ํ•จ!

๊ฐœ๋ฐœ์ž โ†’ ์ฝ”๋“œ์ž‘์„ฑ โ†’ ๋นŒ๋“œ(webpack, javac..) โ†’ ํ…Œ์ŠคํŠธ(junit..) โ†’ ๋ฐฐํฌ(ecs update,,) โ†’ ์‚ฌ์šฉ์ž  

โ–บ Continuous Integration (์ง€์†์  ํ†ตํ•ฉ)
โ€ข ํ†ตํ•ฉ์˜ ๋Œ€์ƒ? ์ฝ”๋“œ!
โ€ข ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž๋“ค์˜ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๊ณ„์†ํ•ด์„œ ํ†ตํ•ฉํ•˜๋Š”๊ฒƒ.

โ–บ Continuous Delivery (์„œ๋น„์Šค ๋ฐฐ๋‹ฌ)
โ€ข ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œํ’ˆ์„ ์„œ๋น„์Šค๋ฅผ ์ง€์†์ ์œผ๋กœ ๋ฐฐ๋‹ฌ!
โ€ข ์ฝ”๋“œ๋ฒ ์ด์Šค๊ฐ€ ํ•ญ์ƒ ๋ฐฐํฌ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ์œ 
โ€ข Blue/green, Rolling update, Canary

โ–บ Continuous Deployment 
โ€ข ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ์ž๋™ํ™”ํ•จ.
โ€ข ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜ํ•˜๋Š” ๊ฐœ๋ฐœ ๋ฌธํ™”๋ฅผ ๊ฐ•์กฐ

 

CI/CD ํ•ด์•ผํ•˜๋Š” ์ด์œ 

โ€ข ์ฝ”๋“œ ๊ด€๋ฆฌ์˜ ์–ด๋ ค์›€ ๋•Œ๋ฌธ (์—ฌ๋Ÿฌ๋ช…์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ™์€์˜์—ญ์„ ๊ฐœ๋ฐœํ• ๋•Œ ์ถฉ๋Œ๋“ฑ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ. ์ด๋ฅผ๋ฐฉ์ง€)
โ€ข ๋นจ๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์•ˆ์ฐฉ!

 

 

Jenkins
์„ค๋ช…

โ€ข Java Runtime ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์ž๋™ํ™” ์„œ๋ฒ„
โ€ข ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ๋“ฑ ๋ชจ๋“ ๊ฒƒ์„ ์ž๋™ํ™” ํ•ด์ฃผ๋Š” ์ž๋™ํ™” ์„œ๋ฒ„
โ€ข ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค์„ ํ™œ์šฉํ•ด์„œ ๊ฐ์ข… ์ž๋™ํ™” ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ
โ€ข ์ผ๋ จ์˜ ์ž๋™ํ™” ์ž‘์—…์˜ ์ˆœ์„œ๋“ค์˜ ์ง‘ํ•ฉ์ธ Pipeline์„ ํ†ตํ•ด CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•จ
โ€ข Credentials Plugins(์ค‘์š”์ •๋ณด aws token, git acccess token ๋“ฑ ์ €์žฅํ•ด์ฃผ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ), Gid Plugin, Pipeline, Docker plugin ๋“ฑ์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์กด์žฌ

 

 

Pipeline
์„ค๋ช…

โ€ข CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ์  ํ‚จ์Šค์— ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์ผ๋ จ์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค์˜ ์ง‘ํ•ฉ์ด์ž ๊ตฌ์„ฑ. 
โ€ข ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด ์„œ๋น„์Šค๊ฐ€ ๋ฐฐํฌ๋จ.
โ€ข ์ž‘์—…๋ช…์„ธ์„œ.
โ€ข DSL(Domain Specific Language) ์œผ๋กœ ์ž‘์„ฑ.
โ€ข ๋‘๊ฐ€์ง€ ํ˜•ํƒœ์˜ Pipeline syntax๊ฐ€ ์กด์žฌ (Declarative, Scripted Pipeline)

 

Pipeline ๊ตฌ์„ฑ ์š”์†Œ

โ— Sections
โ€ข Agent section : ์–ด๋–ค ์  ํ‚จ์Šค์—๊ฒŒ ์ผ์„ ์‹œํ‚ฌ์ง€ ์ง€์ •! (์  ํ‚จ์Šค ๋…ธ๋“œ ์ƒˆ๋กœ ๋„์šฐ๊ฑฐ๋‚˜, docker ์ด๋ฏธ์ง€๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ)
โ€ข Post section : ์Šคํ…Œ์ด์ง€ ๋๋‚œ ํ›„ ํ›„์†์กฐ์น˜ ์ทจํ•  ์ˆ˜ ์žˆ์Œ.
โ€ข Stages section : ์–ด๋–ค์ผ์„ ์ฒ˜๋ฆฌํ• ์ง€ stage ์ •์˜
โ€ข Step section : ๋‹จ๊ณ„๋ณ„ ์Šคํ… ์ •์˜ 

โ— Declaratives
โ€ข Environment : ์–ด๋–ค ํŒŒ์ดํ”„๋ผ์ธ์ด๋‚˜ stage scope์˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
โ€ข Parameter : ํŒŒ์ดํ”„๋ผ์ธ ์‹คํ–‰ ์‹œ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ›์Œ
โ€ข Triggers : ์–ด๋–ค ์ฃผ๊ธฐ๋กœ ์‹คํ–‰
โ€ข When : ์–ธ์ œ ์‹คํ–‰๋˜๋Š”๊ฐ€

โ— Steps
โ€ข ์—ฌ๋Ÿฌ ์ž‘์—…๋“ค ์‹คํ–‰ ๊ฐ€๋Šฅ.

 

 

๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ๋ฐฉ์‹ 3๊ฐ€์ง€

โ– Rolling Update
โ€ข ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์ƒˆ ๋ฒ„์ „์œผ๋กœ ํ•˜๋‚˜์”ฉ ๊ต์ฒด
โ€ข ์ตœ์†Œํ•œ์˜ ์˜ค๋ฒ„ํ—ค๋“œ/์„ฑ๋Šฅ ์˜ํ–ฅ/์ค‘๋‹จ

โ– Canary
โ€ข ์ƒˆ๋กœ์šด ๋ฐฐํฌ ๋ฒ„์ „๊ณผ ํ˜„ํ–‰ ๋ฒ„์ „์„ Prod ํ™˜๊ฒฝ์—์„œ ๋™์‹œ์— ๊ฒ€์ฆํ•˜๊ณ ์ž ํ• ๋•Œ ํ™œ์šฉ
โ€ข ์œ„ํ—˜ ๊ฐ์ง€ ๋ฐฐํฌ ๊ธฐ๋ฒ•

โ– Blue/Green
โ€ข ์™„์ „ํ•˜๊ฒŒ ์ค€๋น„๋œ ์ƒํ™ฉ์—์„œ ์„œ๋น„์Šค ๊ต์ฒด 
โ€ข ๋†’์€ ์˜ค๋ฒ„ํ—ค๋“œ์™€ ์„œ๋น„์Šค ์žฅ์•  ์ตœ์†Œํ™” ๊ฐ„ ์กฐ์œจ 

 

 

 


์ฐธ๊ณ 

- ๋งํฌ: https://www.youtube.com/watch?v=JPDKLgX5bRg&list=PL9mhQYIlKEhfgLHvRBRKmTg6HmfSDe8tr&index=1 

- ๋งํฌ: https://onlywis.tistory.com/10

 

๋ฐฐํฌ ์ „๋žต: Rolling, Blue/Green, Canary

์˜ˆ์ „์—๋Š” ์ˆ˜ ๊ฐœ์›”(ํ˜น์€ ์ˆ˜ ๋…„)์— ํ•œ ๋ฒˆ์”ฉ ์„œ๋น„์Šค๋ฅผ ๋ฆด๋ฆฌ์ฆˆ ํ–ˆ์—ˆ์ง€๋งŒ, ์ตœ๊ทผ์—๋Š” ์„œ๋น„์Šค๋ฅผ ๋” ์ž‘๊ฒŒ ๋งŒ๋“ค๊ณ (๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค) ๋” ์ž์ฃผ ๋ฐฐํฌ(Deployment) ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€ํ™”ํ•˜๊ณ  ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŠธ๋ Œ๋“œ์—

onlywis.tistory.com

- ๊ฐ•์˜: https://www.inflearn.com/course/%EC%8B%A4%EB%AC%B4-msa-%EC%9D%B4%EC%95%BC%EA%B8%B0

๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•
๋ชฉ์ 

์ž‘์—… ๊ฒฐ๊ณผ๋ฌผ(Springboot jar file, gradle ์ด์šฉ)์„ AWS EC2์— ๋ฐ˜์˜ํ•ด๋ณด๊ธฐ
โ€ฃ jenkins ์„œ๋ฒ„์— ์ž‘์—… ๊ฒฐ๊ณผ๋ฌผ์„ ๋นŒ๋“œ / ๋ฐฐํฌํ•˜๋Š” ์…ˆ.
โ€ฃ ์ž‘์—… ๊ฒฐ๊ณผ๋ฌผ์€ ๊ฐœ์ธ github ์—์„œ ๊ฐ€์ ธ์˜ด! (github ์˜ webhook ๊ธฐ๋Šฅ ์ด์šฉ) 

 

์ž‘์—…์ˆœ์„œ

1๏ธโƒฃ EC2 ์ƒ์„ฑ ๋ฐ ํ„ฐ๋ฏธ๋„ ์ ‘์†
โ€ฃ EC2 ์ƒ์„ฑ๋ฐฉ๋ฒ•์€ ์ƒ๋žตํ•จ. (t2.micro ์ด์šฉ (๋ฉ”๋ชจ๋ฆฌ 1GB..jenkins ๋ฐฐํฌ๋Š” ๋˜๊ธดํ•จ!..), aws linux ์ด์šฉ)
โ€ฃ pem key ์†Œ์ค‘ํ•˜๊ฒŒ ๋ณด๊ด€ํ•˜๋„๋กํ•˜๊ธฐ (ssh ํด๋”์— ์ด๋™์‹œํ‚ค๋Š” ๋“ฑ)

1-1. EC2 ๋ณด์•ˆ๊ทธ๋ฃน ์„ค์ •ํ•˜๊ธฐ (์ธ๋ฐ”์šด๋“œ ๊ทœ์น™ ์„ค์ •)

EC2 > ์ธ์Šคํ„ด์Šค ํ™”๋ฉด
๋ณด์•ˆ๊ทธ๋ฃน > ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™
์ธ๋ฐ”์šด๋“œ ๊ทœ์น™ ์„ค์ • (ํฌํŠธํ—ˆ์šฉ ์„ค์ •)



1-2. EC2 ์ธ์Šคํ„ด์Šค ์„œ๋ฒ„ ์ ‘์† ์‹œ๋„ (2๊ฐ€์ง€)

- pem key ์„ .ssh ํด๋”๋กœ ์˜ฎ๊ฒจ์ฃผ๋Š” ์ž‘์—…์„ ์ถ”๊ฐ€ํ•จ.

$ sudo mv {pem key ์œ„์น˜๊ฒฝ๋กœ}/jenkins.pem ~/.ssh

โญ๏ธ ์ฐธ๊ณ ๋กœ ์‹ค์Šต์˜ ์ƒํ™ฉ์ด๊ธฐ์— EC2 ์„œ๋ฒ„๋ฅผ ๋‚ด๋ฆฌ๊ณ  ์˜ฌ๋ฆฌ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด
[1. ssh ์œผ๋กœ ์ ‘์†ํ•˜๋Š” ๋ฐฉ๋ฒ•] ์œผ๋กœ ํ•˜๋Š”๊ฒƒ์ด ๋งž์„๋“ฏ. (IPv4๊ฐ€ ์„œ๋ฒ„ ์žฌ์‹œ์ž‘์‹œ ๋ฐ”๋€œ)

  1-2-1. ssh ์œผ๋กœ ์ ‘์†ํ•˜๋Š” ๋ฐฉ๋ฒ•

# ssh -i {pem key ๊ฒฝ๋กœ} {ec2 ์ธ์Šคํ„ด์Šค ๊ณ„์ •ID}@{ํผ๋ธ”๋ฆญ IPv4 DNS or ํผ๋ธ”๋ฆญ IPv4 IP}
$ ssh -i ~/.ssh/jenkins.pem ec2-user@ec2-2-3-4-5.ap-northeast-2.compute.amazonaws.com

# root ๊ถŒํ•œ์ด ์•„๋‹Œ ๊ฒฝ์šฐ 
$ sudo ssh -i ~/.ssh/jenkins.pem ec2-user@ec2-2-3-4-5.ap-northeast-2.compute.amazonaws.com

 

  1-2-2. ~/.ssh/config file ์— ์ ‘์†์ •๋ณด ์ถ”๊ฐ€ ํ›„, Host ๋ช…์œผ๋กœ ์ ‘์†ํ•˜๋Š” ๋ฐฉ๋ฒ•

$ vi ~/.ssh/config 

# ์—ด์–ด์„œ ์•„๋ž˜๋‚ด์šฉ ์ถ”๊ฐ€
Host test_jenkins

 User ec2-user
 HostName ec2-2-3-4-5.ap-northeast-2.compute.amazonaws.com
 IdentityFile ~/.ssh/jenkins.pem
 
# ๊ทธ๋ฆฌ๊ณ  ์ €์žฅ (:wq!)
 
# ์ ‘์†์‹œ๋„๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ํ•จ. (root ๊ถŒํ•œ ์•„๋‹Œ ๊ฒฝ์šฐ sudo ssh ~)
$ ssh test_jenkins

 

๐Ÿ’ฅ ๊ทธ๋Ÿฐ๋ฐ, Host ๋ช…์œผ๋กœ ์ ‘์† ์‹œ๋„์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๋ฉด ? 

> pem key ๊ถŒํ•œ์„ ๋ณ€๊ฒฝํ•ด์ฃผ๋‹ˆ ์ ‘์†์ด ๊ฐ€๋Šฅํ•จ! (chmod 400 ~ ๋‚˜์—๊ฒŒ๋งŒ ์ฝ๊ธฐ ๊ถŒํ•œ ์„ค์ •) 

 

2๏ธโƒฃ EC2 ์„œ๋ฒ„ ์ ‘์† ํ›„, ํ”„๋กœ๊ทธ๋žจ ์„ค์น˜ ๋ฐ ์„œ๋ฒ„ ์…‹ํŒ…

2-1. java ์„ค์น˜
   โ€ฃ ๋‚˜์˜ ๊ฒฝ์šฐ, aws linux์„ ์‚ฌ์šฉํ–ˆ๊ธฐ์— ํ•ด๋‹น๋ฌธ์„œ โ† ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์„ค์น˜ํ•จ 

2-2. ํƒ€์ž„์กด ๋ณ€๊ฒฝ (ํ•œ๊ตญ ์‹œ๊ฐ„)

$ sudo rm /etc/localtime
$ sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime

# ๋‚ ์งœ ํ™•์ธ
$ date


2-3. ํ˜ธ์ŠคํŠธ๋„ค์ž„ ๋ณ€๊ฒฝ

$ sudo hostnamectl set-hostname mungmang-jenkins
$ sudo reboot

# ๋ช‡๋ถ„ ํ›„ ๋‹ค์‹œ์ ‘์†

# ํ™•์ธ
$ hostname


2-4. jenkins ์„ค์น˜

# jenkins repository ์— ์„ค์ •ํŒŒ์ผ ์ƒ์„ฑ 
$ sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
$ sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

# jenkins ์„ค์น˜
$ sudo yum install jenkins

# jenkins ์‹คํ–‰
$ sudo systemctl start jenkins

# ๋งŒ์•ฝ ๋ถ€ํŒ…์‹œ ๊ฐ€๋Šฅํ•˜๊ฒŒ ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ๋„ ์ถ”๊ฐ€
$ sudo systemctl enable jenkins

 

 

2-5. jenkins ์ ‘์† ๋ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜

๋นจ๊ฐ„๋ฐ•์Šค ๊ฒฝ๋กœ์˜ ๊ฐ’์„ ํ™•์ธํ•˜์—ฌ ์ž…๋ ฅํ•ด์ฃผ๊ธฐ
ํ•œ๊ธ€๋กœ ๋ฒˆ์—ญํ•จ. ์ถ”์ฒœ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜์˜€์Œ. (๋ญ๊ฐ€ ํ•„์š”ํ•œ์ง€๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ!)


.. ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜ ํ›„,
jenkins ์œ ์ € ๋“ฑ๋ก ํ™”๋ฉด์—์„œ ๋กœ๊ทธ์ธํ•  ๊ณ„์ •์ •๋ณด ์ž…๋ ฅ โ†“ โ†“ โ†“ (๊ณ„์ •๋ช… ๋ฐ ์•”ํ˜ธ๋กœ jenkins ๋กœ๊ทธ์ธ ๊ฐ€๋Šฅ!)

 


2-6. gradle ์„ค์น˜ https://docs.gradle.org/6.9.1/userguide/installation.html ์ฐธ๊ณ ํ•จ

$ mkdir /opt/gradle
$ unzip -d /opt/gradle gradle-6.9.1-bin.zip
$ ls /opt/gradle/gradle-6.9.1

$ export PATH=$PATH:/opt/gradle/gradle-6.9.1/bin
$ gradle -version

 

2-7. git ์„ค์น˜ https://gamoo12.tistory.com/205 ์ฐธ๊ณ ํ•จ

$ sudo yum update -y
$ sudo yum install git -y
$ git version

 

3๏ธโƒฃ github ์„ค์ •

3-0. ๋ฐ˜์˜ํ•  ํ”„๋กœ์ ํŠธ๋Š” ์žˆ๋‹ค๊ณ  ๊ฐ€์ • (์ž‘์—… ๊ฒฐ๊ณผ๋ฌผ)
3-1. EC2์—์„œ ssh key ์ƒ์„ฑ

$ cd ~/.ssh
$ ssh-keygen

# id_rsa key ์ƒ์„ฑ



3-2. github project ๋‚ด XXX.pub key ๋“ฑ๋ก ํ•„์š”

    3-2-1. https://github.com/{git๊ณ„์ •}/{gitํ”„๋กœ์ ํŠธ}/settings/keys/new ์ด๋™ 

$ cat ~/.ssh/id_rsa.pub

# ssh-rsa ~ ๋‚ด์šฉ์„ ๋ณต์‚ฌ

github > ํ”„๋กœ์ ํŠธ > Settings > Deploy keys > Add deploy key


3-3. github ํ”„๋กœ์ ํŠธ ๋‚ด webhook ์„ค์ •ํ•„์š”
    3-2-1.https://github.com/{git๊ณ„์ •}/{gitํ”„๋กœ์ ํŠธ}/settings/hooks/new ์ด๋™ 
        โ€ข Payload URL : http://{ec2์— jenkins ๋„์šด ์ฃผ์†Œ (ex. ec2~~:8080}/github-webhook/ ์ž…๋ ฅ
        โ€ข Content type :  application/json

jenkins์—์„œ build ๋ฒ„ํŠผ ํด๋ฆญ์‹œ, github์˜ webhook ๊ธฐ๋Šฅ ์ด์šฉํ•˜์—ฌ ์ž‘์—… ๊ฒฐ๊ณผ๋ฌผ ํ”„๋กœ์ ํŠธ๋ฅผ ๋•ก๊ฒจ๊ฐ€๋„๋ก ํ• ๊ฒƒ์ž„

 

4๏ธโƒฃ jenkins ์„ค์ •

1. Credentials ๋“ฑ๋ก ํ•„์š” (github ๐Ÿ”› jenkins ์—ฐ๊ฒฐ์œ ๋„)

Jenkins ๊ด€๋ฆฌ > Manage Credentials > Stores scoped Jenkins ์˜ Jenkins ํด๋ฆญ > Global credentials
 
Kind : SSH Username with private key ์„ ํƒ
Private Key: .ssh/id_rsa ์„ ์ž…๋ ฅ

 

2. ๋นŒ๋“œ ๋ฐ ์‹คํ–‰ (Dashboard > ๋Œ€์ƒ ํ”„๋กœ์ ํŠธ > ๊ตฌ์„ฑ) 

๋นŒ๋“œ์œ ๋ฐœ
GitHub hook trigger for GITScm polling ์„ ํƒ 

[ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜ ํ•„์š”] post build task (์•„๋ž˜์˜ ๋‚ด์šฉ ๊ธฐ์ž…, ์ž‘์—… ๊ฒฐ๊ณผ๋ฌผ jar ํŒŒ์ผ๋กœ ๋งŒ๋“  ๊ฒƒ์„ ์‹คํ–‰)
JAR=$(ls -tr /var/lib/jenkins/workspace/{jenkins working directory ๋ช…}/build/libs | grep jar | tail -n 1)
echo $JAR
nohup java -jar /var/lib/jenkins/workspace/{jenkins working directory ๋ช…}/build/libs/$JAR &

โ€ข $(ls -tr /var/lib/jenkins/workspace/{jenkins working directory ๋ช…}/build/libs | grep jar | tail -n 1) : jar ํŒŒ์ผ๋ช… ์ถ”์ถœ ์œ„ํ•จ.
โ€ข nohup java -jar /var/lib/jenkins/workspace/{jenkins working directory ๋ช…}/build/libs/$JAR & : jar ์‹คํ–‰์œ„ํ•จ, nohup ์„ ๋ถ™์ž„์œผ๋กœ์จ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰! (ํ„ฐ๋ฏธ๋„ ์ข…๋ฃŒ ํ•˜๋”๋ผ๋„ ์ž‘์—… ๊ฒฐ๊ณผ๋ฌผ์€ ๊ณ„์† ์„œ๋ฒ„์— ์‹คํ–‰๋˜์–ด ์žˆ๋„๋ก ํ•˜๊ธฐ์œ„ํ•จ)

 

 

๋Š๋‚€์ 

โ€ฃ ์‚ฝ์งˆ์„ ์ค„์ผ ํ•„์š”์„ฑ์ด์žˆ๊ฒ ๋‹ค.
โ€ฃ ํŒŒ์ดํ”„๋ผ์ธ ์ž‘์„ฑ์„ ์ด์šฉํ•œ ๋ฐฐํฌ๋„ ํ•œ๋ฒˆ ํ•ด๋ณด์•„์•ผ ํ• ๊ฒƒ๊ฐ™๋‹ค. 
โ€ฃ docker..kubernetes ๋“ฑ์„ ์ด์šฉํ•œ ๋ฐฐํฌ๋ฐฉ๋ฒ•๋„ ํ•ด๋ณด์•„์•ผ ํ• ๊ฒƒ๊ฐ™๋‹ค. + ๋‹ค๋ฅธ ์„œ๋ฒ„์— ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ• ๋“ฑ 

 


์ฐธ๊ณ 

์ฑ…: ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ AWS๋กœ ํ˜ผ์ž ๊ตฌํ˜„ํ•˜๋Š” ์›น ์„œ๋น„์Šค

 

์Šคํ”„๋ง ๋ถ€ํŠธ์™€ AWS๋กœ ํ˜ผ์ž ๊ตฌํ˜„ํ•˜๋Š” ์›น ์„œ๋น„์Šค - YES24

๊ฐ€์žฅ ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ์›น ์„œ๋น„์Šค์˜ ๋ชจ๋“  ๊ณผ์ •์„ ๊ฒฝํ—˜ํ•œ๋‹ค. ๊ฒฝํ—˜์ด ์‹ค๋ ฅ์ด ๋˜๋Š” ์ˆœ๊ฐ„!์ด ์ฑ…์€ ์ œ๋ชฉ ๊ทธ๋Œ€๋กœ ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ AWS๋กœ ์›น ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. JPA์™€ JUnit ํ…Œ์ŠคํŠธ, ๊ทธ๋ ˆ์ด๋“ค, ๋จธ์Šคํ…Œ์น˜, ์Šคํ”„๋ง

www.yes24.com

๋งํฌ: https://lemontia.tistory.com/656

 

[Linux] centos7 ์  ํ‚จ์Šค ์„ค์น˜

1. jenkins repository๋ฅผ ์„ค์ •ํŒŒ์ผ์„ ์ƒ์„ฑ wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo 2. /etc/yum.repos.d/jenkins.repo ๊ฒฝ๋กœ์— ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•˜๋Š”์ง€ ํ™•์ธ..

lemontia.tistory.com

 

๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•

 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค
(k8s = kubernetes)

 

์„ค๋ช…

โ€ข ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ๋ฐฐํฌ/ํ™•์žฅํ•˜๊ณ  ๊ด€๋ฆฌ๋ฅผ ์ž๋™ํ™”ํ•ด์ฃผ๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”Œ๋žซํผ
โ€ข ์‰ฝ๊ฒŒ๋งํ•ด, ๋‹ค์ˆ˜์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉ
โ€ข ๊ตฌ๊ธ€์—์„œ ๋งŒ๋“ค์—ˆ๊ณ  borg ๊ธฐ๋ฐ˜
โ€ข์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜(container orchestration)์˜ ํ‘œ์ค€ 
  โ†‘โ†‘โ†‘ click-! โ†‘โ†‘โ†‘

โ€ป ์ปจํ…Œ์ด๋„ˆ
โ€ข ํ•˜๋‚˜์˜ ์šด์˜์ฒด์ œ(OS) ์ปค๋„ ์—์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ์˜ํ–ฅ๋ฐ›์ง€ ์•Š๊ณ  ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค ์ƒํƒœ
โ€ข ์šด์˜์ฒด์ œ ํ™˜๊ฒฝ์— ๊ด€๊ณ„ ์—†์ด ๋…๋ฆฝ์ ์ธ ํ™˜๊ฒฝ์—์„œ ์ผ๊ด€๋œ ๊ฒฐ๊ณผ ๋ณด์žฅ
โ€ข ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„ ์šด์˜์ฒด์ œ(OS)์„ ๊ณต์œ 
โ€ข ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—๋Š” ์ž์ฒด ํŒŒ์ผ์‹œ์Šคํ…œ, CPU์ ์œ ์œจ, ๋ฉ”๋ชจ๋ฆฌ, ํ”„๋กœ์„ธ์Šค ๊ณต๊ฐ„ ๋“ฑ์ด ์กด์žฌ.
โ€ข ํด๋ผ์šฐ๋“œ or OS ๋ฐฐํฌ๋ณธ์— ๋ชจ๋‘ ์ด์‹ ๊ฐ€๋Šฅ.

 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ?

โ€ข ๋ถ„์‚ฐ์‹œ์Šคํ…œ์„ ํƒ„๋ ฅ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ. (๋ฐฐํฌ ๊ด€๋ฆฌ๋“ฑ์„ ์‹œ์Šคํ…œ์ด ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•ด์คŒ์œผ๋กœ์จ ์•ˆ์ •์„ฑ์— ๊ธฐ์—ฌํ•จ)

 

 

Desired State (์›ํ•˜๋Š” ์ƒํƒœ)

https://subicura.com/2019/05/19/kubernetes-basic-1.html

โ€ข ์ƒํƒœ ์ฒดํฌ(Observe) ์ค‘ ํ˜„์žฌ์ƒํƒœ(Current State)์—์„œ ์ฐจ์ด์ (Diff)์ด ๋ฐœ๊ฒฌ์‹œ ์กฐ์น˜(Act)๋ฅผ ์ทจํ•˜์—ฌ ์›ํ•˜๋Š” ์ƒํƒœ๋กœ ๋งŒ๋“ฌ
โ€ข ๋น„๊ตํ•˜๊ณ  ๋น„๊ตํ•˜๊ณ  ๋น„๊ตํ•˜์—ฌ ๋‹ค๋ฅด๋ฉด ๊ทธ์— ๋งž๊ฒŒ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•จ
โ€ข API ๊ฐ€ ํ˜„์žฌ์ƒํƒœ๋ฅผ ๊ฐ–๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ๋ณด์กดํ•˜๊ธฐ ์œ„ํ•ด etcd๊ฐ€ ํ•„์š” (ํ•œ๋ชธ์œผ๋กœ ์›€์ง์ž„)

 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ปดํฌ๋„ŒํŠธ

โ€ข ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ๋ฐฐํฌํ•˜์˜€์„๋•Œ ์ƒ์„ฑ

 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์•„ํ‚คํ…์ฒ˜

https://kubernetes.io/ko/docs/concepts/overview/components/

โ ๋งˆ์Šคํ„ฐ๋…ธ๋“œ์™€ ์›Œ์ปค๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ โ 
    โ€ฃ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์—๋Š” kubectl, API ์„œ๋ฒ„, etcd, ์ปจํŠธ๋กค๋Ÿฌ ๋งค๋‹ˆ์ €, ์Šค์ผ€์ค„๋Ÿฌ ๋“ฑ์ด ์กด์žฌ. (์„ ์–ธ์  ์‹œ์Šคํ…œ)
    โ€ฃ์›Œ์ปค๋…ธ๋“œ์—๋Š” kubelet, ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„, Pod, ๋„คํŠธ์›Œํฌํ”Œ๋Ÿฌ๊ทธ์ธ, CoreDNS ๊ฐ€ ์กด์žฌํ•จ. (์›Œ์ปค๋…ธ๋“œ๋Š” ์›Œ์ปคํ”Œ๋กœ ๊ตฌ์กฐ)

โ– Kubernetes cluster
    โ€ฃ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๋…ธ๋“œ๋ผ๊ณ  ํ•˜๋Š” (์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์œ„ํ•จ) ์˜ ์›Œ์ปค ๋จธ์‹ ์˜ ์ง‘ํ•ฉ

โ– Control Plane
    โ€ฃ ๋Š์ž„์—†์ด ์ƒํƒœ๋ฅผ ์ฒดํฌํ•˜๊ณ  ์›ํ•˜๋Š” ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•จ (์ƒˆ๋กœ์ƒ๊ธด Pod์„ ๊ณ„์† ์ฒดํฌํ•จ)
    โ€ฃ etcd, API ์„œ๋ฒ„, Scheduler, ์ปจํŠธ๋กค๋Ÿฌ๋งค๋‹ˆ์ €, ํด๋ผ์šฐ๋“œ ์ปจํŠธ๋กค๋Ÿฌ ๋งค๋‹ˆ์ € ๋“ฑ์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑ โ†’ ์ด๋ฅผ ์‹คํ–‰ํ•ด์ฃผ๋Š” ๊ฒƒ์ด Master
    โ€ฃ ๋งˆ์Šคํ„ฐ๋…ธ๋“œ

โ– Controller
    โ€ฃ ๋Š์ž„์—†์ด ์ƒํƒœ๋ฅผ ์ฒดํฌํ•˜๊ณ  ์›ํ•˜๋Š” ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•จ (์ƒˆ๋กœ์ƒ๊ธด Pod์„ ๊ณ„์† ์ฒดํฌํ•จ, API ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ณต์œ  ์ƒํƒœ ๊ฐ์‹œ)
    โ€ฃ ๋‹จ์ผ ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰ (๋ณต์žก์„ฑ ๋‚ฎ์ถค)
    โ€ฃ ๋ฌดํ•œ๋ฐ˜๋ณต์œผ๋กœ ๋Œ๋ฉด์„œ ์ฒดํฌ
    โ€ฃ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋‹ค์–‘ํ•œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์กด์žฌํ•จ (๋ณต์ œ์ปจํŠธ๋กค๋Ÿฌ,, ๋…ธ๋“œ์ปจํŠธ๋กค๋Ÿฌ,, ์—”๋“œํฌ์ธํŠธ ์ปจํŠธ๋กค๋Ÿฌ,, 10๊ฐœ..20๊ฐœ..)


โ– Scheduler
    โ€ฃ Node ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์ฒดํฌํ•จ
    โ€ฃ ์ƒˆ๋กœ ์ƒ์„ฑ๋œ Pod์„ ๊ฐ์ง€ํ•˜๊ณ  ์‹คํ–‰ํ•  ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•จ. (ํ• ๋‹น์š”์ฒญ Pod์„ ํ™•์ธํ•จ)
    โ€ฃ ๋…ธ๋“œ์˜ ํ˜„์žฌ ์ƒํƒœ์™€ Pod์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ฒดํฌํ•จ

โ– API Server
    โ€ฃetcd ์™€ ์œ ์ผํ•˜๊ฒŒ ํ†ต์‹ ํ•˜๋Š” ๋ชจ๋“ˆ **
    โ€ฃ ์ƒํƒœ๋ฅผ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ (์กฐํšŒ ๋ฐ ์š”์ฒญ์€ ๋ฌด์กฐ๊ฑด API Server์„ ํ†ตํ•ด์„œ ํ•จ)
    โ€ฃ REST API ํ˜•ํƒœ๋กœ ์ œ๊ณต
    โ€ฃ ๊ถŒํ•œ์ฒดํฌ, ๊ด€๋ฆฌ์ž ์š”์ฒญ ๋ฟ ์•„๋‹ˆ๋ผ ๋‹ค์–‘ํ•œ ๋‚ด๋ถ€ ๋ชจ๋“ˆ๊ณผ ํ†ต์‹ ํ•จ
    โ€ฃ ์ˆ˜ํ‰์œผ๋กœ ํ™•์žฅ๋˜๋„๋ก ๋””์ž์ธ

โ– etcd
    โ€ฃ ์ƒํƒœ ๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ (๋‚ ๋ผ๊ฐ€์ง€์•Š๊ฒŒ,, ๋ณดํ†ต 3๋Œ€๋กœ ๊ด€๋ฆฌ,, ๋ฐฑ์—… ํ•„์ˆ˜)
    โ€ฃ ๋ณต๊ตฌ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•จ
    โ€ฃ ๊ณ ๊ฐ€์šฉ์„ฑ, ์ผ๊ด€์„ฑ
    โ€ฃ Key, Value ํ˜•ํƒœ ๋ฐ TTL(time to live), watch ๊ฐ™์€ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ ์ œ๊ณต

 

 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋…ธ๋“œ(Node) ์ปดํฌ๋„ŒํŠธ

โ–ช๏ธŽ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰
โ–ช๏ธŽ ํด๋Ÿฌ์Šคํ„ฐ์— ๋”ฐ๋ผ ๊ฐ€์ƒ or ๋ฌผ๋ฆฌ์ ์ผ ์ˆ˜ ์žˆ๋‹ค.
โ–ช๏ธŽControl Plain ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋ฉฐ, Pod์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์„œ๋น„์Šค๋ฅผ ํฌํ•จํ•จ.
โ–ช๏ธŽ ํ•˜๋‚˜์˜ ํด๋Ÿฌ์Šคํ„ฐ์—๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์กด์žฌ.

    โ– kubelet
        โ€ฃ Pod ์„ ์‹คํ–‰/์ค‘์ง€ํ•˜๊ณ  ์ƒํƒœ๋ฅผ ์ฒดํฌํ•จ (๊ฐ ๋…ธ๋“œ์—์„œ ์‹คํ–‰, ๋ฏธ์‹คํ–‰ Pod์„ ํ™•์ธํ•˜์—ฌ Pod์„ ์ƒ์„ฑํ•จ)
        โ€ฃ ๋‹ค ์‹คํ–‰๋˜์–ด ์žˆ์–ด์•ผ ํ•จ.
        โ€ฃ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ง์ ‘ ์“ฐ์ง€ ์•Š๊ณ  Pod๋ผ๋Š” ๊ฑธ๋กœ ๊ฐ์‹ธ์„œ ์‚ฌ์šฉํ•จ.

    โ– kube-proxy
        โ€ฃ ๋„คํŠธ์›Œํฌ ํ”„๋ก์‹œ์™€ ๋ถ€ํ•˜ ๋ถ„์‚ฐ ์—ญํ• , iptables or IPVS์„ ์‚ฌ์šฉ (์„ค์ •๋งŒ ๊ด€๋ฆฌ)
 
    โ– ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„
        โ€ฃ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์„ ๋‹ด๋‹นํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด  

 

Kubectl

โ–ช๏ธŽ ๋ช…๋ นํ˜• ์ปค๋งจ๋“œ.. ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๊ด€๋ฆฌํ•จ

 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์˜ค๋ธŒ์ ํŠธ

https://www.youtube.com/watch?v=-gIyfII5eak&t=5s

โ– Pod
    โ€ฃ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ์ž‘์€ ์ปดํ“จํŒ… ๋‹จ์œ„
    โ€ฃ ์ „์ฒด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๊ณ ์œ ํ•œ IP์„ ํ• ๋‹น (Pod ๋ณ„๋กœ IP ํ• ๋‹น)
    โ€ฃ ํ•˜๋‚˜์˜ Pod ์•ˆ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ ์†ํ•  ์ˆ˜ ์žˆ๋‹ค.

โ– ReplicaSet
    โ€ฃ Pod์„ ๋‹จ๋…์œผ๋กœ ๋งŒ๋“ ์ƒํ™ฉ์—์„œ pod๊ฐ€ ์‚ฌ๋ผ์ง€๋Š”๊ฒฝ์šฐ(์„œ๋ฒ„๊ฐ€์ฃฝ์Œ) ์ž๋™๋ณต๊ตฌ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋ฐ, ์ด๋Ÿฌํ•œ pod์„ ์ž๋™ ๋ณต์ œ ๊ด€๋ฆฌํ•ด์ฃผ๋Š”๊ฒƒ.
    โ€ฃ ์—ฌ๋Ÿฌ๊ฐœ์˜ Pod ์„ ๊ด€๋ฆฌ (๋ช‡๊ฐœ์˜ Pod์„ ๊ด€๋ฆฌํ• ์ง€ ๊ฒฐ์ •)
    โ€ฃ ๋ฌด์ค‘๋‹จ๋ฐฐํฌ ํ•˜๊ณ ์‹ถ์„๋•Œ ์‚ฌ์šฉ
    โ€ฃ ์‹ ๊ทœ Pod์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด์˜ Pod์„ ์ œ๊ฑฐํ•˜์—ฌ ์›ํ•˜๋Š” ์ˆ˜ (Replicas)์„ ์œ ์ง€


โ– Deployment
    โ€ฃ ๋ฐฐํฌ๋ฒ„์ „ ๊ด€๋ฆฌ (ReplicaSet์„ ์ด์šฉํ•˜์—ฌ ๋ฒ„์ „๊ด€๋ฆฌ๋ฅผ ํ•จ)
    โ€ฃ ๋‚ด๋ถ€์ ์œผ๋กœ ReplicaSet ์„ ์ด์šฉํ•จ

โ– Workload
    โ€ฃ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ Pod ์‹คํ–‰์ค‘ ์ง‘ํ•ฉ ๋‚˜ํƒ€๋ƒ„

โ– Service
    โ€ฃ ํŒŒ๋“œ ์ง‘ํ•ฉ์—์„œ ์‹คํ–‰์ค‘์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค๋กœ ๋…ธ์ถœํ•˜๋Š” ์ถ”์ƒํ™” ๋ฐฉ๋ฒ•.
    โ€ฃ Pod ์„ ์—ฐ๊ฒฐํ•˜๊ณ  ์™ธ๋ถ€์— ๋…ธ์ถœ

โ– Service > ClusterIP
    โ€ฃ Pod์„ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ํ•˜๋Š” ์„œ๋น„์Šค
    โ€ฃ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋ก์‹œ 
    โ€ฃ Pod๋Š” ๋™์ ์ด์ง€๋งŒ, Service๋Š” ๊ณ ์œ  IP์„ ๊ฐ€์ง
    โ€ฃ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ ์„œ๋น„์Šค ์—ฐ๊ฒฐ์€ DNS ์ด์šฉ

โ– Service > NodePort
    โ€ฃ ๋…ธ๋“œ์— ๋…ธ์ถœ๋˜์–ด ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์„œ๋น„์Šค (๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ ‘๊ทผ ๊ฐ€๋Šฅ ๋“ฑ)
    โ€ฃ ๋ชจ๋“  ๋…ธ๋“œ์— ๋™์ผํ•œ ํฌํŠธ๋กœ ์ƒ์„ฑ

โ– Service > LoadBalancer
    โ€ฃ ํ•˜๋‚˜์˜ IP์ฃผ์†Œ๋ฅผ ์™ธ๋ถ€์— ๋…ธ์ถœ

โ– Ingress
    โ€ฃ URL, path ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ… ์ •์˜ 
    โ€ฃ SSL ๋ณด์•ˆ ์—ฐ๊ฒฐ

    โ€ฃ domain path์— ๋”ฐ๋ผ ๋‚ด๋ถ€ ClusterIp์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ฒ˜๋ฆฌ
    โ€ฃ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์˜ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์™ธ๋ถ€ ์ ‘๊ทผ์„ ๊ด€๋ฆฌํ•˜๋Š” API ์˜ค๋ธŒ์ ํŠธ์ด๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ HTTP์„ ๊ด€๋ฆฌํ•จ.

โ– Volume 
    โ€ฃ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ์ด๋ฉฐ, Pod์˜ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ.

โ– ConfigMap
    โ€ฃ key-value ์Œ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” API ์˜ค๋ธŒ์ ํŠธ.
    โ€ฃ ์„ค์ • ๊ฐ’์„ Pod ์— ์ „๋‹ฌ
    โ€ฃ ์ปจํ…Œ์ด๋„ˆ ์„ค์ • ์ •๋ณด๋ฅผ ์ €์žฅ ํ•ด ๋†“๋Š” ์ผ์ข…์˜ ์ €์žฅ์†Œ (key / value ํ˜•์‹)
    โ€ฃ ์ปจํ…Œ์ด๋„ˆ์—์„œ ํ•„์š”ํ•œ ํ™˜๊ฒฝ ์„ค์ • ๋‚ด์šฉ์„ ์ปจํ…Œ์ด๋„ˆ์™€ ๋ถ„๋ฆฌํ•ด์„œ ์ œ๊ณต
    โ€ฃ ์„ค์ • ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ๋งˆ๋‹ค ์ปจํ…Œ์ด๋„ˆ์˜ ์žฌ๋ฐฐํฌ ์—†์ด ์ ์šฉ ๊ฐ€๋Šฅ


 


 

โ€ป ์ฐธ๊ณ 
- ์ธํ”„๋Ÿฐ ๊ฐ•์˜: ์ดˆ๋ณด๋ฅผ ์œ„ํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์•ˆ๋‚ด์„œ

 

์ดˆ๋ณด๋ฅผ ์œ„ํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์•ˆ๋‚ด์„œ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ 1๋„ ๋ชจ๋ฅด๋Š” ์ž…๋ฌธ์ž, ์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์•ˆ๋‚ด์„œ ์ž…๋‹ˆ๋‹ค. ์ดˆ๋ณด์ž๋„ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ๋‚ด์šฉ๊ณผ ํ๋ฆ„์œผ๋กœ ๊ตฌ์„ฑํ–ˆ์–ด์š”., - ๊ฐ•์˜ ์†Œ๊ฐœ | ์ธํ”„๋Ÿฐ...

www.inflearn.com

- ์ฑ…: ์ปจํ…Œ์ด๋„ˆ ์ธํ”„๋ผ ํ™˜๊ฒฝ ๊ตฌ์ถ•์„ ์œ„ํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค / ๋„์ปค 

 

์ปจํ…Œ์ด๋„ˆ ์ธํ”„๋ผ ํ™˜๊ฒฝ ๊ตฌ์ถ•์„ ์œ„ํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค/๋„์ปค - ๊ต๋ณด๋ฌธ๊ณ 

์ปจํ…Œ์ด๋„ˆ ์ธํ”„๋ผ ํ™˜๊ฒฝ์„ ์ดํ•ดํ•˜๊ณ  ์ง์ ‘ ๊ตฌ์ถ•ํ•ด ๋ณด์ž! | ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์™€ ๋„์ปค๋ฅผ ํ™œ์šฉํ•œ ์ปจํ…Œ์ด๋„ˆ ์ธํ”„๋ผ ํ™˜๊ฒฝ ๊ตฌ์ถ•!์ปจํ…Œ์ด๋„ˆ ์ธํ”„๋ผ ํ™˜๊ฒฝ์„ ์ง€์›ํ•˜๋Š” ๋„๊ตฌ๋“ค์„ ์œ ๊ธฐ์ ์œผ๋กœ ์—ฐ๊ฒฐํ•ด ์„ค๋ช…ํ•œ๋‹ค์ฟ ๋ฒ„๋„ค

www.kyobobook.co.kr

- ๋งํฌ: https://kubernetes.io/ko/docs/concepts/overview/what-is-kubernetes/

 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์›Œํฌ๋กœ๋“œ์™€ ์„œ๋น„์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ด์‹ํ•  ์ˆ˜ ์žˆ๊ณ , ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์˜คํ”ˆ์†Œ์Šค ํ”Œ๋žซํผ์œผ๋กœ, ์„ ์–ธ์  ๊ตฌ์„ฑ๊ณผ ์ž๋™ํ™”๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•œ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ํฌ๊ณ  ๋น ๋ฅด๊ฒŒ ์„ฑ์žฅํ•˜

kubernetes.io

- ๋งํฌ: https://subicura.com/2019/05/19/kubernetes-basic-1.html

๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•

 

์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ (container orchestration)

์„ค๋ช…

โ—ฆ ๋ณต์žกํ•œ ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌ ํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ
โ—ฆ ์„œ๋ฒ„ ๊ด€๋ฆฌ์ž๊ฐ€ ํ•ด์•ผํ•˜๋Š” ์ผ์„ ๋Œ€์‹  ํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ๋Š”๊ฒƒ
โ—ฆ ๋ณต์žกํ•œ ๋‹จ๊ณ„๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์š”์†Œ๋“ค์˜ ์œ ๊ธฐ์ ์ธ ๊ด€๊ณ„๋ฅผ ๋ฏธ๋ฆฌ ์ •์˜ ํ•ด ์†์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค
โ—ฆ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๊ฐ€ ์ด์˜ ํ‘œ์ค€์ด๋ผ๊ณ  ํ•จ.

โ€ป ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜
์„œ๋ฒ„ ๊ตฌ์„ฑ ๊ด€๋ฆฌ ์ž๋™ํ™” = ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ๊ณผ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ž๋™ํ™”๋œ ๊ตฌ์„ฑ, ์กฐ์œจ ๊ด€๋ฆฌ
๊ด€๋ จ ๋„๊ตฌ๋กœ Ansible, Puppet, Salt, ํ…Œ๋ผํผ, AWS CloudeFormation..

..์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ๋ฅผ ์ž๋™ํ™” ํ•œ๋‹ค๋Š” ๊ฒƒ?

 

ํŠน์ง•

โ—ฆ ํด๋Ÿฌ์Šคํ„ฐ ๋‹จ์œ„ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. (๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์—์„œ ๊ฐ ๋…ธ๋“œ๋ณ„ ๊ด€๋ฆฌ..)
โ—ฆ ์˜คํ† ์Šค์ผ€์ผ๋ง ๊ฐ€๋Šฅ
โ—ฆ ๋ฐฐํฌ๊ด€๋ฆฌ ์•Œ์•„์„œ ํ•จ
โ—ฆ ์„œ๋ฒ„ ๋กค๋ฐฑ๋“ฑ์„ ์ค‘์•™์—์„œ ๊ด€๋ฆฌํ•จ
โ—ฆ ์ƒˆ๋กœ ๋“ฑ๋ก๋˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ๋˜๋Š” ์„œ๋ฒ„ IP๋ฅผ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•ด์คŒ 
โ—ฆ ๋ณผ๋ฅจ ์Šคํ† ๋ฆฌ์ง€ ๋งˆ์šดํŠธ ์„ค์ • ๊ฐ€๋Šฅ

โ€ป ํด๋Ÿฌ์Šคํ„ฐ
์—ฌ๋Ÿฌ๋Œ€์˜ ์„œ๋ฒ„๋“ค์„ ํ•˜๋‚˜์˜ ์‹œ์Šคํ…œ์œผ๋กœ ๋™์ž‘ํ•˜๊ฒŒ ํ•จ์œผ๋กœ์จ, ํด๋ผ์ด์–ธํŠธ๋“ค์—๊ฒŒ ๊ณ ๊ฐ€์šฉ์„ฑ(=์˜ค๋žœ๊ธฐ๊ฐ„๋™์•ˆ ์ •์ƒ์šด์˜ ๊ฐ€๋Šฅ)์„ ์ œ๊ณต

ใƒป ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ = ๋…ธ๋“œ๋จธ์‹  (์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์œ„ํ•จ) ์˜ ์›Œ์ปค ๋จธ์‹ ์˜ ์ง‘ํ•ฉ
โ†’ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์‹คํ–‰์ค‘ ? ํด๋Ÿฌ์Šคํ„ฐ ์‹คํ–‰์ค‘ !

 

 


 

โ€ป ์ฐธ๊ณ 
- inflearn: ์ดˆ๋ณด๋ฅผ ์œ„ํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์•ˆ๋‚ด์„œ

 

์ดˆ๋ณด๋ฅผ ์œ„ํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์•ˆ๋‚ด์„œ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ 1๋„ ๋ชจ๋ฅด๋Š” ์ž…๋ฌธ์ž, ์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์•ˆ๋‚ด์„œ ์ž…๋‹ˆ๋‹ค. ์ดˆ๋ณด์ž๋„ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ๋‚ด์šฉ๊ณผ ํ๋ฆ„์œผ๋กœ ๊ตฌ์„ฑํ–ˆ์–ด์š”., - ๊ฐ•์˜ ์†Œ๊ฐœ | ์ธํ”„๋Ÿฐ...

www.inflearn.com

- book: ์ปจํ…Œ์ด๋„ˆ ์ธํ”„๋ผ ํ™˜๊ฒฝ ๊ตฌ์ถ•์„ ์œ„ํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค / ๋„์ปค 

 

์ปจํ…Œ์ด๋„ˆ ์ธํ”„๋ผ ํ™˜๊ฒฝ ๊ตฌ์ถ•์„ ์œ„ํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค/๋„์ปค - ๊ต๋ณด๋ฌธ๊ณ 

์ปจํ…Œ์ด๋„ˆ ์ธํ”„๋ผ ํ™˜๊ฒฝ์„ ์ดํ•ดํ•˜๊ณ  ์ง์ ‘ ๊ตฌ์ถ•ํ•ด ๋ณด์ž! | ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์™€ ๋„์ปค๋ฅผ ํ™œ์šฉํ•œ ์ปจํ…Œ์ด๋„ˆ ์ธํ”„๋ผ ํ™˜๊ฒฝ ๊ตฌ์ถ•!์ปจํ…Œ์ด๋„ˆ ์ธํ”„๋ผ ํ™˜๊ฒฝ์„ ์ง€์›ํ•˜๋Š” ๋„๊ตฌ๋“ค์„ ์œ ๊ธฐ์ ์œผ๋กœ ์—ฐ๊ฒฐํ•ด ์„ค๋ช…ํ•œ๋‹ค์ฟ ๋ฒ„๋„ค

www.kyobobook.co.kr

- search: https://ko.wikipedia.org/wiki/%EC%98%A4%EC%BC%80%EC%8A%A4%ED%8A%B8%EB%A0%88%EC%9D%B4%EC%85%98_(%EC%BB%B4%ED%93%A8%ED%8C%85) 

 

์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ (์ปดํ“จํŒ…) - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „

์‹œ์Šคํ…œ ๊ด€๋ฆฌ์—์„œ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜(ochestration)์€ ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ๊ณผ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ž๋™ํ™”๋œ ๊ตฌ์„ฑ, ์กฐ์œจ, ๊ด€๋ฆฌ์ด๋‹ค.[1] ์„œ๋ฒ„ ๊ตฌ์„ฑ๊ณผ ๊ด€๋ฆฌ ์ž๋™ํ™”๋ฅผ ์œ„ํ•œ ์ˆ˜๋งŽ์€ ๋„๊ตฌ๊ฐ€ ์กด์žฌํ•˜๋ฉฐ ์—ฌ๊ธฐ์—๋Š” Ansible, Puppet,

ko.wikipedia.org

https://wooody92.github.io/kubernetes/Kubernetes-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EC%98%A4%EC%BC%80%EC%8A%A4%ED%8A%B8%EB%A0%88%EC%9D%B4%EC%85%98/

 

Kubernetes - ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜

์†Œ๊ฐœ์™€ ๋ฐฐ๊ฒฝ ๊ทธ๋ฆฌ๊ณ  ํŠน์ง•

wooody92.github.io

https://www.redhat.com/ko/topics/containers/what-is-a-kubernetes-cluster

 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ(Kubernetes cluster)์˜ ๊ฐœ๋…, ๊ตฌ์„ฑ ๋ฐ ๊ด€๋ฆฌ

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ž€ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๋…ธ๋“œ๋ฅผ ๋œปํ•˜๋ฉฐ, ์˜จํ”„๋ ˆ๋ฏธ์Šค, ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ํด๋ผ์šฐ๋“œ ๋“ฑ์„ ์œ„ํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

www.redhat.com

https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%93%A8%ED%84%B0_%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0

 

์ปดํ“จํ„ฐ ํด๋Ÿฌ์Šคํ„ฐ - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „

์ปดํ“จํ„ฐ ํด๋Ÿฌ์Šคํ„ฐ(์˜์–ด: computer cluster)๋Š” ์—ฌ๋Ÿฌ ๋Œ€์˜ ์ปดํ“จํ„ฐ๋“ค์ด ์—ฐ๊ฒฐ๋˜์–ด ํ•˜๋‚˜์˜ ์‹œ์Šคํ…œ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋Š” ์ปดํ“จํ„ฐ๋“ค์˜ ์ง‘ํ•ฉ์„ ๋งํ•œ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ณ ์†์˜ ๊ทผ๊ฑฐ๋ฆฌ ํ†ต์‹ ๋ง์œผ

ko.wikipedia.org

 

๋ฐ˜์‘ํ˜•

+ Recent posts