본문 바로가기

전체 글122

[Docker] Installation traefik [traefik] nginx와 같이 reverse proxy의 종류로 별도의 제어 없이 실행중에 실시간으로 통신 되는 요소끼리 찾아서 연결해주는 기능을 가진 traefik입니다. 대시보드를 통해 실시간으로 어떤 서비스들이 연결되어 있는지 확인할 수 있고, 어떤 서버와 연결되어 있는지 파악 가능합니다. [Docker-compose로 Traefik 설치 및 구성] services: traefik: image: "traefik:latest" ports: - "80:80" - "8080:8080" command: - "--api.insecure=true" - "--providers.docker=true" - "--entrypoints.web.address=:80" ports: - "80:80" - "8080:8.. 2023. 5. 17.
Install Compose standalone https://docs.docker.com/compose/install/standalone/ Install Compose standalone docs.docker.com 2023. 5. 17.
[k8s] VPA (Vertical Pod Autoscaler) 설치 및 실습 VPA (Vertical Pod Autoscaler) 는 Pod의 리소스를 감시하고, pod 의 resource가 부족한 경우 pod를 Restart 하며 pod의 resource를 증가시킵니다. Kubernetes VPA는 pods에 대한 CPU 및 Memory 예약을 자동으로 조정하여 애플리케이션의 크기를 적절하게 조정할 수 있게 지원합니다. 클러스터의 리소스 사용률을 개선하고 다른 pod를 위한 CPU 및 Memory를 확보할 수 있습니다. 직접 k8s 클러스터에 VPA를 설치하고 테스트 하는것을 해당 글에서 다루어 봅니다. 1.Metric Server 설치 kubectl apply -f \ https://github.com/kubernetes-sigs/metrics-server/releases/l.. 2023. 5. 16.
[AWS] Cats and Dogs Workshop - Using ECS with CI/CD [2] 13.Auto Scaling 그룹 구성 [ECS 용량공급자 탐색] 1.ECS로 이동해서 클러스터를 선택합니다. 인프라 탭을 클릭한 다음 용량 공급자 블록에 3개의 용량 공급자가 이미 있음을 확인합니다. 2. 용랼 공급자 변경 업데이트를 클릭합니다. 다음 관리형 크기 조정 켜기를 체크를 해제합니다. [Auto Scaling 그룹 구성] 1.EC2 AutoScaling 그룹으로 이동합니다. 그 후 동적 조정 정책 생성을 클릭합니다. 이름을 클릭하여 들어간 후 자동 크기 조정 만들기 버튼을 클릭합니다. 조정정책을 다음과 같이 구성합니다. 그 후 생성합니다. 2. Infra-ECS-Cluster-DEMOGO-ECS Auto Scaling Group을 클릭 하고 Details 탭으로 이동하여 Edit를 클릭 합니.. 2023. 5. 13.
[AWS] Cats and Dogs Workshop - Using ECS with CI/CD [1] https://catalog.us-east-1.prod.workshops.aws/workshops/8c9036a7-7564-434c-b558-3588754e21f5/en-US Workshop Studio catalog.us-east-1.prod.workshops.aws 해당 글은 AWS workshop studio를 참조하며 진행했습니다. 이 워크숍에서는 고양이와 강아지 사진을 임의로 표시하는 Container화 된 /autoscaling 웹 application을 build & deploy 합니다. 또한 컨테이너 monitoring tool을 구현하고 웹 application에서 LB 테스트를 수행하고 결과를 모니터링 합니다. [Architecture] AWS CloudFormation을 사용합니다. .. 2023. 5. 13.
[k8s] TLS Ingress 생성해서 https로 서비스 하기 1. Namespace 생성 kevin@k8s-master:~$ kubectl create ns testing namespace/testing created kevin@k8s-master:~$ kubectl get ns testing NAME STATUS AGE testing Active 9s kevin@k8s-master:~$ kubectl create deployment nginx-pod --namespace testing --image=nginx:latest --replicas=1 deployment.apps/nginx-pod created kevin@k8s-master:~$ kubectl expose deployment nginx-pod --namespace testing --name=nginx-.. 2023. 5. 3.
[CI/CD] SSH into my VM - Using git action & docker-compose 시연 영상 해당 프로젝트의 시연 영상 입니다. 2023.05.01 - [프로젝트 (Project)] - [CI/CD] SSH into my VM - Using git action & docker-compose [CI/CD] SSH into my VM - Using git action & docker-compose CI/CD 지속적으로 새로운 코드 변경 사항이 있거나 빌드 및 테스트 되어 GIT REPO에 통합되어 관리되는 것과 그것을 CD 즉, Production Level 까지도 자동으로 Deploy 되는 과정을 시나리오 형태로 본 프로 blackholecoding.tistory.com https://youtu.be/k3Jm3l5q2wg 2023. 5. 1.
[CI/CD] SSH into my VM - Using git action & docker-compose CI/CD 지속적으로 새로운 코드 변경 사항이 있거나 빌드 및 테스트 되어 GIT REPO에 통합되어 관리되는 것과 그것을 CD 즉, Production Level 까지도 자동으로 Deploy 되는 과정을 시나리오 형태로 본 프로젝트에서는 담아보고자 합니다. 다음 사례는 직접 필자가 겪은 일을 토대로 프로젝트를 진행하도록 하겠습니다. [사례] 항공권을 예매를 하는데 Application에서 마지막 결제하기 버튼이 아무리 눌러도 눌리지 않는 상황을 마주한적 있습니다. 아무래도 결제하기 버튼의 Request 처리가 제대로 동작하지 않는 것이라 생각이 들었습니다. OO 항공사가 이 사실을 모르고 있는 것 같아 직접 고객센터에 전화하여 APP에 문제가 있는 것 같다고 결제하기 위치를 알려주며 확인해 보라고 하였.. 2023. 5. 1.
[CI/CD] Docker Jenkins - git webhook - deploy 시연 영상 https://youtu.be/Ktu1x4YLt4c 시연 영상은 다음과 같습니다. Oracle VM 환경에서 ngrok를 사용하여 public ip를 사용하여 git webhook을 등록해 git push를 Trigger로 삼아 docker image가 build 된 후 docker hub에 push 되어 VM의 Production 환경에 변동사항이 적용된 새로운 이미지로 deploy 되는 cicd project였습니다. 2023. 4. 28.
[k8s] Deploy & Pod Scale Deploy Kubernetes Deploy는 애플리케이션의 배포를 관리하는 컨트롤러입니다. Deploy를 사용하면 컨테이너 이미지, 리소스 요청, 포트 및 레이블과 같은 애플리케이션 구성을 정의할 수 있습니다. Deploy는 지속적인 배포를 지원하기 때문에, 새로운 버전의 애플리케이션을 배포하거나 업데이트할 때 유용합니다. 새로운 버전의 애플리케이션을 배포할 때, Deploy는 이전 버전의 애플리케이션과 새로운 버전의 애플리케이션을 동시에 유지보수할 수 있습니다. 이를 통해 애플리케이션의 가용성을 유지하면서 업데이트를 수행할 수 있습니다. Deploy의 구성 파일은 일반적으로 YAML 파일로 작성됩니다. 이 파일은 애플리케이션의 구성을 정의하고, 이를 통해 Deploy 컨트롤러가 애플리케이션을 배포하고.. 2023. 4. 24.
[k8s] Persistent Volume 1. PV ( Persistent Volume ) 란? Persistent Volume (PV)은 Kubernetes의 스토리지 추상화로, 이를 사용하는 pod 에서 storage 구성을 분리할 수 있습니다. Persistent Volume 은 Cluster 관리자가 동적으로 프로비저닝하거나 정적으로 구성할 수 있는 클러스터 전체 리소스입니다. Pod 와 Storage 백엔드 사이에 추상화 계층을 제공하여 애플리케이션의 유연성과 이식성을 높일 수 있습니다. 2. Pv 예제 Persistent Volume 구성해보기 * Create a persistent volume with name app-config, of capacity 1Gi and access mode ReadWriteMany * StorageC.. 2023. 4. 20.
[k8s] Resource 사용량 확인을 위한 Metric Server 설치 리소스 사용량 확인을 위해 kubectl top 명령어를 사용하게 되면 metric 서버가 없을 경우 다음과 같은 에러가 발생한다. kevin@k8s-master:~$ kubectl top no error: Metrics API not available 메트릭 서버를 설치하여 해결할 수 있다. 1. Metric Server 설치 # metric-server 설치 kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml 2. 에러 발생시 해결 방법 [에러 1] ( Readiness probe failed: HTTP probe fail ) 아래의 명령어로 metric ser.. 2023. 4. 18.
[k8s] Static Pod Static Pod 의 개념 Kubernetes(K8s)에서 Static Pod는 Kubelet에 의해 관리되는 Pod의 특수한 유형입니다. 이러한 Pod는 정적으로 구성되어 있으며, 일반적으로 Kubernetes API 서버에서 제공하는 Pod Spec이 아니라 kubelet 구성 파일 디렉토리에 위치한 YAML 또는 JSON 파일에 의해 정의됩니다. 경로는 보통 /etc/kubernetes/manifests 에 위치 됩니다. Static Pod 의 특징 Static Pod는 Kubernetes 클러스터를 부트스트래핑하는 데 사용됩니다. 예를 들어, Kubernetes 클러스터의 모든 노드가 사용 가능한 경우, 각 노드의 kubelet에는 클러스터 노드의 상태를 보고하는 Kubernetes API 서버.. 2023. 4. 17.
[k8s] Node resource usage, Pods and their containers resource usage 리소스 사용량 조회 각 노드에는 CPU, 메모리 및 저장소를 포함하여 한정된 양의 리소스가 있습니다. Kubernetes는 리소스 요청 및 제한을 사용하여 포드 및 해당 컨테이너가 제대로 실행되기에 충분한 리소스가 있는 노드에 할당되도록 합니다. Pod는 Kubernetes에서 배포 가능한 가장 작은 단위이며 하나 이상의 컨테이너를 포함할 수 있습니다. 포드 내의 각 컨테이너는 자체 리소스 요청 및 제한을 가질 수 있습니다. 포드의 모든 컨테이너에 대한 리소스 요청의 합계가 노드에서 사용 가능한 리소스를 초과하면 Kubernetes는 해당 노드에 포드를 예약하지 않습니다 사용예제입니다. kubectl top node # node의 리소스 사용량 조회 kubectl top pod # pod의 리소스 사용량 조회 kubectl.. 2023. 4. 13.
[Woodpecker] Secure & Open-source CI/CD tool 구축 # woodpecker VS Other CI System Woodpecker은 매우 간단한 UI를 가지고 있습니다. 정말 쉽게 진행상황을 빌드하고 보여줍니다. Build pipeline은 도커 기반으로 하여 거의 모든 종류의 소프트웨어나 도구를 로컬에서 테스트할 수 있는 장점이 있습니다. 또한 AWS CLI 이미지를 사용해 모든 API를 사용할 수 있습니다. 그리고 ram 소비 공간 또한 Jenkins 보다 훨씬 작습니다. 중요한 이점을 정리해보자면 다음과 같습니다. 1. Open-Source 입니다. 언제든지 빌드 테스트를 비용 걱정없이 할 수 있습니다 2. 맞춤형 빌드 하드웨어 입니다. 필요에 따라 파이프라인을 구축할 하드웨어를 선택할 수 있습 니다. 필요한 만큼 빌드 에이전트를 실행하고 빌드를 병렬.. 2023. 4. 11.
[k8s] Security Authentication - Who can access Files - Username and Passwords Files - Username and Tokens Certificates External Authentication providers - LDAP Service Accounts Authorization - What can they do? RBAC Authorization (Role Based Access Control)을 이용해 구현될 수 있음 ABAC Authorization (Attribute Based Access Control) Node Authorization Webhook Mode 모든 component(ETCD, kube controller manager, api server, k.. 2023. 4. 10.
[k8s] Cluster Maintenance OS Upgrades software 업그레이드 또는 security patch 등 node를 내려야할 일이 있을 때, 어떻게 안정적으로 클러스터를 유지할까? 노드가 5분(—pod-eviction-timeout) 안에 정상화되지 않을 경우 pod은 종료됨 replicaset 의 pod이었을 경우, 다른 노드에 재생성됨 그냥 pod일 경우 사라지게됨 안전하게 노드를 작업하기 위해, drain을 통해 모든 workload를 다른 노드로 옮길 수 있음 kubectl drain node-1 기존 노드에서 pod들이 종료되고, 다른 노드에서 재생성됨 또한 노드가 cordon되고, unshedulable 로 마크됨 제약을 삭제할 때까지, 아무 pod도 스케줄되지 않음 pod이 다른 노드에서 안전하면, 노드를 reb.. 2023. 4. 8.
[k8s] Application Lifecycle Management Rolling Updates & Rollbacks deployment는 rollout을 trigger하고, 새 rollout은 새 deployment revision을 생성하게 됨 이를 통해 변경을 추적할 수 있고, deployment를 이전 버전으로 롤백할 수 있도록 함 참고: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#updating-a-deployment Deployment Strategy recreate strategy 기존 배포된 application을 모두 삭제하고, 새 버전의 application을 다시 생성하는 방식 삭제 후 새 버전이 생성되는 사이, application이 접근 불가능한 텀이 생길 수 있음 .. 2023. 4. 7.
[Vercel] Vercel, AWS Marcketplace에 합류 간단 사용 리뷰 Nuxt Deploy 를 누르게 되면 github에 자동으로 소스를 제공해준다. Create 버튼을 누르면 github repo가 생성된다. 생성 완료. branch를 확인할 수 있는 Dashboard를 제공해준다. 친절하게 Read.me 파일에 사용법을 제공해주는 Vercel AWS에 연결해서 사용해보겠다. sudo yum update curl -sL https://rpm.nodesource.com/setup_lts.x | sudo bash - sudo yum install -y nodejs node -v EC2에 Node.js를 설치하였다. Vercel 에서 제공해준 코드대로 설치 진행 npm install npm run dev AWS EC2 보안그룹 인바운드 규칙 3000번 허용 규칙 생성을 해주면.. 2023. 4. 6.
[k8s] kubernetes Scheduling Manual Scheduling 원하는 node를 지정할 수 있음. https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodename apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx nodeName: kube-01 nodeName 속성 추가 생성 후 assign 은 불가 ⇒ 필요시 Binding object를 생성해(kind: Binding) api post 로 요청해야 함 Label & Selectors object 를 group화하고, 선택할 때 사용 apiVersion: v1 kind: Pod metada.. 2023. 4. 5.
[k8s] Kubernetes Core Concept (쿠버네티스 핵심 개념) ETCD 정보를 key-value 형태로 저장하는 데이터베이스. (컨테이너가 어떤 ship에 있는지,언제 load되었는지 등 각기 다른 ship들에 대한 정보를 저장) ETCD in K8S nodes, pods, configs, secrets, accounts, roles, bindings 등 cluster에 관한 정보를 저장 합니다. kubectl 의 모든 정보들은 ETCD 서버에서 온다. 노드 추가, 파드 배포 등 모든 변화에 대해서는 ETCD 서버에 업데이트 됨. ETCD pod kubeadm으로 설치했다면 kube-system 에 etcd-master라는 이름으로 배포됨 다음 명령어로 저장된 key들 확인 가능 $ kubectl exec etcd-master -n kube-system etcdct.. 2023. 4. 4.
[CI구축] Docker - Github Action - DockerHub 다음과 같은 Flow로 AWS EC2에서 Git push를 하게 된다면 연결된 git repo의 git action (Work flow, Jobs)를 통해 Docker hub에 새로운 버전으로 업데이트 해주는 과정을 구현해 보았다. 개발을 한다면, 다음과 같은 세팅을 해 두고 시작한다면 편한 작업 환경을 가질 수 있을 것 같다. 1. AWS EC2에 Docker 설치 # 도커 설치 # // 도커 설치 sudo yum install docker -y // 도커 실행 sudo service docker start // 도커 상태 확인 systemctl status docker.service // Docker 관련 권한 추가 sudo chmod 666 /var/run/docker.sock docker ps /.. 2023. 4. 4.
[k8s-Kubecolor] Colorize kubectl 소스코드 : https://github.com/hidetatz/kubecolor GitHub - hidetatz/kubecolor: colorizes kubectl output colorizes kubectl output. Contribute to hidetatz/kubecolor development by creating an account on GitHub. github.com 설치방법 $ wget https://github.com/hidetatz/kubecolor/releases/download/v0.0.25/kubecolor_0.0.25_Linux_x86_64.tar.gz $ tar -xzvf kubecolor_0.0.25_Linux_x86_64.tar.gz $ mv kubecolor /usr/l.. 2023. 4. 1.
[머신러닝]Label Encoder vs One Hot Encoder(레이블인코더, 원핫인코더) 머신러닝에 사용되는 대표적인 인코딩 방법에는 Label Encoder, One Hot Encoder 방식이 있다. 인코딩이 중요한 이유는 머신러닝에 들어가는 데이터가 어떤 데이터인지에 따라 성능이 좌우 되기 때문이다. 우선 기본적으로는 결측치(NULL)값은 허용되지 않는다. 데이터분석과는 다르게 머신러닝 모델을 돌리기 위해서는 결측치가 대부분이라면 해당 데이터 Feature 들은 제거 하는것이 좋다. 단순 아이디나, 관리번호 등 단순한 행의 식별역할로써 쓰이는 요소들은 예측에 중요한 요소가 절대 될 수 없고 오히려 알고리즘을 복잡하고 무겁게 만들어 예측 성능을 떨어뜨린다. Label Encoder 레이블 인코딩은 Feature 들을 코드형 숫자값으로 변환 하는것이다. 레이블 인코딩은 문자열 데이터를 숫자.. 2022. 11. 29.