티스토리 뷰
728x90
✅ 아래 글의 내용 및 이미지는 인프런 "쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2" 강의를 듣고 정리한 글입니다.
실습자료
https://cafe.naver.com/kubeops/36
주의 : 해당 강의에서 Object 들에 대해서 30%만 이해하시면 됩니다. 이후 강의에서 나머지 70%를 설명 드려요. 쿠버네티스에는 어떤 Object가 있고, 대략 어떤 기능들을 하는구나 정도 파악시켜 드리기 위한 강의이기 때문에 이번 강의를 통해서 설명드린 Object들을 다 이해하려고 하시면 절대 안되세요 :) 라고 써져있다.
전체그림
Namespace - Object들을 그룹핑 해주는 역할
apiVersion: v1
kind: Namespace
metadata:
name: anotherclass-123
labels:
part-of: k8s-anotherclass
managed-by: dashboard
Deployment - POD들을 만들어주고 업그레이드 해주는 역할
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: anotherclass-123 # namespace에 소속됨.
name: api-tester-1231
labels:
part-of: k8s-anotherclass
component: backend-server
name: api-tester
instance: api-tester-1231
version: 1.0.0
managed-by: dashboard
spec:
selector:
matchLabels:
part-of: k8s-anotherclass
component: backend-server
name: api-tester
instance: api-tester-1231
replicas: 2 #POD를 2개 만들어라.
strategy:
type: RollingUpdate
template: # 이 아래 내용대로 POD가 만들어진다.
metadata:
labels:
part-of: k8s-anotherclass
component: backend-server
name: api-tester
instance: api-tester-1231
version: 1.0.0
spec:
nodeSelector:
kubernetes.io/hostname: k8s-master
containers:
- name: api-tester-1231
image: 1pro/api-tester:v1.0.0 #도커허브에 이 이름으로 등록되어있음.
ports:
- name: http
containerPort: 8080
envFrom: # 어플리케이션의 환경변수와 관련된 부분.
- configMapRef:
name: api-tester-1231-properties
startupProbe:
httpGet:
path: "/startup"
port: 8080
periodSeconds: 5
failureThreshold: 36
readinessProbe:
httpGet:
path: "/readiness"
port: 8080
periodSeconds: 10
failureThreshold: 3
livenessProbe:
httpGet:
path: "/liveness"
port: 8080
periodSeconds: 10
failureThreshold: 3
resources:
requests:
memory: "100Mi"
cpu: "100m"
limits:
memory: "200Mi"
cpu: "200m"
volumeMounts:
- name: files
mountPath: /usr/src/myapp/files/dev
- name: secret-datasource
mountPath: /usr/src/myapp/datasource
volumes:
- name: files
persistentVolumeClaim:
claimName: api-tester-1231-files
- name: secret-datasource
secret:
secretName: api-tester-1231-postgresql
Service - POD에게 트래픽을 연결해주는 역할
apiVersion: v1
kind: Service
metadata:
namespace: anotherclass-123 # 같은 종류의 오브젝트끼리는 이름이 같으면 안됨. 그러나 deployment와 service는 다른 오브젝트이므로 상관없음
name: api-tester-1231
labels:
part-of: k8s-anotherclass
component: backend-server
name: api-tester
instance: api-tester-1231
version: 1.0.0
managed-by: dashboard
spec:
selector:
part-of: k8s-anotherclass
component: backend-server
name: api-tester
instance: api-tester-1231
ports:
- port: 80
targetPort: http
nodePort: 31231
type: NodePort
Configmap - POD에 환경변수 값을 제공하는 역할
Secret - POD에 좀 더 중요한 값을 제공하는 역할
apiVersion: v1
kind: ConfigMap
metadata:
namespace: anotherclass-123
name: api-tester-1231-properties
labels:
part-of: k8s-anotherclass
component: backend-server
name: api-tester
instance: api-tester-1231
version: 1.0.0
managed-by: dashboard
data:
spring_profiles_active: "dev"
application_role: "ALL"
postgresql_filepath: "/usr/src/myapp/datasource/postgresql-info.yaml"
---
apiVersion: v1
kind: Secret
metadata:
namespace: anotherclass-123
name: api-tester-1231-postgresql
labels:
part-of: k8s-anotherclass
component: backend-server
name: api-tester
instance: api-tester-1231
version: 1.0.0
managed-by: dashboard
stringData:
postgresql-info.yaml: |
driver-class-name: "org.postgresql.Driver"
url: "jdbc:postgresql://postgresql:5431"
username: "dev"
password: "dev123"
PVC, PV - POD의 저장소 역할
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
namespace: anotherclass-123
name: api-tester-1231-files
labels:
part-of: k8s-anotherclass
component: backend-server
name: api-tester
instance: api-tester-1231
version: 1.0.0
managed-by: kubectl
spec:
resources:
requests:
storage: 2G
accessModes:
- ReadWriteMany
selector:
matchLabels:
part-of: k8s-anotherclass
component: backend-server
name: api-tester
instance: api-tester-1231-files
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: api-tester-1231-files
labels:
part-of: k8s-anotherclass
component: backend-server
name: api-tester
instance: api-tester-1231-files
version: 1.0.0
managed-by: dashboard
spec:
capacity:
storage: 2G
volumeMode: Filesystem
accessModes:
- ReadWriteMany
local:
path: "/root/k8s-local-volume/1231"
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- {key: kubernetes.io/hostname, operator: In, values: [k8s-master]}
HPA
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
namespace: anotherclass-123
name: api-tester-1231-default
labels:
part-of: k8s-anotherclass
component: backend-server
name: api-tester
instance: api-tester-1231
version: 1.0.0
managed-by: dashboard
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: api-tester-1231
minReplicas: 2
maxReplicas: 4
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 60
behavior:
scaleUp:
stabilizationWindowSeconds: 120
알게된 점
- 레벨에 따른 오브젝트
- cluster 레벨의 오브젝트인 PV와 Namespace 레벨의 오브젝트인 deployment, service, pvc, secret.
- Namespace를 삭제하면 Namespace 안에 만든 오브젝트가 모두 삭제된다.
강의 실습 오브젝트 그림
출처
728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- Bash tab
- svn
- localtime
- Spring Security
- 오라클
- intellij
- 북리뷰
- elasticsearch
- springboot
- k8s
- Kotlin
- rocky
- window
- JavaScript
- Linux
- Spring
- mybatis config
- mybatis
- maven
- jQuery
- config-location
- input
- Github Status
- oracle
- Java
- 베리 심플
- docker
- LocalDate
- Mac
- LocalDateTime
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함