본문 바로가기
Development/Kubernetes

[Kubernetes]외부 접근이 힘든 서버에서 kubernetes 설치

by shuka 2022. 11. 1.
728x90
728x90

외부 접근이 힘든 서버에서 kubernetes 설치

 

kubeadm 설치하기

이 페이지에서는 kubeadm 툴박스 설치 방법을 보여준다. 이 설치 프로세스를 수행한 후 kubeadm으로 클러스터를 만드는 방법에 대한 자세한 내용은 kubeadm 으로 클러스터 생성하기 페이지를 참고한다

kubernetes.io

 

위의 링크를 들어가면 밑의 이미지와 같은 화면이 뜨는데 '데비안 기방 배포판' / '레드헷 기반 배포판' / '패키지 매니저를 사용하지 않는 경우'가 있는데 해당 방법은 '패키지 매니저를 사용하지 않는 경우'로 설치한다.

 

 

 

그리고, 아래에서 설치하는 파일들의  버전은 kubernetes-v1.22.7을 설치할 때 사용한 버전들의 버전으로 높은 버전을 했을 경우 버전들이 맞지 않을 수 있다.

 

 

설치에 필요한 파일 다운로드

설치에 필요한 파일들은 외부 접근이 가능한 pc에서 작업을 하고 파일을 옮겨준다.

(kubernetes version: v1.22.7)

 

docker images

  • Docker pull list
    • k8s.gcr.io/kube-apiserver:v1.22.7
    • k8s.gcr.io/kube-proxy:v1.22.7
    • k8s.gcr.io/kube-scheduler:v1.22.7
    • k8s.gcr.io/coredns/coredns:v1.8.4
    • kube-controllers:v3.22.4
    • k8s.gcr.io/kube-controller-manager:v1.22.7
    • k8s.gcr.io/etcd:3.5.0-0
    • k8s.gcr.io/metrics-server/metrics-server:v0.6.1
    • k8s.gcr.io/pause:3.5
    • calico/node:v3.22.4
    • weaveworks/weave-kube:2.6.1
    • weaveworks/weave-npc:2.6.1
    • nvidia/k8s-device-plugin:2.6.1

 

해당 docker images를 서버로 옮긴 후 load 해 준다.

 

* docker image save&load 방법은 아래의 링크에 있다.

https://shuka.tistory.com/14

 

[Docker]container를 image 생성 및 tar 저장

docker에서 작업을 할 때 설정한 환경을 다른 pc와 맞출 때 requirements.txt로 설치를 다시 해주거나 하는 방법도 있지만 하나하나 다 설치하기에는 시간이 오래 걸릴 수 있다. 그럴때는 작업한 docker co

shuka.tistory.com

 

CNI_Plugin

CNI_VERSION="홈페이지에 나와있는 version 그대로 사용했다"
ARCH="PC's ARCH"
wget <https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/cni-plugins-linux-${ARCH}-${CNI_VERSION}.tgz>
  • Example
CNI_VERSION="v0.8.2"
ARCH="amd64"
wget <https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/cni-plugins-linux-${ARCH}-${CNI_VERSION}.tgz>
  • (*CNI_VERSION이나 ARCH는 해당 PC마다 다르다.)

 

Crictl

CRICTL_VERSION="홈페이지에 나와있는 version 그대로 사용했다"
ARCH="PC's ARCH"
wget <https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-${ARCH}.tar.gz>
  • Example
CRICTL_VERSION="v1.22.0"
ARCH="amd64"
wget <https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-${ARCH}.tar.gz>
  • (*CRICTL_VERSION이나 ARCH는 해당 PC마다 다르다.)

 

kubeadm, kubelet, kubectl

RELEASE="**kubeadm,kubelet,kubectl VERSION"**
ARCH="amd64"
wget --remote-name-all <https://storage.googleapis.com/kubernetes-release/release/${RELEASE}/bin/linux/${ARCH}/{kubeadm,kubelet,kubectl}>
  • Example
RELEASE="v1.22.7"
ARCH="amd64"
wget --remote-name-all <https://storage.googleapis.com/kubernetes-release/release/${RELEASE}/bin/linux/${ARCH}/{kubeadm,kubelet,kubectl}>
  • (*Release는 원하는 kubernetes 버전 / ARCH는 해당 PC마다 다르다.)

 

kubelet.service

RELEASE_VERSION="홈페이지에 나와있는 version 그대로 사용했다" 
wget https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubelet/lib/systemd/system/kubelet.service
  • Example
RELEASE_VERSION="v0.4.0"
wget https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubelet/lib/systemd/system/kubelet.service

 

kubelet.service에서 Service의 ExecStart path 변경

vim kubelet.service 
    /usr/bin/ -> /usr/local/bin/

 

 

10-kubeadm.conf

RELEASE_VERSION="홈페이지에 나와있는 version 그대로 사용했다" 
wget <https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubeadm/10-kubeadm.conf>
  • Example
RELEASE_VERSION="v0.4.0"
wget <https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubeadm/10-kubeadm.conf>

 

10-kubeadm.conf에서 ExecStart path 변경

vim 10-kubeadm.conf 
    /usr/bin/ -> /usr/local/bin/

 

docker daemon.json 수정

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

.
.
.
}

 

kubernetes 설치

1. (/usr/local/bin폴더가 없을 경우 생성)
sudo mkdir -p $DOWNLOAD_DIR
DOWNLOAD_DIR=/usr/local/bin

2. CNI 플러그인 설치
sudo mkdir -p /opt/cni/bin
sudo tar -C /opt/cni/bin -xzvf cni-plugins-linux-amd64-v0.8.2.tgz 

3. crictl 설치
sudo tar -C $DOWNLOAD_DIR -xz crictl-v1.22.0-linux-amd64.tar.gz

4. kubeadm,kubelet,lubectl 설치
cp kubeadm kubelet kubectl $DOWNLOAD_DIR
cd $DOWNLOAD_DIR
sudo chmod +x {kubeadm,kubelet,kubectl}

5. kubelet.service 설치
sudo cp kubelet.service /etc/systemd/system/

6. 10-kubeadm.conf 설치
sudo mkdir -p /etc/systemd/system/kubelet.service.d
sudo cp 10-kubeadm.conf /etc/systemd/system/kubelet.service.d/

7. kubelet 활성화 및 시작
systemctl enable --now kubelet

8. swapoff
sudo swapoff -a
sudo sed -i '/ swap / s/^\\(.*\\)$/#\\1/g' /etc/fstab
sudo apt-get update

9. kubeadm init
sudo kubeadm init
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf

 

Net Plugin을 위한 weave

밑의 링크에서 version에 맞는 yaml파일을 다운로드하고 apply 한다.

(다른 version은 test 안 해보고 weave-daemonset-k8s-1.9.yaml로 했다.)

kubectl apply -f weave-daemonset-k8s-1.9.yaml

https://github.com/weaveworks/weave/releases

 

Releases · weaveworks/weave

Simple, resilient multi-host containers networking and more. - weaveworks/weave

github.com

 

 

Nvidia-driver 사용을 위한 nvidia-driver-plugin

밑의 링크에서 nvidia-device-plugin.yml에 대해 apply 한다.

kubectl apply -f nvidia-device-plugin.yml

https://github.com/NVIDIA/k8s-device-plugin

 

GitHub - NVIDIA/k8s-device-plugin: NVIDIA device plugin for Kubernetes

NVIDIA device plugin for Kubernetes. Contribute to NVIDIA/k8s-device-plugin development by creating an account on GitHub.

github.com

 

728x90
반응형

댓글