Microservice K3S

Introducing Microservice K3S !!

Microservice K3S is space to learn with K3S.

Contents

Table of Contents

NoTitleRemarks
0환경설정K3S환경셋팅
1실습실습

Learning

Table of Learning

NoTypeTitleDayRemarks
1온라인컨테이너 오케스트레이션 쿠버네티스 살펴보기2020.04.15 ~ 2020.05.15k3s

Get Started(K3S)

VSCode 온라인

  • VSCode 온라인 설치
    wget https://github.com/cdr/code-server/releases/download/2.1688-vsc1.39.2/code-server2.1688-vsc1.39.2-linux-x86_64.tar.gz
    tar xvfz code-server2.1688-vsc1.39.2-linux-x86_64.tar.gz
    sudo mv code-server2.1688-vsc1.39.2-linux-x86_64/code-server /usr/local/bin
    mkdir ~/project
    sudo curl https://gist.githubusercontent.com/subicura/d025000486d30d92dfa6ccc523c3f5e3/raw/2e93bb0dca992523a3e3a6fdba95d2f3526c52db/codeserver.service -o /lib/systemd/system/codeserver.service
    
  • sudo vi codeserver.service
    [Unit]
    Description=Code Server IDE
    After=network.target
    [Service]
    Type=simple
    User=shpimit                   # aws: ubuntu, gcp: shpimit
    Environment="PASSWORD=sunho"
    Restart=on-failure
    RestartSec=10
    ExecStart=/usr/local/bin/code-server --port 8080 /home/ubuntu/project
    StandardOutput=file:/var/log/code-server-output.log
    StandardError=file:/var/log/code-server-error.log
    [Install]
    WantedBy=multi-user.target
    
  • VSCode 서비스 start
    sudo systemctl start codeserver
    # OS 가동될때 시작하기
    sudo systemctl enable codeserver
    
  • VSCode 온라인 접속

  • VSCode 서비스 down
    sudo systemctl stop codeserver
    # OS 가동될때 시작하기 죽이기
    sudo systemctl disable codeserver
    
  • jq 설치
    sudo apt install -y jq
    

Practice

1. 도커기본실습:도커 기본 명령어

  • 컨테이너 제거하기
    docker rm container-id
    docker rm -f $(docker ps -aq)
    
  • 이미지 삭제하기
    docker images  # 이미지 확인하기
    docker rmi image-id
    docker rmi -f $(docker images jobmp* -q) 
    
  • 이미지 Dangle 삭제하기
    docker image ls -f=dangling=true
    docker image rm $(docker image ls -f=dangling=true -q)
    
  • 네트워크 삭제하기
    docker network ls    # 네트워크 확인 (보통 3개 떠 있음)
    docker network prune
    
  • 볼륨 삭제하기
    docker volume ls     # 볼륨 확인
    docker volume prune
    
  • Docker 불필요한것 전체 삭제하기
    docker stop xxx
    docker rm xxx
    docker system prune -a
    

    2. Exam 1. 방명록 만들기:네트워크에 연결된 컨테이너 생성

  • Network 만들기
    docker network create app-network
    
  • MongoDB 설치:Network 연결
    docker run -d --name=mongodb --network=app-network mongo:4
    
  • Backend 설치: MongoDB 연결
    docker run -d --name=backend --network=app-network -e PORT=8000 -e GUESTBOOK_DB_ADDR=mongodb:27017 subicura/guestbook-backend:latest
    
  • Frontend 설치: Backend 연결
    docker run -d -p 3000:8000 -e PORT=8000 -e GUESTBOOK_API_ADDR=backend:8000 --network=app-network subicura/guestbook-frontend:latest
    

3. 도커compose기본실습

  • docker-compose는 같은 Network를 사용하여 따로 Network설정불필요
  • Wordpress: mysql
    version: '3'
    services:
    wordpress:
      image: wordpress
      environment:
        WORDPRESS_DB_HOST: mysql
        WORDPRESS_DB_NAME: wp
        WORDPRESS_DB_USER: wp
        WORDPRESS_DB_PASSWORD: wp
      ports:
        - "8000:80"
      restart: always
    mysql:
      image: mysql:5.7
      environment:
        MYSQL_ROOT_PASSWORD: wp
        MYSQL_DATABASE: wp
        MYSQL_USER: wp
        MYSQL_PASSWORD: wp
    
  • 방명록 만들기:mongodb
    version: '3'
    services:
    frontend:
      image: subicura/guestbook-frontend:latest
      environment:
        PORT: 8000
        GUESTBOOK_API_ADDR: backend:8000
      ports:
        - "3000:8000"
    backend:
      image: subicura/guestbook-backend:latest
      environment:
        PORT: 8000
        GUESTBOOK_DB_ADDR: mongodb:27017
      ports:
        - "8000:80"
      restart: always
    mongodb:
      image: mongo:4
    
  • 정리
    docker-compose down
    docker system prune -a
    

4. Kubernetes 실습

  • whoami-pod.yml ```yml apiVersion: v1 kind: Pod metadata: name: whoami labels: type: app spec: containers:
    • name: app image: subicura/whoami:1 ```
  • guide-03/task-02/whoami-pod-lp.yml ```yml apiVersion: v1 kind: Pod metadata: name: whoami-lp labels: type: app spec: containers:
    • name: app image: subicura/whoami:1 livenessProbe: httpGet: path: /not/exist port: 8080 initialDelaySeconds: 5 timeoutSeconds: 2 # Default 1 periodSeconds: 5 # Defaults 10 failureThreshold: 1 # Defaults 3 ```
  • guide-03/task-02/whoami-pod-rp.yml ```yml apiVersion: v1 kind: Pod metadata: name: whoami-rp labels: type: app spec: containers:
    • name: app image: subicura/whoami:1 readinessProbe: httpGet: path: /not/exist port: 8080 initialDelaySeconds: 5 timeoutSeconds: 2 # Default 1 periodSeconds: 5 # Defaults 10 failureThreshold: 1 # Defaults 3 ```
  • Kubernetes 명령
    k apply -f whoami-pod.yml
    k get po
    k describe po/whoami
    k apply -f whoami-pod-lp.yml
    k apply -f whoami-pod-health.yml
    
  • multi container 예제
  • guide-03/task-02/whoami-pod-redis.yml ```yml apiVersion: v1 kind: Pod metadata: name: whoami-redis labels: type: stack spec: containers:
    • name: app image: subicura/whoami-redis:1 env:
      • name: REDIS_HOST value: “localhost”
    • name: db image: redis ```
  • container에서 telnet 설치
    apk add curl busybox-extras # install telnet
    
  • Kubernetes 명령
    alias k=kubectl
    k apply -f whoami-pod-redis.yml
    k get all
    k logs whoami-redis
    k logs whoami-redis app
    k logs whoami-redis db
    k exec -it whoami-redis
    k exec -it whoami-redis -c db sh
    k exec -it whoami-redis -c app sh
    k decribe po/whoami-redis
    # 지금까지 내용 yml 파일 삭제
    kubectl delete -f ./
    
  • Replicaset
  • guide-03/task-03/whoami-rs.yml
    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
    
  • label 제거
    k get pods --show-labels
    k label pod/whoami-rs-42dxv service=who --overwrite
    
  • Deployment
  • guide-03/task-04/whoami-deploy.yml
    apiVersion: apps/v1beta2
    kind: Deployment
    metadata:
    name: whoami-deploy
    spec:
    replicas: 3
    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
    
Go to Contents

Reference

  1. 초기환경 셋팅
  2. kubernetes 기본 가이드