카테고리 없음

(인강복습) 쿠버네티스 어나더 클래스 Sprint 1 - Object 그려보며 이해하기

희묭 2024. 3. 23. 12:44

 

마스터 노드에 디렉토리 생성

  • 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 와 매칭됨

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