쿠버네티스 (Kubernetes)(9)
-
[Kubernetes] 8. 설정
Environment 시스템을 실행할 때 중요한 요소 중 하나는 환경 변수입니다. 갖가지 시스템이나 프로그램을 실행해봐서 알겠지만, 대부분의 경우에 환경 변수로 통제하기 때문입니다. 또한 배포할 때 운영 목적인지, 테스트 목적인지에 따라 서버를 띄울 때 다른 환경 변수나 인자를 전달할 때도 있습니다. ConfigMap ConfigMap은 환경 변수나 커맨드 라인에 쓰일 인자(argument)들을 정의한 쿠버네티스 객체(object)입니다. 이를 만들 때는 선언적 방식이나 명령적 방식 모두 사용할 수 있는 데, 아래 예시에서는 명령적 방식을 사용해보겠습니다. 먼저 다음 파일을 만들어봅니다. my-config.txt # This is a sample config file that I might use to ..
2023.06.20 -
[Kubernetes] 7. 배포
Rollout 하루종일 열심히 웹 서핑을 하다가 컴퓨터를 끄고 자더라도, 지구 반대편의 누군가는 다시 그 사이트에서 웹 서핑을 시작합니다. 따라서 서비스는 지속 가능해야 합니다. 그리고 시스템과 기술은 언제나 발전하고 있습니다. 만일 새로운 기능을 개발했다면, 기존 것에 적용해야 합니다. 따라서 서비스는 발전 가능해야 합니다. 기존 서비스를 중지하고 새로운 서비스로 교체하는 것을 rollout이라고 합니다. 사실 지속 가능하고, 발전 가능한 서비스는 rollout을 잘하는 것 만큼 중요한 건 없습니다. 하지만 지금까지 배운 내용을 토대로 서비스를 배포하고 운용한다면 이 두 개의 나사가 약간 풀려있을 것입니다. 왜냐하면 기존 팟을 제거하고 다시 팟을 만들어야 할 수 밖에 없기 때문에 그 과정에서 누군가는 ..
2023.06.19 -
[Kubernetes] 6. 레플리카
Replica 지금까지 우리는 하나의 Pod에 하나의 컨테이너를 만들어왔습니다. 사실 단순하게 바라본다면 이렇게 만들어도 원하는 서비스를 구동하는 데 문제는 없습니다. 이 장에서 말하는 레플리카(replica)는 쉽게 말해 복제본입니다. 레플리카를 만들어야 하는 이유는 다음과 같습니다. Redundancy : 실패에 꽤나 관용적입니다. Scale : 규모를 확장하거나 축소하는 데 편리합니다. Sharding : 병렬 연산에 유용합니다. 사실 위에 언급한 이유는 어떤 어플리케이션을 구동하냐에 따라 레플리카를 만들지 말아야 하는 이유가 될 수 있습니다. 당연하게도 레플리카는 그 개수 만큼 시스템 자원을 사용하기도 하고, 극단적으로는 어플리케이션의 복제본을 100개 만든다고 해서 100배 좋은 게 아니기 때문..
2023.06.13 -
[Kubernetes] 5. 서비스 검색
Service Discovery 쿠버네티스는 우리가 원하는 서비스를 위해 다양한 형태로 Pod을 생성하고 실행하며, 때로는 재스케줄링도 해줍니다. 여기서 어떤 것이 어떤 서비스를 하고 있는 지 알아내는 게 중요한 데, 이를 서비스 디스커버리(service discovery)라고 합니다. 다른 장소에서 서비스 디스커버리의 전통적인 예시로는 도메인 이름 시스템, 즉 Domain Name System(DNS)이 있습니다. 간단하게는 서버의 IP 주소 및 포트를 우리가 이해하기 쉬운 주소로 바꿔주는 데 가령 https://www.google.com/ 는 원래 nslookup 더보기 > google.com Server: 127.0.0.53 Address: 127.0.0.53#53 Non-authoritative ..
2023.06.12 -
[Kubernetes] 4. POD
Pod이란 동일한 실행 환경에서 구동되는 컨테이너들을 모아놓은 컬렉션입니다. 클러스터에서 배포하는 최소 단위이기 때문에 Pod에 있는 컨테이너들은 언제나 동일한 기기에 위치해 있습니다. 따라서 Pod에 있는 컨테이너들은 많은 것을 공유하는데, IP 주소나 Port, 호스트 이름 뿐 아니라 심지어 IPC도 가능합니다. 반대로 다른 Pod들은 서로 독립적입니다. 그렇다면 Pod이라는 개념은 왜 만들어졌을까요? 위 이미지는 영화 다운로드 서비스를 위한 예시입니다. 하나는 영화 다운로드와 관련해서 사용자들과 상호작용할 수 있는 웹 서비스이고 하나는 영화 파일을 원격 저장소에서 가져오거나 또는 로컬 저장소에서 제거하는 동기화 서비스입니다. 이 두 컨테이너를 하나의 컨테이너로 통합하지 않고 왜 구분되어야 할까요? ..
2023.06.03 -
[Kubernetes] 3. 팁
Namespace 네임스페이스(namespace)는 편하게 그룹이라고 생각해도 됩니다. kubectl을 사용할 때, 별도의 네임스페이스를 지정하지 않으면 기본으로 default를 사용합니다. 만일 특정 네임스페이스를 지정하고 싶다면 --namespace=abc 처럼 만들면 되고, 전체 네임스페이스는 --all-namespaces 옵션을 사용합니다. 네임스페이스를 만들기 위해서 create 명령어를 사용합니다. kubectl create namespace {네임스페이스 이름} Context 매번 네임스페이스를 지정하기 귀찮다면, 컨텍스트(context)를 사용하면 됩니다. 예를 들어 abc 네임스페이스를 kubectl에 기본으로 사용하고 싶다면 kubectl config set-context abc-con..
2023.06.01