Linux

14 posts in this category

/etc/environment 에 관해서(전역환경변수)

Linux /etc/environment 완벽 가이드

1. 개요

/etc/environment리눅스 시스템 전역에서 사용하는 환경변수를 설정하는 파일입니다.
주요 특징:

  • 로그인 세션 전체에 적용 (PAM 기반)
  • 쉘 종류와 무관 (bash, zsh, GUI 로그인, SSH 등)
  • 간단한 문법 (KEY=value)
  • 스크립트 기능 없음 (export, 변수 확장 불가)

목적: PATH, 로케일, 프록시 설정 등 공통 환경변수를 한 곳에서 관리.


2. 문법 및 제약

  • 형식: KEY=value (공백 포함 시 "쌍따옴표"로 감싸야 함)
  • export 키워드 사용 불가
  • $HOME, ~, 명령 치환($(...)) 동작 안 함
  • 주석은 보장되지 않으므로 가급적 피할 것

예시 문법

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
LANG="ko_KR.UTF-8"
JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64"
HTTP_PROXY="http://192.168.0.10:3128"
HTTPS_PROXY="http://192.168.0.10:3128"
NO_PROXY="localhost,127.0.0.1,10.96.0.0/12,10.244.0.0/16,.svc,.cluster.local"

3. 적용 범위와 우선순위

  • PAM을 거치는 로그인 세션(TTY, SSH, GUI)에 적용
  • 기존 세션에는 반영 안 됨재로그인 필요
  • 쉘 초기화 스크립트(/etc/profile, ~/.bashrc)에서 동일 변수를 재설정하면 덮어씀
  • systemd 서비스/etc/environment를 자동으로 읽지 않을 수 있음

4. 다른 설정 파일과 비교

파일대상특징
/etc/environment전역 세션간단한 KEY=value, 스크립트 불가
/etc/profile, /etc/bash.bashrc로그인 쉘export 가능, 조건문 가능
/etc/default/<서비스>서비스 전용Debian/Ubuntu 전통 방식
systemd unit 파일서비스 전용Environment=, EnvironmentFile= 사용

5. 설정 방법

sudoedit /etc/environment
# 또는
sudo nano /etc/environment

변경 후 새 세션에서 확인:

/etc/hosts 에 관해서

/etc/hosts 완전 정리 (K8s 운영자 관점)

집/랩 환경에서 K8s를 굴릴 때 /etc/hosts를 정확히 이해하면 “DNS가 안 잡히는 상황”, “부트스트랩 시 통신 안 됨”, “로컬 테스트 도메인 강제 매핑” 같은 문제를 빠르게 뚫을 수 있어요.
아래를 쭉 보면 역할 → 동작 원리 → 실전 설정 → K8s 특화 팁 순으로 정리돼 있습니다.


1) /etc/hosts는 뭐 하는 파일?

  • 로컬(host) 단에서 “이름 → IP”를 가장 먼저(보통) 해석하는 정적 매핑표
  • 네트워크를 타지 않고 OS가 파일을 읽어서 즉시 해석
  • nsswitch.conf 순서에 따라 보통 /etc/hosts가 DNS보다 우선
  • DNS 레코드와 충돌 시 /etc/hosts가 항상 이김

확인 명령:

/etc/resolv 에 관해서

📘 리눅스 /etc/resolv.conf 완벽 가이드 (K8s 환경 포함)

1. /etc/resolv.conf 역할

  • 도메인 이름 → IP 주소 변환(DNS Resolution) 시 참조하는 설정 파일
  • 모든 DNS 조회(dig, nslookup, 웹 브라우저 등)의 기본 규칙 제공
  • 쿠버네티스에서는 노드의 resolv.conf → Pod의 resolv.conf로 전파됨

2. 기본 구조 예시

nameserver 8.8.8.8
nameserver 1.1.1.1
search example.com local.lan
options ndots:2 timeout:2 attempts:2 rotate

주요 지시어

지시어설명예시
nameserver <IP>사용할 DNS 서버 (최대 3개)nameserver 8.8.8.8
search <도메인>짧은 호스트명에 붙일 검색 도메인search local.lan home.lan
domain <도메인>단일 검색 도메인domain local.lan
options추가 옵션ndots:2, timeout:3, rotate

