YongsHub / -Kubernetes-Study

스터디 레포지토리
1 stars 1 forks source link

Chapter2 - 범위: 섹션4 2024/01/12 #2

Closed YongsHub closed 6 months ago

YongsHub commented 6 months ago

Controller

Topic

himJJong commented 6 months ago

체크1

조건 : 레플리카 셋을 삭제해도 Pod가 삭제되지 않도록 설정

himJJong commented 6 months ago

체크2

himJJong commented 6 months ago

체크3

  1. DaemonSet : 위와 다르게 스케줄러 개입이 없이, 무조건 생성된 모든 노드에 1개씩 파드를 배치. 이 Pod에 접근하기 위해서는 HostPost 라는 것을 사용해서 접근할 수 있음.
YongsHub commented 6 months ago

체크1

  • 문제 : ReplicaSet 2개를 생성, 각 ReplicaSet에 Replicas 값을 3으로 조정. 이때 첫 번째 ReplicaSet를 삭제하면, 두 번째 ReplicaSet의 Pod 개수와 이유

조건 : 레플리카 셋을 삭제해도 Pod가 삭제되지 않도록 설정

Replica에 대한 Controller를 업데이트 할 때, 사용할 수 있다고 생각합니다 그러기 위해서는

kubectl delete replicationcontrollers 컨트롤러이름 --cascade=false

을 통해 컨트롤러를 삭제하고, 기존 Pod들의 label에 대한 selector를 통해 컨트롤러를 업데이트할 수 있다고 생각됩니다.

근데 위에서 얘기해주신 것 처럼 처음부터 바로 ReplicaSet 2개를 생성할 이유가 있나요??

YongsHub commented 6 months ago

Recreate 배포 방식을 선택과 RollingUpdate에서의 가장 큰 차이점은 Downtime이 존재하냐 존재하지 않냐가 핵심이며 RollingUpdate에서는 일시적으로 Resource 점유가 증가하게 되는데

YongsHub commented 6 months ago

@himJJong 강의 복습 차원에서 정리는 https://github.com/YongsHub/-Kubernetes-Study/blob/master/taeyong/Section4.md git에도 필기를 해봤습니다!

YongsHub commented 6 months ago

체크2

  • 문제 : restart, recreate의 (차이점 & 어떤 오브젝트에서 각각 사용될까요?)

AH (이거는 제가 까먹을거 같아서 임시로 적어둔거니까 신경쓰지 말아주셔도 됩니당)

Pod, Replica Set, Daemon Set 등 Object에서의 차이가 있겠네요 :)

YongsHub commented 6 months ago

체크3

  • ReplicaSet, DaemonSet Pod 생성 및 접근 비교 (이해하고 있는 것이 맞는지 확인하기 위함)
  1. ReplicaSet : Replicas 개수만큼 Pod를 생성. 이 Pod는 물리서버인 노드위에 놓이는데, 이때 Pod가 놓여지는 노드 선정은 k8s 스케줄러가 노드의 남은 자원량을 확인하고, 충분한 자원량이 있는 위치를 우선순위로 Pod 배치. 그리고 Pod에 접근하기 위해서는 여러 방법이 있지만 일단 Service의 ClusterIP를 통해 접근을 할 수 있었음.
  2. DaemonSet : 위와 다르게 스케줄러 개입이 없이, 무조건 생성된 모든 노드에 1개씩 파드를 배치. 이 Pod에 접근하기 위해서는 HostPost 라는 것을 사용해서 접근할 수 있음.

1번에서 언급해주신 것 처럼 스케줄러가 노드의 남은 자원량을 확인하고 충분한 자원량이 있는 위치로 Pod를 배치할 수 있는 이유에 대해서도 앞서 저희가 공부했던 Namespace라는 것이 Kubernetes Cluster에서 생성하기 때문에 가능한 일이라고 알 수 있겠네요!

2번에서 언급해주신 것처럼 HostPort가 존재하는 이유는 Pod에 접근하기 위해 Node가 다르더라도 HostPort를 통해 접근할 수 있다고 동일하게 이해했습니다

YongsHub commented 6 months ago

