DevOps 24

[Kubernetes Study - 08] Namespace, ResourceQuota, LimitRange

쿠버네티스 클러스터 안에는 여러개의 네임스페이스를 만들 수 있다. 또한, 하나의 네임스페이스 안에는 여러개의 파드를 만들 수 있다. 각 파드들은 하나의 클러스터 내부에 있는 자원을 공유해서 사용한다. 이때 특정 파드에서 너무 많은 자원을 사용하면 다른 네임스페이스에 있는 파드들이 리소스를 사용하지 못하므로 이것을 방지하기 위해서 네임스페이스 마다 resource quota를 할당할 수 있다. 또한, LimitRange를 둬서 네임스페이스에 두는 Pod의 크기를 제한할 수 있다. Namespace 같은 네임스페이스 안에서 오브젝트 끼리의 이름은 겹칠 수 없다. Pod와 Service의 네임스페이스가 서로 다르면, Selector로 묶을 수 없다. 서로 다른 Namespace에서 통신이 가능하지만 통신을 막..

DevOps/Kubernetes 2021.02.12

[Kubernetes Study - 07] ConfigMap, Secret

ConfigMap, Secret 개발환경과 운영환경이 다르다면 이미지를 만들 때 들어가는 설정들이 조금씩 다른 경우가 있다. 예를 들어, 개발환경에서는 SSH 접속을 가능하게 하고, 접근 유저와 키 값을 세팅할 수 있다. 반면 운영 환경에서는 SSH 접속을 불가능하게 해야한다. Service의 이미지로 만들어서 배포한다고 하면 이 정보만 수정하기 위해 이미지를 운영환경과 개발환경에서 각각 2개를 만들어 하고, 이는 관리의 어려움과 번거로움이 생길 수 있다. 이러한 설정 정보들을 따로 관리해 주는 것이 ConfigMap과 Secret이다. 컨테이너를 만들 때 ENV값에 넣어준다. Secret은 Base64 인코딩을 해서 저장해야 하고, 이를 파드에 배포하면 알아서 디코딩 해준다. secret에 Base64..

DevOps/Kubernetes 2021.02.10

[Kubernetes Study - 06] Volume - emptyDir, hostPath, PV/PVC

emptyDir Pod내의 컨테이너들끼리 데이터를 공유하기 위해 볼륨을 사용 볼륨은 Pod내에 위치한다. 최초에 생성할 때는 볼륨이 비어있는 상태이다. Pod안에 볼륨이 생성되기 때문에, Pod가 사라질 때 같이 사라진다. hostPath 자신(Pod)이 올라가 있는 Node의 path를 볼륨으로 사용 개별 노드를 위한 파일들을 관리하는데 용이함 Node의 파일 시스템을 접근하는데 유용하다. ex) 노드의 로그 파일을 읽어서 수집하는 용도 Pod들이 죽어도 볼륨은 사라지지 않는다. 만약 Node가 2개 이상일 경우 Pod가 다른 Node에 재생성되면 기존 Node에 볼륨마운트를 할 수 없으므로 문제가 생긴다. hostPath에 정의된 path는 Pod가 생성되기 전에 만들어져 있어야 한다 단, type ..

DevOps/Kubernetes 2021.02.09

Kubernetes 명령어 정리

Pod내의 컨테이너에 접속하기 # Deprecated $ kubectl exec -it [Pod_Name] /bin/bash # Recommended $ kubctl exec -it [Pod_Name] -- bash Namespace 확인, 생성, 교체 $ kubectl create ns {namespace_name} # 생성 $ kubectl get ns # 확인 $ kubectl config set-context --current --namespace={namespace_name} # 현 위치에서 namespace 변경 Node에 태그 붙이기 # kubectl label nodes [node 이름] [key=value] $ kubectl label nodes aks-agentpool-19228959-..

DevOps/Kubernetes 2021.02.03

Ubuntu 환경에서 Jira Server 구축하기

이슈 트래킹 및 협업 툴 사용을 위해 Jira Server를 구축해봤다. 참고 블로그 (여기서는 DB를 mariadb를 쓰는데, mysql로 설치) How to Install Jira Project Management Software on Ubuntu 18.04 | 16.04 This brief tutorial shows students and new users how to install Jira project management platform on Ubuntu 18.04 | 16.04 servers. Jira is a proprietary project management software from Atlassian which… websiteforstudents.com VM 및 설치 소프트웨어 정보 L..

DevOps/Jira 2021.01.29

[Kubernetes Study - 05] 기본 실습 (3) - AKS를 이용한 내부 클러스터 통신

