Kubernetes 32

Pause Container 이해하기

가시다님의 Kubernetes Advanced Networking Study에 참여하게 되어, 스터디 때 다룬 주제를 정리하려고 합니다.2주차는 K8S Flannel CNI & PAUSE를 주제로 진행되었으며,이번 글에서는 Pause Container를 다룹니다.파드 생성 단계파드가 생성될 때 kubelet은 namespace와 cgroup을 설정하고, pause 컨테이너를 실행합니다.그리고 CNI는 namespace를 pause 컨테이너에 binding 한 이후에, application 컨테이너를 실행합니다. kubelet 로그를 보다보면, 아래와 같은 로그를 종종 발견할 수 있습니다.Sep 02 20:27:26 ip-10-xx-xx-xx.ap-northeast-2.compute.internal kub..

iptables 이해하기

가시다님의 Kubernetes Advanced Networking Study에 참여하게 되어, 스터디 때 다룬 주제를 정리하려고 합니다.1주차는 컨테이너 격리 & 네트워크 및 보안이 진행되었으며, 이번 글에서는 iptables 관련된 개념을 포함하고 있습니다. 들어가며kubernetes의 주요 구성요소 중 하나인 kube-proxy는 클러스터 내부의 서비스간 통신을 가능하게 하기 위해서 iptables를 사용하고 있습니다(iptables 모드인 경우).이번 글에서는 kubernetes 서비스의 통신 방식을 알아보기 전에 iptables의 개념과 동작 방식을 정리해보려 합니다. iptables 개념iptables는 방화벽으로 네트워크 필터링(허용/차단)과 제어를 수행합니다. 커널 모듈인 netfilter ..

도커 없이 컨테이너 만들기

가시다님의 Kubernetes Advanced Networking Study에 참여하게 되어, 스터디 때 다룬 주제를 정리하려고 합니다.1주차는 컨테이너 격리 & 네트워크 및 보안이 진행되었으며, 이번 글에서는 도커 없이 컨테이너를 만들면서 관련된 개념을 포함하고 있습니다. 실습의 주요 내용은 아래 영상을 참고했습니다.https://www.youtube.com/watch?v=mSD88FuST80  컨테이너는 프로세스를 격리된 공간에서 실행한다는 특징이 있습니다.격리를 할 때에는 새로운 기술을 활용하는 것이 아닌, 리눅스의 기능을 활용합니다.컨테이너를 생성할 때 사용하는 주요 기능을 알아보겠습니다. NamespaceNamespace는 컨테이너에 격리된 환경을 제공하는데 사용되는 주요 기능입니다.모든 프로세..

노드의 memory에 대하여 - cgroup과 OOM killer에 대해 알아보기

최근 노드 memory 사용률이 높아지면서 노드가 NotReady로 바뀌는 현상이 종종 발견되어, 노드 memory에 대해 자세히 알아보려 합니다.노드의 Allocatable 용량과 cgroup, OOM killer 등에 대한 내용이 포함되어 있습니다. 노드의 Allocatable 용량 계산 방식(memory에 중점)kubernetes 노드에 파드를 배치할 때 기본적으로 실행되는 system 데몬들과 kubelet을 위한 자원을 고려합니다.또한, 노드의 memory가 부족할 때 전체 노드에 영향을 주지 않도록 evictionHard를 통해 최소로 필요한 가용 memory 용량을 설정합니다.Allocatable 용량에서 필수 자원을 제외하여, 해당 자원을 제외하고 파드를 노드에 스케쥴링할 수 있도록 합니다..

Kubernetes 2024.07.31

여러 노드와 존에 파드를 분산하여 배포하는 방법

서비스의 가용성을 향상하기 위해 여러 노드(node)와 존(zone)을 걸쳐 파드를 분산하여 배포합니다.이때 사용할 수 있는 podAntiAffinity와 topologySpreadConstraints에 대해 알아보겠습니다. podAntiAffinity : 하나 이상의 파드를 이미 실행 중인 노드나 존에 대해 파드를 실행하지 않도록 설정하는 기능옵션requiredDuringSchedulingIgnoredDuringExecution : 조건에 맞게 스케쥴링을 할 수 없을 때 pending 파드 발생(hard)preferredDuringSchedulingIgnoredDuringExecution : 조건에 맞게 스케쥴링 하도록 시도하지만, 맞지 않더라도 스케쥴링 가능(soft)zone, node 분산 설정 예..

