kubectl version kubectl config view kubectl cluster-info kubectl get node kubectl create -f <file> kubectl get <resource> kubectl describe <resoucre> <name> kubectl logs <pod-name> kubectl exec <pod-name> -- <command> kubectl apply -f <file> kubectl delete <resource> <name> kubectl scale --replicas=<count> <resoucre>/<name> kubectl set image <resource>/<name> <container-name>=<image> kubectl exec -it <pod-name> --/bin/bash kubectl port-forward <pod-name> <local-port>:<pod-port> kubectl top pod kubectl logs -f <pod-name> 컨텍스트 란 뭐냐?
- 쿠버네티스에서 컨텍스트는 클러스터, 사용자, 네임스페이스를 포함하는 구성 정보를 의미합니다
- kubectl 명령어를 사용할 때 컨텍스트는 어떤 클러스터에 명령을 보낼것인지
- 어떤 사용자 인증 정보를 사용할 것인지,
- 그리고 명령이 실행될 네임스페이스는 어디인지를 결정하는데 사용된다.
-> 컨텍스트 란?
네임스페이스란 머냐?
- 프로젝트간 클러스터 리소스를 격리하는 용도로 네임스페이스를 쓴다.
- 네임스페이스는 하나의 물리적인 클러스터를 여러 가상의 클러스터 처럼 사용할수있게 해준다.
- 즉 리소스를 그룹화 해서 관리할수있다.
- 기본 네임스페이스
default:
- 내가 할당 하지 않을경우 디폴트로 사용되는 네임스페이스
kube-system:
- Kubernetes 시스템에서 생성된 리소스가 위치하는 네임스페이스 , 시스템 컴포넌트가 정상작동하기 위해 사용됨.
kube-public:
- 클러스터 전체에서 공개적으로 접근 가능한 리소스를 위한 네임스페이스
- 예. 클러스터 정보를 포함한 ConfigMap이 이 네임스페이스에 위치할수 있다.
kube-node-lease:
- 각 노드의 lease 객체를 위한 네임스페이스,
- 노드의 가용성을 보다 효율적으로 관리하기 위함.
kubectl get namespaces kubectl config current-context kubectl config use-context <context-name> kubectl -n <namespace> <command> kubectl <command> --help
apiVersion :v1
kind: Pod
metadata:
name: my-pod
namespace: my-namespace
spec:
containers:
- name: my-container
image: nginx
kustomization.yaml 파일 내에서 전역적으로 네임스페이스를 지정할수 있다.# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomiztion
namespace: my-namespace
resource:
- deployment.yaml
- service.yaml
namespace: my-namespace 라고 지정하면 resource에 명시된 모든 리소스 들은 my-namespace에 배포된다.여기서 apiVersion, kind 에 있는것도 법칙이 있다.
- apiVersion : Kustomize의 스키마 버전을 지정
- kustomize.config.k8s.io/v1beta1은 Kustomize의 특정 API 버전을 나타냅니다. 이 값은 Kustomize의 버전에 따라 달라질 수 있으며, 정확한 값을 사용해야 합니다
- kind: 리소스 유형
- Kustomize 설정의 경우, Kustomization이라는 값이 사용됩니다.
빌드 하는법
kustomize build . --enable-helm kustomize build . --enable-helm | kubectl apply -f -
kustomization.yaml 파일을 사용해서 리소스의 구성을 관리한다.패치란?
kubectl patch 과 함께 사용 된다.kubectl patch deployment my-depolyment -p '{"spec":{"replicas":5}}-p 옵션은 패치할 내용을 JSON 형식으로 제공한다. 패치 기능을 사용하면, 전체 리소스를 재배포하지 않고도 필요한 변경 사항을 빠르게 적용할 수 있어 운영 효율성을 높일 수 있습니다.
오버레이란?
- 기본 구성에 추가적인 설정이나 변경사항을 적용하는 방법을 의미
- kustomize 도구를 사용할때 자주 등장
- 오버레이는 애플리케이션의 베이스 구성 위에 환경별(개발, 스테이징, 프로덕션)또는 요구사항별로 구성 변경사항을 적용하는데 사용된다.
- 베이스 디렉토리는 애플리케이션의 공통 구성을 담고
- 오버레이 디렉토리는 특정 환경이나 요구사항에 맞게 베이스 구성을 수정하거나 확장하는 파일 포함
- 예)
- 프로덕션 환경에는 디버깅 정보를 제거하고 리소스 할당을 늘리는 등의 변경사항을 오버레이를 통해 적용할 수 있다.
- 오버레이는 네트워크는 클러스 내의 포드간 통신을 가능하게 하는 가상 네트워크를 제공한다.
- 구성 관리의 오버레이는 애플리케이션 베이스 구성에 특정 환경이나 요구 사항에 맞는 변경사항을 쉽게 적용할 수 있게 해준다.
kubectl apply -k ./path/to/kustomizationkubectl kustomize ./path/to/kustomization
- kustomize 를 사용하면 리소스 정의의 중복을 줄이고, 관리를 간소화 할수 있다.
- 예를 들어 개발과 프로덕션 환경에서 실행할 애플리케이션의 설정이 다를경우 ,
- 베이스 구성은 동일하게 유지하고 오버레이를 통해 각 환경의 특성을 반영할수있다.
.
├── base
│ ├── deployment.yaml
│ ├── kustomization.yaml
│ └── service.yaml
└── overlays
├── development
│ ├── kustomization.yaml
│ └── replica_count.yaml
├── production
│ ├── kustomization.yaml
│ └── replica_count.yaml
└── staging
├── kustomization.yaml
└── replica_count.yaml
일단 얘의 구조를 이해하고
다음 내가 사용하는 곳의 구조를 이해해 보자
kustomization.yaml 파일이 포함.kustomization.yaml 파일은 해당 환경에 대한 변경사항(예.이미지 태그, 리플리카수)를 적용하기 위해 base디렉토리를 참조한다. apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
sepc:
containers:
- name: my-app
image: my-app:tag
ports:
- containerPort: 80
apiVersion: v1
kind: Service
metadata:
name: my-app
spec:
ports:
- port: 80
targetPort: 80
selector:
app: my-app
정리해