Kubernetes 참고 자료
자주 사용되는 k8s 명령어와 파라미터
Page content
이것은 제 k8s cheat sheet입니다.
이 문서는 컨테이너를 설치하고 실행하는 것에서부터 정리까지, Kubernetes의 가장 중요한 명령어와 개념을 다룹니다.
Kubernetes 설치
Kubeadm 사용
kubeadm
을 사용하여 Kubernetes를 설치하려면 다음 단계를 따르세요:
-
환경 준비:
- 필요한 커널 모듈이 활성화되어 있는지 확인하세요:
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
- 변경 사항을 적용하기 위해 시스템을 재부팅하세요.
- 필요한 커널 모듈이 활성화되어 있는지 확인하세요:
-
Docker 및 기타 필수 조건 설치:
- Docker를 설치하세요:
sudo apt-get update sudo apt-get install -y docker.io
ebtables
와ethtool
을 설치하세요: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
- Docker를 설치하세요:
-
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"}}'.