Kubernetes 2024.04.06

파드의 컨테이너 pid 및 cgroup에 할당된 cpu, mem 확인 방법(containerd)

특정 파드의 노드 상 pid를 확인하고 cgroup에 할당된 값을 확인해 보겠습니다.파드 pid 확인 및 cgroup 설정값 확인1. 해당 파드가 배포된 노드 접속2. 컨테이너 목록 확인 및 파드명으로 container id 검색# crictl psWARN[0000] runtime connect using default endpoints: [unix:///var/run/dockershim.sock unix:///run/containerd/containerd.sock unix:///run/crio/crio.sock unix:///var/run/cri-dockerd.sock]. As the default settings are now deprecated, you should set the endpoint i..

Kubernetes 2024.03.12

컨테이너 root로 접속하는 방법(containerd)

EKS 1.24 이후부터 EKS optimized AMI에 docker 명령어가 포함되지 않습니다. 간혹 테스트를 위해 파드의 컨테이너가 실행된 user가 아닌 root user로 컨테이너에 접근이 필요할 때 아래 방법을 사용할 수 있습니다. 방법 1) ctr 명령어1. 접근 필요한 파드가 배포된 노드에 ssh로 접속 2. 컨테이너 id 및 task 확인## container id $ ctr -n k8s.io containers list | grep -i ## task id $ ctr -n k8s.io task ls | grep 3. 컨테이너 접속$ ctr -n k8s.io task exec -t --exec-id 0 --user root /bin/bash 방법 2) runc 명령어1. 컨테이너 id ..

Kubernetes 2023.11.07

[6주차] EKS Security

이번 주는 EKS 에서의 인증/인가에 대해 알아봤습니다. 인증 누가 접근하고 있는가? 인가 무엇을 할 수 있는가?(권한) EKS에서의 인증/인가 EKS에서 인증/인가는 각각 다른 방식으로 처리가 됩니다. 인증 - IAM 클러스터를 생성하고나면 aws-auth configmap이 자동으로 생성된 것을 확인할 수 있습니다. $ kubectl get cm aws-auth -n kube-system -oyaml apiVersion: v1 data: mapRoles: | - rolearn: arn:aws:iam::111122223333:role/[NodeGroup IAM role명] username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrapper..

[5주차] EKS Autoscaling

이번 주는 EKS를 조금 더 유연하게 사용할 수 있는 scaling 방법에 대해 알아보았습니다. EKS에서 scaling 대상은 node와 pod가 있습니다. 각각 어떤 솔루션이 있는지 살펴보겠습니다. 실습 시 제일 하단에 있는 '사전 설치 툴'을 설치한 뒤 진행이 필요합니다. Node Cluster Autoscaler - metric server에서 제공하는 metric을 기반으로 노드그룹의 ASG 수를 조정합니다. - pending 상태인 pod가 생기면 노드 수를 늘리고 사용량이 낮다면 노드 수를 줄입니다. Cluster Autoscaler 설치 설치 전에 먼저 nodegroup의 ASG 최대값을 조정합니다. $ export ASG_NAME=$(aws autoscaling describe-auto..

[4주차] EKS Observability

이번주는 EKS Observability를 주제로 로깅, 메트릭, 기타 가시화를 위한 툴에 대해 알아보았습니다. Logging kubernetes에서 로깅은 EFK/ELK 스택을 주로 사용합니다. 이는 로그 데이터의 인덱싱과 검색을 담당하는 Elasticsearch, 데이터를 수집하고 필터링 및 변환하는 fluentd/fluentbit 또는 logstash, 데이터의 시각화를 담당하는 Kibana로 이루어져 있습니다. EFK 설치는 이전 글을 참고하시면 됩니다. 하지만 EKS에서는 fluentbit과 CloudWatch를 사용하는 Container Insights를 통해서도 로그 수집이 가능합니다. 이는 조금 뒤에 자세히 살펴보겠습니다. Metric Prometheus 프로메테우스는 대표적인 모니터링 솔..

반응형