쿠버네티스 밋업은 여러 경로를 통해서 찾아서 들을 수 있습니다, 저는 여러 행사게 참석하다가 Meetup 정보를 얻어서 들을 수 있었습니다
발표 이야기
- 컨테이너
- 컨테이너 오케스트레이션
- 쿠버네티스 개념 및 아키텍처
실습
- 도카, 도커 컴포트를 이용한 웹 서비스 배포
- 쿠버네티스 기본 사용법
쿠버네티스가 리눅스 운영체제 같은 역할을 할 수 있게 될 수 있다.
맛보기 -
쿠버네티스 → desired state
- MSA 부분으로 해당 역할만 수행
POD 배포 과정
쿠버네티스 → 스팟인스턴스 타입 유형 ASG(테스트 목적인 pod가 위치할 예정)
- 스팟인스턴스 종료 5분 전 API 보내면 쿠버네티스 pod 교체
쿠버네티스 → 오토스케일 기능 지원(설치해야지 가능) → helm → 오토스케일러 install
엣지인스립트 → Cert 매니저 → SSL
서비스메시 Proxy 모니터링
쿠버네티스 기반의 플랫폼 활성화
- helm
쿠버네티스
- Object Spec - YAML
- 라벨 (중요)
핸즈온 - 1 (docker)
- docker network create app-network
- (해당 네트워크 부분을 중요 시)
https://github.com/subicura/workshop-k8s-basic/blob/master/guide/guide-01.md
docker run -d \
--name mongo \
--network=app-network \
mongo:4
docker run -d \
--network=app-network \
-e PORT=8080 \
-e GUESTBOOK_DB_ADDR=db:27017 \
--name backend \
subicura/guestbook-backend:latest
docker run -d -p 9000:8000 \
--network=app-network \
-e PORT=8000 \
-e GUESTBOOK_API_ADDR=APISERVER:8000 \
--name front \
subicura/guestbook-frontend:latest
핸즈온 -2 (docker-compose)
version: '3'
services:
front:
image: subicura/guestbook-frontend:latest
environment:
PORT: 8000
GUESTBOOK_API_ADDR: backend:8000
restart: always
ports:
- "9000:8000"
restart: always
backend:
image: subicura/guestbook-backend:latest
environment:
PORT: 8000
GUESTBOOK_DB_ADDR: mongo:27017
restart: always
mongo:
image: mongo
restart: always
- restart: always 순서에 따른 접속이 안될 수 있기 때문에 always 설정 (공부)
핸즈온 -3 (쿠버)
# 사용자 등록 해놓아도됨 아래처럼
alias kubectl=k
#기본 명령어
- apply
- Apply a configuration to a resource by filename or stdin
- get
- Display one or many resources
- describe
- Show details of a specific resource or group of resources
- delete
- Delete resources by filenames, stdin, resources and names, or by resources and label selector
- logs
- Print the logs for a container in a pod
- exec
- Execute a command in a container
# 결과 포멧 변경
kubectl get nodes -o wide
kubectl get nodes -o yaml
kubectl get nodes -o json
kubectl get nodes -o json |
jq ".items[] | {name:.metadata.name} + .status.capacity"
# 상세 확인
kubectl describe type/name
kubectl describe type name
핸즈온 -3 (쿠버)
apiVersion: v1
kind: Pod
metadata:
name: mongodb
labels:
name: mongo
type: stack
spec:
containers:
- name: mongodb
image: mongo:4
apiVersion: v1
kind: Pod
metadata:
name: mysql
labels:
name: mysql
type: stack
spec:
containers:
- name: mysql
image: mysql:5.6
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
핸즈온 -4 (쿠버)
apiVersion: apps/v1beta2
kind: ReplicaSet
metadata:
name: whoami-rs
spec:
replicas: 1
selector:
matchLabels:
type: app
service: whoami
template:
metadata:
labels:
type: app
service: whoami
spec:
containers:
- name: whoami
image: subicura/whoami:1
livenessProbe:
httpGet:
path: /
port: 4567
apiVersion: apps/v1beta2
kind: ReplicaSet
metadata:
name: nginx
spec:
replicas: 3
selector:
matchLabels:
type: app
service: nginx
template:
metadata:
labels:
type: app
service: nginx
spec:
containers:
- name: nginx
image: nginx
핸즈온 -5
# history ->
kubectl rollout history -f whoami-deploy.yml --revision=2
#롤백 -> 새로운 리비전을 생성해서 돌아간다
kubectl rollout undo deploy/whoami-deploy --to-revision=3
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: nginx
spec:
replicas: 3
selector:
matchLabels:
type: app
service: nginx
minReadySeconds: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
template:
metadata:
labels:
type: app
service: nginx
spec:
containers:
- name: nginx
image: nginx
핸즈온 -6 (쿠버-service)
클러스터 IP: <-> Service-IP (내부 노출)
node-port: <-> 모든 node에 열람됨 (밖에 노출)
loadbalancer: (클라우드 에서만 존재/가격비쌈)
ingress: nginx (호스트로 받아서 넘김)
핸즈온 -7 (쿠버-노드)
#옵션
selector 중요
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: nginx
spec:
selector:
matchLabels:
type: app
service: nginx
template:
metadata:
labels:
type: app
service: nginx
spec:
containers:
- name: nginx
image: nginx
---
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: LoadBalancer
ports:
- port: 8000
targetPort: 80
protocol: TCP
selector:
type: app
service: nginx
핸즈온 -8
db / backend / front / ingrees 모두 별개로 구성
전체적으로 K8S 기본 개념 및 구조에 대한 짧은 시간에 정확한 실습을 통해서 배울 수 있는 좋은 밋업이었습니다, 좋은 경험으로 지인들에게도 추천을 드리고 싶었어요~ 위의 내용은 간단하게 명령어 정보만 나열한 수준으로 실제 밋업에서는 더 다양한 사례 및 구조에 대해서 자세하게 서술을 및 실습을 해서 기회가 되시면 꼭 밋업 등에 참석해서 들어 보시는 것을 추천드립니다.
'IT 이야기 > Open Source' 카테고리의 다른 글
docker in docker (DinD) (0) | 2021.10.16 |
---|---|
Docker outside of Docker (DooD) (0) | 2021.10.15 |
Kubernetes 기본 개념 (0) | 2021.10.12 |
Monitoring With AWS & On-premise (0) | 2021.10.09 |
Atom Editor (atom 에디터) (0) | 2015.10.28 |