Section 1 ~ 3에서 배웠던 NodePort와 이번 강의에서 배운 hostPort에 대해 헷갈릴 수 있는데 어떻게 이해를 하셨는지 궁금해요!

himJJong commented 6 months ago

체크1

  • 문제 : ReplicaSet 2개를 생성, 각 ReplicaSet에 Replicas 값을 3으로 조정. 이때 첫 번째 ReplicaSet를 삭제하면, 두 번째 ReplicaSet의 Pod 개수와 이유

조건 : 레플리카 셋을 삭제해도 Pod가 삭제되지 않도록 설정

Replica에 대한 Controller를 업데이트 할 때, 사용할 수 있다고 생각합니다 그러기 위해서는

kubectl delete replicationcontrollers 컨트롤러이름 --cascade=false

을 통해 컨트롤러를 삭제하고, 기존 Pod들의 label에 대한 selector를 통해 컨트롤러를 업데이트할 수 있다고 생각됩니다.

근데 위에서 얘기해주신 것 처럼 처음부터 바로 ReplicaSet 2개를 생성할 이유가 있나요??

제가 질문을 애매하게 드렸네용. 저렇게 했을 때 두 번째 ReplicaSet에 붙어있는 Pod 개수와, Pod 개수를 이렇게 생각한 이유에 대해 물어본겁니다! :) 물어본 이유는, ReplicaSet이 삭제될 때 위에서 말씀주신 것 처럼 Pod를 삭제할지, 안할지 결정할 수 있잖아요? 그때 강의에 있던 내용처럼 pod가 생성될 때 ReplicaSet의 고유 인덱스가 붙어있기 때문에, 1번째 ReplicaSet이 삭제되고 Pod가 남아있게 되는 상황이더라도, 2번째 ReplicaSet에 Pod가 연결되지 않는다! 라는 것을 복기하려고 질문드렸던거예요! :) 틀린부분이 있다면 지적해주세요~

himJJong commented 6 months ago

체크2

  • 문제 : restart, recreate의 (차이점 & 어떤 오브젝트에서 각각 사용될까요?)

AH (이거는 제가 까먹을거 같아서 임시로 적어둔거니까 신경쓰지 말아주셔도 됩니당)

Pod, Replica Set, Daemon Set 등 Object에서의 차이가 있겠네요 :)

맞아요 :), 제가 이해한것을 정리하면

1) 직접 만들어진 pod: 더 이상 사용 불가능

(2)ReplicaSet으로 만들어진 pod: 다른 노드에서 restart됨(무슨 일이 있어도 서비스가 유지되어야 하는 목적) (3)Job으로 만들어진 pod: 다른노드에서 종료(finish )—> 자원을 사용하지 않는 상태로 멈춰있음, 로그 확인 가능

himJJong commented 6 months ago

@himJJong 강의 복습 차원에서 정리는 https://github.com/YongsHub/-Kubernetes-Study/blob/master/taeyong/Section4.md git에도 필기를 해봤습니다!

좋은 방법이네요!! 사실 저도 필요한 부분 다시 강의보면서 찾기에 시간이 좀 걸릴 것 같아서, 블로그 작성으로 기록을 남기고 있습니다!! 제것도 아래에 남겨 놓을게요!! https://codingjong.tistory.com/98

himJJong commented 6 months ago

Recreate 배포 방식을 선택과 RollingUpdate에서의 가장 큰 차이점은 Downtime이 존재하냐 존재하지 않냐가 핵심이며 RollingUpdate에서는 일시적으로 Resource 점유가 증가하게 되는데

  • Side Project에서 Kubernetes를 활용해본다면 이용자도 없는데 Resource를 낭비하는 방식을 선택할 이유가 없다고 판단됨

제가 개인적으로 태용님의 생각에 궁금한 점이 있어 comment 달아보았습니다. Rolling Update를 사용하는 것은 Pod 1개의 자원만 추가되는 방법이잖아요?? 그래서 자원 낭비를 걱정할 정도인가..? 하는 생각이 들었습니다. 결국 이용자가 생기면 말씀드렸던 Recreate 배포 방식은 다운 타임이 있어 다른 방안을 선택해야 할 텐데, 이 부분에 대해서는 어떻게 생각하시는지 궁금합니다!!

