2. Kubernetes ReplicaSet
·
Kubernetes
쿠버네티스의 기본 단위 pod들의 집합이다. pod안에는 독립성을 보장하기 위해 하나의 컨테이너만 올리는 것이 가장 이상적이다. 하지만 보통의 애플리케이셔을 가동시키기 위해서는 DB, backend 등 여러 컨테이너를 필요로한다. 한개 이상의 컨테이너가 필요한 경우 레플리케이션이라는 쿠버네티스 Object를 활용하는 것이 여러 컨테이너를 관리하는데 유리하게 작용한다. 레플리케이션이 가진 장점은 명확하다.'실행중 포드가 중지되거나 삭제되어도 정해진 포드의 수를 유지한다.'즉 장애가 생기더라도 즉각적으로 다른 노드에서 포드를 재 생성한다는 것을 의미한다. yaml 생성#example-replica.yamlapiVersion: apps/v1kind: ReplicaSetmetadata: name: exampl..
1. Kubernetes Pod
·
Kubernetes
container application의 기본 단위이다. 컨테이너 집합체이며 1개 이상의 컨테이너가 포함된다. docker의 개념에서 살펴보면 도커 컨테이너와 같은 개념인 것이다.  yaml파일 작성nano pod-example.yamlapiVersion: v1kind: Podmetadata: name: example-podspec: containers: - name: example-container image: nginx:latest ports: - container: 80 protocol: TCPapiVersion: 오브젝트의 API 버전kind: 리소스의 종류metadata: 주석, 이름 등과 같이 리소스에 부가 정보spec: 리소의 정보쿠버네티스로 생성kubectl ..
8.Docker 도커 데몬 인증 키 적용
·
Docker
도커를 사용할 때 도커엔진에 보안에 대한 장치가 하나도 되어 있지 않다. 따라서 IP주소와 포트번호만 알게 된다면 다른 사용자가 도커를 제어할 수 있게 되는데 이는 치명적인 보안 오류이다.  따라서 우리는 도커데몬에 openssl을 이용하여 인증키를 생성하고 도커데몬에 적용시킬 필요가 있다. 도커데몬에 TLS 보안을 적용하고 인증된 사용자가 아니라면 도커에 접근할 수 없도록 서버 측과 클라이언트 측에 인증키를 적용시키겠다. 인증키 생성은  TLS, SSL 프로토콜을 이용할 수 있는 오픈소스 라이브러리 openssl을 통해 할 것이며https://gruuuuu.github.io/security/what-is-x509/에서 인증과정에 대한 자세한 설명을 볼 수 있다.1. 서버 인증 키 생성1) 디렉터리 생성..
7. Docker 컨테이너 자원 정의
·
Docker
컨테이너에는 메모리, cpu 등 여러 자원들이 존재한다. 옵션을 넣지 않은 컨테이너에 inspect 명령어를 사용하여 컨테이너에 대한 스팩을 살펴보면 cpu 및 메모리 등 스팩이 정의 되어 있지 않다는 것을 알 수 있다. 자원들의 스팩을 정의하지 않고 생성하게 되면 제한 없이 호스트의 자원을 전부 사용하기 때문에 다른 서비스에도 영향을 미칠 수 있다. 따라서 자원의 스팩을 정의해준다면 보다 효율적으로 자원을 관리할 수 있으며 서버의 부하를 방지할 수 있음으로 사용하는 것을 권장한다. MEMORYsudo docker run -d \--name memory_test_1 \--memory="1g" \nginx--memory 옵션으로 메모리의 크기를 지정할 수 있으며 단위는 기가바이트(g), 메가바이트(m)이다..
6. Docker 컨테이너 로깅
·
Docker
기존의 로그파일은 에러 및 여러 출력되는 정보들이 하나의 파일에서 관리되었다면 Docker는 출력(stdOut)과 에러(error) 로그를 별도의 메타데이터 파일로 저장한다. Docker는 다양한 형태로 로그를 저장할 수 있는데 한 번 알아보겠다.  1. json-file 로그어떠한 설정도 하지 않는다면 docker는 기본적으로 JSON형태로 도커 내부에 저장된다. sudo docker run -d \--name mysql \-e MYSQL_ROOT_PASSWORD=1234 \mysql:5.7sudo docker logs mysql컨테이너 생성 후 로그를 확인할 수 있다.  에러 낸 후 로그 찾기sudo docker run -d \--name nopassword_mysql \mysql:5.7-e 옵션에 ..
5. Docker 네트워크
·
Docker
컨테이너 내부에는 eth0과 lo 네트워크 인테페이스가 있다. 외부에서 컨테이너 내부에 있는 네트워크 인터페이스 ip에 접근하기 위해서는 외부와 연결되어야 하는데 컨테이너를 시작할 때마다 호스트에 veth로 시작하는 네트워크 인터페이스를 생성하여 외부와 컨테이너를 연결할 수 있다.  veth의 v는 virtual을 의미하며 실행중인 컨테이너 수만큼 생성되어있다. ifconfig 명령어를 사용하여 네트워크 구성을 살펴보자출력해보면 eth0은 공인 IP 및 내부 IP가 할당되어 실제 외부와 통신할 수 있는 호스트의 네트워크 인터페이스이다.또한 veth 네트워크 인터페이스도 생성된 것을 확인할 수 있는데 각 컨테이너의 eth0과 연결되어 있다. 여기서 처음 보는 docker0 이라는 브리지가 생성된 것을 확인..
BE전문가 프로젝트
BE전문가 프로젝트