반응형

아쉽게도 컴퓨터가 1대밖에 없으므로 마스터 노드밖에 띄울 수 없지만... 그래도 작성하도록 하겠다.

저장소 업데이트 및 필수 패키지 추가

sudo apt-get update

sudo apt-get install -y apt-transport-https ca-certificates curl

gpg key 세팅

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

k8s 저장소 추가

echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

kubelet, kubeadm, kubectl 설치

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

쿠버네티스 서비스 등록 및 재시작

sudo systemctl daemon-reload
sudo systemctl restart kubelet

Control-plane 구성(master node only)

kubeadm init

이 부분에서 아마 아래와 같은 에러가 날 것이다.

[init] Using Kubernetes version: v1.25.2
[preflight] Running pre-flight checks
    [WARNING SystemVerification]: missing optional cgroups: blkio
error execution phase preflight: [preflight] Some fatal errors occurred:
    [ERROR CRI]: container runtime is not running: output: E1002 10:06:30.565908   17133 remote_runtime.go:948] "Status from runtime service failed" err="rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService"
time="2022-10-02T10:06:30+09:00" level=fatal msg="getting status of runtime: rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService"
, error: exit status 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher

이때의 해결 방법은

sudo rm /etc/containerd/config.toml

sudo systemctl restart containerd

sudo kubeadm init

이렇게 해주면 에러가 사라진다.

그리고 만약 아래와 같은 에러가 난다면,

failed with error: Get "http://localhost:10248/healthz"

이렇게 해결해보자.

cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF

sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker


kubeadm reset

토큰 발행

위와 같은 에러들을 물리치고 init에 성공한다면 마스터 노드의 토큰을 얻을 수 있다.

kubeadm join 192.168.0.14:6443 --token triczh.7z1uwuwtxqygrt12 \
    --discovery-token-ca-cert-hash sha256:[KEY] 

권한 설정

모든 사용자가 kube명령어를 사용할 수 있게 하기 위해 설정한다.

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Pod network add on 설치(master only)

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

마스터 노드에서 노드 확인하기

(base) walter@walter:/etc/init.d$ kubectl get nodes -o wide
NAME     STATUS     ROLES           AGE     VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
walter   NotReady   control-plane   6m26s   v1.25.2   192.168.0.14   <none>        Ubuntu 22.04.1 LTS   5.15.0-48-generic   containerd://1.6.8

결론

아주 좋다. 워커 노드가 없어서 마스터에서만 설정했지만은... 결국은 마스터 노드의 토큰을 이용해서 워커노드에서 join을 하면 되는 형식이다.

굿굿

반응형

'MLops' 카테고리의 다른 글

Ubuntu에 Docker 설치  (0) 2022.10.01
쿠버네티스 개요  (0) 2022.10.01
반응형

저장소 설정

$ sudo apt-get update

$ sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

도커 공식 GPG key 추가

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Stable repository 설정

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Docker 엔진 설치

최신 버전의 Docker Engine 및 containerd를 설치한다.

  sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

설치 완료 후 제대로 설치되었는지 확인한다.

sudo docker version

Docekr 서비스 등록 및 실행

sudo systemctl enable docker
sudo systemctl start docker
반응형

'MLops' 카테고리의 다른 글

쿠버네티스 설치  (0) 2022.10.02
쿠버네티스 개요  (0) 2022.10.01
반응형

쿠버네티스란?

명칭

쿠버네티스(Kubernetes)는 간단하게 Kube 또는 k8s라고 부르기도 한다.
k8s의 뜻은 kubernetes의 첫 글자인 k와 마지막 글자인 s 사이의 스펠링이 8개인 것을 반영한 이름이다.

정의

쿠버네티스를 정의하려면 컨테이너의 개념을 알아야 한다.
컨테이너

  • 앱이 구동되는 환경까지 감싸서 실행할 수 있도록 하는 격리 기술

컨테이너를 다루는 도구는 컨테이너 런타임이라고 하는데, 가장 유명한 컨테이너 런타임 어플리케이션은 당연 도커(Docker)라고 할 수 있다.
본론으로 들어와서, 쿠버네티스를 정의하자면 컨테이너 런타임을 통해 컨테이너를 오케스트레이션하는 도구이다.

여기서, 오케스트레이션은 무엇일까?
오케스트 레이션

  • 여러 서버에 걸친 컨테이너 및 사용하는 환경 설정을 관리하는 행위

사용 이유

쿠버네티스의 정의는 결국 오케스트레이션이라고 할 수 있는데, 그래서 왜 사용하는지가 궁금할 수 있다. 우리는 멀쩡히 도커를 잘 사용하고 있기 때문이다.

단편적으로 예를 들면, 우리가 멀티 서버를 이용해 컨테이너 기반으로 서비스하려한다. 이때 각 서버의 컨테이너를 관리하기 위해서 도커만을 이용한다면... 각 서버에 접속하여 각 컨테이너의 설정을 해주고 등등 아주 복잡하다.

쿠버네티스를 이용한다면, 서버 클러스터링을 통해 각 서버의 리소스를 관리하여 어느 서버에 컨테이너를 할당할지, 컨테이너의 설정(리소스, 이미지 등)을 마스터 노드에서 관리하는 등의 관리를 쉽게 할 수 있다.

좀 더 어려운 느낌으로 사용 이유를 열거해보자.

  • 서비스 디스커버리와 로드 밸런싱 서비스는 IP주소 또는 DNS를 이용하여 노출시킬 수 있고, 트래픽에 따라 로드 밸런싱이 가능하다.
  • 스토리지 오케스트레이션 로컬 저장소, 공용 클라우드 등과 같이원하는 저장소 시스템을 자동으로 탑재할 수 있다.
  • 자동화된 빈 패킹(bin packing) 각 컨테이너가 필요로하는 리소스(CPU, RAM 등)을 지시하면 노드에 맞추어 핸들링 해준다.
  • 자동화된 복구 실패한 컨테이너를 다시 시작하고, 교체하고, 죽이는 작업을 통해 컨테이너를 자동으로 복구할 수 있다.
  • 시크릿과 구성 관리 암호, OAuth 토큰 및 SSH 키와 같은 중요한 정보를 저장할 수 있음.

쿠버네티스 용어

마스터: 쿠버네티스 노드를 제어하는 서버
노드: 테스크를 요청대로 수행하는 서버, 마스터도 노드의 일부
파드(Pod): 단일 노드에 배포된 하나 이상의 컨테이너 그룹. 파드에 있는 모든 컨테이너는 IP주소, IPC, 호스트 이름, 기타 리소스를 공유하며 파드는 기본 컨테이너에서 네트워크와 스토리지를 추상화함.
복제 컨트롤러: 클러스터에서 실행되어야하는 동일한 파드 사본의 개수를 제어
서비스: 파드에서 작업 정의를 분리함. SSH, Jupyter notebook등을 서비스로 설정할 수 있음.
Kubelet: 노드에 존재하며, 컨테이너 매니페스트를 읽고, 정의된 컨테이너가 시작되어 실행 중인지 확인하는 서비스.
kubectl: 쿠버네티스 명령어 ex) # kubectl get pod

반응형

'MLops' 카테고리의 다른 글

쿠버네티스 설치  (0) 2022.10.02
Ubuntu에 Docker 설치  (0) 2022.10.01

+ Recent posts