PaaS/Kubernetes 85

(Kubernetes) Deployment 전략 들

1. Rolling Stratege 아래와 같은 일반 Deployment 구분에서 특별한 spec을 정의하지 않으면 Default로 Rolling 전략으로 배포된다. apiVersion: apps/v1beta1 kind: Deployment metadata: name: awesomeapp spec: replicas: 3 template: metadata: labels: app: awesomeapp spec: containers: - name: awesomeapp image: imagerepo-user/awesomeapp:new ports: - containerPort: 8080 strategy라는 파라미터를 추가로 주어서 명시적으로 정의할 수 도 있다. - spec.strategy.rollingUpdat..

PaaS/Kubernetes 2021.06.28

(Kubernetes) Kube-proxy, Kube-dns, core-dns

kube-proxy 쿠버네티스에서 서비스를 만들었을 때 나오는 ClusterIP나 NodePort로 접근하게 해주는건 큐브프록시(kube-proxy)입니다. 큐브프록시는 쿠버네티스 클러스터의 각 노드마다 실행되고 있으면서 클러스터 내부 IP로 연결되기 바라는 요청을 적절한 곳으로 전달해 주는 역할을 합니다. 큐브프록시가 네트워크를 관리하는 방법은 userspace, iptables, ipvs 3가지가 있습니다. 초기에는 userspace가 기본 모드였고 현재(2018년 6월)에는 iptables가 기본모드입니다. 그리고 iptables에서 ipvs 모드로 넘어가려고 하고 있습니다. ※ kube-proxy는 DaemonSet으로 정의 되어 있습니다. Kube-dns, core-dns 쿠버네티스 v1.12 ..

PaaS/Kubernetes 2021.04.13

Kubernetes Master/WorkerNode Server 설치하기(CentOS+Docker)

CentOS7.x 버전으로 작업을하였는데, 가급적 CentOS외 linux OS를 쓰기 바란다.. firewalld가 껴있는 OS 네트웍 커널 및 방화벽 정책이 두고두고 괴롭힐 것임 ■ 사전 OS 작업 SELINUX 끄기 # vi /etc/selinux/config SELINUX=enforcing 를 disabled로 변환 # setenforce 0 Firewalld 끄기 # systemctl stop firewalld # systemctl disable firewalld # vi /etc/hosts에 node dns정보 등록하기 DNS에 쿠버네티스 노드가 등록이 된게 아니라면 hosts에 직접등록해줘야 합니다. swap 비활성화 $ swapoff -a $ vi /etc/fstab swap 영역 비활성화..

PaaS/Kubernetes 2021.04.11

(Kubernetes) 클러스터 디자인 하기

■ ETCD 서버의 다중화 - ETCD 는 KEY-VALUE 쌍의 Database이다. - ETCD가 멀티 인스턴스일때 Write는 Leader만 가능하다. Leader는 매번 voting을 통해 정해진다. Leader 에서 Write를 하고 이를 다른노드에 복사한다. - Quorum 개념이 적용되는데, Quorum이란 멀티노드에서 성공적인 Write가 되기위한 최소 노드의 수를 말한다. 이는 Quorum = N/2+1공식을 따른다. 그래서 홀수 노드 구성일때만 효과적임 - Read는 모든 멀티 인스턴스가 가능하다.

PaaS/Kubernetes 2021.04.11

(Kubernetes) Ingress

