DevOps 27

[K8S] Kubernetes 동작원리

Docker는 컨테이너 기술의 혁명을 가져왔다. [Docker] 컨테이너란 무엇일까? Docker 아이콘은 고래 하나가 여러 개의 컨테이너를 싣고 있는 모습이다. 여기서, 고래는 '컴퓨터'이고 컨테이너는 '격리된 프로세스'이다. 도커가 혁명적인 이유는 컨테이너라는 환경분리를 리눅 lordofkangs.tistory.com 리눅스 기술( cgroups, namespace)을 활용하여 리소스를 독립적으로 격리하고 할당이 가능해지자, 컨테이너(Container)라는 개념이 등장하였다. 하나의 컴퓨터 안의 여러 개의 컨테이너가 만들어졌고 모두 독립적으로 활동하였다. 이렇게 되자, 수많은 컨테이너를 관리하는 기술이 필요해졌는데, 그것이 바로 쿠버네티스(Kubernetes)이다. 쿠버네티스는 여러 대의 컴퓨터(노드..

DevOps/K8S 2024.02.25

[Docker] 컨테이너란 무엇일까?

Docker 아이콘은 고래 하나가 여러 개의 컨테이너를 싣고 있는 모습이다. 여기서, 고래는 '컴퓨터'이고 컨테이너는 '격리된 프로세스'이다. 도커가 혁명적인 이유는 컨테이너라는 환경분리를 리눅스 기술로만 이루어 냈다는 점이다. 도커가 존재하기 전에는 VM ( VirtualMachine ) 기술을 활용하였다. VM은 Hypervisor를 활용하여, 물리적으로 한 대의 OS 위에 가상의 Guest OS 여러 대를 실행 및 관리하는 구조이다. 무거운 커널이 여러 대가 동작하니, 그 위에서 동작하는 APP의 성능은 당연히 떨어질 수 밖에 없다. 도커는 커널의 존재를 하나로 줄였다. 커널이 하나만 존재할 수 있는 이유는 namespace와 cgroups를 활용하여 리소스를 독립적으로 분리하였기 때문이다. nam..

DevOps/DOCKER 2024.02.24

[AWS] EKS에서 OIDC가 적용되는 원리

OIDC란 Open ID Connect의 약자이다. OIDC는 OAuth 2.0 프로토콜을 기반으로 이루어지는 사용자 인증 방식을 의미한다. AWS에서 사용자란 IAM을 의미한다. IAM은 AWS 리소스에 대한 권한을 가지고 있다. 그러나 IAM 사용자는 리소스 권한을 유용하게 사용하지 못한다. IAM 사용자가 복잡한 EKS 클러스터를 직접 구성할 수 있을까? 못한다. 그러므로 IAM 사용자는 복잡한 작업을 대신해줄 APP을 찾아 권한을 양도하는 방식을 선택해야 한다. IAM 사용자는 Terraform과 같은 IaC에서 제공하는 Provider에게 AccessKey와 SecretKey를 제공하여 권한을 양도하고 EKS 환경을 대신 구성하도록 지시한다. 하지만 AccessKey와 SecretKey를 직접 ..

DevOps/AWS 2023.11.14

[AWS] EKS에 ALB Ingress Controller 설치하기

AWS Load Balancer Controller 추가 기능 설치 - Amazon EKS 배포된 차트는 보안 업데이트를 자동으로 수신하지 않습니다. 새 차트가 사용 가능해지면 수동으로 업그레이드해야 합니다. 업그레이드 시 이전 명령에서 install을 upgrade로 변경하되, 이전 명령 docs.aws.amazon.com 위 공식문서를 참고하여 ALB Ingress Controller를 EKS에 설치해보겠다. 해당 실습은 AWS EKS 클러스터가 구성되어 있다고 가정하겠다. 0. EC2 인스턴스(우분투 리눅스)에 kubectl 서버 구성하기 EKS에 ALB Ingress Controller를 생성하려면 EKS에 명령을 내릴 서버를 만들어야 한다. EC2 인스턴스를 우분투 리눅스 환경으로 생성하고 아래..

DevOps/AWS 2023.11.08

[Jenkins] SSH로 AWS EC2 원격접속하여 Tomcat Server 배포하기

Jenkins를 사용하여 AWS EC2에 원격접속하여 Tomcat Server를 배포하려고 한다. 이번 포스팅은 로컬환경에 도커환경에 구성되어 있고 AWS EC2가 생성되어 로컬환경에서 SSH 원격접속이 가능하다는 가정 하에 진행해보겠다. 1. 로컬환경 Docker 컨테이너에 Jenkins 띄우기 docker run -d -p 8080:8080 --name jenkins -u root jenkins/jenkins:lts localhost:8080 Jenkins를 도커 컨테이너에 띄우고 localhost:8080으로 접속하면 초기패스워드 작성화면이 나온다. docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword docker exec 명..

DevOps/JENKINS 2023.11.03

[Terraform] Terraform으로 간단한 AWS 아키텍처 구현하기

Terraform으로 위 AWS 아키텍처를 구현해보려고 한다. GitHub - mgKang3646/Terraform_Apache Contribute to mgKang3646/Terraform_Apache development by creating an account on GitHub. github.com ( 아래에 사용된 코드는 Git Hub에서 참조 가능합니다. ) 1. Terraform 설치 Install Terraform | Terraform | HashiCorp Developer Install Terraform on Mac, Linux, or Windows by downloading the binary or using a package manager (Homebrew or Chocolatey). ..

DevOps/Terraform 2023.11.02

[AWS] VPC와 Subnet 이해하기 ( + CIDR )

VPC( Virtual Private Cloud ) VPC란 Virtual Private Cloud로 가상으로 격리된 네트워크 환경을 의미한다. 서울이라는 Region안에 여러 개의 Availability Zone이 나누어져 있다. Availability Zone은 논리적인 데이터센터를 의미하는데, 하나의 데이터센터에 문제가 생기면 다른 데이터센터에 접근이 가능하여 안정적인 운영이 가능해진다. Availability Zone은 분리되어 있지만 하나의 네트워크 환경으로 묶여야 한다. 그래서 가상으로 격리된 네트워크 환경을 만드는데, 그것이 VPC(Virtual Private Cloud)이다. VPC의 cidr은 10.10.0.0/16이다. 이는 서브넷 마스크 11111111 11111111 00000000..

DevOps/AWS 2023.11.02

[Kubernetes] NFS 서버에 PV 만들어 접근하기 ( 우분투 환경 )

컨테이너가 내려갔다가 올라오면 컨테이너 내부 데이터는 사라진다. 데이터를 유지하려면 외부스토리지에 마운트하여 데이터를 저장해야 한다. 클러스터 내부 저장소에 마운트하면 컨테이너 생명주기와 클러스터 생명주기가 다르므로 데이터가 유지될 수 있다. 그러나 클러스터가 내려가면 데이터 역시 사라진다. 클러스터 상태와 무관하게 데이터를 유지하려면 클러스터 외부의 스토리지에 컨테이너가 마운트 되어야 한다. 이번 포스팅에서는 MiniKube 클러스터 밖에 NFS 서버(외부스토리지)를 구성하여 클러스터 밖의 저장소와 데이터를 공유하는 과정을 다루어 보겠다. 우분투OS 로컬환경에 MiniKube와 NFS 서버를 띄어 실습을 진행해보겠다. NFS 서버 생성하기 ( 우분투 환경 ) $ sudo apt-get update $ ..

DevOps/K8S 2023.10.16

[Kubernetes] MySQL PV, PVC 적용하기

[Kubernetes] MySQL 서비스 및 디플로이먼트 생성하기 [Kubernetes] 프론트엔드, 백엔드 서비스 및 디플로이먼트 생성하기 [Kubernetes] Minikube 설치 및 인그레스 설치 및 설정하기 [Docker] Nginx - React - Nodejs - Mysql 연동 실습하기 이번 포스팅에서 구현할 시스 lordofkangs.tistory.com 지난 포스팅까지 간단한 풀스택 시스템을 쿠버네티스에 클러스터 적용해보았다. MySQL DB에 데이터를 입력하고 조회까지 하였지만 컨테이너를 내렸다고 올리면 데이터가 모두 사라져 버린다. 컨테이너를 노드 안의 외부볼륨에 마운트 하면 컨테이너가 내려가더라도 데이터를 유지할 수 있다. GitHub - mgKang3646/Goorm_Practi..

DevOps/K8S 2023.10.16

[Kubernetes] ClusterIP, NodePort, LoadBalancer의 차이

쿠버네티스에서 가장 많이 사용하는 서비스(Service) 유형에는 3가지가 있다. 1. ClusterIP 2. NodePort 3. LoadBalancer 3가지가 어떤 역할을 하는지를 알아보기 전에, 먼저 간략히 IP와 Port 개념을 알아보자. IP는 네트워크상의 특정 노드를 가리키는 주소이다. 그리고 Port는 노드 안에 존재하는 여러가지 서비스의 창구이다. 그러므로 하나의 노드는 하나의 IP와 여러 개의 Port를 갖는다. Port는 16비트로 이루어져있고 0~65535까지 존재한다. 쿠버네티스 클러스터 안에는 여러 오브젝트가 존재하는데, IP가 부여되어 하나의 노드로써 역할을 한다. 서비스(Service)도 IP가 부여되는 클러스터 내 오브젝트이다. 서비스는 하나의 IP와 여러 개의 포트를 가지..

DevOps/K8S 2023.10.13