k8s 30

Labels & Selectors

Kubernetes 클러스터 내의 수백 수천가지의 object를 분류하고 filter할 필요가 있음 어떤 방식으로 분류를 하던 그룹화 하는데에는 labels와 selectors 가 필요함. metadata.labels 에 key-value 형식으로 정의함 ReplicaSet에는 두 개의 labels가 있는데, templates 안에 있는 label은 pod의 label, metadata에 있는 label은 RS의 label임. RS의 spec.selector.mathLabels와 template.metadata.labels가 같아야 RS 가 관리하는 pod가 성공적으로 선택됨

CKA 2021.09.05

Declarative commands

kubectl apply가 대표적인 declarative commands kubectl apply -f pod.yaml 실행하면 cluster 내부 메모리에 live object configuration에는 status라는 정보가 추가됨 Last applied configuration은 local file을 json 형태로 변환하여 저장하고 있음. 이전의 리소스 정보와 현재의 정보를 비교하여 어느 부분이 삭제되었는지 확인하는 용도 Last applied configuration은 Live object configuration 의 metadata.annotation.kubectl.kubernetes.io/last-applied-configuration에 저장되어 있음. imperative commands는..

CKA 2021.09.02

Imperative commands

Imperative commands 는 바로 반영이 가능하지만 기능상의 제약이 있고, 한번 실행되고 사라진다. keep track 하기 힘듦 명령어 실행 전 항상 현재 상태에 대해서 파악을 한 후에 실행해야 하는 제약이 있음(update하려면 기존에 생성이 되어 있는지 파악을 먼저 해야 하는 번거로움) --dry-run: will not create the resource, instead, tell you whether the resource can be created and if your command is right. -o yaml: This will output the resource definition in YAML format on screen. POD Create an NGINX Pod kub..

CKA 2021.09.02

Services

어플리케이션의 안팎에 있는 컴포넌트들과 커뮤니케이션을 가능하게 해줌 enable loose coupling between microservices NodePort 노드 IP의 Port를 listen하고 있다가 요청을 뒤의 pod로 전달해줌. 이것이 NodePort TargetPort: pod에 열려있는 port no Port: 서비스 관점에서의 자체 Port 30000에서 32767 사이의 숫자만 선택 가능 definition의 spec.type에 NodePort 로 선언 Pod나 node의 개수에 관계 없이 service는 하나만 생성 ClusterIP cluster 내에 virtual IP 생성하여 통신 가능하게 함 definition의 spec.type에 ClusterIP로 선언 LoadBalanc..

CKA 2021.09.02

Pod Affinity를 적용하여 Pod 분산 배포하기

0. Kubernetes 환경 현재 프로젝트에서 구축한 Kubernetes 환경은 Kubernetes 1.15 버전이고, Node Autoscaling과 Pod Autoscaling 이 적용되어 있다. Worker Node가 AZ별로 이중화되어 있는 환경에서 Pod가 분산 배포되지 않고 한 Node에 몰려있으면, 그리고 그 Node가 Down 상태가 되면 Pod 의 서비스가 같이 Down되게 된다. 이러한 문제점을 피하기 위해 Pod에 Affinity 옵션을 설정하여 Pod을 분산 배포한다. 1. Pod Affinity 파드간 어피니티와 안티-어피니티를 사용하면 노드의 레이블을 기반으로 하지 않고, 노드에서 이미 실행 중인 파드 레이블을 기반으로 파드가 스케줄될 수 있는 노드를 제한할 수 있다. 규칙은 ..

Kubernetes 2021.09.01

Namespace

namespace는 k8s 내 가상의 리소스 격리 공간 namspace 옵션 주지 않으면 default namespace에 생성됨. kube-system과 kube-public은 k8s에서 자동으로 생성해줌. 외부 ns의 service 도메인은 app.namespace.svc.cluster.local로 호출해야 함. 서비스가 생성될 때 이와 같은 DNS Entry가 생성됨. cluster.local : default domain name of the k8s cluster svc. : subdomain 리소스의 definition의 metadata.namespace에 추가하면 해당 NS 에 생성됨. kubectl config set-context $(kubectl config current-context)..

CKA 2021.09.01

Deployments

ReplicaSet의 상위 components 배포된 instance들을 rolling update로 seamless하게 upgrade하거나, change를 되돌리고, 일시정지했다가 재개하는 등의 작업을 가능하게 해줌 deployment 생성하면 RS 생성하고 RS는 Pod 생성함. Deployment에 resources requests 설정하지 않으면 기본으로 cpu, memory 설정되도록 LimitRange 라는 리소스 생성해서 관리가 가능함. Memory 선언 시에 1G(Gigabyte)와 1Gi(Gibibyte)의 단위는 다르다! CPU Limit이 설정되어 있으면 kubernetes는 그 이상의 CPU 사용하면 throttle 걺. but Memory는 limit보다 더 쓸 수 있음. 하지만 ..

CKA 2021.08.31

Horizontal Pod Autoscaling 적용하기

0. HPA(Horizontal Pod Autoscaling)이란 Horizontal Pod Autoscaling은 Node에 배포된 CPU 사용량(또는 베타 지원의 다른 애플리케이션 지원 메트릭)을 관찰하여 레플리케이션 컨트롤러, 디플로이먼트, 레플리카 셋 또는 스테이트풀 셋의 파드 개수를 자동으로 Scale Out하고 Scale In하는 기능을 말한다. 비슷한 기능으로 Vertical Pod Autoscaling이 있는데, 이는 HPA와는 달리 Pod에 할당된 resource request 값을 적절히 조절하여 pod의 "크기"를 조정하는 것이다. 1. Metric Server 설치 Metric Server는 각 Pod와 Node의 리소스 사용량을 확인할 수 있는 컴포넌트이다. 아래의 명령어를 통하여..

Kubernetes 2021.08.31

Kube-proxy

Pod Network: 모든 node의 pod안에 연결되어 있는 클러스터 내부 가상 네트워크. 이 덕분에 pod간 통신이 가능 Service는 pod network에 조인이 불가능함. 이는 실체가 있는 것(Actual thing)이 아니기 때문. Service는 K8S 메모리에만 존재하는 가상의 component. kube-proxy: process that runs on each node in the kubernetes cluster kube-proxy는 새로운 service를 발견하면 각 service 뒤에 매칭되는 pod에 traffic 전달하는 규칙 생성. 각 node에 iptables 생성하여 대응되는 service와 pod IP 저장 kubeadm은 kube-proxy를 daemonset으로 ..

CKA 2021.08.30

ETCD

K8S의 distributed reliable Key-Value store 설치를 위해선 binary 받고 extract한 후 run 함 포트 2379가 기본 etcdctl : ETCD를 위한 control cli etcdctl set key1 value1 : Key setting etcdctl get key1 : Key getting kubectl get 명령어를 할 때 나오는 모든 정보들은 ETCD server에서 나옴 etcd contents Nodes Pods Configs Secrets Accounts Roles Bindings Others 저장된 정보에 업데이트가 되면 모두 etcd에서 업데이트됨 업데이트가 되어야 변경사항이 완료되었다고 여겨짐 Scratch 에 설치하면 etcd binary ..

CKA 2021.08.30