Ingress 정의 쿠버네티스 Ingress란 HTTP(S) 기반의 L7 로드밸런싱 기능을 제공하는 컴포넌트이다클러스터 내의 서비스에 대한 외부 접근을 관리하는 API 오브젝트이며, 일반적으로 HTTP를 관리함. Ingress는 외부에서 쿠버네티스 내부로 들어오는 네트워크 요청을 어떻게 처리할지 결정하며, 쉽게 말해 외부에서 쿠버네티스에서 실행중인 Deployment와 Service에 접근하기 위한 관문과 같은 역할을 담당한다. 쿠버네티스 서비스는 기본적으로 L4 레이어로 TCP 단에서 Pod를 로드밸런싱한다. 그런데 MSA(마이크로 서비스 아키텍쳐)의 경우 쿠버네티스 서비스 하나가 MSA 서비스 하나로 표현되는 경우가 많고, 서비스가 하나의 URL로 대표되는 경우가 많다(/member, /product..

PaaS/Kubernetes 2021.04.08

(Kubernetes) DNS

쿠버네티스 DNS는 클러스터의 서비스와 DNS 파드를 관리하며, 개별 컨테이너들이 DNS 네임을 해석할 때 DNS 서비스의 IP를 사용하도록 kubelets를 구성한다. 클러스터 내의 모든 서비스(DNS 서버 자신도 포함하여)에는 DNS 네임이 할당된다. 기본적으로 클라이언트 파드의 DNS 검색 리스트는 파드 자체의 네임스페이스와 클러스터의 기본 도메인을 포함한다. POD 및 SERVICE FQDN으로 찾을 때 신텍스 pod-ip-address.my-namespace.pod.cluster.local your-svc.your-namespace.svc.cluster.local POD 안에서 도메인을 찾는 원리 kubelet은 POD를 실행할 때 /etc/resolv.conf 파일안에 CoreDNS 가리키는 ..

PaaS/Kubernetes 2021.04.07

(Kubernetes) Service

1. 서비스(Service) 란? 쿠버네티스에서 말하는 서비스라는 자원은 POD의 집합입니다. 동일한 서비스 동작을 구현하는 여러가지 POD를 하나로 묶어 관리하는 객체이죠. 왜 서비스라는 자원이 필요할까요? 2 가지 이유가 있습니다. 1) 서비스를 위한 고정된 IP가 필요하다. 쿠버네티스는 POD가 항상 건강한 상태이도록 관리합니다. 따라서 POD 하나가 이상이 있어 죽어버리면, 해당 POD를 다시 띄우죠. POD는 새로 띄워질 때마다 동적으로 IP를 할당 받습니다. 이러한 POD의 IP변경 가능성이 서비스를 제공하려는 상황에서는 문제가 되죠. 서비스를 위해서는 고객들이 이 서비스를 위해 접근할 고정된 IP 주소가 필요합니다. 여러분이 장사를 한다고 생각해보세요, 가게의 위치를 이리저리 계속 옮겨 다니..

PaaS/Kubernetes 2021.04.06

(Kubernetes) Networking

쿠버네티스의 파드 네트워킹 쿠버네티스는 도커와는 달리 파드단위로 컨테이너들을 관리한다. 파드는 여러개의 컨테이너로 구성 될 수 있는데 컨테이너들은 모두 동일한 IP를 부여받을 수 있다. 1) 싱글 노드에서의 Pod to Pod 통신 결론 : 네트워크 인터페이스 (= kubenet 혹은 CNI)를 통하여 파드에 할당되어 있는 고유한 IP주소로 통신할 수 있다. 2) 멀티 노드에서의 Pod to Pod 통신 결론 : 오버레이 네트워크 기능을 구현하기 위해 CNI를 설치하고 라우터를 경유하여 통신하게 된다. Pod → veth → CNI(Flannel) → eth0 → 라우터(=VPC) → eth1 → CNI(Flannel) → veth → Pod 여기서 오버레이 네트워크 기능에는 가상 네트워크 인터페이스, ..

PaaS/Kubernetes 2021.04.05

(Kubernetes) Storage And Volume

도커의 기본 아키텍처 : Cluster Layer이전까지는 ReadOnly로 수정이 불가하고 Delete시 통으로 날아간다. 따라서 Volume설정을 잘해야 영구적으로 데이터 관리가 가능하다. 볼륨을 설정하는 방법은 크게 다음과 같다. 1. POD에 다이렉트로 할당하기 2. Persistent Volume 설정하고 Persistent Volume Claim 으로 바인딩하기(자동화) 아래는 1번 방법이다. - POD에서 Volume설정을 통해 HostPath등을 직접 할당할 수 있다. hostPath configuration example apiVersion: v1 kind: Pod metadata: name: test-pd spec: containers: - image: k8s.gcr.io/test-we..

PaaS/Kubernetes 2021.04.04

(Kubernetes) Network Policy

네트워크폴리시 리소스 기본적으로, 파드는 격리되지 않는다. 이들은 모든 소스에서 오는 트래픽을 받아들인다. 파드는 파드를 선택한 네트워크폴리시에 의해서 격리된다. 네임스페이스에 특정 파드를 선택하는 네트워크폴리시가 있으면 해당 파드는 네트워크폴리시에서 허용하지 않는 모든 연결을 거부한다. (네임스페이스 내에서 어떠한 네트워크폴리시에도 선택 받지 않은 다른 파드들은 계속해서 모든 트래픽을 받아들인다.) 네트워크 정책은 충돌하지 않으며, 추가된다. 만약 어떤 정책 또는 정책들이 파드를 선택하면, 해당 정책의 인그레스(수신)/이그레스(송신) 규칙을 통합하여 허용되는 범위로 파드가 제한된다. 따라서 평가 순서는 정책 결과에 영향을 미치지 않는다. 두 파드간 네트워크 흐름을 허용하기 위해서는, 소스 파드의 이그레..

PaaS/Kubernetes 2021.04.03