이미지 커밋
- 이미 만들어진 이미지로 컨테이너를 생성해 원하는 구성으로 바꾸고, 이것을 다시 이미지로 바꾸는 것
-> 이미지 생성
-> 이미지 생성 확인
이 이미지로 두 번째 컨테이너를 만들어본다
-> first, second 이미지 확인
이미지 배포
우리가 배운 가상머신 배포는 템플릿으로 만들고, ova 또는 ovf 파일로 배포를 한다
컨테이너는 이미지를 외부로 배포해야한다.
- 이미지 추출 (save, load 명령어)
- 또는 export, import 명령어
이미지는 docker repository라는 이미지 저장소에 저장되고, 이는 도커 런타임에서 접근이 가능하다.
이미지 배포는 Docker Hub에 배포할 수 있고, Private Repository에 배포할 수도 있다.
1. 도커허브
이 허브 저장소에 이미지 올리기
-> 우선 이미지 커밋을 한다 (도커허브에 생성했던 이름과 똑같아야 한다 (my-image-name))
-> 이미지에 tag 명령어로 이름 추가 (h970630)
-> 도커 로그인
-> push 명령어로 업로드
-> 업로드 확인 가능
-> 도커허브에서 실제로 내 이미지를 찾을 수 있다
-> 배포 용이하다
-> pull 명령어로 다운받을 수 있다!
2. 사설 레지스트리
-> 이 부분은 시간 관계상 넘어가기로...
도커파일
지금 이미지를 배포하기까지의 명령어들을 묶은 파일
- 이미지 자체를 배포하는 방법에 비해 크기가 작은 장점이 있음
- 시간 관계상 실습 생략..
개별 리눅스 호스트에서 컨테이너를 동작시켰을 때
만약 리눅스 호스트가 다운되거나 여러가지 관리를 하기 위한 방안?
-> 쿠버네티스
가상머신에서 클러스터를 VM Controller (vCenter Server)에서 관리했듯이,
리눅스 내의 컨테이너들의 부하분산 같은 관리를 하기 위한 Controller가 있어야 한다.
이 중앙집중관리 서버는 도커에서는 2가지를 만들었다
1. Docker Swam
- 컨테이너를 클러스터로 구성
2. Docker Compose
- Swam에 의해 만들어진 클러스터를 Yaml 형식으로 컨테이너를 정의한다
=> 하지만 이 두 가지는 잘 안 씀
중앙집중관리 서버는 쿠버네티스 서비스를 사용함
- 구글에서 만듦 -> 오픈소스화 시킴(무료)
- 다양한 종류의 버전이 존재함
- 가용성, 성능, 확장성 관리
- K8S 라고도 함
쿠버네티스 구성요소
하이퍼바이저 처럼 리눅스 위에 컨테이너 엔진이 구성되어 있어야 함
이 위에 K8S Controller를 구성함
1. K8S Node
2. K8S Master Node (kubelet (K8S Agent)이 설치되어 있어야 함)
3. K8S Worker Node (Master Node끼리 통신하기 위한 Node)
K8S Cluster - K8S Master Node 의 집합
쿠버네티스 설치
-> 메모리 스왑 해제 (성능 저하 이슈때문)
-> 구글 클라우드 퍼블릭 키 다운로드
-> 쿠버네티스 저장소 추가
지금 도커는 설치된 상태이다. containerd 설정파일은 기본적으로 컨테이너 런타임 인터페이스가 비활성화 되어 있으므로 이를 containerd 기본 설정값으로 덮어씌운 뒤 containerd를 재시작한다.
-> 컨테이너 런타임 인터페이스는 쿠버네티스가 컨테이너를 제어할 때 사용하는 일종의 프로토콜이다.
-> 간단히 생각해서는 "컨테이너를 생성한다" 등을 인터페이스로서 정의한 표준화된 규격을 컨테이너 런타임 인터페이스라고 생각하면 된다.
-> Containerd 구성 초기화 (K8S를 containerd에 바로 연결)
-> systemctl daemon-reload 임 ! 오타조심
-> apt 업데이트 후 쿠버네이스 설치
-> 마스터 노드로 사용할 호스트에서 클러스터를 초기화한다
-> K8S Master Node 구성하기
-> ip addr는 현재 설치 노드의 ip
-> 쿠버네티스 설치 완료
-> 마스터 노드에서 실행
-> 네트워크 애드온 설치
-> 쿠버네티스의 컨테이너 간 통신을 위해 calico를 기준으로 설치
=> 마스터 노드 구성 완료.
이제 워커노드를 구성하자
-> 도커 설치
그리고 쿠버네티스 설치까지는 위와 동일하다.
-> 뒤에 sha 코드까지 다 쳐야함...
-> kubeadm join ~~~
-> 마스터노드에서 연결 및 구성 완료 확인
Docker image 생성
- Docker commit
- Docker File
K8S
- 서비스 설계
- Pod => 1개 or 2개 이상의 컨테이너 그룹
- Replica Set => Pod 들의 그룹 => 일정 개수의 Pod을 유지시킴 => 하나의 Pod이 죽게 되면 K8S Repository에서 이미지를 불러와 복원시킨다.
- Deployment => Replica Set을 묶는 그룹
- 이 Deployment를 묶어서 namespace를 정의한다. 이 namespace는 이 자체로 하나의 서비스라고 할 수 있다. 이 안에 모든 애플리케이션이 들어있기 때문
- 이 Pod부터 Deployment 까지를 K8S Object라고 한다. 이 Object는 Yaml을 통해 서비스 제공
-> kubectl --help 로 각종 명령어 확인 가능
-> 쿠버네티스의 object들을 볼 수 있다
-> kubectl api-resources
-> kubectl get namespace
-> namespace 정보 확인
-> kubectl get pod -n kube-system
-> Pod의 정보들 확인
-> 1/1의 분모 = 컨테이너 갯수, 분자 = 실제 동작중인 컨테이너
-> namespace에 들어있는 Pod의 IP 확인
-> kubectl get pod -o wide -n [namespace]
-> namespace에 들어있는 ReplicaSet 확인
-> kubectl get rs -o wide -n [namespace]
-> namespace에 들어있는 deployment 확인
-> kubectl get deploy -o wide -n [namespace]
-> namespace에 들어있는 서비스 확인
-> kubectl get service -o wide -n [namespace]
'ㄴ Kubernetes' 카테고리의 다른 글
8월 17일 (도커 볼륨, 네트워크 설정) (0) | 2022.08.17 |
---|---|
8월 16일 (도커, 워드프레스 접속) (0) | 2022.08.16 |