3. 자주 쓰는 options

  • ndots:N → 점(.)이 N개 이상이면 FQDN으로 판단
    예: ndots:5이면 foo.bar도 search 도메인 붙여 여러 번 시도 → 느려질 수 있음
  • timeout:T → 응답 대기 시간(초)
  • attempts:N → 재시도 횟수
  • rotate → nameserver 라운드로빈 방식
  • single-request-reopen → IPv4/IPv6 동시 요청 문제 회피

4. 직접 수정하면 안 되는 이유

  • 많은 배포판에서 자동 생성/관리
  • 부팅, DHCP 갱신, 네트워크 재시작 시 덮어씌워짐
  • 관리 주체 예시:
    • systemd-resolved/etc/resolv.conf는 127.0.0.53(stub) 가리킴
    • NetworkManager
    • resolvconf, dhclient
    • Netplan

5. 올바른 수정 방법

systemd-resolved 사용 시

sudo nano /etc/systemd/resolved.conf
# DNS, Domains, DNSStubListener 설정
[Resolve]
DNS=1.1.1.1 8.8.8.8
FallbackDNS=9.9.9.9
Domains=local.lan
sudo systemctl restart systemd-resolved
resolvectl status
  • kubelet이 참고할 파일: /run/systemd/resolve/resolv.conf

NetworkManager 사용 시

nmcli connection modify eth0 ipv4.dns "1.1.1.1 8.8.8.8"
nmcli connection modify eth0 ipv4.ignore-auto-dns yes
nmcli connection up eth0

DHCP 클라이언트 사용 시

# /etc/dhcp/dhclient.conf
supersede domain-name-servers 1.1.1.1, 8.8.8.8;

6. 쿠버네티스에서의 resolv.conf

dnsPolicy

설명
ClusterFirst기본값. 클러스터 DNS(CoreDNS) 우선
ClusterFirstWithHostNethostNetwork Pod에서 클러스터 DNS 우선
Default노드의 resolv.conf 그대로 사용
None완전 수동, dnsConfig 필요

Pod에서 dnsConfig 사용 예

apiVersion: v1
kind: Pod
metadata:
  name: dns-test
spec:
  dnsPolicy: None
  dnsConfig:
    nameservers:
      - 1.1.1.1
    searches:
      - example.com
    options:
      - name: ndots
        value: "1"
  containers:
    - name: busybox
      image: busybox
      command: ["sleep", "3600"]

7. CoreDNS 업스트림 변경 예

.:53 {
    forward . 1.1.1.1 8.8.8.8
    cache 30
    errors
}
internal.local:53 {
    forward . 192.168.0.1
}

8. 집 K8s 환경에서 추천 구성

  1. 노드:
    • /etc/resolv.conf가 127.0.0.53이면 kubelet에 다음 설정:
      --resolv-conf=/run/systemd/resolve/resolv.conf
      
  2. CoreDNS:
    • 신뢰 가능한 업스트림 DNS 명시
  3. Pod 특수 케이스:
    • 외부 DNS 바로 사용: dnsPolicy: None + dnsConfig

9. 디버깅 명령어

노드에서

cat /etc/resolv.conf
resolvectl status
dig @1.1.1.1 kubernetes.io

Pod에서

kubectl exec -it <pod> -- cat /etc/resolv.conf
kubectl exec -it <pod> -- dig kubernetes.default.svc.cluster.local

CoreDNS 로그

kubectl -n kube-system logs -l k8s-app=kube-dns

10. FAQ

  • Q: resolv.conf 직접 수정해도 돼?
    A: 재부팅/네트워크 재시작 시 덮어씌워짐. 상위 설정에서 변경 권장.
  • Q: nameserver 4개 넣으면?
    A: 3개까지만 유효.
  • Q: ndots 줄이면?
    A: 내부 DNS 성능 향상 가능.

📌 요약

  • /etc/resolv.confDNS 해석 기본 설정
  • 쿠버네티스에서는 노드 → Pod로 전파
  • Ubuntu + systemd-resolved 환경에서는 /run/systemd/resolve/resolv.conf를 kubelet에 지정
  • CoreDNS 업스트림 명시로 안정성 확보 셋업

/var/log/auth.log 에 관해서