himJJong commented 6 months ago

Section 1 ~ 3에서 배웠던 NodePort와 이번 강의에서 배운 hostPort에 대해 헷갈릴 수 있는데 어떻게 이해를 하셨는지 궁금해요!

결국 hostPort는 DaemonSet에서 사용할 수 있는 하나의 기능이라고 생각했습니다. DaemonSet은 원하는 노드내에 Pod의 생성 여부를 결정할 수 있고, 해당 노드에게만 Port를 연결 할 수 있는데 이때 hostPort를 이용할 수 있겠구나 라고 이해했습니다.

NodePort는 결국 pod가 노드내에 있든 없든, 존재하는 모든 노드에 Port가 생성되는 것이기 때문에 비슷하지만 조금의 차이점을 짚고 넘어갔던 것 같습니다.

태용님은 다르게 보신 부분이 있나요???

YongsHub commented 6 months ago

체크1

  • 문제 : ReplicaSet 2개를 생성, 각 ReplicaSet에 Replicas 값을 3으로 조정. 이때 첫 번째 ReplicaSet를 삭제하면, 두 번째 ReplicaSet의 Pod 개수와 이유

조건 : 레플리카 셋을 삭제해도 Pod가 삭제되지 않도록 설정

Replica에 대한 Controller를 업데이트 할 때, 사용할 수 있다고 생각합니다 그러기 위해서는

kubectl delete replicationcontrollers 컨트롤러이름 --cascade=false

을 통해 컨트롤러를 삭제하고, 기존 Pod들의 label에 대한 selector를 통해 컨트롤러를 업데이트할 수 있다고 생각됩니다. 근데 위에서 얘기해주신 것 처럼 처음부터 바로 ReplicaSet 2개를 생성할 이유가 있나요??

제가 질문을 애매하게 드렸네용. 저렇게 했을 때 두 번째 ReplicaSet에 붙어있는 Pod 개수와, Pod 개수를 이렇게 생각한 이유에 대해 물어본겁니다! :) 물어본 이유는, ReplicaSet이 삭제될 때 위에서 말씀주신 것 처럼 Pod를 삭제할지, 안할지 결정할 수 있잖아요? 그때 강의에 있던 내용처럼 pod가 생성될 때 ReplicaSet의 고유 인덱스가 붙어있기 때문에, 1번째 ReplicaSet이 삭제되고 Pod가 남아있게 되는 상황이더라도, 2번째 ReplicaSet에 Pod가 연결되지 않는다! 라는 것을 복기하려고 질문드렸던거예요! :) 틀린부분이 있다면 지적해주세요~

아 맞습니다!! ReplicaSet이 가지고 있는 고유 Hash값이 있기 때문에 동일하게 이해했습니다

YongsHub commented 6 months ago

체크1

  • 문제 : ReplicaSet 2개를 생성, 각 ReplicaSet에 Replicas 값을 3으로 조정. 이때 첫 번째 ReplicaSet를 삭제하면, 두 번째 ReplicaSet의 Pod 개수와 이유

조건 : 레플리카 셋을 삭제해도 Pod가 삭제되지 않도록 설정

Replica에 대한 Controller를 업데이트 할 때, 사용할 수 있다고 생각합니다 그러기 위해서는

kubectl delete replicationcontrollers 컨트롤러이름 --cascade=false

을 통해 컨트롤러를 삭제하고, 기존 Pod들의 label에 대한 selector를 통해 컨트롤러를 업데이트할 수 있다고 생각됩니다. 근데 위에서 얘기해주신 것 처럼 처음부터 바로 ReplicaSet 2개를 생성할 이유가 있나요??

