Kubernetes 환경에서 ArgoCD 설치 및 GitOps 구축 가이드

ArgoCD 설치 # argocd namespace 생성 kubectl create namespace argocd # argocd 설치 kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml ArgoCD Server expose 설정 NodePort 로 Service 를 expose 하여 접속 가능하도록 설정 # 방법1: argocd-server service expose kubectl expose svc argocd-server -n argocd --type=NodePort --name=argocd-server # 방법2: argocd-server edit로 yaml 파일을 열어 NodePort 설정 kubectl edit svc argocd-server -n argocd argocd-server service 의 NodePort 확인 kubectl get svc argocd-server -n argocd argocd-server service 의 NodePort 로 접속하여 확인 ArgoCD 로그인 # admin 비밀번호 확인 kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo ArgoCD Application 생성 ArgoCD UI 접속 admin 계정으로 로그인 New App 버튼 클릭 Application Name 입력 Project 선택 SYNC POLICY 선택 Repository URL 입력 Revision 입력 Path 입력 deployment.yaml, service.yaml 파일이 있는 경로 root directory 에 있을 경우 . 입력 Cluster URL 입력 (기본값: https://kubernetes.default.svc) Namespace 입력 Create 버튼 클릭 ArgoCD 배포 확인 생성된 Application 에서 Sync 버튼 클릭 Sync Status 확인 Sync Status 가 Synced 로 변경되면 배포 완료

June 7, 2023 · 1 min

Kubernetes 환경에서 Jenkins 설치 및 기본 설정 가이드

Jenkins Kubernetes 설치 준비 Namespace 생성 # jenkins namespace 생성 kubectl create namespace jenkins Persistent Volume, Persistent Volume Claim 생성 (Optional) 아래 예시는 특정 노드의 local path를 사용하는 정적 프로비저닝(static provisioning) 예시이므로, ebme-storage와 동일한 이름의 StorageClass가 클러스터에 미리 존재해야 하며 PV가 바인딩될 노드(kube-cluster-worker1)도 실제 환경에 맞게 수정 필요 # jenkins-pvc.yaml # ebme-storage class 를 사용하는 30Gi 크기의 PV, PVC 생성 apiVersion: v1 kind: PersistentVolume metadata: name: jenkins-pv spec: capacity: storage: 30Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: ebme-storage local: path: /mnt/jenkins nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - kube-cluster-worker1 --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: jenkins-pvc namespace: jenkins spec: accessModes: - ReadWriteOnce storageClassName: ebme-storage resources: requests: storage: 30Gi Jenkins Service Account 생성 (Optional) # jenkins-service-account.yaml # In GKE need to get RBAC permissions first with # kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin [--user=<user-name>|--group=<group-name>] --- apiVersion: v1 kind: ServiceAccount metadata: name: jenkins --- kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: jenkins rules: - apiGroups: [""] resources: ["pods"] verbs: ["create","delete","get","list","patch","update","watch"] - apiGroups: [""] resources: ["pods/exec"] verbs: ["create","delete","get","list","patch","update","watch"] - apiGroups: [""] resources: ["pods/log"] verbs: ["get","list","watch"] - apiGroups: [""] resources: ["events"] verbs: ["watch"] - apiGroups: [""] resources: ["secrets"] verbs: ["get"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: jenkins roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: jenkins subjects: - kind: ServiceAccount name: jenkins Jenkins values.yaml 생성 (Optional) Jenkins 에서 제공하는 기본 템플릿 value.yaml 에서 필요한 부분만 수정 # jenkins-values.yaml # persistence 부분을 아래와 같이 수정 persistence: enabled: true existingClaim: "jenkins-pvc" storageClass: "ebme-storage" accessMode: "ReadWriteOnce" size: "30Gi" Helm을 사용한 젠킨스 설치 Jenkins Repository 추가 helm repo add jenkinsci https://charts.jenkins.io helm repo update Jenkins 설치 # 기본 설정대로 설치 helm install -n jenkins jenkins jenkinsci/jenkins # 기존 작성한 jenkins-values.yaml 을 사용하여 설치 helm install -n jenkins jenkins jenkinsci/jenkins -f jenkins-values.yaml Jenkins Service expose NodePort 로 Service 를 expose 하여 접속 가능하도록 설정 해당 주소로 Jenkins 접속 확인 kubectl expose svc jenkins -n jenkins --type=NodePort --name=jenkins Jenkins 비밀번호 확인 kubectl exec --namespace jenkins -it svc/jenkins -c jenkins -- /bin/cat /run/secrets/chart-admin-password && echo

