Kubernetes Secret
·
⚙️ Ops/Kubernetes
💡 Secret ConfigMap과 비슷하게 Volumn과 환경변수 방식으로 Pod에 정보를 주입한다. 정의 Password, API Key, SSH Key등 보안이 중요한 정보를 컨테이너에 주입해야 할 때 사용 ConfigMap과 사용법이 비슷하지만 Secret은 ConfigMap에 비해 민감한 정보를 주입하는게 목적이다. Kubernetes는 기본적으로 Secret의 값을 etcd에 저장하며 Base64 인코딩을 한다. RBAC를 이용해 Secret 오브젝트에 대한 읽기 권한을 잘 설정해야 한다. ex: ConfigMap과 Secret을 구분 보관하여 사용자별로 권한을 나눠준다. 종류 OPaque (Generic) 일반적인 용도의 시크릿 ConfigMap과 동일한 목적으로 사용 가능 민감한 데이터를 ..
Kubernetes ConfigMap
·
⚙️ Ops/Kubernetes
💡 ConfigMap (Key - Value) ConfigMap & Secret 어플리케이션을 배포하다 보면 환경에 따라 다른 설정값을 사용하는 경우 사용한다 Github Actions의 Secret처럼 컨테이너 런타임 시 변수나 설정값을 Pod가 생성될 때 넣어줄 수 있다 ConfigMap Key - Value 형식으로 저장됨 Config Map을 생성하는 방법은 literal로 생성하는 방법과 파일로 생성하는 2가지 방법이 있다 ConfigMap이나 Secret에 정의하고, 이 정의해놓은 값을 Pod로 넘기는 2가지 방법이 있다 값을 Pod의 환경 변수로 넘기는 방법 값을 Pod의 Disk Volume으로 Mount 하는 방법 Literal 형식 ConfigMap 생성 키:값이 language : j..
Kubernetes Service & Service Discovery
·
⚙️ Ops/Kubernetes
💡 Service 노드의 파드는 기본적으로 외부통신이 안되는 내부망의 환경에 있다 Service란 Pod의 논리적 집합이며 어떻게 접근할지에 대한 정책을 정의해놓은 것 Service는 기본적으로 Load Balancing 과 Port Forwarding 기능을 포함한다 Label Selector를 통해 노출시킬 오브젝트의 레이블을 지정하는 방식이 주로 쓰인다 외부에 노출시킬때 4가지 타입이 있다 ClusterIP (default) - 클러스터 내부 통신용 NodePort - 노드IP:Port 의 방식을 통해 외부에서 접근 (NAT), 30000번대 포트 Load Balancer - 외부의 Load Balancer를 사용하는 방법 ExternalName - kube-dns로 DNS를 이용하는 방법 💡 Se..
Kubernetes DaemonSet
·
⚙️ Ops/Kubernetes
💡 DaemonSet 클러스터 전체에서 공통적으로 사용되는 pod를 띄울때 사용하는 컨트롤러 ex: 로그수집기나 노드를 모니터링하는 pod 등 클러스터 전체에 항상 실행시켜 둬야 하는 pod를 실행할때 사용 taint와 tolleration을 사용하여 특정 노드들에만 실행가능 (tolleration은 taint보다 우선순위가 더 높다) Yaml 생성 # DaemonSet 생성 apiVersion: apps/v1 kind: DaemonSet metadata: name: test-elasticsearch namespace: kube-system labels: k8s-app: test-logging spec: selector: matchLabels: name: test-elasticsearch updateSt..
Kubernetes StatefulSet
·
⚙️ Ops/Kubernetes
💡 StatefulSet 어플리케이션의 상태를 저장하고 관리하는 쿠버네티스 오브젝트 replication controller와 같은 복제본을 가지고 있는 컨트롤러를 의미함 기존 Pod를 삭제하고 생성할 때 상태가 유지되지 않는 한계가 있고 삭제-생성을 하면 새로운 가상환경이 된다 하지만 StatefulSet으로 생성되는 Pod는 영구 식별자를 가지고 상태를 유지시킬 수 있다 Yaml 기반 생성 //myapp-sts.yaml apiVersion: apps/v1 kind: StatefulSet metadata: name: myapp-sts spec: selector: matchLabels: app: myapp-sts serviceName: myapp-svc-headless replicas: 2 templat..