인프런에서 쿠버네티스 강의를 듣는데, 강의 환경은 VM 3개를 띄워서 1대는 마스터 노드, 나머지 2대는 워커노드로 사용을 한다. 이번 강의에서 실습한 내용은 아래와 같다 Pod에 Service를 붙이기 Master Node에서 curl로 Cluster IP를 호출한다 해당 IP의 9000번 포트에 접근하여 hostname을 url 매개변수로 넘겨주면 9000번 포트에 올라가 있는 Pod의 호스트 네임이 출력된다. (Pod의 이미지의 내용이 이렇다) 우선 각 오브젝트들의 매니페스트 정보는 다음과 같다 pod.yaml apiVersion: v1 kind: Pod metadata: name: pod-1 labels: app: pod spec: nodeSelector: kubernetes.io/hostname..

DevOps/Kubernetes 2021.01.22

[Kubernetes Study - 03] 기본 실습 (1) - yaml 파일 작성 및 Pod 내 컨테이너 접속

쿠버네티스의 가장 기본이 되는 yaml 파일 작성 및 Pod 안에 있는 컨테이너에 접속하는 방법을 알아보자 현재 Azure의 AKS를 활용하여 클러스터를 구축한 상황이다. 하나 짚고 넘어갈 것은, AKS를 사용하여 구축한 클러스터에서 Master Node는 Azure가 되고, AKS를 생성할 때 만든 노드들이 전부 Worker Node가 된다. 호스팅되는 Kubernetes 서비스인 Azure는 상태 모니터링 및 유지 관리 같은 중요 작업을 처리합니다. Kubernetes 마스터는 Azure에서 관리됩니다. 에이전트 노드만 관리하고 유지하면 됩니다. 관리되는 Kubernetes 서비스, AKS가 무료이므로 마스터가 아니라 클러스터 내의 에이전트 노드에 대해서만 지불합니다. Azure Kubernetes ..

DevOps/Kubernetes 2021.01.21

[Kubernetes Study - 02] 기본 개념 이해

참고 블로그 : 조대협의 블로그 쿠버네티스 #2 - 개념 이해 (1/2) 쿠버네티스 #2 개념 이해 (1/2) 조대협 (http://bcho.tistory.com) 쿠버네티스를 공부하면서 가장 헷갈리는 부분이 용어와 컨셉이다. 이 컨셉만 잘 이해하면 쿠버네티스를 쉽게 이해하고 사용할 수 있지 bcho.tistory.com 오브젝트 구성요소 기본적인 구성단위가 되는 기본 오브젝트 기본 오브젝트를 생성하고 관리하는 컨트롤러 추가정보인 메타정보 오브젝트 스펙 : 오브젝트의 특성을 기술한 것. yaml이나 json으로 스펙 정의 (manifest file) 기본 오브젝트 종류 Pod : 컨테이너화 된 애플리케이션 Service : 로드밸런서 Volume : 디스크 Namespace : 패키지명 Pod 쿠버네티스..

DevOps/Kubernetes 2021.01.19

Jenkins를 사용하여 GitHub에서 Azure Kubernetes Service로 배포(2) - Jenkins와 GitLab 연동

자습서 - Jenkins를 사용하여 GitHub에서 Azure Kubernetes Service로 배포 GitHub 및 CD(지속적인 배포)에서 AKS(Azure Kubernetes Service)까지의 CI(연속 통합)를 위해 Jenkins를 구성하는 방법을 알아봅니다. docs.microsoft.com 이번 포스팅은 자습서 중 자동화된 빌드를 위한 Jenkins 빌드 작업 및 GitHub 웹후크를 만듭니다. CI/CD 파이프라인을 테스트하여 GitHub 코드 커밋에 따라 AKS에서 애플리케이션을 업데이트합니다. 해당 부분을 위한 사전 작업이다. 물론 GitHub 대신 GitLab을 사용한다. 또한 이 포스팅은 꼭 AKS를 사용하지 않더라도 대부분 구성되어 있는 CI/CD 파이프라인에서 사용되는 부분이..

DevOps/CICD 2021.01.15

Jenkins 오류 해결 - '역방향 프록시 설정이 잘못된 것으로 파악되었습니다' (with nginx reverse proxy)

Ubuntu 18.04 LTS의 Azure VM에 젠킨스 서버를 로컬로 설치해서 사용중이다. 기존에는 VM에 할당받은 public IP 주소에 젠킨스 default port만 뚫어서 사용했는데, 현재는 도메인을 할당받고 nginx로 프록시 서버를 구축하여 사용중이다. 구성과정 포스팅은 여기를 참고하면 된다. Jenkins 서버에 nginx reverse proxy를 구성하고 나니 Jenkins 관리 화면에서 아래와 같은 오류 알림창이 떴다 문제 원인 Reverse proxy 설정을 해줬으니 8080으로는 바로들어 오게 하면 안된다. 클라이언트 요청이 80포트로 들어오고 nginx가 8080 포트로 보내줘야 하는데, Jenkins URL 정보에는 8080 포트로 직접 들어오는 public IP 주소가 매핑..

DevOps/CICD 2021.01.15