/var/log/auth.log 완벽 가이드 (Ubuntu/Debian 기준)

1. 개요

  • 정의: /var/log/auth.log인증·권한 관련 보안 로그를 저장하는 파일입니다.
  • 대상: sshd, sudo, su, polkit, login, cron(PAM), systemd(PAM) 등에서 발생한 이벤트.
  • 목적: 비인가 접속, 권한 상승, 계정 잠금/해제 등 침해사고 탐지의 핵심 소스.

RHEL/CentOS 계열에서는 /var/log/secure 파일이 동일한 역할을 합니다.


2. 주요 기록 항목

구분예시 이벤트
SSH 접속로그인 성공/실패, 키 인증 실패, 접속원 IP, 포트
sudo 사용명령 실행, 권한 상승 시도
su 전환다른 계정/루트 전환
PAM 인증계정 만료, 잠금, 2FA
polkitGUI/서비스 권한 승인/거부
계정 관리잠금/해제, 비밀번호 변경

3. 로그 포맷 구조

기본 구조:

aaa 에 관해서
k8s 기본 네트워킹 cli

Kubernetes 운영자를 위한 리눅스 네트워크 명령어 정리

📌 목적: K8s 환경에서 네트워크 문제를 진단, 분석, 설정 변경을 위해 알아야 하는 필수 명령어와 활용 예시 정리
📅 마지막 업데이트: 2025-08-12


1. 필수 명령어

1.1 ip addr (or ip a)

네트워크 인터페이스(IP) 확인 및 설정

  • 자주 쓰는 옵션

    • ip addr show : 전체 인터페이스 IP 표시
    • ip addr show eth0 : 특정 인터페이스만 표시
    • ip addr add 192.168.0.10/24 dev eth0 : IP 추가
    • ip addr del 192.168.0.10/24 dev eth0 : IP 삭제
  • 사용 예시

scp 개념정리

SCP 완벽 가이드 (Kubernetes & Linux 실무용)

1) 기본 개념

  • scp = SSH 위에서 파일/디렉터리를 복사하는 명령.
  • 형식: scp [옵션] <src> <dst>
  • 방향: 로컬→리모트, 리모트→로컬, 리모트↔리모트 모두 가능.
  • 현대 OpenSSH는 기본적으로 SFTP 모드 사용 (-O로 레거시 scp 프로토콜 강제 가능).

2) 필수 옵션 & 패턴

자주 쓰는 옵션

옵션설명
-r디렉터리 재귀 복사
-p원본의 시간/권한 보존
-C압축
-l <kbps>대역폭 제한
-i <key>특정 프라이빗 키 사용
-P <port>SSH 포트 지정
-o <SSH옵션>임시 SSH 옵션 지정
-J <jump>점프호스트 경유

로컬 → 리모트

scp -P 2222 ./app.jar ubuntu@worker-1:/opt/apps/
scp -rpC ./config ubuntu@worker-2:/etc/myservice/

리모트 → 로컬

scp ubuntu@master-1:/var/log/k8s/api-server.log ./logs/

리모트 ↔ 리모트

scp ubuntu@worker-1:/opt/data/dump.tar ubuntu@worker-2:/opt/backup/
scp -3 ubuntu@worker-1:/opt/data/dump.tar ubuntu@worker-2:/opt/backup/

점프호스트 경유

scp -J ubuntu@bastion:22 ./site.tgz ubuntu@worker-3:/srv/

3) 실무 레시피

특정 파일만

