쿠버네티스 Object

KIM HYUNMIN·2024년 8월 23일

쿠버네티스

목록 보기
5/16

Object 구성

들어가기에 앞서 labels 잘 알아야함

labels 속성

  • part_of : 전체 서비스를 대표하는 이름
  • component : 이서비스를 구성하고 있는 각각의 분리된 기능들
  • name : 어플리케이션의 실제 이름
  • instance : 여러개의 어플리케이션을 설치할 때 값을 다르게 줘서 사용
  • version : 라벨링을 하면 다른건 잘 변하지 않지만 이것은 계속 변경해줘야함

오브젝트 naming

ex) Namespace(monitoring) -> namespace에 담을 app의 범위
StatefulSet(prometheus-k8s) -> 인스턴스명
Service(prometheus-k8s)
Configmap(prometheus-k8s-rule) -> 사용목적에 따라 네이밍 추가

labels 의 또다른 기능

  • selector와 매칭 되서 두 오브젝트를 연결

selector

  • 셀렉터 안의 내용은 모두 라벨안의 내용에 있어야 함
  • 서비스 와 pvc에서 사용 형태 다름

▶ Namespace

  • object 들을 그룹핑 해주는 역할
  • 네임스페이스를 삭제하면 모든 네임스페이스 레벨의 모든 오브젝스 삭제
apiVersion: v1
kind: Namespace
metadata:
  name: anotherclass-123
  labels:
    part-of: k8s-anotherclass
    managed-by: dashboard

▶ Deployment

  • pod를 만들고 업그레이드 해주는 역할
  • namespace: anotherclass-123 -> namespace 에 deployment 소속
  • labels:
  • selector:
  • replicas: 2 -> pod를 2개 생성
  • strategy:
    type: RollingUpdate ->
  • template: -> 이후부터 이내용대로 pod가 만들어짐
  • nodeSelector: -> pod를 띄울 노드를 선택
  • envFrom: -> 어플리케이션의 환경변수와 관련된 곳
  • startupProbe: -> app을 체크하고있다가 기동이 안되면 app 재기동
  • readinessProbe: -> 트래픽을 연결할건지 결정하는 속성
  • livenessProbe: -> 재시작 판단하는 속성
  • resources: -> cpu랑 memory 얼마나 할당시킬지 ,limits 기능은 최대 얼마나 사용할지.-> 이기능 사용안하면 모든 자원 사용
  • volumeMounts의 이름과 volumes 이름이 매칭되서 persistentVolumeClaim 이라는 오브젝트랑 연결
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: 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
  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

  • pod의 환경변수 값을 제공하는 역할
  • data: -> 환경변수값으로 들어갈 내용
  • stringData: -> postgresql-info.yaml파일이 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

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

  • 부하에 따라 pod를 늘려주고 줄여주는 스케일링 역할
  • matrics; -> pod의 cpu가 평균 40% 늘어나면 스케일 아웃 설정
  • behavior: -> pod가 한번 증가하고 난 후 120초 동안 늘어나지 않게 설정 -> 부하를 더 증가시키지 않게하기 위해 설정
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

실제 생성되는 오브젝트 그림

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

▶ kubectl 명령

kubectl delete ns anotherclass-123
kubectl delete pv api-tester-1231-files

출처: https://cafe.naver.com/kubeops
출처: 쿠버네티스 인프런 강의

profile
Linux,Window,Network,docker,kubernets

0개의 댓글