본문 바로가기
쿠버네티스

컨트롤러 실습

by 녤 2023. 2. 6.

 

1. Replication COntroller,  Replicaset 실습

 

파드를 생성한다. 

 terminationGracePeriodSeconds: 0

파드 생성 시에 해당 명령어를 입력하면 30초의 텀 없이 파드를 삭제하는 것이 가능하다. 

 

 

 

레플리카셋을 만든다. 방금 만든 파드와 매치되도록 key value를 생성한다. 

 

레플리카셋의 스케일을 변경하자 파드가 바로 생성되는 것을 확인할 수 있다. 

탬플릿에 파드의 내용을 넣을 때, name을 넣어도 그것을 무시하고 새 이름으로 만들어주는 것을 확인할 수 있다. 

 

파드를 삭제하자 파드의 개수를 맞추기 위해 바로 새 파드를 만드는 것을 확인할 수 있다. 

 

버전을 수동으로 바꿀 수도 있다. 

 

다시 파드를 삭제하면 버전이 바뀐 상태로 다시 파드가 생성되는 것을 확인할 수 있다. 

 

또한 레플리 카셋을 삭제하면 연결된 파드들 역시 다 삭제되는 것을 확인할 수 있다. 

--cascade=false

그렇지만 해당 옵션을 삭제하면 컨트롤러를 삭제해도 파드들은 살아남게 할 수 있다. 

 

다시 레플리카셋과 파드를 만들어준다. 

 

레플리케이션 컨트롤러와 파드를 만든 후

 

삭제를 해보면

 

 

컨트롤러는 삭제되었지만 파드는 살아 남아 있었다. 

 

다시 레플리카셋을 만들면 파드가 해당 레플리카셋에 연결되는 것을 확인할 수 있다. 

기존의 레플리케이션 컨트롤러를 사용중이라면 업데이트를 할 수 있음을 확인할 수 있다. 

 

 


 

3. Selector

 

matchexpression으로 섬세한 조절이 가능하다. 하지만 대부분 셀렉터에서는 사용하지 않고 matchlabel만 사용

탬플릿에 있는 라벨과 매치되지 않는다고 에러가 발생, 셀렉터의 내용이 포함되어야 정상적으로 만들어짐

 


 

 

2. Deployment 실습

 

1) Recreate

디플로이먼트가 만들어진 것을 확인할 수 있다. 

 

레플리카셋이 만들어진 것을 확인할 수 있다. 

디플로이먼트는 여러 레플리카 셋을 만들고, 각각의 레플리카 셋은 파드를 구별하기 위해 라벨과 셀렉터를 붙임 = pod-template-hash

 

파드에도 라벨이 붙어 있는 것을 확인할 수 있다. 

 

서비스를 생성한다. 파드들이 연결되어 있는 것을 확인할 수 있었다. 

 

버전을 확인해보았다. 

 

디플로이먼트의 버전을 업데이트하자 v1의 파드가 0이 된 것을 확인할 수 있다. 

 

버전 3로 업데이트하자 v1의 레플리카셋이 사라진 것을 확인할 수 있다. (limit가 1이었기 때문)

 

 

롤백을 하자 3의 파드가 삭제되고 2의 파드가 생성되는 것을 확인할 수 있다. 

 

 

2) Rolling update

 

디플로이먼트를 만들자 레플리카셋과 파드가 생성되는 것을 확인할 수 있다. 

 

서비스를 만든 후 클러스터 IP로 버전을 확인한다. 

 

버전을 업데이트 한 후 확인해보면 v2와 v1이 번갈아가면서 나오는 것을 확인할 수 있다. 이 동안 다운타임은 발생하지 않는다. 

 

업데이트가 끝난 것을 확인할 수 있다. 

 

3) Blue/green 배포

 

레플리카셋을 만든다. 

 

 

셀렉터 버전이 1인 서비스를 생성한다. 

 

버전 1에 파드들이 연결된 것을 확인할 수 있다. 

 

v1로 버전이 찍히는 것을 확인할 수 있다. 

 

라벨과 셀렉터가 버전2인 레플리카셋을 만든다. 

 

