SlideShare a Scribd company logo
1
Virtualization Technology CICD
(Continuous Integration/Continuous Delivery, Deploy
지속가능한 통합/지속가능한 서비스 제공, 배포)
Virtualization
2
게임회사(방학 X)
Traffic
Traffic
Traffic
게임회사 (방학)
Traffic
Traffic
Traffic
Traffic
Traffic
Traffic
Traffic
Traffic
Traffic
학교Zoom(방학)
Traffic
Traffic
Traffic
학교Zoom (개강)
Traffic
Traffic
Traffic
Traffic
Traffic
Traffic
Traffic
Traffic
Traffic
Container
OR
VM
Container
OR
VM
사용자의 요청에 따라 하드웨어 자원을 효율적으로
사용할 수 있음.
Virtualization
3
게임회사 Traffic
Traffic
Traffic
Traffic
Traffic
Traffic
Traffic
Traffic
Traffic
학교Zoom(개강) Traffic
Traffic
Traffic
Traffic
Traffic
Traffic
Traffic
Traffic
Traffic
On-Premise(온프레미스) 방식은 총 9 + 9개의 서비
스를 생성해야함.
Virtualization를 사용하면 9 + 3개의 container만
생성하면 됨
On-Premise(온프레미스) :
서버를 직접 구축하는 방식.
Virtualization
4
게임회사 (방학)
사용자의 요청에 따라 하드웨어 자원을 효율적으로
사용할 수 있음.
12 (3 +9)개의 container로 처리가능함.
학교Zoom (방학)
Traffic
Traffic
Traffic
Traffic
Traffic
Traffic
Traffic
Traffic
Traffic
게임회사(방학X)
학교Zoom (방학X)
Traffic
Traffic
Traffic
Traffic
Traffic
Traffic Traffic
Traffic
Traffic
Traffic
Traffic
Traffic
Traffic
Traffic
Traffic
Virtualization
5
1. VM도 가능하다.
2. Docker를 이용해도 가능하다.
Q. k8s와 무슨 차이인가?
결과적으로 CI/CD 때문이다.
좌측 사진은 실제 서비스의 구조
복잡도는 높다. VM으로 관리할 경우
비용이 크다. (그래서 컨테이너)
Docker로도 구현가능하나
자동화되지 않았다.(그래서 k8s)
지속적 통합과 지속적 배포를 위해
k8s는 필요하다.
Virtualization & CICD
6
서버관리자. Ubuntu 20.04
개발자
Ubuntu 20.04
MAC OS 12.6
MAC OS 11.6
WSL
Win 10
Remote Test : F
Local Test : P
Local Test : P
Local Test : P
Local Test : P
Local Test : P
Remote Test : F
Remote Test : F
Remote Test : F
Remote Test : F
Win 11 Local Test : P
개발자가 열심히 개발하였으나, 개발환경에서 일어나는 환경문제로 인해, 오류가 발생하는 경우가 있음.
(E.g 과제제출했는데 내 노트북에선 통과, 교수님의 노트북에서는 버그)
개발환경까지 Package하여 배포할 수 있음. -> 컨테이너
Virtualization & CIDI
7
Chroot, namespace, cgroup를 사용하여 Process단위로 APP이 구동됨.
개발환경(OS, Lib ETC ) + 개발한 프로그램 자체가 하나의 Process가 되는
기적
Cgroup -> CPU 코어할당
CPU 시간, 시스템 메모리, 네트워크 대역폭 등의 자원을 프로세스 그룹 단
위로 제어하는 리눅스 커널의 기능이다.
Namespace -> 프로세스 범위 할당
같은 이름의 함수나 변수도 각기 다른 프로세스에서는 서로 UNIQUE
Chroot -> 디렉토리 할당.
프로세스가 실행되는 루트를 변경하는 시스템콜이다.
root(/) 디렉토리를 기준으로 다른 파일을들 탐색할 수 있음
어떤 A라는 프로세스를 '/'가 아닌 그 밑의 특정 디렉토리를 루트디렉토리로
가지게 만들면 A프로세스는 '/'를 root로 가지는 다른 파일에 접근할 수 없게
된다.
???
[Virtualization & CIDI] Chroot
8
/
root user
bin lib
bash
ls pwd cat Fire wire
user2
리눅스는 /라는 root directory
/는 막강하다.
rm -rf ./하면 시스템이 붕괴된다.
사용자에게 이런 권한을 주어도 될
까?
그래서 안드로이드는 사용자에게
이런 권한을 주지 않는다.
이처럼 관리자 권한을 바탕으로 쓸
수 있는 프로그램을 격리 할 수 있
는 것이 chroot다.
예시 chroot user2 /bin/bash
[단 busybox 파일을 모두 user2로
옮겼다고 가정]
Isolated dir
예시 명령을 입력하면 이곳이 /
Linux기본 dir,Busybox
• User별 PID이다.[/proc 에서 확인가능]
• Pid안에는 ns라는 dir이 있는데
• 열어보면 현재 구동중인 ns의 id값을 알
수 있음.
• 즉, 네임스페이스는 프로세스가
동작하는 영역을 의미함
9
[Virtualization & CIDI] namespace
[Virtualization & CIDI] namespace
10
# 유저 격리 & PID 격리
# --map-root-user : 루트 사용자를 네임스페이스에 매핑(새 네임스페이스 안에서 루트 권한이 있음)
# 프로세스 분기(bash)
unshare --user --pid --map-root-user --mount-proc --fork bash
ps -ef
# 다음과 같이 process들이 격리됨을 확인할 수 있다.
Unshare namespace 격리 명령어
네임스페이스 격리한다. 사용자, PID를 루트 사용자를 네임스페이스에 맵핑 해주며,proc 마운트 , bash
fork해줘라
[Virtualization & CIDI] namespace
11
/
user
bin lib
bash pwd cat Fire wire
user2
Busy Box
Isolated dir
proc
kakaoTalk
User에서
Ps – l을 해도
kakao Talk 을 확인할 수 없음.
Busy Box
12
• /proc에서 확인 할 수 있었던 것처럼
• /user2/proc에 kakaoTalk를 넣고
• /user1 에서 ps 명령을 입력하면 kakao Talk를 확인할 수 없음
• 즉, Isolated
• 리눅스는 아래의 네임스페이스를 지원함.
• Cgroup 네임스페이스(cgorup)
• PID 네임스페이스(pid)
• UTS 네임스페이스(user)
• ETC
[Virtualization & CIDI] namespace
13
[Virtualization & CIDI] cgroup
Cgroup(Control Group)
H/W에 대한 제한을 걸 수 있는 Linux Kernel function
- Memmory
- Cpu
- I/O
- Net
- Device /dev에 device drive가 있음.
- Gpu (Nvida는 driver를 오픈하여 가능함.)
오른쪽 예제 cgruop 생성 및 한memory 제한
Sudo cgcreate –a knu –g memory:testknu명령어를 입력하면
/sys/fs/cgroup/*/knu경로에 옆과 같은 파일들이 생김.
echo 2000000 > /sys/fs/cgroup/memory/testknu/memory.kmem.limit_in_bytes
testknu라는 디렉토리에 하드웨어 종류를 확인할 수 있는데 2mb를 2000000바이트로
환산하여 입력하면 됨.
컨테이너의 원리 끝!
14
[Virtualization & CIDI] Container/ Containerd
1. Chroot 로 bin과 Lib 폴더를 user2로 격리하고
2. Namepsace또한 따로 격리해주고
3. Cgroup 으로 h/w를 제한한 뒤
4. 그 공간에서 python 및 node.js 로 프로그래밍
5. User2폴더자체를 zip OR packaging 하면???
= > container. 기술
15
[Virtualization & CIDI] what is Docker?
1. Docker는 2013년에 출시한 container 기반의
가상화 추상화 계층을 제공하는 상품이름이자
기업의 이름이다.
2. VM보다 유지보수가 용이함.
3. Dependencies를 개발자의 노트북과
Operation(e.g Server Admin)의 환경을 통일
할 수 있음.
즉, Build Share Run 모두 용이하다.
VM도 snap shoot하면 가능하다.
그러나 무겁고 비효율적.
H/W Driver ETC 목적에 필요없는 파일이 많음.
16
[Virtualization & CIDI] Only Docker?
Docker 구조에서 Containerd 부분
17
[Virtualization & CIDI] Only Docker?
2013년 Docker의 출시 이후 많은 개발자와 회사들이 Docker를 사용하였음.
이때는 업계표준으로 Docker가 자리잡았으나,
2015 Brog 와 함께 구글의 Project7(오픈하면서 k8s가 됨)이 공개 됨
Large-scale cluster management at Google with Borg EuroSys '15: Proceedings of the Tenth European Conference on Computer SystemsApril 2015 Article No.: 18Pages 1–
이렇게 Docker는 k8s의 Container Runtime으로 공존
But Docker Engine 이 업데이트 될 때 마다 k8s는 이슈가 발생.
그래서 Docker(법인)과 Google, ETC 모여 OCI(Open Container Initiative) 프로젝트를 시작.
OCI 표준을 준수하는 containerd라는 Container Runtime을 만들고,
Kubernetes에서는 OCI 표준을 준수하는 이미지들을 실행할 수 있는 CRI(Container Runtime Interface)를
제공.
Docker 버전과 무관하게 OCI 표준을 준수하기만 하면 어떤 컨테이너 이미지도 Kubernetes에서 실행가능
한 상태
결론 : 꼭 Docker 쓸 필요없이 Containerd CRI면 모두 가능하다. <- 어디서 찾을 수 있나요?
Container Compiler 혹은 Container를 위한 kernel, hypervisor 같은 존재
18
[Virtualization & CIDI] landscape.cncf
19
[Virtualization & CIDI] Only Docker?
Ref : https://www.youtube.com/watch?v=uDOu6rK4yOk
Docker보다 containerd가 좀 더 우수한 성능 (실제로 docker로 k8s 를 구성해도 containerd 를 runtime으로 사용
함.
20
[Virtualization & CIDI] So what is k8s?
From ChatGpt
가상화를 하는 이유와 Docker의 구동원리 장점을 알겠다. 그렇다면 K8s는 무엇인가? CI/DI를 위한 Platform
Version management : git
Container managerment : k8s
Borg 발표 2015년,
Project7은 매우 오래 진행되었다.
21
개발하고 배포하였다고 끝이 아니다.
앞선 비유처럼 (zoom과 game server, Dev/Ops)
유지보수를 해야하며, 서비스가 잘 보존되도록 해야한다.
[Virtualization & CIDI] So What is k8s?
가상화를 하는 이유와 도커의 구동원리 장점을 알겠다. 그렇다면 K8s는 무엇인가? CI/DI를 위한 Platform
22
[Virtualization & CIDI] So what is k8s?
23
K8s Flow
24
K8s architecture?
25
cAdvisor
26
K8s Namespace
Process관리 및 isolate를 위해 namespace를 지원한다.
이게 왜 필요한가요?
보안, 관리 등의 목적으로 필요함.
Server 관리자 입장에서는 zoom namespace, game namepsace 이런식으로 분류하여 관리함
또한, 복수의 container가 운영되는 만큼 depadancy(환경문제)로 인한 문제를 예방할 수 있음.
Ex)나의 클러스터에서 zoom과 game을 서비스하고 있을 때, game유저가 sql injection같은 기법으로 process를
탐색할 수도 있고,(극단적 경우)
27
K8s Namespace
kubectl config view
28
K8s Namespace
Namespace 추가
kubectl config set-context blue@kubernetes --cluster=kubernetes --user=kubernets-admin --
namespace=blue
기본 Namespace 설정
kubectl config use-context blue@kubernetes
kubectl delete namespaces ornage
29
Pod
Pod는 k8s의 최소 기능단위로 1개 이상의 컨테이너로 구성된다.
(일반적으로 1Pod당 2Container[function + agent]로 구성한다.)
Pod
Pod Pod
Container Container
Container Container
Container
Container
Container
30
Pod Flow
31
Pod 예시
kubectl get pod -n kube-system 명령으로 kube-system name space에서 동작하는 pod를 확인하면
아래와 같다.(-n은 namespace 옵션)
32
Pod 생성 명령 1 : Run
33
Pod 생성 명령 2 : Create –f {filename}.yaml
kubectl describe pod multipod -> 파드 세부정보도 확인가능
34
Pod Describe
세부정보에는 파드에 대한Message
Container별 image, staste port ETC확인가능하다.
grep을 함께 사용하는 것을 추천
35
Pod에 접근하기
kubectl exec multipod -c nginx-container -it -- /bin/bash
36
Pod에 접근하기
kubectl exec multipod -c nginx-container -it -- /bin/bash
echo “KNU CLEAN LAB” >index.html
37
Pod service Test
38
Pod == Container?
kubectl exec multipod -c centos-container -it -- /bin/bash
39
Pod == Container?
curl을 한 것은 centos-container에서 했다.
그러나 Local IP는 Pod의 IP이다.
따라서 그것을 처리한 것은 80번 Port를 할당한 nginx-container이다.
Pod = Container라고 오인하면 안됨.
40
Pod == Container?
kubectl logs multipod -c nginx-container
centos-container는 로그없음.
Curl Get 받은 nginx-container이다.
Pod == Container라고 오인하면 안됨.
41
K8s의 핵심기능 중 하나 livenessprobe
모든 Service는 죽는다. 그리고 서버관리자가 다시 복구한다. -> 이것을 자동화한다.
어떻게 가능한가?
1.container마다 정의된 서비스가 다른데 어떻게 주기적으로 진단할까?
( e.g 파일 시스템을 구성했다. 로그정보를 수집하는 파일 시스템인데 Image는 정상적으로
설치되었느나, 서비스가 제대로 동작하지 않는다 이것은 건강하다고 판단할까? )
2.running state임에도 의도와 다르게 동작되는 경우 어떻게 진단할까?
( e.g 컨테이너는 멀쩡한데, 빌드상의 오류가 있을 경우 등)
42
K8s의 핵심기능 중 하나 livenessprobe
Yaml 파일에 다음 유형과 같이 원하는 옵션
을 넣을 수 있다.
43
K8s의 핵심기능 중 하나 livenessprobe
kubectl create -f pod-nginx-liveness.yaml
44
K8s의 핵심기능 중 하나 livenessprobe
kubectl create -f pod-nginx-liveness.yaml
time out 기준은 1초
period(검사주기)는 10초
성공 기준은 1회
실패기준은 3번
45
K8s init conatiner
개발자 김길동씨는 로그인이 되는 웹서비스를 개발하여 컨테이너로 배포하였다.
로그인 기능을 제공하기 위해서는 데이터베이스 컨테이너가 있어야 구동된다.
하나의 Pod에서 데이터 베이스 컨테이너를 먼저 실행하고 웹 컨테이너를 실행해야 한다.
이 경우 사용하는 것이 init container를 활용한 Pod이다.
46
K8s infra container, Static Pod
Static Pod
47
K8s Static Pod
48
K8s 파드에 CPU와 메모리 자원 할당
49
K8s 파드에 CPU와 메모리 자원 할당
50
K8s 파드 환경 변수 설정
51
K8s Pod Design Pattern
52
K8s Pod Design Pattern
53
K8s Controller-ReplicationConroller
Controller 종류
Replication Controller는 Replicaset 의 하위호환, 현재는 Replicatset과 Deployment를 주로 사용함.
54
K8s Controller-ReplicationConroller
55
K8s Controller-ReplicationConroller
kubectl create -f rc-nginx.yaml
kubectl get pods
kubectl get replicationcontrollers ==rc
kubectl get rc
56
ReplicationConroller - 지정하지 않은 파드를 추가로 생성하면 어떻게 될까?
57
Rolling update
58
Rolling update
59
Rolling update
60
Rolling update
61
Rolling update
62
Rolling update
63
Rolling update
64
Rolling update
65
Rolling update
update전후로 POD의 해시 값이 변경
되었다.
66
Rolling update Option
67
Rolling out. ==roll back
68
annotations
69
annotations
70
K8s command
https://kubernetes.io/ko/docs/reference/kubectl/cheatsheet/
구글 : k8s cheatsheet
71
K8s Pod가 recovery되면 IP 가 바뀌는데, 문제아닌가요?
eth0
docker0
podeth0
NGINX:80
eth0
docker0
podeth0
NGINX:80 NGINX:80
Overlay Network
현재 제공 Weave net platform을 사용
72
K8s Overlay Network : 서로 다른 HOST연결
73
K8s Pod가 recovery되면 IP 가 바뀌는데, 문제아닌가요?
서비스
(물론 yaml에 있을 수 도 있고, selector로 잡을 수 도 있음. 그러나 서비스로 묶어서 하나로 관리하는게 더 효율)
Pod
10.10.xx
Pod
10.10.x.x
RC OR RS
DP
Serivce
Pod
10.10.x.x
Pod
10.10.x.x
RC OR RS
DP
74
K8s Pod가 recovery되면 IP 가 바뀌는데, 문제아닌가요?
75
K8s Pod가 recovery되면 IP 가 바뀌는데, 문제아닌가요?
76
K8s Pod가 recovery되면 IP 가 바뀌는데, 문제아닌가요?
77
K8s Pod가 recovery되면 IP 가 바뀌는데, 문제아닌가요?
78
일반적 Docker net 구조
Gateway
(공유기같은) 역할
79
일반적 Docker net 구조
80
MAC Docker net 구조
Do Not Buy MAC
81
MAC Docker net 구조
Do Not Buy MAC
82
What is OpenWhisk?
Ref CNCFLandscape
83
What is OpenWhisk?
Ref : Apache OpenWhisk: Building a Production-Ready Serverless Stack on/for Kubernetes - David Grove
84
What is OpenWhisk?
client
Ref : Apache OpenWhisk: Building a Production-Ready Serverless Stack on/for Kubernetes - David Grove
Openwhisk Docker
Container
(Function)
85
What is OpenWhisk?
86
What is OpenWhisk?
Hello.js로 저장
wsk action create hello hello.js
wsk action invoke hello --result
결과 : "payload": "Hello, World!"
87
What is OpenWhisk?
Hello.js로 저장
wsk action invoke hello --result --param name KNU
결과 : "payload": "Hello, Fred!"
88
What is OpenWhisk?
- 설치만 8시간이 넘어서
- 실제 경험적 데이터가 아직
없습니다 ㅜㅜ
89
Q/A

More Related Content

Similar to [slideshare]k8s.pptx

Similar to [slideshare]k8s.pptx (20)

[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
 
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기
 
Open infradays 2019_msa_k8s
Open infradays 2019_msa_k8sOpen infradays 2019_msa_k8s
Open infradays 2019_msa_k8s
 
1. Docker Network (1)
1. Docker Network (1)1. Docker Network (1)
1. Docker Network (1)
 
Cloud-Barista 제7차 컨퍼런스 : 멀티클라우드 적응형 네트워크 (CB-Larva)
Cloud-Barista 제7차 컨퍼런스 : 멀티클라우드 적응형 네트워크 (CB-Larva)Cloud-Barista 제7차 컨퍼런스 : 멀티클라우드 적응형 네트워크 (CB-Larva)
Cloud-Barista 제7차 컨퍼런스 : 멀티클라우드 적응형 네트워크 (CB-Larva)
 
why docker
why dockerwhy docker
why docker
 
네이버 클라우드 플랫폼의 컨테이너 기술 로드맵 (NBP 박기은 CTO) - NAVER CLOUD PLATFORM in [2018 All A...
네이버 클라우드 플랫폼의 컨테이너 기술 로드맵 (NBP 박기은 CTO) - NAVER CLOUD PLATFORM in [2018 All A...네이버 클라우드 플랫폼의 컨테이너 기술 로드맵 (NBP 박기은 CTO) - NAVER CLOUD PLATFORM in [2018 All A...
네이버 클라우드 플랫폼의 컨테이너 기술 로드맵 (NBP 박기은 CTO) - NAVER CLOUD PLATFORM in [2018 All A...
 
JMI Techtalk : Backend.AI
JMI Techtalk : Backend.AIJMI Techtalk : Backend.AI
JMI Techtalk : Backend.AI
 
SOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AISOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AI
 
Openstack Usecase(2018)
Openstack Usecase(2018)Openstack Usecase(2018)
Openstack Usecase(2018)
 
Infra as Code with Packer, Ansible and Terraform
Infra as Code with Packer, Ansible and TerraformInfra as Code with Packer, Ansible and Terraform
Infra as Code with Packer, Ansible and Terraform
 
Openshift 활용을 위한 Application의 준비, Cloud Native
Openshift 활용을 위한 Application의 준비, Cloud NativeOpenshift 활용을 위한 Application의 준비, Cloud Native
Openshift 활용을 위한 Application의 준비, Cloud Native
 
제2회 난공불락 오픈소스 인프라 세미나 Kubernetes
제2회 난공불락 오픈소스 인프라 세미나 Kubernetes제2회 난공불락 오픈소스 인프라 세미나 Kubernetes
제2회 난공불락 오픈소스 인프라 세미나 Kubernetes
 
Cloud for Kubernetes : Session1
Cloud for Kubernetes : Session1Cloud for Kubernetes : Session1
Cloud for Kubernetes : Session1
 
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기
 
세션3_데보션테크데이_gitopsinfra_v1.1.pdf
세션3_데보션테크데이_gitopsinfra_v1.1.pdf세션3_데보션테크데이_gitopsinfra_v1.1.pdf
세션3_데보션테크데이_gitopsinfra_v1.1.pdf
 
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
 
애플리케이션 최적화를 위한 컨테이너 인프라 구축
애플리케이션 최적화를 위한 컨테이너 인프라 구축애플리케이션 최적화를 위한 컨테이너 인프라 구축
애플리케이션 최적화를 위한 컨테이너 인프라 구축
 
오픈스택: 구석구석 파헤쳐보기
오픈스택: 구석구석 파헤쳐보기오픈스택: 구석구석 파헤쳐보기
오픈스택: 구석구석 파헤쳐보기
 
NetApp AI Control Plane
NetApp AI Control PlaneNetApp AI Control Plane
NetApp AI Control Plane
 

Recently uploaded

캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
cho9759
 
INU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrintINU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrint
ahghwo99
 

Recently uploaded (7)

인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일
인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일
인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일
 
(독서광) 대격변 AI 시대, 데이터로 사고하고 데이터로 리드하라
(독서광) 대격변 AI 시대,   데이터로 사고하고   데이터로 리드하라(독서광) 대격변 AI 시대,   데이터로 사고하고   데이터로 리드하라
(독서광) 대격변 AI 시대, 데이터로 사고하고 데이터로 리드하라
 
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET
 
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외
 
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
 
INU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrintINU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrint
 
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT
 

[slideshare]k8s.pptx

  • 1. 1 Virtualization Technology CICD (Continuous Integration/Continuous Delivery, Deploy 지속가능한 통합/지속가능한 서비스 제공, 배포)
  • 2. Virtualization 2 게임회사(방학 X) Traffic Traffic Traffic 게임회사 (방학) Traffic Traffic Traffic Traffic Traffic Traffic Traffic Traffic Traffic 학교Zoom(방학) Traffic Traffic Traffic 학교Zoom (개강) Traffic Traffic Traffic Traffic Traffic Traffic Traffic Traffic Traffic Container OR VM Container OR VM 사용자의 요청에 따라 하드웨어 자원을 효율적으로 사용할 수 있음.
  • 3. Virtualization 3 게임회사 Traffic Traffic Traffic Traffic Traffic Traffic Traffic Traffic Traffic 학교Zoom(개강) Traffic Traffic Traffic Traffic Traffic Traffic Traffic Traffic Traffic On-Premise(온프레미스) 방식은 총 9 + 9개의 서비 스를 생성해야함. Virtualization를 사용하면 9 + 3개의 container만 생성하면 됨 On-Premise(온프레미스) : 서버를 직접 구축하는 방식.
  • 4. Virtualization 4 게임회사 (방학) 사용자의 요청에 따라 하드웨어 자원을 효율적으로 사용할 수 있음. 12 (3 +9)개의 container로 처리가능함. 학교Zoom (방학) Traffic Traffic Traffic Traffic Traffic Traffic Traffic Traffic Traffic 게임회사(방학X) 학교Zoom (방학X) Traffic Traffic Traffic Traffic Traffic Traffic Traffic Traffic Traffic Traffic Traffic Traffic Traffic Traffic Traffic
  • 5. Virtualization 5 1. VM도 가능하다. 2. Docker를 이용해도 가능하다. Q. k8s와 무슨 차이인가? 결과적으로 CI/CD 때문이다. 좌측 사진은 실제 서비스의 구조 복잡도는 높다. VM으로 관리할 경우 비용이 크다. (그래서 컨테이너) Docker로도 구현가능하나 자동화되지 않았다.(그래서 k8s) 지속적 통합과 지속적 배포를 위해 k8s는 필요하다.
  • 6. Virtualization & CICD 6 서버관리자. Ubuntu 20.04 개발자 Ubuntu 20.04 MAC OS 12.6 MAC OS 11.6 WSL Win 10 Remote Test : F Local Test : P Local Test : P Local Test : P Local Test : P Local Test : P Remote Test : F Remote Test : F Remote Test : F Remote Test : F Win 11 Local Test : P 개발자가 열심히 개발하였으나, 개발환경에서 일어나는 환경문제로 인해, 오류가 발생하는 경우가 있음. (E.g 과제제출했는데 내 노트북에선 통과, 교수님의 노트북에서는 버그) 개발환경까지 Package하여 배포할 수 있음. -> 컨테이너
  • 7. Virtualization & CIDI 7 Chroot, namespace, cgroup를 사용하여 Process단위로 APP이 구동됨. 개발환경(OS, Lib ETC ) + 개발한 프로그램 자체가 하나의 Process가 되는 기적 Cgroup -> CPU 코어할당 CPU 시간, 시스템 메모리, 네트워크 대역폭 등의 자원을 프로세스 그룹 단 위로 제어하는 리눅스 커널의 기능이다. Namespace -> 프로세스 범위 할당 같은 이름의 함수나 변수도 각기 다른 프로세스에서는 서로 UNIQUE Chroot -> 디렉토리 할당. 프로세스가 실행되는 루트를 변경하는 시스템콜이다. root(/) 디렉토리를 기준으로 다른 파일을들 탐색할 수 있음 어떤 A라는 프로세스를 '/'가 아닌 그 밑의 특정 디렉토리를 루트디렉토리로 가지게 만들면 A프로세스는 '/'를 root로 가지는 다른 파일에 접근할 수 없게 된다. ???
  • 8. [Virtualization & CIDI] Chroot 8 / root user bin lib bash ls pwd cat Fire wire user2 리눅스는 /라는 root directory /는 막강하다. rm -rf ./하면 시스템이 붕괴된다. 사용자에게 이런 권한을 주어도 될 까? 그래서 안드로이드는 사용자에게 이런 권한을 주지 않는다. 이처럼 관리자 권한을 바탕으로 쓸 수 있는 프로그램을 격리 할 수 있 는 것이 chroot다. 예시 chroot user2 /bin/bash [단 busybox 파일을 모두 user2로 옮겼다고 가정] Isolated dir 예시 명령을 입력하면 이곳이 / Linux기본 dir,Busybox
  • 9. • User별 PID이다.[/proc 에서 확인가능] • Pid안에는 ns라는 dir이 있는데 • 열어보면 현재 구동중인 ns의 id값을 알 수 있음. • 즉, 네임스페이스는 프로세스가 동작하는 영역을 의미함 9 [Virtualization & CIDI] namespace
  • 10. [Virtualization & CIDI] namespace 10 # 유저 격리 & PID 격리 # --map-root-user : 루트 사용자를 네임스페이스에 매핑(새 네임스페이스 안에서 루트 권한이 있음) # 프로세스 분기(bash) unshare --user --pid --map-root-user --mount-proc --fork bash ps -ef # 다음과 같이 process들이 격리됨을 확인할 수 있다. Unshare namespace 격리 명령어 네임스페이스 격리한다. 사용자, PID를 루트 사용자를 네임스페이스에 맵핑 해주며,proc 마운트 , bash fork해줘라
  • 11. [Virtualization & CIDI] namespace 11 / user bin lib bash pwd cat Fire wire user2 Busy Box Isolated dir proc kakaoTalk User에서 Ps – l을 해도 kakao Talk 을 확인할 수 없음. Busy Box
  • 12. 12 • /proc에서 확인 할 수 있었던 것처럼 • /user2/proc에 kakaoTalk를 넣고 • /user1 에서 ps 명령을 입력하면 kakao Talk를 확인할 수 없음 • 즉, Isolated • 리눅스는 아래의 네임스페이스를 지원함. • Cgroup 네임스페이스(cgorup) • PID 네임스페이스(pid) • UTS 네임스페이스(user) • ETC [Virtualization & CIDI] namespace
  • 13. 13 [Virtualization & CIDI] cgroup Cgroup(Control Group) H/W에 대한 제한을 걸 수 있는 Linux Kernel function - Memmory - Cpu - I/O - Net - Device /dev에 device drive가 있음. - Gpu (Nvida는 driver를 오픈하여 가능함.) 오른쪽 예제 cgruop 생성 및 한memory 제한 Sudo cgcreate –a knu –g memory:testknu명령어를 입력하면 /sys/fs/cgroup/*/knu경로에 옆과 같은 파일들이 생김. echo 2000000 > /sys/fs/cgroup/memory/testknu/memory.kmem.limit_in_bytes testknu라는 디렉토리에 하드웨어 종류를 확인할 수 있는데 2mb를 2000000바이트로 환산하여 입력하면 됨. 컨테이너의 원리 끝!
  • 14. 14 [Virtualization & CIDI] Container/ Containerd 1. Chroot 로 bin과 Lib 폴더를 user2로 격리하고 2. Namepsace또한 따로 격리해주고 3. Cgroup 으로 h/w를 제한한 뒤 4. 그 공간에서 python 및 node.js 로 프로그래밍 5. User2폴더자체를 zip OR packaging 하면??? = > container. 기술
  • 15. 15 [Virtualization & CIDI] what is Docker? 1. Docker는 2013년에 출시한 container 기반의 가상화 추상화 계층을 제공하는 상품이름이자 기업의 이름이다. 2. VM보다 유지보수가 용이함. 3. Dependencies를 개발자의 노트북과 Operation(e.g Server Admin)의 환경을 통일 할 수 있음. 즉, Build Share Run 모두 용이하다. VM도 snap shoot하면 가능하다. 그러나 무겁고 비효율적. H/W Driver ETC 목적에 필요없는 파일이 많음.
  • 16. 16 [Virtualization & CIDI] Only Docker? Docker 구조에서 Containerd 부분
  • 17. 17 [Virtualization & CIDI] Only Docker? 2013년 Docker의 출시 이후 많은 개발자와 회사들이 Docker를 사용하였음. 이때는 업계표준으로 Docker가 자리잡았으나, 2015 Brog 와 함께 구글의 Project7(오픈하면서 k8s가 됨)이 공개 됨 Large-scale cluster management at Google with Borg EuroSys '15: Proceedings of the Tenth European Conference on Computer SystemsApril 2015 Article No.: 18Pages 1– 이렇게 Docker는 k8s의 Container Runtime으로 공존 But Docker Engine 이 업데이트 될 때 마다 k8s는 이슈가 발생. 그래서 Docker(법인)과 Google, ETC 모여 OCI(Open Container Initiative) 프로젝트를 시작. OCI 표준을 준수하는 containerd라는 Container Runtime을 만들고, Kubernetes에서는 OCI 표준을 준수하는 이미지들을 실행할 수 있는 CRI(Container Runtime Interface)를 제공. Docker 버전과 무관하게 OCI 표준을 준수하기만 하면 어떤 컨테이너 이미지도 Kubernetes에서 실행가능 한 상태 결론 : 꼭 Docker 쓸 필요없이 Containerd CRI면 모두 가능하다. <- 어디서 찾을 수 있나요? Container Compiler 혹은 Container를 위한 kernel, hypervisor 같은 존재
  • 18. 18 [Virtualization & CIDI] landscape.cncf
  • 19. 19 [Virtualization & CIDI] Only Docker? Ref : https://www.youtube.com/watch?v=uDOu6rK4yOk Docker보다 containerd가 좀 더 우수한 성능 (실제로 docker로 k8s 를 구성해도 containerd 를 runtime으로 사용 함.
  • 20. 20 [Virtualization & CIDI] So what is k8s? From ChatGpt 가상화를 하는 이유와 Docker의 구동원리 장점을 알겠다. 그렇다면 K8s는 무엇인가? CI/DI를 위한 Platform Version management : git Container managerment : k8s Borg 발표 2015년, Project7은 매우 오래 진행되었다.
  • 21. 21 개발하고 배포하였다고 끝이 아니다. 앞선 비유처럼 (zoom과 game server, Dev/Ops) 유지보수를 해야하며, 서비스가 잘 보존되도록 해야한다. [Virtualization & CIDI] So What is k8s? 가상화를 하는 이유와 도커의 구동원리 장점을 알겠다. 그렇다면 K8s는 무엇인가? CI/DI를 위한 Platform
  • 22. 22 [Virtualization & CIDI] So what is k8s?
  • 26. 26 K8s Namespace Process관리 및 isolate를 위해 namespace를 지원한다. 이게 왜 필요한가요? 보안, 관리 등의 목적으로 필요함. Server 관리자 입장에서는 zoom namespace, game namepsace 이런식으로 분류하여 관리함 또한, 복수의 container가 운영되는 만큼 depadancy(환경문제)로 인한 문제를 예방할 수 있음. Ex)나의 클러스터에서 zoom과 game을 서비스하고 있을 때, game유저가 sql injection같은 기법으로 process를 탐색할 수도 있고,(극단적 경우)
  • 28. 28 K8s Namespace Namespace 추가 kubectl config set-context blue@kubernetes --cluster=kubernetes --user=kubernets-admin -- namespace=blue 기본 Namespace 설정 kubectl config use-context blue@kubernetes kubectl delete namespaces ornage
  • 29. 29 Pod Pod는 k8s의 최소 기능단위로 1개 이상의 컨테이너로 구성된다. (일반적으로 1Pod당 2Container[function + agent]로 구성한다.) Pod Pod Pod Container Container Container Container Container Container Container
  • 31. 31 Pod 예시 kubectl get pod -n kube-system 명령으로 kube-system name space에서 동작하는 pod를 확인하면 아래와 같다.(-n은 namespace 옵션)
  • 33. 33 Pod 생성 명령 2 : Create –f {filename}.yaml kubectl describe pod multipod -> 파드 세부정보도 확인가능
  • 34. 34 Pod Describe 세부정보에는 파드에 대한Message Container별 image, staste port ETC확인가능하다. grep을 함께 사용하는 것을 추천
  • 35. 35 Pod에 접근하기 kubectl exec multipod -c nginx-container -it -- /bin/bash
  • 36. 36 Pod에 접근하기 kubectl exec multipod -c nginx-container -it -- /bin/bash echo “KNU CLEAN LAB” >index.html
  • 38. 38 Pod == Container? kubectl exec multipod -c centos-container -it -- /bin/bash
  • 39. 39 Pod == Container? curl을 한 것은 centos-container에서 했다. 그러나 Local IP는 Pod의 IP이다. 따라서 그것을 처리한 것은 80번 Port를 할당한 nginx-container이다. Pod = Container라고 오인하면 안됨.
  • 40. 40 Pod == Container? kubectl logs multipod -c nginx-container centos-container는 로그없음. Curl Get 받은 nginx-container이다. Pod == Container라고 오인하면 안됨.
  • 41. 41 K8s의 핵심기능 중 하나 livenessprobe 모든 Service는 죽는다. 그리고 서버관리자가 다시 복구한다. -> 이것을 자동화한다. 어떻게 가능한가? 1.container마다 정의된 서비스가 다른데 어떻게 주기적으로 진단할까? ( e.g 파일 시스템을 구성했다. 로그정보를 수집하는 파일 시스템인데 Image는 정상적으로 설치되었느나, 서비스가 제대로 동작하지 않는다 이것은 건강하다고 판단할까? ) 2.running state임에도 의도와 다르게 동작되는 경우 어떻게 진단할까? ( e.g 컨테이너는 멀쩡한데, 빌드상의 오류가 있을 경우 등)
  • 42. 42 K8s의 핵심기능 중 하나 livenessprobe Yaml 파일에 다음 유형과 같이 원하는 옵션 을 넣을 수 있다.
  • 43. 43 K8s의 핵심기능 중 하나 livenessprobe kubectl create -f pod-nginx-liveness.yaml
  • 44. 44 K8s의 핵심기능 중 하나 livenessprobe kubectl create -f pod-nginx-liveness.yaml time out 기준은 1초 period(검사주기)는 10초 성공 기준은 1회 실패기준은 3번
  • 45. 45 K8s init conatiner 개발자 김길동씨는 로그인이 되는 웹서비스를 개발하여 컨테이너로 배포하였다. 로그인 기능을 제공하기 위해서는 데이터베이스 컨테이너가 있어야 구동된다. 하나의 Pod에서 데이터 베이스 컨테이너를 먼저 실행하고 웹 컨테이너를 실행해야 한다. 이 경우 사용하는 것이 init container를 활용한 Pod이다.
  • 46. 46 K8s infra container, Static Pod Static Pod
  • 48. 48 K8s 파드에 CPU와 메모리 자원 할당
  • 49. 49 K8s 파드에 CPU와 메모리 자원 할당
  • 50. 50 K8s 파드 환경 변수 설정
  • 51. 51 K8s Pod Design Pattern
  • 52. 52 K8s Pod Design Pattern
  • 53. 53 K8s Controller-ReplicationConroller Controller 종류 Replication Controller는 Replicaset 의 하위호환, 현재는 Replicatset과 Deployment를 주로 사용함.
  • 55. 55 K8s Controller-ReplicationConroller kubectl create -f rc-nginx.yaml kubectl get pods kubectl get replicationcontrollers ==rc kubectl get rc
  • 56. 56 ReplicationConroller - 지정하지 않은 파드를 추가로 생성하면 어떻게 될까?
  • 65. 65 Rolling update update전후로 POD의 해시 값이 변경 되었다.
  • 71. 71 K8s Pod가 recovery되면 IP 가 바뀌는데, 문제아닌가요? eth0 docker0 podeth0 NGINX:80 eth0 docker0 podeth0 NGINX:80 NGINX:80 Overlay Network 현재 제공 Weave net platform을 사용
  • 72. 72 K8s Overlay Network : 서로 다른 HOST연결
  • 73. 73 K8s Pod가 recovery되면 IP 가 바뀌는데, 문제아닌가요? 서비스 (물론 yaml에 있을 수 도 있고, selector로 잡을 수 도 있음. 그러나 서비스로 묶어서 하나로 관리하는게 더 효율) Pod 10.10.xx Pod 10.10.x.x RC OR RS DP Serivce Pod 10.10.x.x Pod 10.10.x.x RC OR RS DP
  • 74. 74 K8s Pod가 recovery되면 IP 가 바뀌는데, 문제아닌가요?
  • 75. 75 K8s Pod가 recovery되면 IP 가 바뀌는데, 문제아닌가요?
  • 76. 76 K8s Pod가 recovery되면 IP 가 바뀌는데, 문제아닌가요?
  • 77. 77 K8s Pod가 recovery되면 IP 가 바뀌는데, 문제아닌가요?
  • 78. 78 일반적 Docker net 구조 Gateway (공유기같은) 역할
  • 80. 80 MAC Docker net 구조 Do Not Buy MAC
  • 81. 81 MAC Docker net 구조 Do Not Buy MAC
  • 82. 82 What is OpenWhisk? Ref CNCFLandscape
  • 83. 83 What is OpenWhisk? Ref : Apache OpenWhisk: Building a Production-Ready Serverless Stack on/for Kubernetes - David Grove
  • 84. 84 What is OpenWhisk? client Ref : Apache OpenWhisk: Building a Production-Ready Serverless Stack on/for Kubernetes - David Grove Openwhisk Docker Container (Function)
  • 86. 86 What is OpenWhisk? Hello.js로 저장 wsk action create hello hello.js wsk action invoke hello --result 결과 : "payload": "Hello, World!"
  • 87. 87 What is OpenWhisk? Hello.js로 저장 wsk action invoke hello --result --param name KNU 결과 : "payload": "Hello, Fred!"
  • 88. 88 What is OpenWhisk? - 설치만 8시간이 넘어서 - 실제 경험적 데이터가 아직 없습니다 ㅜㅜ