반응형
Intro
- kubnernetes는 명령형과 선언형 두가지로 오브젝트의 관리가 가능합니다.
- 위 두가지를 모두 잘 사용해야하므로 정리해보고자합니다.
- 해당 블로그는 kubernetes에 대해 사전 지식이 있는 분들 또는 CKA준비 하시는분들에게 추천드립니다.
Topic
- 선언형 관리 : pod/replicaset/deployment/servic의 manifest yaml파일 정리
- yaml파일의 하이픈("-")은 리스트 형태를 말함 ex) <\[]Object> , <\[]String>
- 아래 명령어로 선언형 manifest파일 구성 확인 가능
kubectl explain deployment --recursive | less
- 아래 명령어 로 선언형 오브젝트 적용
kubectl apply -f <manifest_file_name.yml>
2. 명령형 관리: pod/deployment/servic의 kubectl 명령어 정리
Pod/Replicaset/Deployment/Service의 관계도
pod_exam.yml
- 필수 기본 필드 4가지
- apiVersion
- kind
- metadata
- spec
apiVersion: v1
kind: pod
metadata:
name: myapp-pod
labels:
app: myapp
type: front-end
spec:
containers:
- name: nginx-container
image: nginx
pod 관련 kubectl명령어
## pod 생성
kubectl run <pod_name> --image=<image_name> --port=<port_number>
kubectl run nginx --image=nginx --port=80
## 모든 namespace의 pod확인
kubcectl get pods -A
## 모든 namespace의 pod확인 header없이 확인 하여 pod 개수 파악 하기
kubcectl get pods -A --no-headers | wc -l
## pod삭제
kubectl delete pod <pod_name> -n <namespace>
## 생성할 manifest file 추출하기
kubectl run <pod_name> --image=<image_name> --port=<port_number> --dry-run=client -o yaml > <manifest_file_name.yml>
kubectl run nginx --image=nginx --port=80 --dry-run=client -o yaml > pod_exam.yml
## 생성되어있는 manifest file 추출하기
kubectl get <pod_name> --dry-run=client -o yaml > <manifest_file_name.yml>
replicaset_exam.yaml
- pod의 meteadata / spec 필드가 template필드로 들어감
- spec필드의 selector.matchLabels 과 template 안에 pod의 metadata.lables과 일치해야함
apiVersion: apps/v1
kind: Replicaset #대소문자구분 필수
metadata:
name: myapp-replicaset
labels:
app: myapp #pod의 labels과 일치
type: front-end
spec:
replicas: 3
selector:
matchLables:
type: front-end
template:
# --------------------- pod에 해당하는 부분
metadata:
name: myapp-pod
labels:
app: myapp
type: front-end #replicaset의 labels과 일치
spec:
containers:
- name: nginx-container
image: nginx
# --------------------- pod에 해당하는 부분
replicaset 관련 kubectl명령어
## replicaset manifest file추출방법 (replicaset생성 명령어는 따로 없으므로 아래와 같이 deployment를 추출하여 kind를 변경함
kubectl create deployment <deployment_name> --image=<image_name> --replicas=<number> --dry-run=client -o yaml > <manifest_file_name.yml>
## replicaset relicas개수 변경
kubectl scale deployment <deployment_name> --replica=<number>
kubectl scale deployment nginx --replica=6
deployment_exam.yaml
apiVersion: apps/v1
kind: Deployment #대소문자구분 필수
metadata:
name: myapp-replicaset
labels:
app: myapp #pod의 labels과 일치
type: front-end
spec:
replicas: 3
selector:
matchLables:
type: front-end
template:
# --------------------- pod에 해당하는 부분
metadata:
name: myapp-pod
labels:
app: myapp
type: front-end #replicaset의 labels과 일치
spec:
containers:
- name: nginx-container
image: nginx
# --------------------- pod에 해당하는 부분
deployment 관련 kubectl명령어
## deploytment 생성
kubectl create deployment <deployment_name> --image=<image_name> --replicas=<number>
kubectl create deployment nginx --image=nginx
servie_exam.yaml
- service의 spec.type의 종류 : ClusterIP, NodePort, LoadBalancer, ExtnernalName (default는 ClusterIP)
- 참고 URL : https://kim-dragon.tistory.com/52
apiVersion: v1
kind: Service
metadata:
labels:
app: redis
name: redis
spec:
type: ClusterIP
selector:
app: redis
ports:
- name: http
port: 6379
protocol: TCP
targetPort: 6379
Service 관련 kubectl명령어
# service 생성 default type clusterip
kubectl expose pod <pod_name> --port=<port_number> --name=<service_name>
kubectl expose pod redis --port=6379 --name=redis-service
# --name 옵션을 따로 빼야하는 것을 주의함
kubectl expose deployment <depoyment_name> --port=<port_number> --name=<service_name>
kubectl expose deployment redis --port=6379 --name=redis-service
# service type nodeport
kubectl expose pod <pod_name> --port=<port_name> --name=<service_name> --type=NodePort
kubectl expose pod nginx --port=80 --name=nginx-service --type=NodePort
# 아래와 같이 service를 생성하면 lable이랑 selector가 service_name으로 알아서 맞춰짐
kubectl create service nodeport <service_name> --tcp=<port>:<target_port> --node-port=<node_port>
kubectl create service nodeport nginx --tcp=80:80 --node-port=30080
daemonset_exam.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: myapp-replicaset
labels:
app: myapp
type: front-end
spec:
replicas: 3
selector:
matchLables:
type: front-end
template:
metadata:
name: myapp-pod
labels:
app: myapp
type: front-end
spec:
containers:
- name: nginx-container
image: nginx
Daemonset 관련 kubectl명령어
- deployment.yaml을 가져와서 kind를 Daemonset으로 변경하고
- strategy와 replicas 필드를 없애야 함
# deployment.yaml가져오기
kubectl create deploy elasticsearch --image=k8s.gcr.io/fluentd-elasticsearch:1.20 --namespace=kube-system --dry-run=client -o yaml > ds.yaml
반응형
'IT > CKA' 카테고리의 다른 글
[CKA독학]kubernetes Cluster Maintenance 정리(drain/cordon/uncordon/ectd 백업&복구) (0) | 2021.06.04 |
---|---|
[CKA독학]kubernetes Static pod/multi scheduler 정리 (0) | 2021.06.03 |
[CKA독학]kubernetes Resource Requests/Limits요약 정리 (0) | 2021.06.03 |
[CKA독학]kubernetes 스케줄링 정리(taint&tolerations/NodeSelector/NodeAffinity) (0) | 2021.06.02 |
[kubernetes]서비스 타입 비교(ClusterIP/NodePort/LoadBalancer) (0) | 2021.05.24 |