DevOps 20

[Docker] 1. Docker overview

Docker는 애플리케이션을 개발, 배포 및 실행하기 위한 오픈 플랫폼입니다. 애플리케이션을 인프라에서 분리하여 빠르게 소프트웨어를 제공할 수 있습니다. 코드를 작성하고 프로덕션에서 실행하는 사이의 지연 시간을 크게 줄일 수 있습니다. 1. The Docker platform Docker는 컨테이너라는 약간 격리된 환경에서 애플리케이션을 패키지화하고 실행할 수 있게 합니다. 컨테이너는 경량화되어 있으며, 애플리케이션을 실행하는 데 필요한 모든 것을 포함하므로 호스트에 의존할 필요가 없습니다. 2. What can I use Docker for? Fast, consistent delivery of your applications 개발자가 로컬 컨테이너를 사용하여 표준화된 환경에서 작업할 수 있게 해줍니다...

DevOps/Docker 2023.10.29

[Github Actions] 1. GitHub Actions 이해

1. Overview GitHub Actions는 CI/CD 플랫폼입니다. 빌드 - 테스트 - 배포 를 자동화할 수 있습니다. Repository의 다양한 이벤트가 발생할 때 Workflow를 실행합니다. 데이터 센터나 클라우드 인프라를 사용하기 위한 Virtual Machine을 호스팅해줍니다. 2. The Components of GitHub Actions Workflow는 저장소에서 발생하는 이벤트에 따라 트리거 될 수 있습니다. Workflow에는 하나 이상의 Job이 포함되면 각 Job은 다양한 Step을 포함합니다. 작업은 가상 머신 러너나 컨테이너 내에서 실행됩니다. Action은 Workflow를 단순화하기 위한 재사용 가능한 확장 기능입니다. 3. Create an example work..

DevOps/CI&CD 2023.10.29

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter18. 오토스케일링

18. 1 HPA의 구조 HPA는 컨트롤러 매니저(kube-controller-manager) 안에서 주기적으로 실행하면서 설정된 HPA의 상태를 확인함. HPA가 디플로이먼트에 속한 파드들의 상태를 모니터링하다가 지정된 조건에 이르면 디플로이먼트를 스케일해서 파드 개수를 늘리거나 줄임. 지정된 자원을 API로 먼저 확인한 후 조건에 맞을 때 HPA가 오토스케일링함. 18.2 HPA 설정하기 targetCPUUtilizationPercentage : CPU사용률이 얼마일 때 오토스케일링을 적용할 지 설정함.

DevOps/Kubernetes 2021.07.22

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter17. 로깅과 모니터링

17.1 로깅 오케스트레이터를 사용하는 환경에서 로그를 수집할 때 로그를 로컬 디스크에 파일로 저장하지 말아야 함. 쿠버네티스는 특정 앱 컨테이너의 로그를 확인하려면 전체 클러스터의 노드 중 어떤 노드에 해당 컨테이너가 실행되었는지 확인해야 로그도 확인이 가능함. 파드 로그 확인하기 ‘Kubectl logs -f 파드이름’ : 파드의 로그 확인 2. 일래스틱서치로 로그를 수집한 후 모아서 보기 로컬 디스크에 로그를 저장하면 용량 문제로 삭제한 예전 로그들을 확인할 수 없음. 장비 각각에 저장한 로그를 한 곳에 모아서 살펴보도록 서버를 구축함. 일래스틱서치 파드를 배포하고 서비스를 붙여 외부에 노출시킴. 키바나는 일래스틱서치의 데이터를 검색하므로 접근할 도메인을 알아야함. env의 ELASTICSEARCH..

DevOps/Kubernetes 2021.07.22

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter16. 쿠버네티스 DNS

16.1 쿠버네티스 DNS 클러스터 안에서만 사용하는 DNS 설정 가능. 파드 사이에 통신 시 도메인 사용 가능. IP로 통신 설정시 IP 대역이 다를 때 수정해야 하므로 번거로움 16.2 클러스터 안에서 도메인 사용하기 내부 도메인은 서비스와 파드를 대상으로 사용하며 일정한 패턴이 있음. 서비스 접근 :’서비스이름.네임스페이스이름.svc.cluster.local’처럼 구성함. 파드 접근 : ’파드IP주소.네임스페이스이름.pod.cluster.local’처럼 구성함. 단 IP주소를 사용하면 의미가 없음 그러므로 파드 생성 시, 호스트네임과 서브 도메인을 설정해서 사용하기 .spec.template.spec.hostname .spec.template.spec.subdomain 설정 시, ’호스트네임이름.서..

DevOps/Kubernetes 2021.07.22

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter15. 클러스터 네트워킹 구성