scp ./*.yaml ubuntu@master-1:~/manifests/
scp ubuntu@master-1:'/var/log/*.log' ./logs/

숨김파일 포함

scp -rpC ~/.bash* ~/.zshrc ubuntu@worker-1:~/

권한 문제 해결

scp ./nginx.conf ubuntu@worker-1:/tmp/
ssh ubuntu@worker-1 'sudo mv /tmp/nginx.conf /etc/nginx/nginx.conf && sudo systemctl reload nginx'

대용량 성능 최적화

tar czf - ./dataset | ssh ubuntu@worker-2 'tar xzf - -C /data/'

중단 후 재개

sftp ubuntu@worker-1
sftp> reget bigfile.img
sftp> reput bigfile.img

kubectl과 함께

kubectl cp ./config.yaml default/my-pod:/app/config.yaml

4) 보안 베스트 프랙티스

# 서버 측 설정
PasswordAuthentication no
PubkeyAuthentication yes

# 권한 설정
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519 ~/.ssh/authorized_keys
  • 호스트키 검증: -o StrictHostKeyChecking=yes
  • 점프호스트 사용
  • 방화벽(UFW)로 SSH 포트 제한
  • Fail2ban / Cloudflare Tunnel 고려

5) 성능/안정화 팁

scp -o Ciphers=aes128-gcm@openssh.com -C big.csv ubuntu@host:/data/
scp -l 40000 big.img ubuntu@host:/backup/
scp -o ConnectTimeout=5 -o ServerAliveInterval=10 -o ServerAliveCountMax=6 ...

6) 문제 해결 체크리스트

  • Permission denied → 키/권한 확인
  • Connection timed out → 방화벽/포트포워딩 확인
  • 파일명 특수문자 → 따옴표 감싸기
  • 원격 글로빙 문제 → 따옴표로 원격에서 해석

7) rsync와 비교

  • scp: 간단, 빠른 일회성 복사
  • rsync: 동기화, 재개, 검증 등 강력

8) 즐겨 쓰는 스니펫

scp -pqC ./k8s/*.yaml ubuntu@master-1:~/manifests/
scp ubuntu@worker-2:'/var/log/syslog*' ./logs/worker-2/
scp -3 ubuntu@worker-1:/opt/dump.tgz ubuntu@worker-3:/opt/backup/
tar czf - ./dataset | ssh ubuntu@worker-2 'tar xzf - -C /data/'
scp ./nginx.conf ubuntu@worker-1:/tmp/ && ssh ubuntu@worker-1 'sudo install -m 644 /tmp/nginx.conf /etc/nginx/nginx.conf && sudo systemctl reload nginx'
scp -J ubuntu@bastion ./bundle.tgz ubuntu@worker-3:/srv/
scp -l 30000 -C ./logs.tar.gz ubuntu@backup:/backup/

9) 생산성 팁

  • ~/.ssh/config 적극 활용
  • 스크립트화
  • 전송 후 sha256sum 비교

ssh 개념정리

SSH 완벽 가이드 (K8s & 리눅스 실무 기준)

1. SSH 키 생성과 보관

SSH 접속의 기본은 키 기반 인증입니다.

키 생성 (ed25519 권장)

ssh-keygen -t ed25519 -a 100 -C "yun@homelab" -f ~/.ssh/id_ed25519
  • -t ed25519: 키 타입을 ed25519로 설정 (보안+속도)
  • -a 100: KDF 라운드 수 (브루트포스 방어)
  • -C: 키 주석(Comment)
  • -f: 키 저장 경로

퍼미션 설정

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub

공개키 배포

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host

2. ~/.ssh/config 설정 예제

Host *
  ServerAliveInterval 30
  ServerAliveCountMax 3
  TCPKeepAlive yes
  ControlMaster auto
  ControlPersist 10m
  ControlPath ~/.ssh/cm-%r@%h:%p
  IdentitiesOnly yes
  IdentityFile ~/.ssh/id_ed25519
  StrictHostKeyChecking ask
  UpdateHostKeys yes

Host bastion
  HostName 203.0.113.10
  User yun

Host k8s-master
  HostName 192.168.219.151
  User cadenza
  ProxyJump bastion

Host k8s-worker-1
  HostName 192.168.219.181
  User cadenza
  ProxyJump bastion

Host k8s-worker-2
  HostName 192.168.219.182
  User cadenza
  ProxyJump bastion

Host k8s-*
  Compression yes
  ForwardAgent no

3. 자주 쓰는 SSH 명령 패턴

  • 디버깅: ssh -vvv host
  • 특정 키로 접속: ssh -i ~/.ssh/otherkey host
  • 특정 포트: ssh -p 2222 host
  • 원격 명령 실행: ssh host "uptime"
  • 파일 복사: scp file.txt k8s-master:/tmp/
  • 디렉토리 동기화: rsync -avz -e ssh ./dir/ k8s-worker-1:/opt/dir/

4. 포트 포워딩 활용

로컬 포워딩 (-L)

ssh -L 16443:127.0.0.1:6443 k8s-master

→ 로컬에서 kubectl --server https://127.0.0.1:16443 가능

systemlog 에 관해서

리눅스 /var/log/syslog/var/log/messages 완전 정리 (K8s 운영 관점 포함)

1. 개요

  • Debian/Ubuntu 계열: /var/log/syslog → 주요 시스템 로그 파일.
  • RHEL/CentOS/Rocky 계열: /var/log/messages → 동일한 역할.
  • 공통점: 커널, 시스템 서비스, 사용자 애플리케이션의 일반 로그가 모임.

로그 흐름

  1. 커널/애플리케이션 → syslog API 호출 또는 표준 출력.
  2. systemd-journald 수집 → 메모리/디스크 저널에 저장.
  3. rsyslog/syslog-ng가 journald에서 읽어 파일(/var/log/...)로 기록.

2. 로그에 담기는 내용

  • 커널 이벤트: 네트워크 링크 업/다운, 디스크 I/O 에러, OOM Killer.
  • 시스템 서비스: kubelet, containerd, NetworkManager, CRI 플러그인.
  • 사용자 공간 데몬: sshd, cron, rsyslog.
  • 애플리케이션: syslog로 출력한 메시지.

예시

Aug 12 13:54:01 master-node-1 CRON[2345]: (root) CMD (/usr/local/bin/backup.sh)
Aug 12 13:54:03 worker-node-2 kernel: [12345.678901] eth0: link up
Aug 12 13:54:10 master-node-1 kubelet[1123]: Failed to pull image "nginx:latest": rpc error: ...

3. 로그 보는 방법

파일 기반

# 최신 100줄
sudo tail -n 100 /var/log/syslog
sudo tail -n 100 /var/log/messages

# 실시간 모니터링
sudo tail -f /var/log/syslog

# 특정 키워드 검색
sudo grep -i "kubelet" /var/log/syslog

journald 기반

# 현재 부팅 로그
sudo journalctl -b

# 서비스별
sudo journalctl -u kubelet
sudo journalctl -u containerd

# 심각도 필터
sudo journalctl -p err -b

# 시간 범위
sudo journalctl --since "2025-08-12 09:00" --until "2025-08-12 12:00" -u kubelet

# 커널만
sudo journalctl -k -b

4. 심각도 & 시설

  • Severity: 0(emerg) ~ 7(debug)
  • Facility: kern, auth, daemon, syslog, local0~local7

예시:

tee vs sed

Linux에서 teesed 사용법 (k8s.conf 예제 중심)

1. 개념

tee

  • 표준 입력을 파일로 쓰는 명령어
  • -a 옵션이 있으면 → 기존 내용 뒤에 추가(append)
  • -a 옵션이 없으면 → 기존 내용 덮어쓰기(overwrite)

sed

  • 파일 내용을 읽어 특정 줄을 검색/수정/삭제하는 스트림 편집기
  • 주로 기존 값 수정에 사용

2. 예제: /etc/sysctl.d/k8s.conf

2.1 기존 파일 내용

$ cat /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 0

3. tee 예제

3.1 내용 추가 (append)

cat << EOF | sudo tee -a /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

결과

기본네트워킹 다루기

📌 Kubernetes 네트워킹 실전 매뉴얼

목표: Kubernetes 네트워킹 개념을 중요도/빈도순으로 정리하고, 명령어 + 장애 사례 + 해결 방법 + 실전 예제를 함께 제공


1. Service 타입 & 동작원리

📖 개념

  • Pod는 재시작 시 IP가 변경됨 → 고정 IP 대신 Service로 접근
  • Service 종류:
    • ClusterIP: 클러스터 내부 전용
    • NodePort: 각 노드의 특정 포트를 외부에 개방
    • LoadBalancer: 외부 LB IP를 할당
    • Headless Service: DNS로 개별 Pod IP 반환

🔧 필수 명령어

kubectl get svc -A -o wide
kubectl describe svc my-service
kubectl get endpoints my-service -o wide

💡 실전 예제

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: ClusterIP

⚠️ 자주 겪는 문제 & 해결

  • 문제: Service는 있는데 Pod 연결 안 됨
    원인: Selector 라벨 불일치
    해결: kubectl get pod --show-labels로 라벨 확인 후 Service 수정

2. Pod-to-Pod 통신 (CNI)

📖 개념

  • CNI 플러그인(Calico, Flannel 등)이 Pod 간 네트워크를 연결
  • Pod CIDR은 노드별로 분리

🔧 필수 명령어

kubectl get pods -o wide
kubectl exec -it pod-a -- ping <pod-b-ip>
kubectl exec -it pod-a -- curl http://<pod-b-ip>:<port>

💡 실전 예제

  • Calico 설치
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

⚠️ 문제 & 해결

  • 문제: 다른 노드 Pod 간 ping 불가
    해결: CNI 포트(예: 4789/UDP, 179/TCP) 방화벽 허용

3. DNS & CoreDNS

📖 개념

  • 내부 DNS 서버로 CoreDNS 사용
  • svc-name.namespace.svc.cluster.local 형식

🔧 필수 명령어

kubectl exec -it pod-a -- nslookup my-service
kubectl exec -it pod-a -- dig my-service +short

💡 실전 예제

  • ExternalName 서비스
apiVersion: v1
kind: Service
metadata:
  name: external-service
spec:
  type: ExternalName
  externalName: example.com

⚠️ 문제 & 해결

  • 문제: 특정 네임스페이스에서만 DNS 실패
    해결: FQDN(my-service.namespace)로 호출

4. Ingress & Ingress Controller

📖 개념

  • HTTP/HTTPS 트래픽 라우팅
  • Ingress Controller(NGINX, Traefik)가 실제 처리

🔧 필수 명령어

kubectl get ingress -A
kubectl describe ingress my-ingress
kubectl logs -n ingress-nginx <controller-pod>

💡 실전 예제

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
    - host: myapp.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-service
                port:
                  number: 80

5. MetalLB / LoadBalancer

📖 개념

  • 온프레미스 환경에서 LoadBalancer 타입 구현
  • L2/L3 모드

🔧 필수 명령어

kubectl get ipaddresspool -n metallb-system
kubectl get l2advertisement -n metallb-system

💡 실전 예제

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: first-pool
  namespace: metallb-system
spec:
  addresses:
    - 192.168.0.240-192.168.0.250

6. NetworkPolicy

📖 개념

  • Pod 간 트래픽 제어

🔧 필수 명령어

kubectl get netpol -A
kubectl describe netpol my-policy

💡 실전 예제

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-nginx
spec:
  podSelector:
    matchLabels:
      app: nginx
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app: allowed-app
      ports:
        - protocol: TCP
          port: 80

7. Node-to-Pod & 외부 통신

📖 개념

  • ExternalTrafficPolicy=Local → 클라이언트 IP 유지
  • ExternalTrafficPolicy=Cluster → 로드밸런싱

💡 실전 팁

kubectl edit svc my-service
# spec.externalTrafficPolicy: Local

8. Port Forwarding

kubectl port-forward svc/my-service 8080:80

9. kube-proxy & iptables/IPVS

📖 개념

  • Service IP → Pod IP 변환 처리
  • iptables vs ipvs 모드

💡 상태 확인

kubectl get configmap kube-proxy -n kube-system -o yaml

10. 네트워크 트러블슈팅 명령어 모음

kubectl get pod -o wide
kubectl get svc -o wide
kubectl exec -it <pod> -- traceroute <ip>
kubectl exec -it <pod> -- tcpdump -i eth0 port 80

📌 Best Practice 모음

  1. 서비스 라벨 규칙 표준화 → Selector 오류 방지
  2. CNI 선택 시 성능/보안 고려 → Calico(CNI+NetworkPolicy), Cilium(eBPF)
  3. Ingress는 TLS 필수 → cert-manager로 자동 발급
  4. MetalLB IP Pool은 DHCP 범위와 겹치지 않게
  5. NetworkPolicy는 점진적 적용
  6. 모든 네트워크 구성은 IaC(GitOps)로 관리
  7. 테스트용 PortForward 적극 활용

네트워크설정(netplan)

Linux 네트워크 설정 (/etc/network/interfaces & /etc/netplan) 완벽 가이드

1. 어떤 방식을 쓰는지 확인/선택

  • Ubuntu 16.04 이하 / Debian/etc/network/interfaces (ifupdown/ifupdown2)
  • Ubuntu 18.04+/etc/netplan/*.yaml (renderer: systemd-networkd or NetworkManager)
# netplan 사용 여부
which netplan && ls /etc/netplan

# 현재 렌더러 확인
networkctl --version

홈 k8s 서버라면: netplan + renderer: networkd 권장


2. 공통 운영 팁

  • 원격 수정 시 netplan try로 롤백 가능
  • K8s 노드 IP는 고정 IP 또는 DHCP 예약 권장
  • 오버레이 네트워크 MTU 조정 필요
  • VLAN, bond 등으로 네트워크 분리 가능

3. /etc/network/interfaces 방식 예제

auto lo
iface lo inet loopback

# DHCP
auto enp3s0
iface enp3s0 inet dhcp

# Static IPv4
auto enp3s0
iface enp3s0 inet static
    address 192.168.10.21/24
    gateway 192.168.10.1
    dns-nameservers 1.1.1.1 8.8.8.8
    mtu 1500

# Static IPv6
iface enp3s0 inet6 static
    address 2001:db8:1::21/64
    gateway 2001:db8:1::1
    dns-nameservers 2606:4700:4700::1111

적용:

디스크 용량, 사용량 확인

Ubuntu 기준 디스크 용량 및 사용량 확인 가이드

이 문서는 Ubuntu 리눅스 환경에서 디스크의 물리적인 총 용량현재 사용 중인 용량을 확인하는 방법에 대해 자세히 설명합니다.


📌 1. df 명령어 - 디스크 사용량 확인

기본 사용법

df -h
  • -h : 사람이 읽기 쉬운 단위로 출력 (KB, MB, GB 등)

예시 출력

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       100G   20G   75G  22% /
tmpfs            16G  1.0M   16G   1% /dev/shm

유용한 옵션

옵션설명
-hHuman-readable (단위 표기)
-T파일시스템 유형 표시
--total총합 정보 표시
-a모든 파일시스템 포함 (사용 안 되는 것도 포함)

예시

df -hT
df -h --total

📌 2. lsblk 명령어 - 물리 디스크 및 파티션 확인

기본 사용법

lsblk

출력 예시

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  100G  0 disk 
└─sda1   8:1    0  100G  0 part /

유용한 옵션

옵션설명
-f파일 시스템 포함 출력
-o출력 필드 지정

예시

lsblk -f
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT

📌 3. du 명령어 - 디렉토리별 디스크 사용량 확인

예시: 루트 디렉토리의 사용량 요약

sudo du -sh /*
  • -s : 합계만 표시
  • -h : 사람이 읽기 쉬운 단위로 표시

특정 디렉토리 하위 전체 확인

du -h --max-depth=1 /home

📌 4. df + grep 으로 특정 마운트 포인트 확인

df -h | grep '/$'

📌 5. mount 명령어로 마운트 정보 확인

mount | column -t

📌 6. 디스크 용량 시각화 도구

ncdu - 인터랙티브한 디스크 사용량 확인 도구

sudo apt install ncdu
sudo ncdu /

📌 7. ls -lh 명령어 - 디렉토리 내 파일 크기 확인

ls -lh /var/log
  • -l : 자세히
  • -h : 사람 읽기 쉬운 단위

📌 8. 블록 디바이스 정보 - blkid

sudo blkid

📌 9. 디스크 스마트 정보 확인 - smartctl

sudo apt install smartmontools
sudo smartctl -a /dev/sda

✅ 요약

목적명령어
전체 디스크 사용량 요약df -h
물리 디스크 확인lsblk
디렉토리 사용량du -sh /*
시각적 디스크 탐색ncdu /
파일별 크기 확인ls -lh
마운트된 디스크만 확인`df -h

이 문서는 Ubuntu 및 일반적인 Linux 배포판에서 디스크 상태를 점검할 때 매우 유용합니다.

중요하고 자주 사용하는 설정들

리눅스에서 자주 사용하고 중요한 설정 파일 목록 (K8s 포함)

쿠버네티스(K8s) 환경에서 특히 자주 보게 되는 리눅스 기본 설정 파일네트워크 관련 설정 파일사용 빈도중요도 순으로 정리했습니다.


1. /etc/hosts

  • 용도: 호스트명과 IP 주소를 수동으로 매핑
  • K8s에서: 내부 테스트, DNS 문제 시 임시 호스트명 매핑
  • 예시
127.0.0.1   localhost
192.168.0.10 master-node
192.168.0.11 worker-node-1
  • 명령어 참고
cat /etc/hosts
sudo nano /etc/hosts

2. /etc/resolv.conf

  • 용도: DNS 서버 설정
  • K8s에서: CoreDNS 설정 확인, DNS 장애 트러블슈팅 시 필수
  • 예시
nameserver 8.8.8.8
nameserver 1.1.1.1
search cluster.local
  • 명령어 참고
cat /etc/resolv.conf

3. /etc/hostname

  • 용도: 서버의 호스트명 지정
  • K8s에서: 노드명 변경 시 참고
  • 예시
master-node
  • 명령어 참고
hostname
sudo hostnamectl set-hostname new-name

4. /etc/fstab

  • 용도: 부팅 시 자동 마운트할 파일 시스템 정의
  • K8s에서: PV(Local Path, NFS 등) 사용 시 마운트 설정 확인
  • 예시
UUID=xxxx-xxxx /data ext4 defaults 0 2
  • 명령어 참고
cat /etc/fstab

5. /etc/systemd/system/

  • 용도: 사용자 정의 systemd 서비스 파일
  • K8s에서: kubelet, containerd 등 서비스 설정
  • 예시
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
  • 명령어 참고
systemctl status kubelet

6. /etc/sysctl.conf & /etc/sysctl.d/

  • 용도: 커널 파라미터 설정
  • K8s에서: 네트워크 패킷 포워딩, 브리지 관련 설정 필수
  • 예시
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-iptables=1
  • 명령어 참고
sysctl -a
sudo sysctl --system

7. /etc/security/limits.conf

  • 용도: 프로세스별 리소스 제한
  • K8s에서: etcd, Elasticsearch 등 메모리/파일 핸들 제한 설정
  • 예시
* soft nofile 65535
* hard nofile 65535

8. /etc/profile & ~/.bashrc

  • 용도: 환경 변수 설정
  • K8s에서: PATH, alias, kubeconfig 경로 설정
  • 예시
export KUBECONFIG=/etc/kubernetes/admin.conf
alias k=kubectl

9. /etc/network/interfaces 또는 /etc/netplan/

  • 용도: 네트워크 인터페이스 IP 설정
  • K8s에서: 노드 고정 IP 지정
  • 예시 (netplan)
network:
  ethernets:
    eth0:
      addresses: [192.168.0.10/24]
      gateway4: 192.168.0.1
      nameservers:
        addresses: [8.8.8.8, 1.1.1.1]
  version: 2

10. /etc/ssh/sshd_config

  • 용도: SSH 서버 설정
  • K8s에서: 노드 원격 접속 보안 설정
  • 예시
Port 22
PermitRootLogin no
PasswordAuthentication no

11. /var/log/syslog & /var/log/messages

  • 용도: 시스템 로그
  • K8s에서: 네트워크/DNS 문제, kubelet 오류 확인
  • 명령어 참고
tail -f /var/log/syslog
journalctl -u kubelet -f

12. /etc/modules-load.d/

  • 용도: 부팅 시 로드할 커널 모듈 지정
  • K8s에서: br_netfilter, overlay 필수
  • 예시
overlay
br_netfilter

13. /etc/containerd/config.toml

  • 용도: containerd 설정
  • K8s에서: SystemdCgroup = true 설정 필요
  • 명령어 참고
sudo systemctl restart containerd

14. /etc/kubernetes/

  • 용도: K8s 마스터 노드 설정 파일
  • 예시
/etc/kubernetes/admin.conf
/etc/kubernetes/manifests/kube-apiserver.yaml

15. /etc/crontab & /etc/cron.*

  • 용도: 주기적 작업 예약
  • K8s에서: 백업, 로그 정리 등
  • 예시
0 2 * * * root /usr/local/bin/backup.sh

참고

이 목록은 K8s 홈랩 환경운영 리눅스 서버 모두에서 중요한 파일 위주로 선정했습니다.