DevOps62 CPU 아키텍처에 따른 Docker Multi Architecture 빌드 구성하기 IT 회사에 입사하면 기본적으로 맥북을 주는 회사들이 많아졌다. 물론 안 주는 회사도 있겠지만 개인용으로도 맥북을 사용하는 것이 많이 일반화되었을만큼 개발자들에게는 필수품이 아닌 필수품이 되었다. 하지만 로컬에서 맥북 M1 (ARM 기반 CPU)에서 개발해서 정상동작을 하였으나 개발 (AMD 기반 CPU) 서버에 배포하면 기능이 정상적으로 동작을 하지 않거나 호환성 오류가 발생하는 경우를 경험해 보았을 것이다. 여러가지 호환성 오류가 많은데 그 중 일부분인 Docker 환경에서의 호환성 해결을 위한 Multi Architechture 빌드 전략에 대해서 소개해보고자 한다. 🚀 개요 로컬 (ARM 기반 CPU) 개발해서 배포는 Ubuntu (AMD 기반 CPU)에 Docker로 배포하는 빌드 전략에 대해 .. 2024. 2. 22. Prometheus (프로메테우스) 대해 알아보고 설치해보자 Prometheus (프로메테우스란)? 지표들을 시계열 데이터로 수집하고 측정하는 오픈 소스 모니터링 툴킷을 말한다. 여기서 지표라는 것은 예를 들어 웹 서버같은 경우 "요청수", "지연시간" 등이 될 수 있겠고 데이터 베이스 서버같은 경우에는 "커넥션 수", "쿼리 수" 등을 말할 수 있다. 이런 지표들을 통하여 서비스 부하, 통계등을 측정하는데 유용할 수 있다. 특징 측정항목 이름과 키/값 쌍으로 식별되는 다차원 데이터 모델 유연한 쿼리 언어인 PromQL 지원 분산 서버에 의존하지 않고 단일 서버 노드에 자율적 시계열 수집은 HTTP를 통한 풀 모델을 통해 발생 푸쉬 시계열은 중간 게이트웨이를 지원 다양한 그래프 및 대시보드 지원 언제 적합하고 적합하지 않은가? 프로메테우스는 빠르게 수집하고 모니터.. 2024. 1. 31. Kubernetes::네트워킹 (Networking) 스위칭 (Switching) host system 의 interface 확인 $ ip link 1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback ... 2: enp0s3: mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether ... ... interface 의 IP Address 확인 $ ip addr 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback ... inet 127.0.0.1/8 scope.. 2023. 12. 19. Kubernetes::스토리지 (Storage) Persistent Volumes POD에서 Volume의 한계는 무엇인가? 대규모 환경에서는 많은 사용자가 많은 POD를 배포하므로 사용자는 각 포드에 대해 매번 스토리지를 구성해야 한다. 어떤 스토리지 솔루션을 사용하든 POD를 배포하는 사용자는 자신의 환경에 있는 모든 포드 정의 파일에서 이를 구성해야 한다. 변경할 때마다 사용자는 자신의 모든 POD에서 변경해야 한다. Persistent Volumes은 무엇인가? Persistent Volumes은 클러스터에 애플리케이션을 배포하는 사용자가 사용하도록 관리자가 구성한 클러스터 전체 스토리지 볼륨 Pool이다. 사용자는 Persistent Volumes Claim을 사용하여 이 Pool에서 스토리지를 선택할 수 있다. 시나리오 Persistent .. 2023. 12. 19. Kubernetes::클러스터 유지 (Cluster Maintenance) Cluster 업그레이드 방법 1. controlplane drain 걸기 (master node) drain은 지정된 노드에 있는 포드들을 다른곳으로 이동시키는 명령어이다. $ kubectl drain controlplane --ignore-daemonsets2. 패키지 목록 업데이트 (master node) $ apt update3. kubeadm 1.25 인스톨 (master node) $ apt-get install kubeadm=1.25.0-00 4. kubeadm 1.25 적용 (master node) $ kubeadm upgrade apply v1.25.05. kubelet 1.25 인스톨 (master node) $ apt-get install kubelet=1.25.0-006. 데몬 리로.. 2023. 12. 19. Kubernetes::어플리케이션 생명주기 (Application Lifecycle Management) 어플리케이션 내 ConfigMap 설정 (Configure ConfigMaps in Applications) ConfigMap 생성 명령어로 key-value 값을 인자 값으로 주어 생성하는 방법이다. $ kubectl create configmap app-config --from-literal=APP_COLOR=blue --from-literal=APP_MOD=prod properties 파일을 사용하여 생성하는 방법이다. ※ 파일을 사용하여 생성하게 되면 key 값이 파일 이름으로 설정되게 되니 주의하기 바란다. $ cat > app_config.properties APP_COLOR=blue APP_MODE=prod $ kubectl create configmap app-config --from-fi.. 2023. 12. 19. Kubernetes::로깅 모니터링 (Logging Monitoring) Metric Server 설치방법 $ git clone https://github.com/kodekloudhub/kubernetes-metrics-server.git $ cd kubernetes-metrics-server/ $ kubectl create -f . 사용방법 node 보기 $ kubectl top nodes kubectl top nodes NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% master.example.com 417m 13% 3706Mi 27% node1.example.com 44m 2% 485Mi 12% node2.example.com 59m 2% 613Mi 16% POD 보기 $ kubectl top pods kubectl top pods NAME .. 2023. 12. 19. Kubernetes::스케쥴링 (Scheduling) - 정적 파드 정적 파드 (Static Pods) 정적 파드는 특정 노드의 kubelet 데몬에서 직접 관리한다. kubelet은 각 정적 파드를 감시하고 실패하면 다시 시작한다. 정적 포드는 항상 하나의 특정 노드에서 바인딩된다. 파드 이름에는 앞에 하이픈이 있는 노드 호스트 이름이 접미사로 붙는다. 정적 파드 (Static Pods) 생성 방법 정적인 파드를 생성할 node에 접속 $ ssh node01 nginx 정적인 파드 node01에 생성 $ cat > /etc/kubernetes/manifests/static-web.yaml apiVersion: v1 kind: Pod metadata: name: static-web labels: role: myrole spec: containers: - name: web.. 2023. 12. 19. Kubernetes::스케쥴링 (Scheduling) - 데몬셋 데몬셋 (Daemon Sets) 개요 클러스터 전체 노드에 특정 파드를 실행할 때 사용하는 컨트롤러이다. 간략히 말해 각 노드에 항상 떠있는 데몬을 이야기한다. DaemonSet는 모든(또는 일부) 노드가 Pod의 복사본을 실행하도록 한다. 노드가 클러스터에 추가되면 Pod가 여기에 추가된다. 클러스터에서 노드가 제거되면 해당 포드는 가비지 수집된다. DaemonSet를 삭제하면 생성된 Pod가 자동적으로 삭제된다. 용도 다음과 같은 용도로 사용할 수 있다. 모든 노드에서 클러스터 저장소 데몬 실행 모든 노드에서 로그 수집 데몬 실행 모든 노드에서 노드 모니터링 데몬 실행 시나리오 Deamonset 생성 $ cat > daemonset.yaml apiVersion: apps/v1 kind: DaemonS.. 2023. 12. 19. Kubernetes::스케쥴링 (Scheduling) - Resource Limit Resource Limit 노드에서 사용할 수 있는 리소스가 충분하지 않은 경우 kubernetes는 pod 예약을 유지하고 Pending 상태가 된다. Describe로 조회를 해보면 어떤 리소스가 부족한지 이유를 알 수 있다. Resource Requirements 파드 내의 컨테이너에 0.5 CPU 및 256Mi 메모리가 필요하다고 가정하자. 이를 컨테이너에 대한 리소스 요청이라고 한다. 파드 내의 애플리케이션에 기본 리소스보다 더 많은 리소스가 필요한 경우 파드 정의 파일에서 설정해야 한다. apiVersion: v1 kind: Pod metadata: name: simple-webapp-color labels: name: simple-webapp-color spec: containers: - n.. 2023. 12. 19. Kubernetes::스케쥴링 (Scheduling) - Node Affinity Node Affinity Node Affinity란? 쿠버네티스 클러스터의 특정 노드에 노드 어피니티를 사용해 쿠버네티스 파드를 할당하는 방법을 말한다. 노드에 레이블 추가 클러스터의 노드를 레이블과 함께 나열하자. $ kubectl get nodes --show-labels NAME STATUS ROLES AGE VERSION LABELS master.example.com Ready control-plane,master 347d v1.22.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master.example.com,kubernetes.io/os=linux.. 2023. 12. 19. Kubernetes::스케쥴링 (Scheduling) 수동 스케쥴링 (Manual Scheduling) 클러스터에 스케줄러가 없을 때 수동으로 처리하는 방법이다. POD에는 기본적으로 설정되지 않은 NodeName이라는 필드가 있는데 이 필드를 설정하여 수동으로 스케쥴링 하는 방법이다. apiVersion: v1 kind: Pod metadata: name: nginx labels: name: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 8080 nodeName: node02 또 다른 방법 apiVersion: v1 kind: Binding metadata: name: nginx target: apiVersion: v1 kind: Node name: node02 api.. 2023. 12. 19. Kubernetes::핵심 개념 (Core Concepts) 핵심 개념 (Core Concepts) Kubernetes Architecture (쿠버네티스 아키텍처) Master Node 구성 설명 API Server ㆍ쿠버네티스 클러스터의 모든 작업을 제어하는 REST API Controller ㆍ클러스터를 설계한 상태로 유지 (파드 개수 유지) ㆍ백그라운드에서 클러스터 컨트롤러를 관리 ㆍAPI 서버를 이용하여 클러스터 상태를 모니터링 Scheduler ㆍ노드가 배정되지 않은 새로 생성된 Pod를 감지하고 그것을 어느 Node에서 실행될지를 선택 ㆍPod를 어떻게 Node에 배치할지를 예약 ETCD ㆍ클러스터의 모든 정보를 저장하는 데이터 저장소 ㆍ고가용성을 가진 Key-Value 저장소 구조 Worker Node 구성 설명 kubelet ㆍ노드에서 실행되는 에.. 2023. 12. 19. GitLab 업데이트 방법 GitLib 업데이트 GitLab 업데이트시 다른 패키지들처럼 14.xxx → 16.xxx 이런식으로 2단계를 건너 띄우고 업데이트를 하지못하고 순차적으로 진행해야한다. GitLib 업데이트 예시 여기 공식 사이트 CHANGELOG.md를 보고 최초, 최종 버전을 검색할 수 있다. https://gitlab.com/gitlab-org/gitlab/blob/master/CHANGELOG.md CHANGELOG.md · master · GitLab.org / GitLab · GitLab GitLab is an open source end-to-end software development platform with built-in version control, issue tracking, code review,.. 2023. 8. 10. Certbot으로 Ubuntu의 Nginx 인증서 발급 Certbot란?Certbot은 수동으로 관리되는 웹사이트에서 Let's Encrypt 인증서를 자동으로 사용하여 HTTPS를 활성화하는 무료 오픈 소스 소프트웨어 도구이다. Certbot은 전자 프론티어 재단(Electronic Frontier Foundation, EFF) 에 의해 만들어졌다. 간단히 말해서 HTTPS 인증서를 커멘드 명령어만으로 Nginx등에 설정할 수 있는 도구라고 보면된다. Let's Encrypt 인증서는 신뢰할 수 있는 인증기관인가?Let's Encrypt는 무료로 SSL/TLS 인증서를 발급하는 오픈 소스 인증 기관 중 하나로 신뢰할 수 있는 인증기관이다. 설치방법Ubuntu 22.04 공식문서를 참조하면 좋을 것이다. 설치방법은 Snap 패키지 관리자를 통한 설치를 권장하.. 2023. 8. 10. Docker Container 리소스 할당 개요 Container는 Host의 리소스 사용 제한을 받지 않는다. 그러므로 사용 제한이 없으면 호스트 리소스를 마음대로 갖다 쓸 수 있다는 이야기이다. 제한 방법 RAM 옵션 설명 --memory, -m 컨테이너 사용할 최대 메모리 양을 지정한다. 512m 이런식으로 할당이 가능하다. --memory-swap 컨테이너가 swap할 사용 메모리 영역에 대한 설정이다. memory + swap으로 반드시 메모리가 포함된 값으로 설정해야한다. (예) memory가 200m, swap이 100m이라면 300m으로 설정해야한다.) 생략시는 memory의 2배로 설정된다. --memory-reservation --memory 작은 값으로 구성해야되며 이 값까지는 soft 제한을 하겠다는 뜻 --oom-kill-.. 2023. 7. 27. Elasticsearch Snapshot S3 설정 방법 Elasticsearch 공식 문서를 참조하였습니다. 설정 방법 1. repository-s3 플러그인 설치 설치 완료 후 클러스터 재기동 필요합니다. $ bin/elasticsearch-plugin install repository-s3 2. aws 키 설정 testuser 라는 AWS S3 client name 으로 설정해보자. $ bin/elasticsearch-keystore add s3.client.testuser.access_key Enter value for s3.client.testuser.access_key: $ bin/elasticsearch-keystore add s3.client.testuser.secret_key Enter value for s3.client.testuser.sec.. 2023. 1. 10. GitLab - Git submodule 특정 디렉토리 추가 방법 ▶ 메인 프로젝트 (main_project) application ㄴsubmodule ㄴ ▶ 서브 프로젝트 (sub_project) application ㄴfontweb >.git/modules/sub_project/info/sparse-checkout 7. git 업데이트 git submodule update --force --checkout sub_project 2022. 6. 27. WSL2 포트 포워딩 방법 포트 포워딩 (Port Forwarding) WSL2에서 포트를 오픈해도 Windows 호스트 또는 외부에서 접근이 불가하여 Port를 포워딩해주어야 한다. 1. PS1 스크립트 작성 forwarding.ps1 적당한 이름으로 스크립트를 작성한다. 오픈할 포트를 $ports에 넣어주면 된다. 예) $ports=@(8000, 8888); If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { $arguments = "& '" + $myinvocation.mycomm.. 2022. 5. 30. WSL2 - SSH 설정 및 접속 SSH 설정 및 접속 1. 호스트 키 설정 ssh-keygen -A 명령으로 호스트 키가 /etc/ssh 경로에 생성되도록 한다. admin@LAPTOP-O7OIHPIJ:~$ sudo /etc/init.d/ssh stop * Stopping OpenBSD Secure Shell server sshd [ OK ] admin@LAPTOP-O7OIHPIJ:~$ sudo ssh-keygen -A 2. ssh-config 설정 admin@LAPTOP-O7OIHPIJ:~$ sudo vi /etc/ssh/sshd_config … # To disable tunneled clear text passwords, change to no here! PasswordAuthentication yes … admin@LAPTOP-O.. 2022. 5. 30. GitLab Runner 설치 및 등록 설치 환경ubuntu 20.04.1 설치 방법1. 리포지토리 등록amd64, arm, arm64 아키텍처가 있는 amd64로 한다.root@master:~# curl -LJO "https://gitlab-runner-downloads.s3.amazonaws.com/latest/deb/gitlab-runner_amd64.deb" % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 414M 100 414M 0 0 1909k 0 0:03:42 0:03:42 --:--:-- 1029k2. 패키지 설치root@master:~# dpkg -i gitlab-runner_amd64.de.. 2022. 5. 25. Git Password 저장 방법 Credential 정보 저장 credential 정보를 저장하여 반영구적으로 인증 절차가 생략된다. git config credential.helper store --global 옵션을 설정하여 모든 프로젝트에 적용할 수 있다. git config --global credential.helper store Cache 저장 임시로 저장할때 사용한다. 기본적으로 15분 동안 인증 절차를 요구하지 않는다. git config credential.helper cache timeout 옵션으로 지정이 가능하다. (초 단위) git config credential.helper 'cache --timeout=3600' 참고 https://git-scm.com/docs/git-credential-cache 2022. 5. 18. VirtualBox에 Docker 환경 구성 구성 환경 CentOS 7 (Minimal Version) Image VirtualBox 구성 방법 1. 이미지 다운로드 http://isoredirect.centos.org/centos/7/isos/x86_64/ 첫번째 링크를 클릭한다. CentOS-7-x86_64-Minimal-2009.iso를 선택한다. 2. 가상 머신 만들기 새로 만들기를 클릭한다. 하기와 같이 머신 폴더 및 Linux 종류를 설정한다. 여유롭게 공간을 사용하기 위하여 50GB를 지정하였다. 3. 가상 머신 환경 구성 부팅 순서에서 불필요한 플로피 제거한다. 4. CentOS 설치 4. 포트 포워딩 [root@localhost ~]# yum install -y net-tools ... [root@localhost ~]# ifcon.. 2022. 5. 11. Window 10 Home Hyper-V 활성화 방법 Window 10 Home Hyper-V Windows 10 Pro, Enterprise 및 Education 64비트 버전에서만 사용할 수 있고 Home 버전에서는 사용할 수 없다. Docker Desktop for Windows 설치를 위해서는 반드시 Hyper-V를 지원하는 OS가 필요하지만 Home 버전에서는 Hyper-V 기능을 사용할 수 없는 탓에 Docker Toolbox(Virtual Box)를 이용한 가상화를 통해서만 Docker를 설치할 수 있다. 무작정 블로그나 여러 사이트를 가서 Window 10 Home에 Hyper-V 설치를 하려고 하면 아래와 같은 문구가 표시되는 것을 볼 수 있을 것이다. microsoft-hyper-v은 는 알 수 없는 기능 이름입니다. Hyper-V 설치 .. 2022. 5. 10. GitLab 백업 및 복원 방법 애플리케이션 데이터 백업은 데이터베이스, 모든 리포지토리 및 모든 첨부 파일을 포함하는 아카이브 파일을 생성한다. 백업을 생성한 GitLab의 버전 및 유형(CE/EE)과 정확히 동일한 버전 으로만 백업을 복원할 수 있다. 요구사항 # Debian/Ubuntu sudo apt-get install rsync # RHEL/CentOS sudo yum install rsync GitLab 백업 GitLab은 다음을 포함하여 전체 인스턴스를 백업하는 명령줄 인터페이스를 제공한다. 데이터 베이스 첨부 파일 Git 리포지토리 데이터 CI/CD 작업 출력 로그 CI/CD 작업 아티팩트 LFS 객체 Terraform 상태( GitLab 14.7에 도입 됨) Container Registry 이미지 GitLab 페이지.. 2022. 5. 10. GitLab API를 활용한 마이그레이션 개요 BACKUP & RESTORE를 사용하여 파일을 활용하는 방법이 가장 간단한 방법이긴 하다. 하지만 회사 보안상이나 서버에 접근이 불가하거나 여러 가지 이슈들로 인하여 API를 활용하여 마이그레이션을 활용해야 하는 경우가 있다. 시나리오 GitLab (구서버 - old-gitlab.com) 에서 git clone 하여 로컬에 임의 디렉토리에 저장 localhost에서 GitLab (새로운 서버 - new-gitlab.com)로 push 준비사항 GitLab Group Acesss Token Python 3.x 마이그레이션 방법 1. GitLab Server Group Acess Token 발급 GitLab API를 활용하여 마이그레이션 하기 위해서는 Group에 접근할 Token을 발급한다. Gro.. 2022. 5. 9. Ubuntu 20.04 LTS에 Ganglia 설치 Ganglia 란? Ganglia는 클러스터 및 그리드와 같은 고성능 컴퓨팅 시스템을 위한 확장 가능한 분산 모니터링 시스템이다. 클러스터 연합을 대상으로 하는 계층적 설계를 기반으로 한다. 데이터 표현을 위한 XML, 컴팩트하고 휴대 가능한 데이터 전송을 위한 XDR, 데이터 저장 및 시각화를 위한 RRDtool과 같이 널리 사용되는 기술을 활용하고 있다. 매우 낮은 노드당 오버헤드와 높은 동시성을 달성하기 위해 신중하게 설계된 데이터 구조와 알고리즘을 사용한다. 구현은 강력하고 광범위한 운영 체제 및 프로세서 아키텍처로 이식되었으며 현재 전 세계 수천 개의 클러스터에서 사용 중이다. 대학 캠퍼스와 전 세계의 클러스터를 연결하는 데 사용되었으며 2000개 노드가 있는 클러스터를 처리하도록 확장할 수 있.. 2022. 3. 31. ubuntu에 GitLab을 설치해보자 gitlab 설치 1. 리눅스 필수 패키지 설치 root@master:~# apt update root@master:~# apt-get install -y ca-certificates curl openssh-server 2. gitlab-ce 리포지토리 추가 root@master:~# curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash root@master:~# cat /etc/apt/sources.list.d/gitlab_gitlab-ce.list # this file was generated by packages.gitlab.com for # the repository at.. 2022. 2. 22. Kubernetes - Helm (헬름) Helm (헬름) 이란? 헬름은 쿠버네티스 애플리케이션 관리하는 도구이다. 헬름 차트는 복잡한 쿠버네티스 애플리케이션도 편리하게 정의하여 설치하거나 업그레이드할 수 있다. 아키텍쳐 주요 특징 복잡성 관리 차트는 매우 복잡한 애플리케이션도 표현하고, 반복적인 애플리케이션 설치를 제공하며, 단일 권한으로 서비스할 수 있다. 쉬운 업데이트 즉시(in-place) 업그레이드와 커스텀 훅을 통해 업데이트하는 수고를 줄여줄 수 있다. 간단한 공유 차트는 버전 관리, 공유, 퍼블릭이나 프라이빗 서버 호스팅이 편리하다 롤백 helm rollback을 사용하여 릴리스를 예전 버전으로 간편하게 되돌릴 수 있다. 주요 개념 3가지 차트 쿠버네티스 애플리케이션의 인스턴스를 생성하는 데에 필요한 정보의 꾸러미이다. 설정 릴리스.. 2021. 12. 28. Hadoop - Hive (하이브) 설치 MySQL 설치 1. MySQL 패키지 설치 hadoop@hadoop-001:~$ sudo apt-get update ... * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage 84 updates can be applied immediately. hadoop@hadoop-001:~$ sudo apt-get install mysql-server -y ... Created symlink /etc/systemd/system/multi-user.target.wants/mysql.service → /lib/systemd/system/mysql.service. mysql-server (8.0.27-0ubuntu0... 2021. 12. 24. 이전 1 2 3 다음 728x90 반응형