티스토리 뷰
쿠버네티스(Kubernetes)에서는 API(Application Programming Interface) 객체를
사용하여 클러스터 내부의 다양한 자원을 관리합니다. 이러한 객체는 YAML 또는 JSON 형식으로
정의되며, Kubernetes API 서버를 통해 생성, 수정 및 삭제할 수 있습니다. 여기에는 일부
예가 있습니다.
1. Pod: Kubernetes에서 실행되는 최소 단위이며, 하나 이상의 컨테이너를 실행합니다.
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: nginx-container
image: nginx
2. Deployment: Pod를 관리하는 추상화 계층입니다. 일반적으로 ReplicaSet과 함께 사용되며,
Pod를 자동으로 복제하고 업그레이드할 수 있습니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx-container
image: nginx
3. Service: Pod의 집합에 대한 네트워크 엔드포인트를 정의합니다. 서비스는 클러스터 내부 및
외부에서 Pod에 대한 연결을 유지합니다.
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- name: http
port: 80
targetPort: 80
4. ConfigMap: 애플리케이션 설정 정보를 저장합니다.
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-config
data:
nginx.conf: |
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://backend;
}
}
5. Secret: 비밀 정보를 저장하는 객체로, ConfigMap과 유사하게 사용됩니다.
apiVersion: v1
kind: Secret
metadata:
name: db-secret
type: Opaque
data:
username: dXNlcm5hbWU=
password: cGFzc3dvcmQ=
이 외에도 다양한 API 객체가 있으며, Kubernetes에서 지원하는 모든 API 객체는 Kubernetes
공식 문서에서 확인할 수 있습니다.
1장. 쿠버네티스 소개
- 속도
- 불변성의 가치
- 선언형 설정
- 자가 치유 시스템
- 서비스와 팀의 확장성
- 분리
- 애플리케이션과 클러스터를 위한 쉬운 확장
- 마이크로서비스로 개발 팀 확장
- 일관성과 확장성에 대한 고려사항 분리
- 인프라 추상화
- 효율성
- 요약
- 2장. 컨테이너 생성과 실행
- 컨테이너 이미지
- 도커 이미지 포맷
- 도커를 활용한 애플리케이션 이미지 생성
- 도커 파일
- 이미지 보안
- 이미지 크기 최적화
- 원격 레지스트리에 이미지 저장
- 도커 컨테이너 런타임
- 도커로 컨테이너 실행
- kuard 애플리케이션 탐색
- 자원 사용량 제한
- 정리
- 요약
- 컨테이너 이미지
- 3장. 쿠버네티스 클러스터 배포
- 공용 클라우드 제공자 서비스에 쿠버네티스 설치하기
- 구글 컨테이너 서비스
- 애저 컨테이너 서비스에 쿠버네티스 설치하기
- 아마존 AWS에 쿠버네티스 설치하기
- minikube를 사용해 로컬에 쿠버네티스 설치하기
- 라즈베리파이에서 쿠버네티스 운영
- 쿠버네티스 클라이언트
- 클러스터 상태 확인
- 쿠버네티스 워커 노드 목록 조회
- 클러스터 구성요소
- 쿠버네티스 프록시
- 쿠버네티스 DNS
- 쿠버네티스 UI
- 요약
- 공용 클라우드 제공자 서비스에 쿠버네티스 설치하기
- 4장. 일반적인 kubectl 명령
- 네임스페이스
- 컨텍스트
- 쿠버네티스 API 객체 보기
- 쿠버네티스 객체의 생성, 업데이트, 삭제
- 라벨과 애노테이션
- 디버깅 명령
- 요약
- 5장. 포드
- 쿠버네티스에서의 포드
- 포드에 대한 고찰
- 포드 매니페스트
- 포드 생성
- 포드 매니페스트 생성
- 포드 실행
- 포드 목록
- 포드 세부사항
- 포드 삭제
- 포드 접속
- 포트 포워딩 사용
- 로그에서 더 많은 정보 확인
- 컨테이너에서 exec로 명령 실행
- 컨테이너 내외부로의 파일 복사
- 상태 검사
- 활성 프로브
- 준비 프로브
- 상태 검사 유형
- 자원 관리
- 자원 요청: 최소 필요 자원
- limits로 자원 사용 제한
- 볼륨에서 데이터 유지
- 포드로 볼륨 사용
- 포드에서 볼륨을 사용하는 다른 방법
- 원격 디스크를 사용한 영구 데이터
- 종합
- 요약
- 6장. 라벨과 애노테이션
- 라벨
- 라벨 적용
- 라벨 수정
- 라벨 선택기
- API 객체의 라벨 선택기
- 애노테이션
- 애노테이션 정의
- 정리
- 요약
- 라벨
- 7장. 서비스 탐색
- 서비스 탐색
- 서비스 객체
- 서비스 DNS
- 준비 상태 검사
- 클러스터 외부로의 서비스
- 클라우드 연계
- 고급 세부 정보
- 엔드포인트
- 수동 서비스 탐색
- kube-proxy와 클러스터 IP
- 클러스터 IP 환경 변수
- 정리
- 요약
- 8장. 레플리카세트
- 조정 루프
- 포드와 레플리카세트 관계
- 기존 컨테이너 수용
- 컨테이너 격리
- 레플리카세트 설계
- 레플리카세트 명세
- 포드 템플릿
- 라벨
- 레플리카세트 생성
- 레플리카세트 검사
- 포드에서 레플리카세트 확인
- 레플리카세트에 대한 포드 집합 찾기
- 레플리카세트 확장
- kubectl scale을 사용한 명령형 확장
- kubectl apply를 사용한 선언형 확장
- 레플리카세트 자동 확장
- 레플리카세트 삭제
- 요약
- 9장. 데몬세트
Kubernetes에서 데몬세트(DaemonSet)는 모든 노드에서 동작해야 하는 파드(Pod)를 실행하는 쿠버네티스
API 객체입니다. 즉, 데몬세트는 클러스터의 모든 노드에서 정확히 하나의 파드를 실행합니다.
예를 들어, 모든 노드에서 로그 수집기, 모니터링 에이전트 또는 네트워크 에이전트를 실행하는
경우에 유용합니다.
데몬세트는 ReplicaSet과 매우 유사하지만, ReplicaSet은 파드를 원하는 수만큼 실행하는 데
사용되는 반면, 데몬세트는 모든 노드에 파드를 하나씩만 실행합니다.
다음은 데몬세트를 사용하여 노드마다 로그 수집기를 실행하는 예시입니다.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd
spec:
selector:
matchLabels:
app: fluentd
template:
metadata:
labels:
app: fluentd
spec:
containers:
- name: fluentd
image: fluentd:v1.2
volumeMounts:
- name: varlog
mountPath: /var/log
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
volumes:
- name: varlog
hostPath:
path: /var/log
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
위 예제에서는 fluentd라는 데몬세트를 정의하고, 각 노드에서 하나의 파드가 실행되도록 구성합니다.
파드는 fluentd:v1.2 이미지를 사용하며, 노드의 /var/log 및 /var/lib/docker/containers
디렉토리를 마운트하여 로그를 수집합니다.
데몬세트는 노드 수의 변화에 대한 대응도 가능합니다. 새 노드가 추가되면 자동으로 파드를 생성하고,
노드가 제거되면 해당 노드에서 실행 중인 파드를 삭제합니다. 이렇게 함으로써, 데몬세트를 사용하여
클러스터의 모든 노드에서 동일한 환경을 유지할 수 있습니다.
- 데몬세트 스케줄러
- 데몬세트 생성
- 특정 노드로 데몬세트 제한
- 노드에 라벨 추가
- 노드 선택기
- 데몬세트 업데이트
- 개별 노드를 삭제해 데몬세트 업데이트
- 데몬세트 롤링 업데이트
- 데몬세트 삭제
- 요약
- 10장. 잡
- 잡 객체
- 잡 패턴
- 원샷
- 병렬성
- 작업 대기열
- 요약
- 11장. ConfigMap과 시크릿
- ConfigMap
- ConfigMap 생성
- ConfigMap 사용
- 시크릿
- 시크릿 생성
- 시크릿 사용
- 사설 도커 레지스트리
- 명명 규칙
- ConfigMap과 시크릿 관리
- 목록 조회
- 생성
- 업데이트
- 요약
- ConfigMap
- 12장. 디플로이먼트
- 디플로이먼트와의 첫 만남
- 디플로이먼트 내부
- 디플로이먼트 생성
- 디플로이먼트 관리
- 디플로이먼트 업데이트
- 디플로이먼트 확장
- 컨테이너 이미지 업데이트
- 롤아웃 이력
- 디플로이먼트 전략
- 재생성 전략
- 롤링업데이트 전략
- 서비스 안정을 위한 느린 롤아웃
- 디플로이먼트 삭제
- 요약
- 디플로이먼트와의 첫 만남
- 13장. 스토리지 솔루션과 쿠버네티스 연계
- 외부 서비스 가져오기
- 선택기 비사용 서비스
- 외부 서비스의 제약사항: 상태 검사
- 신뢰 가능한 싱글톤 운영
- MySQL 싱글톤 운영
- 동적 볼륨 프로비저닝
- 스테이트풀세트를 사용한 쿠버네티스 기반 스토리지
- 스테이트풀세트 속성
- 스테이트풀세트를 사용한 수동 복제 몽고DB
- 몽고DB 클러스터 자동 생성
- 영구 볼륨과 스테이트풀세트
- 마지막 단계: 준비 프로브
- 요약
- 외부 서비스 가져오기
- 14장. 실제 애플리케이션 배포
- Parse
- 사전 준비
- Parse 서버 구축
- Parse 서버 배포
- Parse 테스트
- Ghost
- Ghost 구성
- Ghost + MySQL
- Redis
- Redis 구성
- Redis 서비스 생성
- Redis 배포
- Redis 클러스터 사용
- 요약
- Parse
- 부록 A. 라즈베리파이 쿠버네티스 클러스터 구축
- 부품 목록
- 이미지 굽기
- 첫 번째 부팅: 마스터
- 네트워크 설정
- 쿠버네티스 설치
- 클러스터 설정
Kubernetes 환경에서 Parse 서버를 구축하려면 다음 단계를 수행해야 합니다.
Parse Server 이미지 빌드
먼저 Parse Server를 실행할 Docker 이미지를 빌드해야 합니다. Parse Server의 공식 Docker 이미지를
사용할 수 있지만, 필요에 따라 이미지를 직접 빌드하거나 수정할 수도 있습니다. Dockerfile을 작성하여
Parse Server와 필요한 종속성을 포함시키고 이미지를 빌드합니다.
Parse Server 배포
Parse Server를 Kubernetes 클러스터에 배포해야 합니다. 이를 위해 Kubernetes에서는 다양한 배포 방식을
제공합니다. 가장 일반적인 방법은 Deployment나 StatefulSet을 사용하는 것입니다.
Deployment를 사용하는 예시를 살펴보겠습니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: parse-server-deployment
spec:
replicas: 2
selector:
matchLabels:
app: parse-server
template:
metadata:
labels:
app: parse-server
spec:
containers:
- name: parse-server
image: my-parse-server-image:latest
ports:
- containerPort: 1337
env:
- name: APP_ID
value: my-parse-app-id
- name: MASTER_KEY
value: my-parse-master-key
- name: DATABASE_URI
value: mongodb://mongodb-service:27017/my-parse-db
위 YAML 파일에서는 Deployment를 정의합니다. replicas 필드를 사용하여 2개의 파드가 실행되도록
지정하고, selector 필드는 app: parse-server 라벨을 가진 파드를 선택하도록 지정합니다.
template 필드는
app: parse-server 라벨을 포함하는 파드 템플릿을 정의하며, my-parse-server-image:latest 이미지를
사용하여 파드를 실행합니다. 또한 파드는 1337번 포트를 열어서 접근할 수 있도록 설정됩니다.
env 필드를 사용하여 Parse Server에 필요한 환경 변수를 전달할 수 있습니다. 위 예시에서는 APP_ID,
MASTER_KEY, DATABASE_URI 환경 변수를 사용하여 Parse Server가 MongoDB와 연결하도록 설정합니다.
MongoDB 배포
Parse Server는 MongoDB와 함께 사용됩니다. 따라서 Parse Server와 함께 MongoDB를 배포해야 합니다.
MongoDB를 배포하는 방법은 다양합니다. 가장 간단한 방법은 Kubernetes에서 제공하는 StatefulSet을
사용하는 것입니다.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mongodb
spec:
replicas: 1
serviceName: mongodb-service
selector:
matchLabels:
app: mongodb
template:
metadata:
labels:
app: mongodb
spec:
containers:
- name: mongodb
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- MSA
- 트리이스
- startup 에러
- 오라클 홈디렉토리 copy 후 startup 에러
- directory copy 후 startup 에러
- 설치하기(HP-UX)
- 쿠버네티스
- 스토리지 클레스
- 버쳐박스
- (InstantClient) 설치하기(HP-UX)
- Oracle
- 우분투
- 5.4.0.1072
- 코로나19
- 앤시블
- ORACLE 트러블 슈팅(성능 고도화 원리와 해법!)
- [오라클 튜닝] sql 튜닝
- pod 상태
- K8s
- 오라클 트러블 슈팅(성능 고도화 원리와 해법!)
- ubuntu
- 여러서버 컨트롤
- 오라클
- 커널
- 키알리
- [오라클 튜닝] instance 튜닝2
- 튜닝
- 오라클 인스턴트클라이언트(InstantClient) 설치하기(HP-UX)
- 테라폼
- CVE 취약점 점검
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
글 보관함