반응형
쿠버네티스에서 리소스를 배포하기 위해서 yaml을 작성하여 배포합니다.
kubernetes yaml 파일 작성법에 대해 정리하겠습니다.
service.yaml 예시 1
apiVersion: v1
kind: Namespace
metadata:
name: glue-service
---
apiVersion: v1
kind: Service
metadata:
name: client
namespace: glue-service
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80
selector:
app: client
---
apiVersion: v1
kind: Service
metadata:
name: config-server
namespace: glue-service
spec:
type: ClusterIP
ports:
- port: 8888
targetPort: 8888
selector:
app: config-server
- namespace : kubernetes 클러스터 내의 리소스를 논리적으로 분리
- 여러 팀 또는 프로젝트가 동일한 kubernetes 클러스터를 공유할 때, 분리하여 리소스를 관리할 수 있습니다.
- Service Manifest (client)
- metadata.name: client라는 이름의 서비스를 정의합니다.
- spec.type: LoadBalancer로 설정되어 외부에서 접근 가능한 로드 밸런서로 설정합니다.
- 해당 서비스는 Pod의 Label이 app: client인 Pod들을 타깃으로 선택
- Service Manifest (server)
- spec.type: ClusterIP로 설정되어 클러스터 내부에서만 접근 가능합니다.
- 8080 포트로 들어오는 트래픽을 해당 서비스에 연결되어 있는 Pod의 8080번 포트로 전달합니다.
- 해당 서비스는 Pod의 레이블이 app:config-server인 파드들을 타겟으로 선택합니다.
service.yaml 예시 2
apiVersion: v1
kind: Service
metadata:
name: <serviceName>
namespace: <namespace>
spec:
type: <serviceType>
ports:
- port: 80
protocol: TCP
targetPort: 8888
selector:
app: <Pod Label 작성>
deployment.yaml 예시
apiVersion: apps/v1
kind: Deployment
metadata:
name: <deploymentName>
namespace: <namespace>
spec:
replicas: 1
revisionHistoryLimit: 3
selector:
matchLabels:
app: <PodTemplate의 Label>
template:
metadata:
labels:
app: <Pod Label>
spec:
containers:
- image: <image:tag>
name: <containerName>
ports:
- containerPort: <containerPort>
imagePullSecrets:
- name: <serivce-secret>
- Deployment 이름을 metadata.name에 작성합니다.
- spce.selector.matchLabels를 통해 PodTemplate의 라벨을 가진 파드를 선택합니다.
- spec.template.metadata.labels를 통해 새로운 파드를 생성할 때 사용되는 파드 템플릿 지정, 파드에 부여할 라벨 설정합니다.
반응형