반응형

아쉽게도 컴퓨터가 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

+ Recent posts