[k8s] RBAC
·
DevOps/Kubernetes
RBAC (Role-Based Access Control)Kubernetes에서 사용자와 서비스 계정에 권한을 부여해서, 클러스터 리소스에 대한 접근을 제어하는 기능kubectl을 사용하는 사용자와 쿠버네티스 API를 사용하는 내부 컴포넌트에 대해 적용Kubernetes API 서버에서 권한을 관리 권한 부여 흐름Role을 사용하여 리소스에 대한 권한 정책을 설정하고, 해당 Role을 RoleBinding을 통해 특정 사용자 또는 서비스 계정에 부여예시Role에 Pod 읽기 및 쓰기 권한을 추가RoleBinding을 사용하여 해당 Role을 사용자에게 바인딩사용자는 특정 Pod에 대해 읽기 및 쓰기 작업을 수행 가능 권한 부여 방식에 따른 범위 차이Role과 RoleBinding은 네임스페이스 내 리소스..
[k8s] Volume
·
DevOps/Kubernetes
EmptyDirPod 내 컨테이너들 간에 데이터를 공유하기 위해 제공되는 임시 스토리지 볼륨볼륨을 컨테이너 파일 시스템의 특정 지점과 연결Pod와 같은 라이프사이클을 가짐 (Pod가 삭제되면 볼륨도 삭제)동일 Pod의 컨테이너들이 하나의 볼륨을 공유하도록 할 수 있음 EmptyDir 예시volumes에 볼륨을 정의하고, VolumesMounts에서 컨테이너의 디렉터리와 볼륨을 마운트apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 volumeMounts: - name: nginx-volum..
[k8s] ConfigMap & Secret
·
DevOps/Kubernetes
ConfigMap애플리케이션에서 사용할 설정 데이터를 저장하고 관리하기 위한 객체문자열 데이터를 키-값 쌍으로 저장하거나 파일 형식으로 저장환경 변수, 명령줄 인자, 설정 파일, 포트 등과 같은 비밀이 아닌 데이터를 외부에서 설정하고, 이를 Pod 등의 매니페스트에서 불러와 사용 ConfigMap 매니페스트 apiVersion: v1kind: ConfigMapmetadata: name: example-configdata: database_url: "postgresql://user:password@host:port/dbname"data: ConfigMap에 저장할 데이터를 정의 환경 변수로 ConfigMap 사용apiVersion: v1kind: Podmetadata: name: app-podspec..
[k8s] Service
·
DevOps/Kubernetes
Service애플리케이션 간 통신을 가능하게 하는 추상화된 네트워크 리소스로, Pod의 네트워크 주소를 추상화하여 안정적인 연결을 제공 Service의 필요성변경되는 Pod의 IP 주소: Pod은 생성, 삭제, 교체가 반복되며, IP 주소가 동적으로 변경되는데, 애플리케이션 간 통신에서 변경된 IP 주소를 추적하는 것은 어려움Service를 통한 안정적 연결: Service는 고정된 가상 IP(ClusterIP)를 제공하여, Pod의 실제 IP 변경과 무관하게 애플리케이션이 안정적으로 통신할 수 있도록 함 주요 특징고유한 IP 주소: Service는 자신만의 IP 주소를 가지며, Service가 삭제될 때까지 바뀌지 않음서비스 디스커버리 기능: Service 생성시 IP 주소가 클러스터 내 DNS 서버에..
[k8s] Deployment
·
DevOps/Kubernetes
컨트롤러쿠버네티스에서 리소스를 관리하는 객체로, 시스템의 현재 상태(actual state)와 원하는 상태(desired state)를 지속적으로 비교하여 차이를 자동으로 수정하는 역할을 수행컨트롤러는 특정 리소스의 상태를 확인하고, 쿠버네티스 API와 상호작용하여 시스템을 원하는 상태로 유지컨트롤러는 레이블 셀렉터를 통해 자신이 관리하는 리소스를 식별 컨트롤러의 필요성Pod는 일회성의 생애 주기를 가짐으로, 유실 시 자동으로 복구되지 않음따라서 컨트롤러를 통해 Pod의 복제본 수 유지, 스케일링, Pod 유실 시 복구 등과 관리 작업을 자동으로 수행해야함 주요 컨트롤러Deployment: Pod의 복제본 수를 관리하고, Pod를 최신 상태로 유지ReplicaSet: 지정된 수의 Pod를 항상 실행되도록..
[k8s] Pod
·
DevOps/Kubernetes
Pod하나 이상의 컨테이너를 포함하는 쿠버네티스의 가장 작은 배포 단위Pod는 컨테이너와 같이 한 번 사용되고 폐기되는 일회성 임시 엔티티로 간주됨 주요 특징단위 관리: 하나 이상의 컨테이너 또는 볼륨을 포함하며 이를 관리함공유 네트워크: Pod 내의 모든 컨테이너는 동일한 네트워크를 공유고유한 IP: 고유한 가상 IP를 가지며, 이를 통해 클러스터 내 다른 Pod들과 통신공유 볼륨: Pod 내의 컨테이너는 동일한 볼륨을 공유하여 데이터를 교환클러스터 내 실행: Pod는 클러스터 중 하나의 노드에서 실행됨Pod의 라이프사이클Pod가 생성, 실행, 종료되는 일련의 과정으로, Pod는 여러 상태를 거치면서 실행됨Pending (대기 중): Pod가 생성되었지만, 아직 클러스터 내에서 적합한 노드에 할당되지 ..
[k8s] minikube 설치 & kubectl 사용하기
·
DevOps/Kubernetes
minikube 설치하기터미널에서 minikube 설치하기기본적으로 docker가 설치되어 있어야함$ brew install minikube # minikube 설치$ orbctl start # docker 실행$ docker ps # docker 실행 중인지 확인$ minikube start # minikube 시작 정상적으로 설치됬는지 확인하기$ kubecl get nodekubectl 명령으로 pod 실행하기다음과 같이 pod의 이름과 대상 이미지를 지정하고 실행하기$ kubectl run nginx --image=nginx:latest$ kubectl get pod describe 명령을 통해 pod를 자세히 확인하면, 기본 디폴트 namespace에 생성되었으며 고유한 IP 주소가 할당..
[AWS] ECS에 컨테이너 배포하기
·
DevOps/AWS
1. 태스크 정의새로운 태스트 정의 생성 태스크 정의 패밀리 이름 지정 인프라 요구 사항 설정시작 유형: AWS Fargate운영체제/아키텍처: Linux/ARM64 (이미지에 맞는 운영체제와 아키텍처 선택)태스크 역할: ecsTaskExecutionRole ECR에 업로드된 이미지 URI 복사하기 컨테이너 설정컨테이너 이름 지정하고, 복사한 이미지 URI 붙여넣기컨테이너 포트는 해당 이미지가 사용하는 포트로 설정 컨테이너 환경 변수로는 DB 접속 정보 입력 (기존에 생성했던 RDS 접속 정보 입력) 나머지는 디폴트로 두고 태스크 정의 생성 생성된 태스크 정의 2. 클러스터 생성클러스터 탭에서 클러스터 생성하기 클러스터 이름 지정하고, 인프라는 AWS Fargate로 해서 생성3. 클러스터에 서비스 생성..