[Kubernetes] 쿠버네티스 오브젝트 [ServiceAccount]
·
Infra/Kubernetes
ServiceAccount ServiceAccount는 RBAC(Role Base Acccess Control)을 기반으로 사용자 또는 애플리케이션에게 특정 명령을 실행할 수 있는 권한을 부여해주는 오브젝트이다. ServiceAccount는 무엇을 해주나 위에 써놓았듯이 ServiceAccount는 RBAC이므로, AWS의 IAM 방식과 상당히 비슷하다. https://imsongkk.tistory.com/73 [AWS] IAM과 Role, Policy IAM 항상 나는 AWS에 로그인할 때 루트 유저로 로그인했었다. 책이나 다른 실습 강의에서는 항상 루트 사용자로 로그인했었기에, 그냥 그런가보다 하고 넘겼었다. 하지만 AWS에 점점 익숙해지면서, imsongkk.tistory.com 해당 포스트에서 들..
[Kubernetes] 쿠버네티스 오브젝트 [ConfigMap, Secret]
·
Infra/Kubernetes
ConfigMap ConfigMap은 네임스페이스에 종속되며 쿠버네티스 클러스터에서 동작할 애플리케이션들의 설정 정보들을 관리해주는 오브젝트이다. 애플리케이션들은 각자 환경변수, 태그들을 가질 수 있는데 ConfigMap을 이용하면 애플리케이션단이 아닌 쿠버네티스 단에서 이러한 값들을 관리할 수 있다. Configmap은 무엇을 해주나 예를 들어보자. Spring Boot 애플리케이션을 개발하다보면 application.yaml에 property를 정의하게 된다. 이때의 property는 하드 코딩 방식으로 작성할수도 있지만 보통은 유연성을 위해 외부 주입형식으로 바꾸게 된다. spring: data: mongodb: uri: mongodb://${DB_HOST} 해당 property가 포함된 jar파일..
[Kubernetes] 쿠버네티스 오브젝트 [Namespace]
·
Infra/Kubernetes
Namespace Namespace는 쿠버네티스 클러스터를 보다 효율적으로 관리할 수 있는 오브젝트이다. 네임스페이스를 이용하면 용도에 따라 파드, 레플리카셋, 서비스등을 논리적으로 구분할 수 있다. Namespace는 무엇을 해주나 보통 쿠버네티스 클러스터를 한명이 맡아서 관리하는 경우는 없다. 백엔드 팀과, 인프라 팀, 조직별로 다른 클러스터를 사용할 수도 있지만 같은 클러스터를 사용할 수도 있다. 네임스페이스는 이럴때 조직별로 각자의 논리적인 가상 공간을 제공해 마치 여러 개의 가상 클러스터를 사용하는 느낌을 줄 수 있다. 또한, prod환경 이외에 dev, staging, test, monitoring 환경등 여러 환경별로 리소스를 정의할 수 있게 해준다. Namespace 종류 kubectl 명..
[Kubernetes] 쿠버네티스 오브젝트 [Service]
·
Infra/Kubernetes
Service 이전까지 컨테이너를 구성하는 오브젝트들을 살펴봤다면 이 포스트에서는 생성한 파드를 외부에 노출시킬 수 있는 오브젝트를 다룬다. 외부에 노출이라 하면 파드 외부, 노드 외부, 클러스터 외부 등을 생각할 수 있는데 자세히 살펴보자. Service는 무엇을 해주나 파드를 생성할 때로 돌아가보자. apiVersion: v1 kind: Pod metadata: name: my-nginx-pod spec: containers: - name: my-nginx-container image: nginx ports: - containerPort: 80 protocol: TCP nginx 컨테이너 1개를 가지는 파드이다. nginx 컨테이너는 80포트를 사용하므로, containerPort를 80으로 설정해 ..
[Kubernetes] 쿠버네티스 오브젝트 [Deployment]
·
Infra/Kubernetes
Deployment 이전 포스팅에서는 ReplicaSet에 대해 알아보았다. ReplicaSet만 있어도 애플리케이션을 배포할 수 있지만, Deployment는 좀 더 많은 기능을 제공한다. Deployment는 Pod + ReplicaSet의 조합이라고 이해하면 된다. 보통 Pod를 배포할 때 Deployment를 사용해서 배포한다. 그리고 대체로 MSA 환경에서 하나의 서비스를 Deployment라고 생각하면 된다. Deployment는 무엇을 해주나 그래서 Deployment는 우리를 위해 무엇을 해줄까? 이름에서 알 수 있듯이 애플리케이션의 업데이트와 배포를 좀 더 용이하게 해준다. 애플리케이션을 운영하다보면 업데이트는 필수이다. 버그 발견, 기능 추가, 삭제등등 하루에 몇번이고 업데이트가 일어날..
[Kubernetes] 쿠버네티스 오브젝트 [ReplicaSet]
·
Infra/Kubernetes
ReplicaSet Pod에 이어서 ReplicaSet이다. 레플리카셋은 이름에서 알 수 있듯이 여러 개의 파드를 한번에 생성해주는 오브젝트이다. ReplicaSet을 왜 쓸까? 예시로 바로 보자. 이전과는 다르게, Pod가 이번엔 1개가 아니라 4개가 필요한 상황이다. 4개의 nginx pod를 만드려면 어떻게 해야할까? apiVersion: v1 kind: Pod metadata: name: my-nginx-pod-a spec: containers: - name: my-nginx-container image: nginx ports: - containerPort: 80 protocol: TCP --- apiVersion: v1 kind: Pod metadata: name: my-nginx-pod-b s..
[Kubernetes] 쿠버네티스 오브젝트 [Pod]
·
Infra/Kubernetes
Pod 쿠버네티스의 핵심 오브젝트인 파드이다. 이번 포스팅에서는 파드의 생명주기, 생성과 삭제, 관리등을 다루겠다. 쿠버네티스에서는 컨테이너 어플리케이션의 기본 단위를 Pod라고 부른다. Pod는 1개 이상의 컨테이너로 구성된 컨테이너들의 집합이라고 생각하면 된다. 낯설지 않다. 도커 스웜에서 다루었던 서비스와 비슷하다. 같은 컨테이너 오케스트레이션 툴로써, 복잡한 애플리케이션을 쉽게 다루기 위해 기본 단위를 바꾼것이다. Pod를 정의하는 YAML apiVersion: v1 kind: Pod metadata: name: my-nginx-pod spec: containers: - name: my-nginx-container image: nginx ports: - containerPort: 80 protoc..
[Kubernetes] 쿠버네티스 구성 요소
·
Infra/Kubernetes
쿠버네티스 클러스터 구성 쿠버네티스는 마스터 노드와 워커 노드로 구성되어 있다. 마스터 노드가 최소 1대 이상 있어야 클러스터를 유지시킬 수 있으며 마스터 노드는 여러 대가 있을 수 있다. 보통 마스터 노드를 Control Plane, 워커 노드를 Data Plane이라 부르는데 마스터 노드에는 특별한 경우가 아니면 애플리케이션 로직이 담긴 컨테이너(Pod)를 할당하지 않기 때문이다. 마스터 노드, Control Plane 이름을 보면 알 수 있듯이 클러스터를 제어하는 영역이다. 그렇다면 쿠버네티스는 Control Plane에 어떤 컴포넌트를 가지고 있을까? kubectl kubectl은 쿠버네티스 클러스터에 명령을 내리는 컴포넌트이다. 우리가 정의한 YAML 파일을 클러스터에 배포하거나 현재 클러스터의..
[Kubernetes] 쿠버네티스 시작하기
·
Infra/Kubernetes
쿠버네티스 시작 드디어 도커를 끝내고 쿠버네티스 포스팅을 시작한다! 쿠버네티스도 처음 접한건 학회에서였다. 그 당시에는 도커도 모르던 시절이라 쿠버네티스가 뭐지?? 하고 넘겼었는데 도커를 어느정도 쓸줄 알게 되니까 쿠버네티스도 배우고 싶어져 학회원들과 스터디까지 진행했었다. 학회 스터디와 개인적으로 공부한 내용을 앞으로의 포스팅에 담으려고 한다. 쿠버네티스 너 누구니? 쿠버네티스를 보통 k8s라고 부르는데, 이는 kubernetes 에서 가운데가 8글자여서 이렇게 줄인다고 한다. ㅋㅋ 쿠버네티스는 컨테이너 오케이스트레이션 도구이다. 구글에서 2014년 오픈소스로 공개하고 현재 CNCF(Cloud Native Computing Foundation)에 소속되어 있다고 한다. 컨테이너 오케스트레이션? 말 그대..