UnSimple image builder

Unsimple image builder

보통 gii source 기반 이미지 빌드는 Jenkins 빌드파이프라인이나, Argocd 등을 이용하지만 임의로 이미지 빌드 등이 필요한 경우 수동 처리의 귀찮음을 해결하기 위한 도구.

쉽게 말해 매번 docker build -t registry.address/project/category/image_name:tag-tagnumber 명령을 입력하기 귀찮아서 만든 도구.

대강 구성도

                         ┌─────────────────────────────────────────────┐
                         │          Git Image WebBuilder               │
                         │          :8888 (Flask + gunicorn)           │
                         │                                             │
                         │  ┌─────────┐ ┌─────────┐ ┌───────────────┐ │
                         │  │ Sources │ │ Builder │ │   Scripts     │ │
                         │  │         │ │         │ │               │ │
                         │  │Registry │ │Build    │ │Registered     │ │
                         │  │Git Svr  │ │Push     │ │Ad-hoc (SSH)   │ │
                         │  └─────────┘ │Rollout  │ └───────────────┘ │
                         │              └────┬────┘                   │
                         │   ┌───────────────┼───────────────┐        │
                         │   │  SQLite DB    │  Build Logs   │        │
                         │   │  (builder.db) │  (data/)      │        │
                         │   └───────────────┴───────────────┘        │
                         └──────┬──────────┬──────────┬───────────────┘
                                │          │          │
                 ┌──────────────┘          │          └──────────────┐
                 │                         │                         │
                 ▼                         ▼                         ▼
    ┌────────────────────┐   ┌──────────────────────┐   ┌──────────────────┐
    │   Git Server       │   │   Docker Daemon      │   │  K8s Cluster     │
    │                    │   │                      │   │                  │
    │  Forgejo / GitHub  │   │  docker build        │   │  kubectl rollout │
    │  Gitea / GitLab    │   │  docker push         │   │  restart         │
    │                    │   │                      │   │  status / pods   │
    │  SSH clone ──┐     │   │         │            │   │                  │
    │  HTTP clone ─┤     │   │         ▼            │   └──────────────────┘
    └──────────────┘     │   │  ┌──────────────┐    │
                         │   │  │  Registry    │    │
                         │   │  │  Harbor /    │    │
                         │   │  │  DockerHub   │    │
                         │   │  └──────────────┘    │
                         │   └──────────────────────┘
                         │
                ┌────────┴─────────┐
                │  Build Pipeline  │
                │                  │
                │  1. git clone    │
                │  2. Dockerfile ? │
                │  3. docker login │
                │  4. docker build │
                │  5. docker push  │
                │  6. rollout      │
                │     (optional)   │
                └──────────────────┘

다운로드

사용법

기본적으로 git에 등록된 branch를 Unsimple image builder로 클론.
클론된 파일의 Dockerfile을 기반으로 이미지를 빌드한다.
연결된 image registry에 자동 push, 등록된 k8s 클러스터의 디플로이먼트(deployment, statefulset) rollout 명령 까지 날릴 수 있다.

Kubernetes #2-2. 사전작업 – 컨테이너 런타임 (offline, 폐쇄망)

[Kubernetes #1. 사전작업 (offline, 폐쇄망)]
[Kubernetes #2-2. 사전작업 – 컨테이너 런타임 (offline, 폐쇄망)]
[Kubernetes #2-2. 사전작업 – docker 설정 (offline, 폐쇄망)]
[Kubernetes #3. Kubernetes 바이너리 설치 (offline, 폐쇄망)]
[Kubernetes #4. Kubernetes 클러스터 구축 – image pull (offline, 폐쇄망)]
[Kubernetes #4-2. Kubernetes 클러스터 구축 – 단일 마스터노드 생성 (offline, 폐쇄망)]
[Kubernetes #4-3. Kubernetes 클러스터 구축 – worker node join (offline, 폐쇄망)]

쿠버네티스는 ‘컨테이너를 관리’ 하는 녀석이다. 즉, 쿠버네티스만으로는 아무 것도 할 수 없다는 이야기. 컨테이너 실행을 위해 런타임이 필요하다. Docker, Containerd, CRI-O 등이 있다.
이 포스트에서는 docker를 기준으로 설명한다.

외부에서 repo 파일을 다운로드 받아서 폐쇄망의 클러스터에 복사하거나, –downloadonly 등의 옵션으로 패키지를 다운로드 해서 복사 한다음 설치해야 한다.

이 포스트의 작업은 쿠버네티스 클러스터에 포함하는 모든 노드에서 수행해야 한다.

 

이전 버전의 docker 제거

CentOS (CentOS7 기준)

sudo yum remove docker docker-client docker-client-latest docker-common \
                  docker-latest docker-latest-logrotate docker-logrotate docker-engine

Ubuntu (Ubuntu18 기준)

sudo apt-get remove docker docker-engine docker.io containerd runc

 

설치를 위한 패키지와 repository 등록

CentOS

sudo yum install -y yum-utils
# yum-config-manager를 위한 패키지

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# yum-utils 패키지 설치를 생략하고 docker-ce.repo 파일을 다운로드 받아서 /etc/yum.repos.d/에 복사해도 된다.

sudo yum clean all
# yum 캐시 정리 캐시 파일이 너무 크거나 문제가 있는 경우 sudo rm -rf /var/cache/yum 명령 수행

sudo yum repolist
# 패키지 목록 업데이트

Ubuntu

sudo apt-get update
# apt 패키지 목록 업데이트

sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
# 패키지 설치 및 rpository 업데이트 등을 위한 패키지 설치

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# gpg key 등록

sudo echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# docker repository 등록

sudo apt-get update

 

Docker 엔진설치

CentOS

sudo yum -y install docker-ce docker-ce-cli containerd.io

Ubuntu

sudo apt-get install docker-ce docker-ce-cli containerd.io

 

서비스 시작 및 활성화

CentOS / Ubuntu 동일

sudo systemctl enable docker.service
# 서비스 활성화 (부팅 시 자동 시작)

sudo systemctl start docker.service
# 서비스 시작

 

특정 버전을 설치하자 하는 경우

# CentOS
yum list docker-ce --showduplicates | sort -r
 sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli- containerd.io

	
#Ubuntu
apt-cache madison docker-ce
 docker-ce | 5:20.10.8~3-0~ubuntu-bionic | https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
 docker-ce | 5:20.10.7~3-0~ubuntu-bionic | https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
 docker-ce | 5:20.10.6~3-0~ubuntu-bionic | https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
 docker-ce | 5:20.10.5~3-0~ubuntu-bionic | https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
 docker-ce | 5:20.10.4~3-0~ubuntu-bionic | https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
 docker-ce | 5:20.10.3~3-0~ubuntu-bionic | https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
 docker-ce | 5:20.10.2~3-0~ubuntu-bionic | https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
 docker-ce | 5:20.10.1~3-0~ubuntu-bionic | https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
 docker-ce | 5:20.10.0~3-0~ubuntu-bionic | https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
...후략
출력되는 목록에서 버전 확인 후 설치
sudo apt-get install docker-ce= docker-ce-cli= containerd.io