이 글은 일프로 선생님의 쿠버네티스 어나더 클래스 지상편을 수강하고
복습 메뉴얼을 가이드에 따라 작성한 포스팅입니다
코드는 이곳에 있습니다.
사실 이번 편은 개인적으로 실전에 부딫치면서 알게 된 사실이 많아 세심하게 정리를 하지 않았습니다. ㅠㅠ
죄송합니다.
파레토의 법칙은 20%의 인구가 80%를 대변한다는 법칙이다.
이번 강의 또한 그렇다 20%의 오브젝트가 거의 전체를 대변한다
이때 그림에서
Cluster Level Object에는
Namespace, PV가 있고
Namespace Level Object에는
그 외 오브젝트 (Pod, Service, PVC 등이 속한다)
Namespace
Object를 그룹핑하는 역할이다
Deployment
Pod를 만들고 업그레이드를 해 주는 역할이다
- 전체 코드 (길음) -
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
속성 명 | 설명 |
replicas | pod를 만들 갯수 |
strategy | 배포 방식이다 |
teplate | pod에 대한 명세 |
teplate.image | pod의 컨테이너 이미지 태그 |
속성 명 | 설명 |
envFrom | configmap과 연결 |
startupProbe | app이 잘 기동됐는지 체크. 기동이 안 되면 App을 재기동한다 |
readinessProbe | app에 트래픽을 연결할 건지 결정하는 속성 app이 외부 트래픽을 받을 준비가 되었는지를 확인하는 역할 |
livenessProbe | app이 정상이 아니면 재시작을 시킬 건지 판단 |
resources | pod에 CPU랑 memory를 할당 limit : 최대 자원 사용량. 이 속성을 지정하지 않으면 pod가 노드의 자원을 모두 사용한다 |
volumeMounts | mountPath: pod 내부와 연결될 path (PVC, Secret 등과 연결) |
Service
Pod에게 트래픽을 연결하는 역할
- 코드 -
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
속성 명 | 설명 |
type | 외부 트래픽과 연결할 타입 예) ClientIP, NodePort, LoadBalencer |
ports | port: 서비스 자체의 포트 targetPort: 서비스가 바라보는 대상의 포트 nodeport: 외부 트래픽이 바라보는 노드의 포트 (NodePort 타입에만 있는 속성) |
selector | 서비스가 트래픽을 연결한 대상 pod들 (라벨로 타겟팅한다) |
ConfigMap
- 코드 -
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"
pod의 환경 변수 값을 제공하는 역할
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"
pod에 보안상 중요한 값을 제공하는 역할
PV ( Persistent Volume )
-코드-
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]}
pod가 사용할 실제 volume을 지정
local과 cloud용 타입이 나뉜다
PVC ( Persistent Volume Claim )
- 코드 -
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
PV와 연결되어 사용된다
HPA (Horizontal Pod Autoscaler)
- 코드 -
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
부하에 따라 pod를 늘려주고 줄여주는 스케일링 역할
pod내의 모든 container의 cpu가 평균 60% 이상일 때 scale up 한다
단, 바로 하지는 않고 120초 후에 scale up 한다 (behavior 속성)
(추후 HPA 세부 강의에서 또 진행하실 예정이다 !)
라벨링 컨벤션 | Tips
위 그림은 프로메테우스의 라벨링 예시이다
키 | 설명 | 값 |
part-of | 애플리케이션의 전체 이름 | kube-prometheus |
component | 구성요소 | prometheus |
name | 애플리케이션 이름 | prometheus |
instance | 인스턴스 식별자 | prometheus-k8s |
version | 버전 | 2.44.0 |
오브젝트 네이밍 예시
오브젝트 타입 | 네이밍 예시 | 설명 |
Service | api-tester-1231-internal | 내부 오브젝트 셀렉터 |
Service | api-tester-1231-external | 외부 셀렉터 |
HPA | api-tester-1231-event | 특정 이벤트에 대한 수평 확장 |
ConfigMap | init-data | 앱 초기화 (ex. 프로메테우스) |
Label의 종류
- 정보
- 기능 (selector에 의해 select될때)
즉,
- 정보와 기능성 역할하는 라벨과
- 정보만 역할만 하는 라벨 2가지가 있다
라벨의 prefix
app.kubernetes.io/part-of 등
'Infra, DevOps > 인프런 k8s 복습인증' 카테고리의 다른 글
[일프로님 k8s 복습인증] 5. App기능으로 이해 Probe (2) | 2024.02.05 |
---|---|
[일프로님 k8s 복습인증] 3. 실무에서 느껴본 쿠버네티스가 정말 편한 이유 (1) | 2024.01.24 |
[일프로님 k8s 복습인증] 2. 쿠버네티스 무게감 있게 설치하기 (0) | 2024.01.23 |
[일프로님 k8s 복습인증] 1. 컨테이너 한방 정리 (0) | 2024.01.23 |
hi hello... World >< 가장 아름다운 하나의 해답이 존재한다
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!