IT 이야기/Open Source

Kubernetes(K8S) Meetup

클톡(CloudTalk) 2021. 10. 13. 19:51

쿠버네티스 밋업은 여러 경로를 통해서 찾아서 들을 수 있습니다, 저는 여러 행사게 참석하다가 Meetup 정보를 얻어서 들을 수 있었습니다

발표 이야기

  • 컨테이너
  • 컨테이너 오케스트레이션
  • 쿠버네티스 개념 및 아키텍처

실습

  • 도카, 도커 컴포트를 이용한 웹 서비스 배포
  • 쿠버네티스 기본 사용법

쿠버네티스가 리눅스 운영체제 같은 역할을 할 수 있게 될 수 있다.

맛보기 -

쿠버네티스 → desired state

  • MSA 부분으로 해당 역할만 수행

POD 배포 과정

쿠버네티스 → 스팟인스턴스 타입 유형 ASG(테스트 목적인 pod가 위치할 예정)

  • 스팟인스턴스 종료 5분 전 API 보내면 쿠버네티스 pod 교체

쿠버네티스 → 오토스케일 기능 지원(설치해야지 가능) → helm → 오토스케일러 install

엣지인스립트 → Cert 매니저 → SSL

서비스메시 Proxy 모니터링

쿠버네티스 기반의 플랫폼 활성화

  • helm

쿠버네티스

  1. Object Spec - YAML
    1. 라벨 (중요)

핸즈온 - 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