전체 103

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..

[Jenkins] Jenkins agent 파드에 toleration 추가하는 방법

Jenkins의 agent를 JCasC로 관리하고 있습니다.Taint가 있는 노드에 agent를 배치할 필요가 있어서, toleration을 추가하는 방법을 알아보았습니다. Jenkins 관리 -> Clouds 메뉴에서 Pod Template을 보면, NodeSelector, Annotation 등 은 있지만, Toleration을 추가하는 메뉴가 없는 것을 확인할 수 있습니다.또한, 공식 문서의 Pod template 설정에도 toleration key가 없습니다. 이렇게 직접적으로 지원하지 않는 파드 설정은 yaml 키를 사용해서 설정할 수 있습니다. jenkins: clouds: - kubernetes: - label: "do-no..

Cloud & DevOps/CICD 2024.08.31

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

Athena로 S3에 저장된 VPC flow logs 조회하기 - 2탄 (+ Glue Crawler)

지난 글에서 사용한 partition projection 방식에서 개선 필요한 점이 있어, 2탄을 작성합니다. Athena로 S3에 저장된 VPC flow logs 조회하기VPC flow logs를 Athena로 조회하기 위한 설정 방법을 소개합니다. VPC flow logs 설정 VPC flow logs를 S3에 저장할 때의 주요 설정 항목은 아래와 같습니다. 1.Log record format VPC flow logs에 포함될 필드를 저장합popappend.tistory.com Partition Projection을 사용하며 발견한 이슈기존에 아래와 같이 partition projection을 사용한 DDL문을 사용하여 테이블을 생성한 뒤, 해당 테이블에 대해 쿼리를 실행했을 때, WHERE절에 a..

Cloud & DevOps/AWS 2024.02.09

Athena로 S3에 저장된 VPC flow logs 조회하기

VPC flow logs를 Athena로 조회하기 위한 설정 방법을 소개합니다. VPC flow logs 설정 VPC flow logs를 S3에 저장할 때의 주요 설정 항목은 아래와 같습니다. 1.Log record format VPC flow logs에 포함될 필드를 저장합니다. 모든 필드 저장 시 아래와 같이 log line format이 정해집니다. ${account-id} ${action} ${az-id} ${bytes} ${dstaddr} ${dstport} ${end} ${flow-direction} ${instance-id} ${interface-id} ${log-status} ${packets} ${pkt-dst-aws-service} ${pkt-dstaddr} ${pkt-src-aws-s..

Cloud & DevOps/AWS 2024.02.03

컨테이너 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
반응형