Kubernetes 참고 자료

자주 사용되는 k8s 명령어와 파라미터

Page content

이것은 제 k8s cheat sheet입니다.
이 문서는 컨테이너를 설치하고 실행하는 것에서부터 정리까지, Kubernetes의 가장 중요한 명령어와 개념을 다룹니다.

k8s lights

Kubernetes 설치

Kubeadm 사용

kubeadm을 사용하여 Kubernetes를 설치하려면 다음 단계를 따르세요:

  1. 환경 준비:

    • 필요한 커널 모듈이 활성화되어 있는지 확인하세요:
      sudo sysctl net/bridge/bridge-nf-call-ip6tables=1
      sudo sysctl net/bridge/bridge-nf-call-iptables=1
      sudo sysctl net/bridge/bridge-nf-call-arptables=1
      
    • 변경 사항을 적용하기 위해 시스템을 재부팅하세요.
  2. Docker 및 기타 필수 조건 설치:

    • Docker를 설치하세요:
      sudo apt-get update
      sudo apt-get install -y docker.io
      
    • ebtablesethtool을 설치하세요:
      sudo apt-get install ebtables ethtool
      
    • HTTPS 지원 및 curl이 필요한 경우 설치하세요:
      sudo apt-get update
      sudo apt-get install -y apt-transport-https curl
      
    • Kubernetes 저장소를 추가하고 kubeadm, kubelet, kubectl을 설치하세요:
      curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
      sudo cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
      deb http://apt.kubernetes.io/ kubernetes-xenial main
      EOF
      sudo apt-get update
      sudo apt-get install -y kubeadm kubelet kubectl
      
  3. Kubernetes 클러스터 초기화:

    • 첫 번째 컨트롤 플레인 노드를 초기화하세요:
      sudo kubeadm init
      
    • 추가 컨트롤 플레인 노드와 워커 노드를 조인하세요:
      kubeadm join <control-plane-node>:8443 --token <token> --discovery-token-ca-cert-hash <hash>
      

Minikube 또는 Kind 사용

로컬 개발을 위해 minikube 또는 kind를 사용할 수 있습니다:

  • Minikube:

    minikube start
    

    공식 [Get Started! guide]를 따르세요.

  • Kind:

    curl -sfL https://get.k3s.io | sh -
    kind create cluster
    

    [Kind Quick Start page]를 따르세요.

일반적인 kubectl 명령어

기본 명령어

  • 리소스 정보 확인:

    kubectl get <resource>  # 리소스 목록 보기 (예: pods, services, deployments)
    kubectl get pods --all-namespaces  # 모든 네임스페이스의 pods 목록 보기
    kubectl get pods -o wide  # 더 많은 세부 정보와 함께 pods 목록 보기
    kubectl get pod my-pod -o yaml  # pod의 YAML 구성 가져오기.
    
  • 리소스 설명:

    kubectl describe <resource>  # 리소스의 상세 설명 (예: nodes, pods)
    kubectl describe nodes my-node
    kubectl describe pods my-pod.
    
  • 리소스 생성:

    kubectl create -f <manifest-file>  # YAML 또는 JSON 파일에서 리소스 생성
    kubectl create configmap <configmap-name> --from-literal=<key>=<value>  # ConfigMap 생성
    kubectl create secret generic <secret-name> --from-literal=<key>=<value>  # Secret 생성.
    
  • 리소스 삭제:

    kubectl delete <resource> <name>  # 리소스 삭제 (예: pod, deployment)
    kubectl delete pod my-pod
    kubectl delete deployment my-deployment.
    

Pod 관리

  • 컨테이너에 대한 명령어 및 인수 정의:

    apiVersion: v1
    kind: Pod
    metadata:
      name: command-demo
    spec:
      containers:
      - name: command-demo-container
        image: debian
        command: ["printenv"]
        args: ["HOSTNAME", "KUBERNETES_PORT"]
    
    kubectl apply -f <manifest-file>
    kubectl get pods
    kubectl logs command-demo.
    
  • 쉘에서 명령어 실행:

    apiVersion: v1
    kind: Pod
    metadata:
      name: shell-demo
    spec:
      containers:
      - name: shell-demo-container
        image: debian
        command: ["/bin/sh"]
        args: ["-c", "while true; do echo hello; sleep 10;done"]
    
    kubectl apply -f <manifest-file>
    kubectl get pods
    kubectl logs shell-demo.
    

ConfigMap 및 Secret 관리

  • ConfigMap 생성:

    kubectl create configmap <configmap-name> --from-literal=<key>=<value>
    kubectl create configmap app-config --from-literal=environment=production --from-literal=log_level=info.
    
  • Secret 생성:

    kubectl create secret generic <secret-name> --from-literal=<key>=<value>
    kubectl create secret generic db-secret --from-literal=username=admin --from-literal=password=supersecret.
    

Deployment 및 Service 관리

  • Deployment 생성:

    kubectl create deployment <deployment-name> --image=<image-name>
    kubectl create deployment my-deployment --image=nginx:latest.
    
  • Deployment를 Service로 노출:

    kubectl expose deployment <deployment-name> --type=NodePort --port=<port>
    kubectl expose deployment my-deployment --type=NodePort --port=80.
    

Namespace 및 Node 관리

  • Namespace 목록 보기:

    kubectl get namespaces
    
  • Namespace 생성:

    kubectl create namespace <namespace-name>
    kubectl create namespace my-namespace.
    
  • Node 목록 보기:

    kubectl get nodes
    kubectl get nodes --selector='!node-role.kubernetes.io/control-plane'.
    

모니터링 및 디버깅

  • 로그 보기:

    kubectl logs <pod-name>
    kubectl logs -f <pod-name>  # 실시간으로 로그 추적.
    
  • 이벤트 설명:

    kubectl describe events
    
  • 클러스터 정보 확인:

    kubectl cluster-info
    kubectl version  # Kubernetes 버전 확인.
    

고급 명령어

  • 리소스 정렬:

    kubectl get pods --sort-by='.status.containerStatuses.restartCount'
    kubectl get services --sort-by=.metadata.name.
    
  • 리소스 필터링:

    kubectl get pods --field-selector=status.phase=Running
    kubectl get nodes --selector='!node-role.kubernetes.io/control-plane'.
    
  • 특정 데이터 검색:

    kubectl get configmap myconfig -o jsonpath='{.data.ca\.crt}'
    kubectl get secret my-secret --template='{{index .data "key-name-with-dashes"}}'.
    

유용한 링크