(인강복습) 쿠버네티스 어나더 클래스 Sprint 1 - Object 그려보며 이해하기
마스터 노드에 디렉토리 생성
- mkdir -p /root/k8s-local-volume/1231
label(라벨)
- 앱정보를 바로 파악할수있음
- 셀렉터와 매칭하여 두 오브젝트를 연결
- prefix 는 도메인이며 권고사항
- part-of : 어플리케이션의 전체이름
- component : 서비스를 구성하고 있는 각각의 분리된 기능
- name : 어플리케이션 실제이
- instance : 여러 어플리케이션설치할때 값을 다르게 해서 설정 (name-식별자) = 오브젝트 네임
- version : 앱버전 변경되면 버전수정
- managed-by : 생성주체확인용도
selector(셀렉터)
- 오브젝트들 끼리 연결하기위해 사용 (꼭 이거만있는건 아님)
- 셀럭터의 내용이 모두 레이블에 포함되어있어야함
- 레이블에 추가로 더 있는건 괜찮음
- 인스턴스만 넣어도됨
Namespace
- 오브젝트들을 그룹핑해주는 역활
- 네임스페이스 삭제시 안에있는 오브젝트 모두 삭제
Deployment : pod 업데이트관리 + ReplicaSet 생성 (파드 복제본관리)
- 파드를만들고 업그레이드해주는 역활
- metadata
- namespace : 소속될 네임스페이스
- name : 네임스페이스안에서 네임은 중복되면안됨 (다른오브젝트끼리는 같아도됨)
- label
- spec
- sector
- replicas : 2 (파드 2개 생성)
- stratgy
- type : RollingUpdate
- template (내용대로 파드가 만들어짐)
- spec
- nodeSelector : pod을 띄울 노드를 선택
- containers :
- image : docker허브에 올린 이미지
- envFroms :
- configMapRef : 환경변수
- startupProbe : 시작이 잘되었는지 확인
- readinessProbe : 앱에 트래픽을 연결할건지 결정
- livenessProbe : 앱이 정상이 아니면 재시작할지 결
- resources : 자원얼마나 할당(cpu, 메모리) 할지 결정
- volumeMounts :
- name: files > mountPath : 파드내부에 만들어지는 디렉토리
- name: secret-datasource > mountPath
- volume :
- persitentVolumeClaim : containers-volumeMounts 와 매칭됨
- secret : containers-volumeMounts 와 매칭됨
- spec
Service : Pod한테 트래픽을 연결시켜줌
- 작명법
- 클러스터 내부통신용 : internal
- 외부통신용 : external
- metadata
- spec
- selector
- ports
- type
Configmap : 파드에 환경변수값 제공
- metadata
- data : 환경변수에 들어갈 값의 내
Secret : 파드에 들어갈 중요한값
- metadata
- stringData : 파일생
PersistentVolumeClaim
- metadata
- spec
- resources.requests.storage : 저장공간얼마나 사용할지 (필수값)
- accessModes : 읽고쓰기가 가능한지 (필수값)
- selector
PersistentVolume : 실제볼륨을 지정하는 역활
- Cluster Level Object
- spect
- local : OS에 해당패스를 볼륨으로 사용함
- nodeAffinity : 노드선택
HPA : 부하에따라 하드를늘려주는 스케일링역활
- spec
- scaletargetRef : 타겟
- minReplicas : 최소갯수
- maxReplicas : 최대갯수
- metrics : 늘리는기준
- behavior : 한번증가하면 딜레이를 두고 증가시킴
Node 가 클러스터를 구성하면서 자동으로 만든 오브젝트가 있음
이 오브젝트도 레이블이 있으며
Pod의 nodeSelector 와 PV의 nodeAffinity 가 연결시도
▶ Namespace
apiVersion: v1
kind: Namespace
metadata:
name: anotherclass-123
labels:
part-of: k8s-anotherclass
managed-by: dashboard
▶ Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: anotherclass-123
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
strategy:
type: RollingUpdate
template:
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: 24
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
apiVersion: v1
kind: Service
metadata:
namespace: anotherclass-123
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, Secret
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
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