제가 질문을 애매하게 드렸네용. 저렇게 했을 때 두 번째 ReplicaSet에 붙어있는 Pod 개수와, Pod 개수를 이렇게 생각한 이유에 대해 물어본겁니다! :) 물어본 이유는, ReplicaSet이 삭제될 때 위에서 말씀주신 것 처럼 Pod를 삭제할지, 안할지 결정할 수 있잖아요? 그때 강의에 있던 내용처럼 pod가 생성될 때 ReplicaSet의 고유 인덱스가 붙어있기 때문에, 1번째 ReplicaSet이 삭제되고 Pod가 남아있게 되는 상황이더라도, 2번째 ReplicaSet에 Pod가 연결되지 않는다! 라는 것을 복기하려고 질문드렸던거예요! :) 틀린부분이 있다면 지적해주세요~

정확한 것 같습니다!

YongsHub commented 6 months ago

Recreate 배포 방식을 선택과 RollingUpdate에서의 가장 큰 차이점은 Downtime이 존재하냐 존재하지 않냐가 핵심이며 RollingUpdate에서는 일시적으로 Resource 점유가 증가하게 되는데

  • Side Project에서 Kubernetes를 활용해본다면 이용자도 없는데 Resource를 낭비하는 방식을 선택할 이유가 없다고 판단됨

제가 개인적으로 태용님의 생각에 궁금한 점이 있어 comment 달아보았습니다. Rolling Update를 사용하는 것은 Pod 1개의 자원만 추가되는 방법이잖아요?? 그래서 자원 낭비를 걱정할 정도인가..? 하는 생각이 들었습니다. 결국 이용자가 생기면 말씀드렸던 Recreate 배포 방식은 다운 타임이 있어 다른 방안을 선택해야 할 텐데, 이 부분에 대해서는 어떻게 생각하시는지 궁금합니다!!

저의 주관적인 생각으로는 Namespace의 Resource 공간을 작게 잡고 Rolling Update 방식을 채택하면 Node가 안정적으로 운영이 될까? 라는 생각을 했었는데 애초에 자원에 대한 고려를 쿠버네티스가 판단해줄 것이라고 생각되네요 -> 사실 자료를 좀 더 찾아보거나 운영을 직접 해봐야할 것 같아요 말씀해주신 것처럼 kubernetes cluster를 통해 서비스를 운영하는 입장이라면 말씀해주신대로 자원 낭비에 대해서는 "Node를 증가시켜야 할때" 고려할 사항이 되겠네요!! 감사합니다.

Recreate를 이용한 버전 업데이트를 할 때, 새벽 시간을 이용해도 괜찮다고 판단되면 꼭 안좋은 건 아니라고 생각해요

YongsHub commented 6 months ago

Section 1 ~ 3에서 배웠던 NodePort와 이번 강의에서 배운 hostPort에 대해 헷갈릴 수 있는데 어떻게 이해를 하셨는지 궁금해요!

결국 hostPort는 DaemonSet에서 사용할 수 있는 하나의 기능이라고 생각했습니다. DaemonSet은 원하는 노드내에 Pod의 생성 여부를 결정할 수 있고, 해당 노드에게만 Port를 연결 할 수 있는데 이때 hostPort를 이용할 수 있겠구나 라고 이해했습니다.

NodePort는 결국 pod가 노드내에 있든 없든, 존재하는 모든 노드에 Port가 생성되는 것이기 때문에 비슷하지만 조금의 차이점을 짚고 넘어갔던 것 같습니다.

태용님은 다르게 보신 부분이 있나요???

네네, hostPort는 동일하게 이해했고 NodePort는 어제 언급한대로, Service Object이기 때문에 지금 언급해주신 모든 노드에 Port가 생성되는 것이 아니라 Service에 연결된 Pod가 존재하는 모든 노드에 Port를 연결해주서 클러스터 외부에서도 해당 Port를 통해 접근할 수 있는게 맞지 않나 싶습니다!

정확한 이해를 위해 강사님에게도 질문 남겨보겠습니다!

himJJong commented 6 months ago

Chpater2 공부를 하면서 다시 한번 정확하게 짚고 가는 좋은 토론이었습니다~ 고생하셨습니다!!

YongsHub commented 6 months ago

Chpater2 공부를 하면서 다시 한번 정확하게 짚고 가는 좋은 토론이었습니다~ 고생하셨습니다!!

@himJJong 참고하시면 좋을 것 같습니다!

스크린샷 2024-01-13 오후 12 23 48