쿠버네티스 : 그리스어로 조타수라는 뜻 오늘날 사실상 표준으로 사용되고 있는 컨테이너 오케스트레이션 도구
도커 스웜처럼 여러 대의 도커 호스트를 하나의 클러스터로 만들어 준다는 점은 같지만, 세부적인 기능을 더욱 폭넓게 제공하고 있다.
장점
1. 서버 자원 클러스터링, 마이크로 서비스 구조의 컨테이너 배포등 서비스 운영에 필요한 대부분의 오케스트레이션 기능을 폭넓게 지원
2. 많은 오픈소스 진영에서 쿠버네스트의 소스코드에 기여하고 있음 (성능, 안정성 면에서 신뢰)
3. 영속성 볼륨, 스케줄링, 장야 복구, 오토 스케일링 등 컨테이너 기반의 클라우드를 운영할 때 필요한 대부분의 컴포넌트를 사용자카 커스터마이징 가능
3. CNCF 및 다른 클라우드 운영도구들과 쉽게 연동, 확장성이 높음
하지만 다른 오케스트레이션 툴보다 훨씬 다양한 지식이 필요, 관리가 더욱 어려울 수도 있다.
1. 구조가 훨씬 더 복잡
2. 사용 방법이 다양해 배우는 학습 비용이 높음
설치환경
- 메모리: 2GB, CPU: 2코어
- 운영체제: 우분투 18.04 LTS
- 1개 이상의 마스터 노드 서버
- 1개 이상의 워커 노드 서버
설치과정
도커 설치
마스터, 워커 노드 모두 설정
모든 과정은 sudo 권한으로 이루어짐
sudo su
# 스왑메모리 비활성화 후 리부트
swapoff -a
sed -i '2s/^/#/' /etc/fstab
reboot
# 패키지 관리 도구 업데이트
apt update
apt-get update
#
apt-get install apt-transport-https ca-certificates curl software-properties-common -y
# gpg key 내려받기
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
# 패키지 관리도구에 도커 다운로드 링크 추가
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 패키지 관리 도구 업데이트
apt-get update
# kubernetes에 맞도록 도커 18.06.2~3 버전 설치 (최신버전은 안될 수 있음)
apt-get install docker-ce=18.06.2~ce~3-0~ubuntu -y
# 도커 명령어가 실행되는지 확인
docker ps
# kubernetes에서 권장하는 도커 데몬드라이버는 systemd 이므로 도커 데몬의 드라이버를 교체한다.
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
#
mkdir -p /etc/systemd/system/docker.service.d
systemctl daemon-reload
systemctl restart docker
쿠버네티스 설치
Kubernetes Setup
kubernetes 클러스터 구성을 위해 모든 노드에 아래의 패키지를 설치 해야 한다.
- kubeadm : kubernetes 클러스터를 구축하기 위해 사용하는 툴이다.
- kubelet : 클러스터의 모든 머신에서 실행되며 Pod 및 컨테이너 시작 등의 작업을 수행하는 구성 요소이다.
- kubectl : 클러스터와 통신하는 커맨드라인 인터페이스 유틸이다.
마스터, 워커 노드 둘 다 설치
#
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
#
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
#
apt-get update
#
apt-get install -y kubelet kubeadm kubectl
# 패키지가 자동으로 설치, 업그레이드, 제거되지 않도록 함
apt-mark hold kubelet kubeadm kubectl
# 설치 완료 확인
kubeadm version
kubelet -version
kubectl version
마스터 노드 세팅
172.17.0.1
# 호스트 네트워크의 ip를 확인
ifconfig
마스터 노드의 IPv4 주소를 확인 후 복사
# 마스터 노드 생성 및 실행 -> 사실 이부분은 내부 IP로 해야함
# 예시로 마스터노드 IP는 호스트 IP 라고하고 # 대역폭은 192.168.0.0/16이라고 가정
kubeadm init --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address=호스트 IP
# 명령어 실행하면 다음과 같은 긴 메시지가 나올텐데 kubeadm join 에 해당하는 메시지를 복사해서 저장해둔다(사용할 수 있는 유효기간이 있으니 주의)
kubeadm join 호스트 IP:6443 --token fnbiji.5wob1hu12wdtnmyr --discovery-token-ca-cert-hash sha256:701d4da5cbf67347595e0653b31a7f6625a130de72ad8881a108093afd06188b
# root 계정이 아닌 다른 사용자 계정에서 kubectl 커맨드를 사용하도록 하는 명령어다
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
# 네트워크 설치는 calico로 한다.
kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml
# 마스터 노드가 잘 세팅되어 있는지 확인한다.
kubectl get nodes
kubectl get pod --namespace=kube-system -o wide
워커 노드 세팅
# 워커 노드에서 마스터 노드를 세팅할 때 복사해두었던 kubeadm join 명령어를 사용한다.
kubeadm join 192.168.99.102:6443 --token fnbiji.5wob1hu12wdtnmyr --discovery-token-ca-cert-hash sha256:701d4da5cbf67347595e0653b31a7f6625a130de72ad8881a108093afd06188b
# 잘 추가되었는지 확인하려면 마스터 노드에서 kubectl get nodes 명령어를 사용한다
kubectl get nodes
'Docker' 카테고리의 다른 글
쿠버네티스 리소스의 관리와 설정 (네임스페이스, 컨피그맵, 시크릿) (0) | 2021.01.31 |
---|---|
kubernetes 시작하기 (0) | 2021.01.29 |
Docker 스웜과 서비스 (0) | 2021.01.20 |
도커 컴포즈 (0) | 2021.01.12 |
Docker File (0) | 2021.01.04 |