June 7, 2023 · 2 min

Kubernetes Prometheus & Grafana Loki 모니터링 시스템 구축

kube-prometheus 사용한 프로메테우스 설치 쿠버네티스에 프로메테우스와 그라파나 설정을 위한 오픈 소스 프로젝트 kube-prometheus 설치 kube-prometheus 레포지토리를 클론 빠른 설정 # 설정파일을 통한 빠른 설정 kubectl apply --server-side -f manifests/setup kubectl wait \ --for condition=Established \ --all CustomResourceDefinition \ --namespace=monitoring kubectl apply -f manifests/ 설정 삭제 하기 kubectl delete --ignore-not-found=true -f manifests/ -f manifests/setup grafana svc 설정 grafana svc 노출 설정 # grafana svc 노출 설정 # type: NodePort 로 변경 kubectl -n monitoring edit svc grafana 노출된 IP로 접속하여 로그인 화면이 나오면 설정 완료 기본 아이디/비밀번호는 admin/admin ...

April 5, 2023 · 1 min

Foxglove Studio를 활용한 ROS2 데이터 시각화 시뮬레이션 가이드

Foxglove ROS2 Visualization Tool 1. Foxglove Studio Foxglove는 ROS2 시뮬레이션 시각화를 위한 도구 3D, Map, Plot, Image 등 다양한 시각화 기능을 제공 참고: “Foxglove Studio"는 2024년 2월 마지막 오픈소스 릴리즈(v1.87.0)를 끝으로 개발이 중단되었고, 이후 제품이 “Foxglove"로 리브랜딩되어 로봇 데이터 수집/관리까지 포괄하는 상용 플랫폼으로 확장됨. 아래 설치 방법은 과거 오픈소스 Studio 기준이며, 최신 버전은 foxglove.dev 에서 확인 필요 1. Installation 1.1. Desktop App Foxglove Download에서 OS에 맞는 설치파일을 다운로드 설치파일을 실행하여 설치 1.2. Web(Docker) 과거 오픈소스 Studio는 Docker image로 Self Hosting 가능했으나, 현재는 유지보수되지 않으므로 최신 버전이 필요하면 Desktop App 또는 studio.foxglove.dev 사용 권장 # docker run docker run --rm -p "8080:8080" ghcr.io/foxglove/studio:latest 2. Usage Desktop Foxglove Studio를 실행하거나 Web localhost:8080에 접속 Open connection을 클릭하여 foxglove bridge를 통해 연결 ws 주소를 입력한 뒤 Open 버튼을 클릭하여 연결 2. ros foxglove bridge Foxglove Studio에서 ROS2 연결을 위한 ros foxglove bridge 제공 ros foxglove bridge에서 제공하는 오픈소스 도구 ROS2와 Foxglove Studio를 연결하기 위한 bridge 역할을 함 해당 소스를 빌드하여 사용하거나 docker image를 사용하여 실행 가능 2.1. Source Build # Install ros foxglove bridge cd <path/to/your/ros_ws> git clone https://github.com/foxglove/ros-foxglove-bridge.git src/ros-foxglove-bridge rosdep update rosdep install --ignore-src --default-yes --from-path src # Build ros foxglove bridge colcon build --event-handlers console_direct+ --symlink-install source install/local_setup.bash ros2 launch foxglove_bridge foxglove_bridge_launch.xml 2.1.1. Run # Run ros2 foxglove bridge ros2 launch foxglove_bridge foxglove_bridge_launch.xml port:=8765 2.2. Docker 2.2.1. 직접 Docker Build 소스에 있는 Dockerfile을 사용하여 docker image를 빌드 ...

