본문 바로가기

Kubernetes 학습42

13. Basic Object - Service 사용자의 접근 경우 Service가 만들어진 후에 IP를 확인하고, 이 IP로 접근을 하면 되는데(10.111.41.1) Pod의 경우 이 자원들이 동시에 배포가 될 수 있습니다. Pod A가 Pod B에 접근을 해야하는 상황인데 Pod A에 IP를 넣기에는 Pod나 Service가 동적으로 할당되기 때문에 미리 알기에는 제약이 있습니다. Pod B의 경우 문제가 생겨 죽으면 자동으로 재생성되면서 IP가 변경되기 때문에 Pod A가 IP를 알더라도 계속 쓸 수 없습니다. 이런 문제를 해결하기 위해 DNS, Headless 서비스가 필요합니다. Pod가 외부 특정 사이트에 접근해서 데이터를 가져오는 상황에서 접근 주소를 변경해야 되는 상황이 생기면 경로를 변경해주기 위해 Pod를 수정하고 재배포해야 될까요.. 2024. 1. 16.
12. QoS classes (Guaranteed, Burstable, BestEffort) & Node Scheduling QoS class 위 Qos는 노드에 이렇게 리소스가 있다고 가정하고, 이 노드 위에 Pod가 3개 만들어져서 자원을 모두 사용하고 있는 상태라고 가정합니다. 이 상태에서 Pod1이 추가적으로 자원이 필요할 때 노드에는 추가적으로 할당받을 수 있는 자원이 없기 때문에, 선택을 해야합니다. k8s는 앱의 중요도에 따라 이런 것을 관리할 수 있도록 3가지 단계로 Quality of Service를 지원해주고 있습니다. 현재 위 상태에서는 1. Best Effort가 부여된 Pod가 가장 먼저 다운이 돼서 자원이 반환됩니다. Pod1은 필요한 자원을 추가로 얻게 됩니다. 다음엔 어느 정도 노드에 자원이 남아있지만, Pod2에서 그보다 많은 자원을 요구하는 상황이 됐다면, 2. Burstable이 적용된 Pod.. 2024. 1. 12.
11. Pod - Lifecycle & (ReadinessProbe, LivenessProbe) Lifecycle Pod는 해당 라이프사이클 단계에 따라 주요 행동들이 있습니다. status 안에 Phase라고 해서 Pod의 전체 상태를 대표하는 속성이 있습니다. 그리고 Pod가 생성되면서 실행하는 단계들이 있는데 그 단계와 상태를 알려주는 것이 Conditions라는 특성입니다. 또한 컨테이너마다도 State라고 해서 각각의 컨테이너를 대표하는 상태가 있습니다. 먼저 Pod를 대표하는 Phase 종류는 아래와 같습니다. (1) Pending, (2) Running (3) Succeeded, (4) Failed, (5) Unknown Conditions는 4종류가 있고, Reason이라고 해서 Condition의 세부 내용을 알려주는 항목이 있습니다. (1) Initizlized, (2) Conta.. 2024. 1. 12.
RealMysql8.0 (CKA 공부에 전념하기 위해 잠시 멈췄습니다.) 1주차 - https://github.com/himJJong/-Mysql8.0-study/issues/1 2주차 - https://github.com/himJJong/-Mysql8.0-study/issues/2 3주차 - https://github.com/himJJong/-Mysql8.0-study/issues/3 2024. 1. 11.
10. Controller - DaemonSet, Job, CronJob 노드들이 있고, 각각의 노드에 자원이 다르게 남아있는 상태에서 이전에 배운 ReplicaSet의 경우 Pod를 스케줄러에 의존해서 노드에 배치를 할 때 만약 노드1에 자원이 많이 남아 있는 상태면 위처럼 배치를 많이 할거고, 자원이 별로 없다면 Pod를 배치 안할 수 있습니다. DaemonSet : 노드의 자원 상태와 상관없이 모든 노드에 Pod가 하나씩 생긴다는 특징이 있습니다. 이렇게 사용되는 서비스로 대표적인 1. 성능 수집인데 각 노드들의 성능상태는 모두 감시 대상이죠. 그래서 모니터링 화면이 있을거고, 각각의 노드에 프로메테우스 같은 수집 에이전트가 깔여 있어야 모든 노드들의 정보들을 모니터링 시스템에 전달해 줄 수가 있습니다. 2. 로그 수집인데, 특정 노드에 문제가 파악했다면 로그를 확인해야.. 2024. 1. 10.
9. Controller - Deployment & 실습 Deployment는 현재 한 서비스가 운영 중인데 이 서비스를 업데이트 해야 돼서 재배포를 해야 할 때 도움 주는 컨트롤러 입니다. 크게 아래와 같이 4가지 방식이 있습니다. ReCreate : Deployment를 만들면 이렇게 v1의 파드가 생성됩니다. 그리고 Pod 하나당 위와 같이 하나씩 자원이 사용된다고 가정하겠습니다. Deployment는 먼저 Pod 모두 삭제합니다. 그렇게 되면 서비스에 대한 다운타임이 발생하고, 자원 사용량도 없어지게 됩니다. 그 후 v2에 대한 Pod 2개를 만들어 줍니다. 단점은 다운타임이 발생해서 일시적인 정지가 가능한 서비스인 경우에만 가능한 방법입니다. Rolling Update : 원래의 상태에서 업그레이드 할 때 Deployment는 먼저 v2의 Pod를 하.. 2024. 1. 10.
Kubernetes [ Inflearn : 2024.01 ~ 2024.02 ] 1주차 - https://github.com/YongsHub/-Kubernetes-Study/issues/12주차 - https://github.com/YongsHub/-Kubernetes-Study/issues/23주차 - https://github.com/YongsHub/-Kubernetes-Study/issues/34주차 - https://github.com/YongsHub/-Kubernetes-Study/issues/45주차 - https://github.com/YongsHub/-Kubernetes-Study/issues/56주차 - https://github.com/YongsHub/-Kubernetes-Study/issues/6 [ Ud.. 2024. 1. 10.
8. Replication Controller, ReplicaSet - Template, Replicas, Selector & 실습 컨트롤러는 서비스를 관리하고 운영하는데 크게 아래 4가지 기능으로 도움을 줍니다. Auto Healing : 노드 위에 파드가 있는데, 파드가 다운되거나 파드가 스케줄링이 되어 있는 노드가 다운되면 파드에서 돌아가던 서비스가 장애가 옵니다. 하지만 컨트롤러는 이것을 즉각 인지하고 파드를 다른 노드에 새로 만들어줍니다. Software Update : 여러 파드에 대한 버전을 업그레이트 해야 될 경우 컨트롤러를 통해 한번에 쉽게 할 수 있고, 업그레이드 도중 문제가 생기면 롤백을 할 수 있게 해줍니다. Auto Scaling : 파드의 리소스가 리미트 상태가 되었을 때 컨트롤러는 이 상태를 파악하고 파드를 하나 더 만들어 줌으로써 부하를 분산시키고, 파드가 죽지 않도록 해주는데 그럼 이 서비스는 성능에 장.. 2024. 1. 10.
7. Namespace, ResourceQuota, LimitRange & 실습 개요 쿠버네티스 클러스터라 해서 전체가 사용할 수 있는 자원이 있습니다. 일반적으로 메모리, CPU가 있을거고, 클러스터 안에는 여러 네임스페이스들을 만들 수 있고, 네임 스페이스 안에는 여러 Pod를 만들 수 있습니다. 각 Pod는 클러스터 자원을 공유해서 사용하는데, 만약 한 네임스페이스 안에 있는 Pod가 클러스터에 남은 자원을 모두 사용하면 다른 Pod 입장에서는 더 이상 쓸 자원이 없어서 자원이 필요할 때 문제가 발생하게 됩니다. 이런 문제를 해결하기 위해 네임 스페이스마다 ResourceQuota를 달면 최대 한계를 지정할 수 있습니다. Pod가 한계를 넘을 수 없고, Pod 입장에서 자원이 부족해 문제가 될지언정 다른 네임 스페이스에 있는 Pod에는 영향을 끼치지 않게 해줍니다. 한 Pod가.. 2024. 1. 9.
6. ConfigMap, Secret & 실습 ConfigMap, Secret의 사용 시기에 대해 알아봐요. 만약 개발 환경과 상용 환경이 있습니다. A라는 서비스가 있는데 이 서비스는 일반 접근과 보안 접근이 가능합니다. 그래서 개발 환경에서는 이 보안 접근을 해제할 수 있는 옵션이 있습니다. 보안 접근을 한다면 접근 User와 Key를 세팅할 수 있습니다. 이처럼 설정하고 있는데, 상용 환경으로 배포를 해야한다면 이 값이 바뀌어야 합니다. 다시 보안 접속으로 설정을 해야하고, User와 Key값도 변경해야 합니다. 근데 이 값은 컨테이너 안에 있는 서비스 이미지에 들어있는 값이기 때문에 이 내용을 바꾼다는 것은 개발 환경과 상용 환경에 컨테이너 이미지를 각각 관리하겠다는 의미가 됩니다. 이미지를 별도로 관리한다는 것은 부담되는 일이에요. 그래서 .. 2024. 1. 8.
5. Volume - emptyDir, hostPath, PV/PVC & 실습 1. emptydir : 컨테이너들끼리 데이터를 공유하기 위해 볼륨을 사용하고, 최초 이 볼륨이 생성될 때 볼륨안에 내용이 비어 있기 떄문에 emptyDir이라고 명칭이 된 것입니다. 만약 컨테이너 1번이 웹 역할을 하는 서버, 컨테이너 2번이 백엔드단을 처리해주는 서버라면 이 웹서버로 받은 어떤 특정 파일을 마운트가 된 볼륨에 저장하고, 백엔드단에 있는 2번 컨테이너 역시 이 볼륨을 마운트 해놓으면 이 두 서버가 이 볼륨을 자신의 로컬에 있는 파일처럼 사용하기 때문에 두 서버가 파일을 주고 받을 필요없이 편하게 사용할 수 있습니다. 볼륨은 Pod안에 생성 되기 때문에, Pod 문제가 발생해서 재생성 되면 데이터가 모두 없어진다는 것을 의미합니다. 그래서 이 볼륨에 쓰이는 데이터는 꼭 일시적인 사용 목적.. 2024. 1. 8.
4. Service - Cluster IP, NodePort, LoadBalancer 1.Service : 기본적으로 자신의 Cluster IP를 가지고 있습니다. 그리고 이 서비스를 Pod에 연결시켜놓으면, 서비스의 IP를 통해서 Pod에 접근할 수 있습니다. 앞 글에서 Pod에서 똑같이 클러스터 내에서 접근할 수 있는 IP가 있었는데, 굳이 서비스를 사용하는 이유는 k8s에서 시스템 장애, 성능 장애 등 언제든지 죽을 수 있고, 그러면 다시 재생성되도록 설계되어 있는 오브젝트입니다. 파드의 IP는 재생성되면 변하기 때문에 Pod의 IP에 대한 신뢰성이 떨어집니다. 이 Service의 IP도 클러스터 내에 다른 모든 오브젝트들이 접근할 수 있지만 외부에서는 접근할 수 없습니다. Pod는 여러개 연결이 가능하고, 이렇게 여러개 연결 시켰을 때 서비스가 트래픽을 분산해서 Pod에 전달해줍니.. 2024. 1. 4.
3. Pod - Container, Label, NodeSchedule & 실습 Pod 특징을 보면 Pod 안에는 하나의 독립적인 서비스를 구동할 수 있는 컨테이너들이 있습니다. 컨테이너들은 서비스가 연결될 수 있도록 포트를 가지고 있는데 한 컨테이너가 하나 이상의 포트를 가질 수는 있지만, 한 Pod 내에서 컨테이너들끼리 포트가 중복될 수는 없습니다. 1) Container : 위 2개 컨테이너는 한 호스트로 묶여있다고 보면 되는데 Container1에서 2로 접근할 때 localhost:8080로 접근할 수 있습니다. 그리고 Pod가 생성될 때 고유의 IP가 자동으로 할당되는데 쿠버네티스 클러스터 내에서만 위 IP를 통해서 Pod에 접근할 수 있습니다. 외부에서는 접근이 불가합니다. 만약 Pod에 문제가 생기면 시스템이 스스로 감지해서 Pod를 삭제하고, 다시 재생성하는데 이때 .. 2024. 1. 3.
2. 쿠버네티스 클러스터 실습(Mac Intel) - 여러 오류를 만나며 저는 Mac Intel을 사용한 맥북을 사용하고 있습니다. 쿠버네티스 클러스터를 처음 접해보아서 엄청난 삽질, 실습을 진행하는 과정에서 mac m series로 잘못 따라가고, pw 접근 불가 등 여러 문제가 있었는데요.. 계속 꼬이고 안되었는데 애초에 m1을 위한 것이라 7시간을...허비 하루정도 깊게 파고 들어가보니 원하는 결과물을 얻어서 뿌듯했습니다!!! 혹시 실습해보시다가 안되는거 있으시면 답들 달아주세요!! 도움드릴 수 있다면 최대한 노력하겠습니다~ 1. XShell : [ 터미널로 Master, Wokred 노드에 접속이 가능해서 설치하지 않았습니다. ] 2. VirtualBox 설치 (VM 및 내부 네트워크 생성 툴) : VirtualBox (7.0.8 버전) 3. Vagrant 설치 및 k.. 2024. 1. 2.
1. 쿠버네티스 시작 [ Introduction ] 쿠버네티스를 큰 기업들이 꼭 써야하는 이유는 큰 기업들은 대규모의 서비스를 운영하고 있기 때문에 최대한 자원을 효율적으로 써야 비용적으로 유리하다. 서버 자원을 효율적으로 쓰기 위해서는 가상화기술에 대해 관심을 가질 수 밖에 없고, 쿠버네티스를 잘 이해하려면 가상화 기술들에 대한 히스토리를 알 필요가 있다. Linux에는 자원들이 격리해서 프로세스들이 독립적인 환경에서 돌아가게 해주는 기술들이 있었는데, 어려워서 대중적으로 잘 사용하지 않았다. 때문에 이후 VM 가상화 기술이 발전이 되었다. 하지만 하다보니 자동화는 되는거 같은데 생각보다 시스템 효율이 안나는 것을 느끼게 됩니다. 가장 큰 원인을 제공하는것이 VM 가상화를 하기 위해서 무거운 OS를 띄워야 한다는 근본적인 .. 2023. 12. 27.