IT 공부/PaaS 2024. 5. 29.
K8S 에서 containerd 와 docker
RKT 과 같은 여러 컨테이너 런타임을 지원하면서 CRI 와 같은 인터페이스를 소개함.이후 OCI 도 같이 소개하면서 여러 컨테이너 런타임이 나옴. 그러나 도커는 CRI 가 나오기 전에 이미 나왔기 때문에 CRI 로 사용 할 수 없었음도커는 인기있는 컨테이너 도구였기 때문에 dockershim 이라는 것을 도입해 컨테이너 런타임 인터페이스 밖에서도 도커를 지원하게 끔 함 (그러나 임시적)→ 즉 도커는 CRI 에서 돌아가는게 아님. 그러다 결국 dockershim 을 유지하기 위해 많은 노력이 들다보니 v1.24 에서 도커를 더이상 지원하지 않기로 결정그래도 도커 이미지는 계속 작동하는데 OCI 에서 제공하는 imagespec 을 따르기 때문. docker 보다는 사실 nerdctl 과 같은 것으로 컨테이..
IT 공부/PaaS 2024. 4. 13.
[Harbor] 이미지 Push 및 Kubernetes 에서 사용방법
1. 프로젝트 생성 방법 harbor 웹 콘솔 접속하여 로그인 Project 탭의 NEW Project 클릭 3. Project 값 입력 커맨드 확인 2. 이미지 태그 및 PUSH 방법 docker pull nginx:latest 테스트 이미지용 nginx:latest 다운로드 docker login 192.168.133.11 harbor(사설저장소) docker 로그인 docker tag nginx:latest 192.168.133.11/test/nginx:latest docker push 192.168.133.11/test/nginx tag 명령어로 사설저장소 주소 추가 후 push 웹 콘솔 접속하여 저장소에 이미지가 잘 올라갔는지 확인 3. 쿠버네티스 secret 작성 (imagePullSecret..
IT 공부/PaaS 2024. 4. 11.
[Harbor] 사설 image repository Harbor 설치 방법 정리
1. 설치조건 확인 Hardware Resource Minimum Recommended CPU 2 CPU 4 CPU Mem 4 GB 8 GB Disk 40 GB 160 GB Software The following table lists the software versions that must be installed on the target host. Software Version Description Docker engine Version 17.06.0-ce+ or higher For installation instructions, see https://docs.docker.com/engine/installation/ Docker Compose Version 1.18.0 or higher For inst..
IT 공부/PaaS 2024. 2. 20.
[K8S] MetalLB 설치
로드밸런서 서비스를 이용하기 위해서는 다른 오픈소스를 이용해야 하는데 그 중 MetalLB 를 이용해서 구성 1. MetalLB 설치 kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/namespace.yaml kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/metallb.yaml 다른 버전을 받으려면 v0.11.0 대신 다른 버전 입력. (현재 v0.14.3) metallb 공식 홈페이지나 github 참고 https://metallb.universe.tf/installation/ 설치 후에 cont..
IT 공부/PaaS 2024. 1. 22.
[K8S] 9. AutoScaling & Scheduler
1. 파드 리소스 우선 파드는 옵션으로 리소스에 대한 제약을 걸 수 있는데, 일정 값이상이여먄하는 리퀘스트 옵션이나 일정 이상값으로 리소스를 사용하지 못하게하는 리미트가 있습니다. 그외에도 파드 옵션이 아닌 별개의 쿠버네티스 리소스로 리밋레인지, 리소스쿼터 등으로 파드의 리소스들을 관리할 수 있습니다. 2. 오토스케일링 그럼 다시 돌아와 오토스케일링 기법인 수평적 파드 오토스케일러 HPA 에 대해 확인 해 보겠습니다. 수평적으로 파드를 자동으로 스케일링 할 수있으며, 리소스 크기를 조절할 수 있는 디플로이먼트와 같은 컨트롤러 리소스에 적용할 수 있습니다. HPA는 메트릭서버에 현재 리소스 메트릭 정보를 받아옵니다. 그 이후 측정된 메트릭 정보를 기반으로 스케일링에 필요한 파드수를 계산합니다. 목표 복제본..
IT 공부/PaaS 2024. 1. 20.
[K8S] 8. Statefulset
1. 스테이트풀셋 레플리카셋 같은 복제본을 가지고 있는 컨트롤러는 복제본을 생성할 때 파드의 이름과 IP주소를 제외하고는 동일한 파드를 생성하게 됩니다. 만일 PVC를 참조하게 된다면, 모든 파드가 같은 PVC와 연결되고, PVC와 1:1로 연결되어있는 PV와 여러 파드가 연결되게 될 것입니다. 이런 문제점을 해결하기 위해 스테이트풀셋이 등장하였습니다. 레플리카셋과 같이 상태를 저장하지않는 stateless 형태는 파드의 정보가 전부 똑같을 필요는 없습니다. 파드의 이름과 IP는 변경되어도 레플리카셋 복제본을 유지하는데 문제가 안되기 때문입니다. 그렇기에 파드가 죽거나 장애가 발생하면 다른파드로 교체를 하면 됩니다. (여기서 상태란 식별자, 지속적인 데이터, 의존성등을 의미합니다.) 반면 스테이트풀셋의 ..
IT 공부/PaaS 2024. 1. 19.
[K8S] 7. Deployment
1. 디플로이먼트 이전에 확인해봤던 리소스중에 애플리케이션의 지속적인 동작을 보장하는 레플리카셋이 있었는데, 이번에 볼 디플로이먼트는 레플리카셋의 상위 수준의 리소스입니다. 디플로이먼트는 애플리케이션을 배포하고 선언적으로 업데이트를 수행하는 리소스며 하위 레플리카셋 컨트롤러를 제어하고 그 레플리카셋이 파드들을 제어하는 구조입니다. 레플리카셋을 직접 컨트롤하는것보다는 이 디플로이먼트 컨트롤러를 이용하여 제어하는것이 좋습니다. 디플로이먼트의 주요기능으로는 버전관리 및 롤아웃 등이 있습니다. 배포와 롤링업데이트를 크게 롤아웃이라고 합니다. 롤링업데이트란 배포 중에도 서비스의 끊김 없이 배포하는것으로 전체 복제본 중 일부분을 조금씩 배포 업데이트 하는 기술입니다. 그림처럼 디플로이먼트 컨트롤러가 관리하는 레플리..
IT 공부/PaaS 2024. 1. 19.
[K8S] 6. ConfigMap, Secret
1. 컨테이너의 사용자화 그럼 이제 컨테이너에서 애플리케이션을 어떻게 사용자에게 맞출수 있는지 확인해보겠습니다. 이미지 작성시 entrypoint 나 cmd 를 이용하거나, 쉘의 환경변수나 애플리케이션의 conf 파일을 변경하는 방법도 있지만 쿠버네티스 기능인 컨피그맵과 시크릿에 대해 알아보겠습니다. 우선 쿠버네티스에서 컨피그맵이란 간단한 설정 값들을 키밸류 형태로 저장하여 사용할 수 있는 쿠버네티스 저장소입니다. 아래 그림처럼 QA, DEV, PROD 라는 세가지 환경이 있다고 가정해보겠습니다. 만약 컨피그맵을 사용하지 않고 각각의 이미지에 환경변수등을 직접 집어넣어 관리한다면, 이미지가 업데이트될때마다 총 3개 (QA, DEV, PROD) 의 이미지 버전을 관리해야할 것입니다. 만약 컨피그맵을 사용하..
IT 공부/PaaS 2024. 1. 17.
[K8S] 5. Storage
1. Storage 파드는 일회성의 성격을 띄기때문에 파드가 종료하면 파드 내에서 실행되었던 애플리케이션에 의해 변경된 데이터, 로그와 같은 파일들도 같이 삭제됩니다. 이런 데이터들을 파드가 종료되거나 사용하거나 실행중에도 다른 파드에서도 이용할 수 있게 쓰는 방법이 스토리지, 즉 볼륨 기능입니다. 2. emptyDir empty dir 은 파드가 실행되는 도중에만 필요한 휘발성 데이터들을 각 컨테이너가 함께 사용할 수 있도록 임시 저장공간을 제공해줍니다. 또는 git 에서 내용을 받아 컨테이너를 띄울 경우 초기화컨테이너 기술과 이 볼륨을 사용하면 되는데, 여기서 초기화 컨테이너란 파드의 애플리케이션 컨테이너가 실행되기전 작업을 수행하도록 설정하는 컨테이너를 말합니다. 먼저 초기화컨테이너에 깃 내용을 클..
IT 공부/PaaS 2024. 1. 16.
[K8S] 4. 네트워크 서비스
1. 서비스 파드가 일회성으로 구성되기에 쿠버네티스는 애플리케이션이 동작하는 시스템의 호스트나 정적 IP를 할당하여 애플리케이션을 찾을 수 없습니다. 이런 문제를 해결하기 위해 파드는 네트워크 서비스를 제공하기위해 단일 고정 IP를 가져야 합니다. 해결하기 위해 나온 것이 서비스라는 리소스인데 이 서비스는 애플리케이션 파드그룹에 단일 네트워크 액세스포인트를 제공해주고, 레이블 셀렉터를 이용해 백엔드 파드, 즉 서비스 대상 파드를 설정하여 그 파드목록들을 엔드포인트 리소스로 관리합니다. 또한 어피니티와 같은 옵션을 통해 매번 요청을 같은 파드로 연결하여 세션을 유지한다거나 하는 추가 옵션이있습니다. 어피니티의 주요옵션으로는 클라이언트 IP를 확인하여 같은 파드로 연결하는 Client IP 옵션이 있습니다...
IT 공부/PaaS 2024. 1. 12.
[K8S] 3. 컨트롤러 리소스
1. 레플리카셋 앞서 확인 한 파드들을 관리하는 여러 리소스들을 살펴보도록 하겠습니다. 이 레플리카셋은 파드가 특정 개수만큼 동작되는것을 보장합니다. 만약 문제가 생겼을 경우 파드를 새로 생성하여 항상 개수를 유지합니다. 레플리케이션 컨트롤러라는 비슷한 컨트롤러 리소스가 있는데, 상위호환인 레플리카셋이 있으므로 잘 사용하지 않아서 생략하겠습니다. 레플리케이션 컨트롤러와 비교했을 때 레플리카셋의 개선점은 매치 익스프레션과 같은 옵션의 추가로 레이블 셀렉터의 범용성이 늘어났다는 것입니다. 그림의 경우 레플리카셋의 복제본을 3 으로 지정해두었을 것이고 만약 하나의 파드가 종료되면 다른 파드가 즉시 생길것이고, 만약 노드가종료되면 다른 노드에 새로운 파드를 생성할 것입니다. 2. 데몬셋 데몬셋은 노드에 파드를 ..
IT 공부/PaaS 2024. 1. 11.
[K8S] 2. 파드
1. 쿠버네티스의 구성 우선 파드를 말씀드리기 전에 쿠버네티스의 간단한 구성도 부터 확인하겠습니다. 쿠버네티스 클러스터 라는 가장 큰 단위아래 노드가 있습니다. 노드는 쉽게 VM과 같은 실제 호스트이며 노드 안에 파드가 구성되어있습니다. 파드는 주로 업무단위로 구성되어있고, 그 업무안에 실제 서비스와 같은 작업들을 할 수 있는 애플리케이션이 뜨는 컨테이너가 존재합니다. 노드의 모습을 다시 확대해서 살펴보면, 이처럼 노드안에는 다양한 파드가 존재할 수 있습니다. 이전 아키텍쳐부분에서 말씀드렸던대로 큐블렛이 있어 파드구성정보를 받아 컨테이너런타임과 함께 컨테이너를 동작시킵니다. 쿠버네티스에서 가장 기본 단위요소가 되는 파드입니다. 파드는 쿠버네티스 클러스터에서 애플리케이션을 배포하고 동작하는 프로세스입니다...
IT 공부/PaaS 2024. 1. 10.
[K8S] 1. 아키텍처
1. 등장배경 MSA 가 대두하기 전 레거시시스템인 모놀리식 아키텍처가 있었습니다. 이는 흔히볼수있는 웹와스, DB 형태로 한 WAS 내에서 프론트 UI 제공, 서비스제공, 인증 등 모든 업무를 처리하는 방식이었습니다. 개발과 배포가 간단하며 단순한 확장성을 가지고 있습니다. 다만 점점더 확장되면서 코드품질이 저하되고 애플리케이션의 기동시간이 매우길고 지속적인 배포, 즉 추가적인 개발및 확장, 기술적용이 매우 어렵습니다. 이런 문제를 극복하기 위해 마이크로서비스 아키텍처가 등장하였습니다. 세분화되고 독립적으로 작동하는 MSA 는 API 를 통해 다른 서비스와 통신합니다. 유지보수와 테스트, 배포가 효율적이고 기능의 개별 테스트와 배포가 가능하면서 생산성 향상과 장애 격리가 우수합니다. 다만 시스템 자체의..
IT 공부/PaaS 2022. 12. 19.
[k8s] 쿠버네티스 기초 사용방법
테스트 할 환경이 바뀌어서 minikube 로 다시 설치했다. 기존꺼 사용해도 똑같음 minikube 설치 : https://minikube.sigs.k8s.io/docs/start/ 문서참고 [ndh@ndhsotech /u01/ndh]curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 73.1M 100 73.1M 0 0 19.2M 0 0:00:03 0:00:03 --:--:-- 19.2M [ndh@ndhsotech /u..
IT 공부/PaaS 2022. 11. 2.
[k8s] 쿠버네티스 설치
총 3개의 가상머신을 설치해서 노드로 쓸 가상머신 2개, 이 노드들을 다룰 어드민서버(matser) 1개 로 구성하였다. root@k8sadmin:~# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - OK root@k8sadmin:~# cat deb http://apt.kubernetes.io/ kubernetes-xenial main > EOF root@k8sadmin:~# wget -qO- get.docker.com | sh # Executing docker install script, commit: 4f282167c425347a931ccfd95cc91fab041d414f + sh -c apt-get updat..
IT 공부/PaaS 2022. 10. 31.
[Docker] Docker-compose 기본
도커 컴포즈 하나의 서비스를 위해 여러 컨테이너가 필요할 때(DB, 서버 등..) 한번 구축하기 위해 여러번 명령어를 써야만함. docker-compose 를 통해 이걸 한번에 관리할 수 있다. 도커 컴포즈 설치 root@k8s-node1:~# curl -L https://github.com/docker/compose/releases/download/1.11.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- ..
IT 공부/PaaS 2022. 10. 31.
[Docker] 도커 모니터링
1. 각종 명령어들 1) dockerd -D 도커 데몬을 실행할 때 -D 옵션을 입력하면 디버그모드로 실행됨. 이러면 모든 명령어들을 로그로 출력되어 무엇이 잘못됐는지 확인하기 쉽다. 그런데 로그를 찍기 위해 포그라운드로 띄워야 하고 모든 정보가 찍히기에 보기 어려울 수 있음 2) docker events / docker system events nohup 로그 같은걸로 이해되는데... 해당 명령어 입력하면 top 띄운것 처럼 실시간 스트림형식으로 출력 됨 그 이후 다른 터미널에서 도커에 명령어를 남기면 해당 명령어의 결과를 실시간으로 볼 수 있음 3) docker stats (--no-stream) docker 의 top 옵션 --no-stream 입력 시 실시간 스트림이 아니라 한번 출력하고 끝 4)..
IT 공부/PaaS 2022. 10. 27.
[Docker] Dockerfile 도커파일 옵션 2
1. 도커 파일 여러 옵션들 root@k8s-node1:~/dockerFile# vi Dockerfile FROM ubuntu:14.04 #ENV 환경변수 설정 ENV test /home WORKDIR $test RUN touch $test/envtest #docker run -i -t --name env_test -e test=newhome [buildImage] /bin/bash #이미지를 빌드 후 위와같이 -e 옵션을 사용하면 내부 환경변수를 home -> newhome 으로 새로 지정할 수 있다. RUN mkdir /home/volume RUN touch /home/volume/volumetest #VOOLUME : 컨테이너 내부와 호스트 간 공유 VOLUME /home/volume #docker..
IT 공부/PaaS 2022. 10. 26.
[Docker] DockerFile 도커파일 1
1. 도커파일 생성 root@k8s-node1:~# mkdir dockerFile root@k8s-node1:~# cd dockerFile/ root@k8s-node1:~/dockerFile# ll total 8 drwxr-xr-x 2 root root 4096 10월 26 13:45 ./ drwx------ 8 root root 4096 10월 26 13:45 ../ root@k8s-node1:~/dockerFile# echo test >> test.html 새로운 디렉토리를 하나 만들어서 안에서 작업한다. 도커파일을 빌드시에 해당 디렉토리가 루트가 되어 작업이 수행된다. vi Dockerfile #FROM : Base Image FROM ubuntu:14.04 #LABEL, MAINTAINER : 메..
IT 공부/PaaS 2022. 10. 26.
[Docker] 도커 이미지 관리
1. 이미지 생성 root@k8s-node1:~# docker run -i -t --name imageTest1 ubuntu:14.04 root@44132ea15e38:/# echo TEST1 > 1 root@44132ea15e38:/# exit exit root@k8s-node1:~# docker commit -m "FIRST COMMIT" imageTest1 imagetest:1.0 sha256:ee217ea652adb9a9197bbbb41431a6fdaf995b03039151bf2968513eafb40da6 root@k8s-node1:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE imagetest 1.0 ee217ea652ad 10 seconds a..
IT 공부/PaaS 2022. 10. 25.
[Docker] Log 확인 및 컨테이너 자원 할당
1. 로그 확인하기 root@k8s-node1:~# docker run -d --name mysqlLog mysql:5.7 8f37e29812aa841912489edfdcf3203d7b85e2d13a4faa2caab418df8936aa14 root@k8s-node1:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES root@k8s-node1:~# docker logs mysqlLog 2022-10-25 05:04:42+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.39-1.el7 started. 2022-10-25 05:04:44+00:00 [Note] [Entry..
IT 공부/PaaS 2022. 10. 25.
[Docker] 도커 네트워크 기본
* 저는 수시로 docker rm 명령어로 컨테이너를 내리며 학습합니다. 1. 네트워크 ifconfig 명령어를 치면 네트워크 정보들이 나온다. root@k8s-node1:~# ifconfig ... docker0: flags=4099 mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 inet6 fe80::42:5bff:fef8:c87e prefixlen 64 scopeid 0x20 ether 02:42:5b:f8:c8:7e txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 352 bytes 3..
IT 공부/PaaS 2022. 10. 20.
[Docker] 명령어 및 기초 1
책을 보며 공부한 자료 정리하여 게시하고 있습니다. 책 내용의 100프로를 다 공부하지도 않고, 모든 내용을 다 올리지는 않으니 더 많은 자료는 책을 참고하시길 바랍니다.. 1. 도커 Run 명령어 $ docker run -i -t ubuntu:14.04 docker run 명령어를 입력하면 해당 이미지(ubuntu:14.04) 를 받아 컨테이너를 생성하고 실행하는 역할 이후 자동으로 이미지 내부로 들어가 게된다. -i -t 옵션은 컨테이너와 상호 입출력을 가능하게 함 (interactive) ---> -t 옵션으로 상호 입출력, -t 옵션으로 tty를 활상화하여 배시 셸 사용 이미지 내부에서 다시 밖으로 나가기 위해선 exit 를 입력해준다. 2. 내려받은 이미지 확인 root@k8s-node1:~# ..
IT 공부/PaaS 2022. 2. 22.
[Docker] 도커 설치 및 기본 정리용
내가 생각하는 도커는 이미지(스냅샷)을 가장 잘 활용할 수 있는 컨테이너 기술인것 같음 실제 카메라가 사진을 찍으면 피사체와 함께 주변 세상이 사진 안에 나타나는데, 만약 마법같이 그 사진(이미지)의 상황을 실제로 현실로 구현할 수 있다면? 그 사진을 복사해서도 구현할 수 있다면? 이런 것을 실제 컴퓨터내에서는 이미지와 컨테이너 기술을 이용해 적용할 수 있다. 도커가 제공해주는 이미지, 또는 우리가 만든 이미지를 이용해 그 상황을 컨테이너속에서 쉽고 간편하게 구현과 복제를 할 수 있다. 단, 우리가 만드는 이미지에서 모든 그림을 처음부터 그릴 수는 없고 도커에 등록된 기존 이미지 위에 덧칠해야만 한다. ( 솔루션, os 등의 기본 이미지를 도커에서 제공받을 수 있다.) 도커 설치 도커를 실습하기 위해 L..
IT 공부/PaaS 2021. 9. 2.
[Docker] 도커 설치하기 - 1
루트 권한을 사용하기 때문에 루트 계정 또는 다음 명령어로 권한을 부여하고, 후에 docker 그룹에 해당 유저를 소속시켜주면 됩니다. 여기선 루트 계정으로 사용하겠습니다.. # sudo usermod -aG docker $USERID 본 문서 OS는 Oracle Linux 7 입니다. 설치하기 다음 명령어를 통해 Oracle Linux, UEK를 최신버전으로 맞춘다. # yum upgrade yum-config-manager가 설치되어 있지않다면 설치한다. # yum install yum-utils config addons 설정 중 enable 항목을 1(true)로 바꿔준다. yum-config-manager --enalbe *addons 도커 설치 # yum install docker-engi..