전체 글

전체 글

    [Kubernetes] Pod Lifecycle

    pod-lifecycle ✔️ 파드의 상태 파드의 상태는 컨테이너의 상태를 반영한다. 쿠버네티스는 다양한 컨테이너 상태를 추적하고 파드를 다시 정상 상태로 만들기 위해 취할 조치를 결정하며, 파드의 status 필드는 phase 필드를 포함하는 PodStatus 오브젝트로 정의된다. phase에 가능한 값은 다음과 같다. 값 의미 Pending 파드가 쿠버네티스 클러스터에서 승인되었지만, 하나 이상의 컨테이너가 설정되지 않았고 실행할 준비가 되지 않았다. 여기에는 파드가 스케줄되기 이전까지의 시간 뿐만 아니라 네트워크를 통한 컨테이너 이미지 다운로드 시간도 포함된다. (이미지 사이즈가 크면 pending 상태가 조금 더 지속된다) - 스케쥴링되기 전, 이미지 받기 전, 컨테이너가 준비 되기 전 Runni..

    [Kubernetes] k8s Label, LabelSelector, Annotations

    📌Index Label LabelSelector Annotations ✔️ Label Labels Label은 AWS의 TAG와 비슷하여, Label은 리소스에 하나 이상 설정할 수 있고, 중복될 수 있다. Label은 오브젝트의 특성을 식별하는 데 사용한다. metadata의 키를 사용하며, 키는 중복이 가능하다. 권장 레이블 : 권장일 뿐 must는 아니다. 일반적으로 애플리케이션 이름, 버전, 도구, 만든 사용자 등을 붙여준다. 유효한 레이블 조건 63 자 이하(공백일 수도 있음) (공백이 아니라면) 시작과 끝은 알파벳과 숫자([a-z0-9A-Z]) 알파벳과 숫자, 대시(-), 밑줄(_), 점(.)을 중간에 포함 가능 참고로 kubernetes.io/와 k8s.io/ 접두사는 쿠버네티스의 핵심 컴포..

    [Kubernetes] k8s Namespace (feat. 이름과 UID)

    ✔️ 이름과 UID 오브젝트 이름과 ID | Kubernetes 클러스터의 각 오브젝트는 해당 유형의 리소스에 대하여 고유한 이름을 가지고 있다. 이름은 Namespace 내에서 유일하면 된다. Namespace는 분리하기 위한 용도와, DNS이름이 분리되는 용도를 위해 사용한다. 기본적으로는 default Namespace를 사용한다. 오브젝트를 리소스로 만들 때 쿠버네티스의 컨트롤러 매니저는 해당되는 리소스에 UID를 붙이게 되고, 모든 쿠버네티스 오브젝트는 전체 클러스터에 걸쳐 고유한 UID를 가지고 있다. ✔️ Namespace namespace란, 쿠버네티스 클러스터 내의 논리적인 분리 단위이다. 다음과 같이 리소스를 분리할 수 있다. 리소스 분리 서비스 별 사용자 별 환경: 개발, 스테이징, ..

    [Kubernetes] k8s Workload : Pod

    📌Index 파드(Pod)란? Pod 생성 및 관리 YAML 파일로 파드 정의 Pod 디자인 Pod 포트 포워딩 ✔️ 파드(Pod)란? 워크로드는 쿠버네티스에서 구동되는 애플리케이션이다. 워크로드가 단일 컴포넌트이거나 함께 작동하는 여러 컴포넌트이든 관계없이, 쿠버네티스에서는 워크로드를 일련의 파드 집합 내에서 실행한다. Pod는 하나 이상의 컨테이너 그룹으로, 컨테이너를 실행하기 위한 오브젝트이다. 쿠버네티스에서 관리할 수 있는 가장 작은 Workload는 Pod이다. 즉, 쿠버네티스는 컨테이너를 직접 컨트롤하지 않고, 파드만 관리할 수 있다 참고로 하나의 파드는 하나의 호스트에만 배치되고, 하나의 노드에 배치된다. 파드의 사용 단일 컨테이너를 실행하는 파드 파드가 하나의 컨테이너만 포함하는 경우이다...

    [Kubernetes] k8s 오브젝트(Objects)

    📌Index 쿠버네티스 오브젝트란? 오브젝트의 버전 오브젝트의 정의 오브젝트 관리 ✔️ 쿠버네티스 오브젝트란? 출처: https://dev.to/chrisedrego/kubernetes-monitoring-kube-state-metrics-2bbi 쿠버네티스 오브젝트 이해하기 | Kubernetes 레퍼런스 | Kubernetes 쿠버네티스 오브젝트란 클러스터 내부의 엔티티로서, 이후 설명할 파드, 컨트롤러, 서비스 등의 인스턴스를 의미한다. 각각의 오브젝트는 쿠버네티스 API의 리소스 종류에 맞게 설정되고 생성된다. 쿠버네티스 오브젝트는 쿠버네티스 시스템에서 영속성을 가지는 오브젝트로, 오브젝트는 지정된 상태가 유지되도록 쿠버네티스에 의해 제어된다. 쿠버네티스에서 사용 가능한 오브젝트 리스트 $ kub..

    [Kubernetes] Kubespray로 쿠버네티스 설치하기

    Kubespray로 쿠버네티스 설치하기 | Kubernetes Readme (kubespray.io) https://github.com/kubernetes-sigs/kubespray kubeadm 방식은 k8s를 구성할때 수동으로 구성 모듈을 하나 하나 설치한다는 어려움이 있으나, 전체적인 구성요소를 이해하는데 장점이 있고, kubespray는 설치가 매우 간단하다는 장점이 있다. Kubespray는 ansible 기반의 배포툴(Kubeadm + Ansible)로, 클러스터의 구성은 아래의 그림과 유사하다. https://initmanfs.eu/ Requirements Ansible의 명령어를 실행하기 위해 Ansible v 2.9와 Python netaddr 라이브러리가 머신에 설치되어 있어야 한다 A..

    [Kubernetes] k8s kubeadm 클러스터 업그레이드(cluster upgrade)

    여기에 이어서, kubeadm으로 생성된 쿠버네티스 클러스터를 업그레이드해보자. 📌Index 버전 차이(skew) 정책 kubeadm cluster 업그레이드 ✔️ 버전 차이(skew) 정책 버전 차이(skew) 정책은 가능한 버전이 어디까지인가에 대한것으로, 쿠버네티스 구성 요소 간에 지원되는 최대 버전 차이를 설명한다. 쿠버네티스 버전은 x.y.z로 표현되는데, 여기서 x 는 메이저 버전, y 는 마이너 버전, z는 패치 버전을 의미한다. kube-apiserver 마스터 노드가 여러개인 경우, api server가 여러개 있을 수 있는데, 최신 및 가장 오래된 kube-apiserver 인스턴스가 각각 한 단계 마이너 버전 내에 있어야 한다. 즉, 최신 버전을 기준으로해서 마이너 버전 한 단계 아래..

    [Kubernetes] Worker Node 추가 구성하기 : Join

    본 글은 여기에 이어서 진행한다. Vagrant를 통해 Worker Node로 사용할 1대의 VM을 구축한 뒤, k8s 관련 패키지들을 설치 및 설정하고 Control Plane과 Worker Node가 동시에(1대에) 구축되어 있던 기존의 VM에 새로 구축한 Worker Node를 join할 예정이다. 📌Index VM 생성하기 Docker 설치 및 설정하기 kubeadm, kubelet, kubectl 설치하기 K8s Cluster에 Join하기 ✔️ VM 생성하기 Vagrantfile을 사용하여 ubuntu VM을 생생하자. Vagrant.configure("2") do |config| # Control Plane과 Worker Node가 동시에 구축된 기존의 VM config.vm.define "..

    [Kubernetes] 쿠버네티스(K8s) 설치하기 : Kubeadm

    쿠버네티스(K8s)를 설치하는 방법은 수십가지가 넘는다. 가장 일반적인 /핵심적인 방법은 다음들과 같다 Kubeadm : 표준 방법이나, 자동화가 불가능해서 관리는 힘들다 Kubespray : Kubeadm + Ansible 방식 kOps : 쿠버네티스를 AWS EC2에 설치해준다 Docker Desktop : 쿠버네티스의 가장 기본 기능만 사용 가능하다 minikube : local에 VM으로 쿠버네티스를 구성(가장 많이 사용하는 방법), 멀티노드도 지원한다 참고로 쿠버네티스는 버전이 3개월 마다 1번씩 나오고, 유지보수는 4개 버전만 한다. 따라서 쿠버네티스는 최소한 1년에 한번씩 업데이트를 해주어야한다. Kubeadm으로 클러스터 구성하기에 따라 진행해보자. Kubeadm 설치하기 원래 가장 먼저 ..

    [Kubernetes] 쿠버네티스(Kubernetes)란?

    📌Index 쿠버네티스(Kubernetes)란? 쿠버네티스의 기능 쿠버네티스가 아닌 것 쿠버네티스 컴포넌트(구성요소) 애드온(Add-on) ✔️ 쿠버네티스(Kubernetes)란? 쿠버네티스란 무엇인가? 쿠버네티스(k8s)란 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 오픈소스 시스템이다. Google이 내부 배포시스템으로 사용하던 borg를 기반으로 빠르게 발전하였고, 이후 Google이 CNCF(Cloud Native Couputing Foundation)에 기부함으로써, 쿠버네티스는 오픈 소스 프로젝트가 되었다. 참고: borg 기술 논문, CNCF Cloud Native Interactive Landscape 쿠버네티스는 단순한 컨테이너 플랫폼이 아닌 마이크로 서비스, 클라우드 플..

    [Docker] Docker Compose로 WordPress 배포하기

    Docker의 IaC인 Docker Compose를 이용하여 WordPress를 배포해보자 환경 구성 먼저 실습을 진행할 디렉토리를 생성한다. $ mkdir wp $ cd wp 다음으로 WordPress를 생성 및 구성하는 docker-compose.yaml을 작성한다. docker-compose.yaml version: "3" services: wp-db: image: mysql:5.7 restart: always environment: MYSQL_ROOT_PASSWORD: P@ssw0rd MYSQL_DATABASE: wordpress MYSQL_USER: wpadm MYSQL_PASSWORD: P@ssw0rd volumes: - wp-db-vol:/var/lib/mysql networks: - wp-..

    [Docker] Docker Compose의 사용

    Docker Compose는 Docker의 IaC와 같은 것으로, yaml 코드를 통해 컨테이너를 어떻게 실행할 지 정의하는 것이다. docker-compose 는 옛 명령어로, docker compose가 최근에 생긴 명령어이고, 옵션에서 몇가지 차이가 있다. 디렉토리 구성 먼저 실습을 실행할 디렉토리를 만들자. 본 글에서는 총 3개의 실습을 진행할 예정인데, 각각 example1 exampl2 exmple3 디렉토리에서 진행할 예정이다. $ mkdir compose 📋 실습1 $ mkdir example1 $ cd compose/example1 Docker Compose 파일은 docker-compose.yaml 또는 docker-compose.yml 로 정해져있다. 아래와 같이 docker-comp..

728x90