아직 라벨이 다르기 때문에 서비스에 파드가 연결되지 않음을 확인할 수 있다. 

 

셀렉터를 v2로 수정한다. 

 

다운 타임 없이 바로 v2가 출력되는 것을 확인할 수 있다. 업데이트가 완료되었다. 

 

 

버전에 문제가 없다면 replica1을 삭제하거나 파드를 0으로 만들면 된다. 

 

 


 

3. Daemonset, job, cronjob 실습

 

1) Daemonset - hostport

 

데몬셋을 만든다. 

 

파드 2개가 각각 노드 1과 노드2에 연결되어 만들어진 것을 확인할 수 있다. 

 

명령어를 입력하자 연결된 파드의 이름을 출력하는 것을 확인할 수 있다. 

 

데몬셋에 호스트포트를 설정하면 각각의 노드 IP로 접근을 했을 때, 해당 노드에 올려진 파드에 접속되는 것을 확인했다. 

 

 

2) Daemonset- Nodeselector

 

각각의 노드에 라벨을 달아서 지정된 노드에만 파드가 생성되는 것을 확인할 예정. 

 

노드에 각각 센토스와 우분투 라벨을 달아준다. 

 

라벨이 생긴 것을 확인할 수 있다. 

 

centos라벨을 단 노드에만 파드를 생성하는 데몬셋을 만들자 node1에만 파드가 생성된 것을 확인할 수 있다. 

 

node 2에 ubuntu 라벨을 지우고 centos 라벨을 달아준다

 

데몬 셋도 탬플릿 업데이트가 가능하다. 

 

데몬 셋을 삭제하면 데몬 셋이 만든 파드도 삭제된다. 

 

 

2. Job 실습

 

1) 기본 실습

 

job을 생성한다. 

 

로그를 확인하면 job이 생성되었을 때 job start 메시지가 적혔고, 20초 후에 터미네이트 상태가 되면서 end가 찍힌 것을 확인할 수 있다. 

 

잡이 삭제 되면 파드도 같이 삭제되는 것을 확인해볼 수 있다. 

 

 

2) 잡2

 

6개의 파드를 만들고 그 중 2개를 병렬 시키는 잡2를 생성한다.

 

파드가 생성된 것을 확인할 수 있다. 

 

잡이 지정된 데드 라인 시간보다 오래 활성화 되었다는 메시지가 뜬 것을 확인할 수 있다. 

 

처음 만든 두 개의 파드만 성공되고 그 후에는 fail된 것을 확인할 수 있다. 

 

 

3) cron job

 

1분에 한번씩 잡이 만들어지도록 하는 크론 잡을 생성했다. 

 

잡이 생성되고 파드가 만들어지는 것을 확인할 수 있다. 

 

크론 잡의 trigger 버튼을 누르자 manual 이라는 이름의 잡이 생성되었다. 

 

manual-001 이라는 이름의 잡이 생성되는 것을 확인할 수 있다. 

 

suspend를 ture로 바꾸면 크론잡이 멈추고 더 이상 잡을 생성하지 않게 된다. 

 

패치 명령어를 통해 suspend를 다시 false로 바꿔준다. 

 

잡이 정상적으로 실행중인 것이 표시 된다. 

 

크론 잡을 삭제하자 크론 잡으로 만든 잡들이 다 삭제되고 manual으로 만든 잡(=trigger로 만듦)만 남은 것을 확인할 수 있다.

 

4) cron job - concurrencypolicy

 

4-1) replace

스케줄 시간을 6, 7, 8로 바꾸어서 새로 만들었다. 

 

\

6분에 잡과 파드가 새로 생성된 것을 확인할 수 있다. 

 

8분에 다시 새로운 잡이 생성되었다. 

 

 

4-2)  forbid

 

12, 13, 14분으로 스케쥴한 크론 잡을 만들었다. 

 

12분이 되자 잡과 파드가 생성된 것을 확인할 수 있다. 

 

 

14분이 되자 새로운 잡이 만들어졌다. 

 

새로운 파드도 만들어져 새로 만들어졌던 잡에 연결된 것을 확인할 수 있다.