카테고리 없음

Object 그려보며 이해하기

종종이94 2024. 3. 17. 12:57

 

[1] 강의 환경 구성하기

master node에 접속해서 디렉토리 생성

[root@k8s-master ~]# mkdir -p /root/k8s-local-volume/1231

 

 

 

 

dashboard 접속 > Namespace [모든 네임스페이스] > [+] 버튼 > [입력을 통해 생성] > yaml 파일 붙여넣기 > 업로드

 

▶ 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: # 앱이 잘 작동되고 있는지 감시하다가 잘 안되면 readinessProbe/livenessProbe 실행
            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  # 아래의 volumes의 name이 매칭되서 실제 PersistentVoumeClaim에 연결
              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

  • 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"
---
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

  • 저장공간 
  • PV는 Namespace 클러스터 레벨의 오브젝트이다.

 

 
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

 

 

 

 

 

 

 

[2] Object 그려보며 이해하기

Object

  • 부하에 따라 스케일링 서비스를 제공해주는 오브젝트

Kubernetes Another-Class Object

Label / Selector / Naming 

Label

쿠버네티스 오브젝트를 식별하기 위한 key/value 쌍의 메타정보 / 쿠버네티스 리소스를 논리적인 그룹으로 나누기 위해 붙이는 이름표

 

 

Selector

Label을 이용해 쿠버네티스 리소스를 필터링하고 원하는 리소스 집합을 구하기 위한 label query
Label을 이용해 쿠버네티스 리소스를 선택하는 방법(Label query)

 

 

Naming

쿠버네티스(Kubernetes)에서는 리소스를 관리하기 위해 네이밍 규칙을 따르는 것이 좋습니다. 쿠버네티스에서 네이밍은 관리 및 유지 보수를 용이하게 만들며, 다른 사용자 및 동료들이 쉽게 이해할 수 있도록 도와줍니다. 

 

Kubernetes Another-Class Labels, Selector, Naming

 

 

 

 

[3] 강의에서 배포한 Object 삭제

▶ kubectl 명령

[root@k8s-master ~]# kubectl delete ns anotherclass-123
[root@k8s-master ~]# kubectl delete pv api-tester-1231-files