April 5, 2023 · 2 min

Modern DevOps 핵심 가이드: 도구 체계와 Cloud Native 로드맵

1. Modern DevOps 로드맵 개요 현대의 DevOps 엔지니어링은 단순히 개발과 운영을 연결하는 것에 그치지 않고, 소프트웨어 전달 속도(Velocity) 최적화, 안정성(Reliability) 확보, **인프라의 코드화(IaC)**를 핵심 목표로 삼습니다. [ [ [ [ C C O I o I b a n / s C t C e a D r & i v n & a A e b u r G i t i l o & t i m O t a K p y t 8 s ] i s ] o ] n ] M D G P T o o i r e d c t o r e k H m r r e u e a n r b t f h o D / A e r e c u m v K t s O 3 i p s o s n A / s G n S r s t M / a i a i f b c c J a l k r e n e o n a K k 8 i / s n s L k i A r g o C D 2. 영역별 핵심 도구 및 베스트 프랙티스 ① Container & Orchestration (컨테이너 패러다임) 애플리케이션을 호스트 환경과 격리하여 어디서나 동일하게 실행할 수 있는 표준 패키징 기술입니다. ...

April 3, 2023 · 2 min

ROS2 CMake 빌드 오류 해결 (catkin_pkg 관련)

ROS2 빌드 오류 처리 오류 메시지 ModuleNotFoundError: No module named `catkin_pkg` CMake Error at /opt/ros/humble/share/ament_cmake_core/cmake/core/ament_package_xml.cmake:95 (message): execute_process(/home/{user}/.pyenv/shims/python3.10 /opt/ros/humble/share/ament_cmake_core/cmake/core/package_xml_2_cmake.py /home/{user_project_path}/src/test_pubsub/package.xml /home/{user_project_path}/build/test_pubsub/ament_cmake_core/package.cmake) returned error code 1 Call Stack (most recent call first): /opt/ros/humble/share/ament_cmake_core/cmake/core/ament_package_xml.cmake:49 (_ament_package_xml) /opt/ros/humble/share/ament_cmake_core/cmake/core/ament_package.cmake:63 (ament_package_xml) CMakeLists.txt:31 (ament_package) 오류 해결 방법 해당 오류는 Python catkin_pkg 가 없어서 발생한 오류로 해당 패키지를 설치하면 됨 pip install catkin_pkg

March 29, 2023 · 1 min

Hugo로 블로그 만들기 및 GitHub Pages 배포

wkqcosoft hugo 페이지 만들기 hugo 프레임워크를 사용한 정적 페이지 만들어보기 프로젝트 Hugo 설치 Linux package manager를 사용하여 설치 sudo apt install hugo Hugo 프로젝트 생성 Quick Start 참고 hugo new site quickstart cd quickstart git init git submodule add https://github.com/theNewDynamic/gohugo-theme-ananke themes/ananke echo 'theme = "ananke"' >> config.toml hugo server Hugo 프로젝트에 포스트 추가 hugo new posts/my-first-post.md Hugo 프로젝트에 테마 적용 Themes 참고 git submodule add {theme-repo} themes/{theme-name} Hugo 특징 정적 페이지 생성기로는 Jekyll, Hexo, Hugo 등이 있음 Hugo는 Go 언어로 작성되어 있어서 빌드/렌더링 속도가 매우 빠르고, 테마가 많음 템플릿 문법이 Go의 text/template, html/template 패키지를 기반으로 하고 있어, Go 언어에 익숙하면 템플릿을 커스터마이징하기 수월함 Hugo 소감 쉽고 빠르게 설치가 가능했고 테마도 많아서 쉽게 적용할 수 있었음 앞으로 wkqcosoft 개발 문서 관리에 활용할 예정 go lang 도 다시 공부해볼 흥미가 생김

March 24, 2023 · 1 min