15.1 파드 네트워킹 쿠버네티스는 파드에 IP를 할당함. 파드들은 IP를 이용해 서로 통신함. 도커 컨테이너의 네트워킹 도커 브리지 타입 네트워크는 호스트안에 docker() 라는 브리지를 추가해 컨테이너와 호스트 사이를 연결함. docker()는 호스트의 네트워크 네임스페이스라 함. 호스트의 기본 네트워크는 여기서 만들어지고 관리함. container1(veth0)과 container2(veth1)는 컨테이너 네트워크 네임스페이스라고 함. 컨테이너를 생성할 때마다 만들어지고 컨테이너마다 별도의 네트워크를 사용할 수 있도록 함. veth는 한쪽 끝은 컨테이너, 다른 한쪽 끝은 호스트의 브리지(docker() )를 연결하여 호스트 네임스페이스와 컨테이너 네임스페이스 사이를 통신함. 도커 컨테이너 네트워킹..

DevOps/Kubernetes 2021.07.22

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter14. 데이터 저장

14.1 볼륨 컨테이너는 기본적으로 상태가 없는 앱 컨테이너를 사용함. -> 다른 노드로 자유롭게 옮길 수 있음 -> 상태를 저장할 수 없어 컨테이너가 재시작시 데이터가 사라짐 데이터를 보존하기 위해 볼륨을 사용함. 볼륨은 클라우드 볼륨 서비스, 디스크, 서버 컨테이너 볼륨 플러그인 등 다양한 종류가 있음 .spec.container.volumeMounts.mountPropagation : 파드 안에있는 컨테이너끼리 혹은 노드 안에 파드들끼리 공유할 지 설정 None : 컨테이너가 만들어 놓은 마운트를 호스트에서 볼 수 없음. HostToContainer : 호스트에서 해당 볼륨 하위에 마운트된 다른 디렉터리들도 볼 수 있음 Bidirectional : 호스트 안 모든 컨테이너나 파드에서 같은 볼륨을 사..

DevOps/Kubernetes 2021.07.22

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter13. 인증과 권한 관리

13.1 인증 사용자가 쿠버네티스의 API에 접근하려면 인증이 필요함. 외부에서 접속시 TLS 인증이 적용되어있음. 접속하려면 kube-apiserver에 있는 인증서와 클라이언트에 있는 인증서 사이의 검증을 통과해야함. -> 인증되지 않은 클라이언트가 kube-apiserver에 접속하지 못하게 하려는 것 쿠버네티스는 접속시에 사용자 계정과 서비스 계정으로 인증을 요청함. 사용자 계정은 별도의 외부 인증 시스템에 있는 사용자 정보를 연결해 사용함 서비스 계정은 쿠버네티스가 직접 관리하는 사용자 계정이며 시크릿이 할당되어있어 비밀번호 역할을 함 kubectl의 config 파일에 있는 TLS 인증 정보 구조 확인하기 Kube-apiserver와 통신할 때 기본 인증 방법으로 TLS를 사용함. TLS는 통..

DevOps/Kubernetes 2021.07.21

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter12. 파드 스케줄링

12. 1 노드 셀렉터 파드가 클러스터 안 어떤 노드에서 실행될 지를 키-값 쌍으로 결정함. 노드에서도 레이블 설정이 가능한데 보통 노드의 환경(os, arch 등)을 적어둠. 노드에 레이블 추가 ‘ kubectl label nodes “노드이름” 레이블키=레이블값 ’ 파드에 노드셀렉터 설정 spec.nodeSelector 에 키값을 설정함 -> 해당 레이블을 가진 노드에 실행될 것임을 설정할 수 있음. 12.2 어피니티와 안티 어피니티 노드 어피니티 노드셀렉터와 비슷하게 노드의 레이블 기반으로 파드를 스케줄링함. spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution : 스케줄링하는 동안 꼭 필요한 조건 .nodeSelecto..

DevOps/Kubernetes 2021.07.21

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter11. 시크릿

11.1 시크릿 만들기 내장 시크릿 쿠버네티스 클러스터 안에서 쿠버네티스 API에 접근 시 사용됨 (serviceAccount 계정의 비밀번호 역할로 쓰임) 사용자 정의 시크릿 사용자가 만든 시크릿 명령으로 시크릿 만들기 ‘Kubectl create secret’ ‘kubectl create secret generic “시크릿 이름” ‘ (—from-literal=키=값) ' kubectl create secret docker-registry(시크릿타입) private-reg-cred(이름) --docker-username=(dock_user) --docker-password=(dock_password) --docker-server=(myprivateregistry.com:5000) --docker-em..

DevOps/Kubernetes 2021.07.21