리눅스

 

 


A.쿠버네티스를 사용하면 다음과 같은 장점이 있습니다.

 

1애플리케이션 배포의 단순화: 개발자가 서버에 대한 별도의 지식 없이 자체적으로 애플리케이션을 배포할 수 있습니다. 
    쿠버네티스 클러스터의 노드는 수많은 베어메탈 서버 혹은 VM으로 구성되어 있을지라도 배포를 기다리는 애플리케이션 입장에서는 하나의 거대한 서버입니다.

2.애플리케이션 개발의 단순화: 개발 환경과 운영 환경이 동일한 환경 (컨테이너)에서 애플리케이션이 구동된다는 보장을 갖게 됩니다.

3.컴퓨팅 리소스 활용: 쿠버네티스는 배포할 애플리케이션이 요구하는 리소스 등을 고려해 배포될 노드를 자동으로 선택해 줍니다.

4.지속적인 상태 확인과 셀프 힐링: 쿠버네티스는 배포된 애플리케이션의 구성 요소들과 노드를 지속적으로 모니터링 합니다.

5.오토스케일링: 특정 컨테이너에 부하가 급격하게 발생할 경우, 쿠버네티스는 이를 모니터링 하고 있다가 정해진 수준 이상으로 부하 발생시 자동으로 스케일 아웃하여 컨테이너를 늘려서 부하를 분산시켜줍니다.

이러한 장점들로 인해 쿠버네티스는 많은 기업들이 선호하는 컨테이너 오케스트레이션 플랫폼입니다.
 

 

 

 

B. 쿠버네티스 설치가 복잡하다.
쿠버네티스는 매우 강력한 도구이지만, 그만큼 복잡성도 높습니다. 하지만, 몇 가지 도구와 방법을 사용하면 설치 과정을 간소화할 수 있습니다.

1.Vagrant와 VirtualBox 사용: 
    Vagrant와 VirtualBox를 사용하면 가상 머신 위에 쿠버네티스를 쉽게 설치할 수 있습니다. 이 방법은 특히 개발 환경에서 유용합니다.

2.Managed Kubernetes Service 사용: Google Kubernetes Engine(GKE), Amazon EKS, Azure AKS와 같은 클라우드 제공 업체에서 관리형 쿠버네티스 서비스를 제공하고 있습니다. 이 서비스들을 사용하면 쿠버네티스 클러스터를 손쉽게 설정하고 관리할 수 있습니다.

3.Kubeadm 사용: Kubeadm은 쿠버네티스 클러스터를 빠르게 구축하기 위한 도구입니다. 
    Kubeadm을 사용하면 쿠버네티스 클러스터를 초기화하고, 워커 노드를 추가하고, 클러스터를 업그레이드하는 등의 작업을 수행할 수 있습니다3.
이러한 도구와 방법들을 활용하면 쿠버네티스 설치 과정을 좀 더 간단하게 만들 수 있습니다. 그러나, 쿠버네티스를 효과적으로 사용하기 위해서는 그 복잡성을 이해하고 관리하는 능력이 필요합니다

 

 

 

 

 


C.Vagrant와 VirtualBox를 사용하여 쿠버네티스를 설치하는 방법은 다음과 같습니다.

1.Vagrant와 VirtualBox 설치: 먼저, Vagrant와 VirtualBox를 설치해야 합니다.

2.Vagrantfile 작성: Vagrant를 사용하여 VirtualBox 가상 머신을 생성합니다. 이를 위해 Vagrantfile을 작성해야 합니다.

3.Containerd 및 Kubeadm 설치: Vagrant를 사용하여 Containerd와 Kubeadm을 설치합니다.

4.Master 노드에 Worker 노드 연결: 마지막으로, Master 노드에 Worker 노드를 수동으로 연결합니다.


이 과정은 복잡해 보일 수 있지만, 각 단계를 차근차근 따라가면 쿠버네티스 클러스터를 성공적으로 구축할 수 있습니다1. 자세한 내용은 여기에서 확인할 수 있습니다.

참고로, 이 설명은 기본적인 가이드라인일 뿐이며, 실제 설치 과정은 사용자의 환경과 요구 사항에 따라 달라질 수 있습니다. 따라서, 문제가 발생할 경우 적절한 디버깅과 문제 해결이 필요할 수 있습니다. 이를 위해 쿠버네티스 공식 문서나 관련 커뮤니티를 참조하는 것이 좋습니다

 

 

 

리눅스에서 VirtualBox와 Vagrant를 설치하고 사용하는 방법은 다음과 같습니다.

  1. VirtualBox 설치: VirtualBox는 공식 웹사이트에서 다운로드하거나, 리눅스 배포판의 패키지 관리자를 통해 설치할 수 있습니다. 예를 들어, Ubuntu에서는 다음과 같이 패키지 관리자를 통해 설치할 수 있습니다.

 

sqlCopy code

sudo apt update sudo apt install virtualbox

 

 

  1. Vagrant 설치: Vagrant는 공식 웹사이트에서 다운로드하여 설치할 수 있습니다. 또는 패키지 관리자를 통해 설치할 수도 있습니다. 예를 들어, Ubuntu에서는 다음과 같이 설치할 수 있습니다.

  2. sqlCopy code
    
    sudo apt update sudo apt install vagrant

     

  3. 가상 환경 구성: Vagrant를 사용하여 Vagrantfile을 작성하고 가상 머신을 구성합니다. 위에서 제공한 예시 코드와 같이 Vagrantfile을 작성하고, 필요에 따라 가상 머신의 구성을 수정합니다.

  4. 가상 머신 실행: Vagrantfile이 있는 디렉토리에서 다음 명령을 실행하여 가상 머신을 시작합니다.

  5. Copy code
    
    vagrant up

     

    이제 리눅스에서도 VirtualBox와 Vagrant를 사용하여 가상 환경을 구성하고 실행할 수 있습니다.

 

 

 

2.Vagrantfile 작성

1)Vagrantfile 샘플

Vagrant.configure("2") do |config|
  config.vm.define "master" do |master|
    master.vm.box = "ubuntu/jammy64"
    master.vm.network "private_network", ip: "192.168.56.10"
    master.vm.hostname = "master"
    master.vm.provider "virtualbox" do |v|
      v.memory = 4096
      v.cpus = 4
    end
  end

  (1..3).each do |i|
    config.vm.define "worker#{i}" do |worker|
      worker.vm.box = "ubuntu/jammy64"
      worker.vm.network "private_network", ip: "192.168.56.1#{i}"
      worker.vm.hostname = "worker#{i}"
      worker.vm.provider "virtualbox" do |v|
        v.memory = 2048
        v.cpus = 2
      end
    end
  end
end

 

 

Vagrantfile

Vagrant.configure("2") do |config|
  config.vm.define "k8s-master" do |master|
    master.vm.box = "ubuntu/jammy64"
    master.vm.network "private_network", ip: "192.168.32.10"
    master.vm.hostname = "k8s-master"
    master.vm.provider "virtualbox" do |v|
      v.memory = 4096
      v.cpus = 4
    end
  end

  (1..2).each do |i|
    config.vm.define "k8s-node0#{i}" do |worker|
      worker.vm.box = "ubuntu/jammy64"
      worker.vm.network "private_network", ip: "192.168.32.1#{i+1}"
      worker.vm.hostname = "k8s-node0#{i}"
      worker.vm.provider "virtualbox" do |v|
        v.memory = 2048
        v.cpus = 2
      end
    end
  end
end

 

 

 

이 Vagrantfile은 1개의 마스터 노드(k8s-master)와 2개의 워커 노드(k8s-node01, k8s-node02)를 생성합니다. 각 노드는 “ubuntu/jammy64” 박스를 기반으로 하며, 각각의 IP 주소와 호스트 이름이 설정되어 있습니다. 또한, 각 노드는 VirtualBox를 프로바이더로 사용하며, 메모리와 CPU 코어 수가 설정되어 있습니다.

이 Vagrantfile을 작성한 후에는 vagrant up 명령을 실행하여 가상 머신을 생성하고 시작할 수 있습니다. 이렇게 하면 쿠버네티스 클러스터를 구성하기 위한 기본적인 가상 머신 환경을 준비할 수 있습니다. 이후의 단계에서는 이 가상 머신들에 쿠버네티스를 설치하고 설정하는 작업을 진행하게 됩니다. 

 

 

SSH 접속 방법

# 터미널을 열고 Vagrantfile이 위치한 디렉토리로 이동합니다.
cd C:\Work\vargrant

# 'k8s-master'라는 이름의 가상 머신에 SSH로 접속합니다.
vagrant ssh k8s-master

 

이 명령을 실행하면 'k8s-master’라는 이름의 가상 머신에 SSH로 접속할 수 있습니다.
이후에는 이 가상 머신에서 다양한 명령을 실행할 수 있습니다. 예를 들어, ls, cd, cat 등의 명령을 사용하여 파일 시스템을 탐색하거나,
 apt-get, yum 등의 패키지 관리자를 사용하여 소프트웨어를 설치하거나 업데이트할 수 있습니다. 
또한, kubectl, kubeadm 등의 쿠버네티스 명령을 사용하여 쿠버네티스 클러스터를 관리할 수 있습니다. 
이러한 작업을 통해 쿠버네티스 클러스터를 설정하고 운영하는 데 필요한 모든 작업을 수행할 수 있습니다. 

 

 

 

다음은 

 

1 : Vagrantfile (도커 + 쿠버네티스  )

Vagrant.configure("2") do |config|
  config.vm.define "k8s-master" do |master|
    master.vm.box = "ubuntu/jammy64"
    master.vm.network "private_network", ip: "192.168.32.10"
    master.vm.hostname = "k8s-master"
    master.vm.provider "virtualbox" do |v|
      v.memory = 4096
      v.cpus = 4
    end
    master.vm.provision "shell", inline: <<-SHELL
      # NTP 서버 동기화
      sudo apt-get install -y ntp
      sudo systemctl enable ntp
      sudo systemctl start ntp

      # 스왑 메모리 해제
      sudo swapoff -a
      sudo sed -i '/ swap / s/^/#/' /etc/fstab

      # 도커 설치
      sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
      curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
      sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
      sudo apt-get update
      sudo apt-get install -y docker-ce

      # Docker 설정 변경
       echo '{
          "runtimes": {
            "nvidia": {
              "path": "nvidia-container-runtime",
              "runtimeArgs": []
            }
          },
          "exec-opts": ["native.cgroupdriver=systemd"]
       }' | sudo tee /etc/docker/daemon.json
       sudo systemctl restart docker


      # UFW 설치 및 활성화
      sudo apt install ufw -y
      sudo ufw enable

      # Kubernetes 필요 포트 열기 (마스터 노드)
      sudo ufw allow 6443/tcp
      sudo ufw allow 2379:2380/tcp
      sudo ufw allow 10250/tcp
      sudo ufw allow 10259/tcp
      sudo ufw allow 10257/tcp

      # Kubernetes GPG 키와 v1.24용 repository 추가
      curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.24/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
      echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.24/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
       

      # apt 패키지 인덱스 업데이트
      sudo apt-get update
 
      # Kubernetes 구성 요소 설치 
      sudo apt-get install -y kubelet kubeadm kubectl
    SHELL
  end
 
  (1..2).each do |i|
    config.vm.define "k8s-node0#{i}" do |worker|
      worker.vm.box = "ubuntu/jammy64"
      worker.vm.network "private_network", ip: "192.168.32.1#{i+1}"
      worker.vm.hostname = "k8s-node0#{i}"
      worker.vm.provider "virtualbox" do |v|
        v.memory = 2048
        v.cpus = 2
      end
      worker.vm.provision "shell", inline: <<-SHELL
        # NTP 서버 동기화
        sudo apt-get install -y ntp
        sudo systemctl enable ntp
        sudo systemctl start ntp

        # 스왑 메모리 해제
        sudo swapoff -a
        sudo sed -i '/ swap / s/^/#/' /etc/fstab

        # 도커 설치
        sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
        curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
        sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
        sudo apt-get update
        sudo apt-get install -y docker-ce

      # Docker 설정 변경
       echo '{
          "runtimes": {
            "nvidia": {
              "path": "nvidia-container-runtime",
              "runtimeArgs": []
            }
          },
          "exec-opts": ["native.cgroupdriver=systemd"]
       }' | sudo tee /etc/docker/daemon.json
       sudo systemctl restart docker

        # UFW 설치 및 활성화
        sudo apt install ufw -y
        sudo ufw enable

        # Kubernetes 필요 포트 열기 (워커 노드)
        sudo ufw allow 10250/tcp
        sudo ufw allow 30000:32767/tcp

       # Kubernetes GPG 키와 v1.24용 repository 추가
        curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.24/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
        echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.24/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
         
        # apt 패키지 인덱스 업데이트
        sudo apt-get update
 
        # Kubernetes 구성 요소 설치 
        sudo apt-get install -y kubelet kubeadm kubectl
      SHELL
    end
  end
end

 

실행 : vagrant up

 

위 Vagrantfile이 수행하는 작업에 대한 간략한 개요입니다.

"k8s-master"라는 호스트 이름을 가진 마스터 노드를 설정합니다. 
이 노드는 “ubuntu/jammy64” (우분투22) 박스를 사용하며, 4개의 CPU와 4096MB의 메모리를 할당받습니다. 
또한, 개인 네트워크 IP 주소로 "192.168.32.10"을 설정합니다.

두 개의 워커 노드 "k8s-node01"과 "k8s-node02"를 설정합니다. 
이들 노드도 “ubuntu/jammy64” 박스를 사용하며, 각각 2개의 CPU와 2048MB의 메모리를 할당받습니다. 

개인 네트워크 IP 주소로는 "192.168.32.12"와 "192.168.32.13"을 설정합니다.
각 노드는 NTP 서버 동기화, 스왑 메모리 해제, 도커 설치, Nvidia-docker 설치, 쿠버네티스 GPG 키와 v1.24용 repository 추가, 
apt 패키지 인덱스 업데이트,
쿠버네티스 구성 요소 설치 등의 작업을 수행합니다.

만약에

Nvidia-docker 설치,도커 사설 레지스트리 구축,도커 사설 레지스트리에 인증서 적용, 인증서  크론 작업 으로 자동 갱신 처리 추가하려면

다음을 추가하면 됩니다.

~~


   # Nvidia-docker 설치
        distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
        curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
        curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
        sudo apt-get update
        sudo apt-get install -y nvidia-docker2
        sudo systemctl restart docker

        # 도커 사설 레지스트리 구축
        sudo docker run -d -p 5000:5000 --restart=always --name registry registry:2

        # 자체 서명된 인증서 생성
        sudo mkdir -p /certs
        sudo openssl req -newkey rsa:4096 -nodes -sha256 -keyout /certs/domain.key -x509 -days 365 -out /certs/domain.crt

        # 도커 사설 레지스트리에 인증서 적용
        sudo docker run -d -p 5000:5000 --restart=always --name registry -v /certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key registry:2

        # 크론 작업 설정
        (crontab -l 2>/dev/null; echo "0 0 */364 * * /usr/bin/openssl req -newkey rsa:4096 -nodes -sha256 -keyout /certs/domain.key -x509 -days 365 -out /certs/domain.crt") | crontab -


~

 

 

이러한 작업들은 쿠버네티스 클러스터를 설정하고 운영하는 데 필요한 기본적인 작업들입니다.

 

 

다음과 같은  오류 발생시 :

 

$ vagrant up
Vagrant failed to initialize at a very early stage:

There is a syntax error in the following Vagrantfile. The syntax error
message is reproduced below for convenience:

C:/Work/vargrant/Vagrantfile:4: invalid multibyte char (UTF-8)
C:/Work/vargrant/Vagrantfile:5: syntax error, unexpected string literal, expecting `do' or '{' or '('
    sudo curl -L 'https://github.com/docker/com...
                 ^
C:/Work/vargrant/Vagrantfile:5: syntax error, unexpected regexp literal, expecting `do' or '{' or '('
...e-$(uname -s)-$(uname -m)' -o /usr/local/bin/docker-compose
...                              ^
C:/Work/vargrant/Vagrantfile:5: unknown regexp options - lcal
... -s)-$(uname -m)' -o /usr/local/bin/docker-compose
...                         ^~~~~~
C:/Work/vargrant/Vagrantfile:6: syntax error, unexpected regexp literal, expecting `do' or '{' or '('
    sudo chmod +x /usr/local/bin/docker-compose
                  ^

 

해당 Vagrantfile 파일이   utf8로 저장되어 있는 지확인할것

 

이를 해결하기 위해 다음과 같은 단계를 따르십시오.

  1. 인코딩 확인: 파일의 인코딩을 UTF-8로 설정하고 있는지 확인하세요. 일부 텍스트 편집기에서는 파일을 다른 인코딩으로 저장할 수 있습니다. 파일이 UTF-8로 저장되어 있는지 확인하십시오.

  2. 문법 오류 확인: 각 줄에서 오류가 발생하는 부분을 자세히 살펴보세요. 이 오류 메시지는 일반적으로 누락된 구문, 잘못된 문자 또는 잘못된 키워드 등을 가리킬 수 있습니다. 특히 홑따옴표(')나 쌍따옴표(")가 올바르게 사용되었는지 확인하십시오.

  3. 루비 코드 유효성 확인: 코드가 유효한 루비 구문을 따르는지 확인하십시오. 문제가있는 줄을 정확히 이해하고 해당 줄을 수정하십시오.

  4. 루프 구문 확인: 마지막 줄에서 루프 구문이 닫혔는지 확인하십시오. end 키워드가 모든 루프에 대해 제대로 사용되었는지 확인하세요.

 

 

 

 

 

 

 

3.Containerd 및 Kubeadm 설치:

 vagrant up 을 실행하면 3개의 가상머신이 생성 된다.

 

가상 머신이 성공적으로 생성되었다면, 다음 단계는 쿠버네티스 클러스터를 초기화하는 것입니다. 이 작업은 마스터 노드에서 수행해야 합니다.

1.먼저, 마스터 노드에 SSH 접속을 합니다. Vagrant를 사용하면 다음 명령어로 접속할 수 있습니다

vagrant ssh k8s-master

 

2. 그 다음, kubeadm init 명령을 실행하여 쿠버네티스 클러스터를 초기화합니다. 이 명령은 쿠버네티스 컨트롤 플레인을 설정합니다:

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

여기서 --pod-network-cidr 옵션은 파드 네트워크의 IP 주소 범위를 설정합니다. 이 값은 사용하는 네트워크 플러그인에 따라 달라질 수 있습니다.

명령어를 실행하면, 쿠버네티스 클러스터가 초기화되고, 마스터 노드가 설정됩니다. 또한,

이 명령어는 워커 노드를 클러스터에 추가하기 위한 kubeadm join 명령어를 출력합니다. 이 명령어는 나중에 워커 노드에서 사용해야 합니다.
 

다음과 같은 오류 발생시

vagrant@k8s-master:~$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16
I0401 07:41:11.019987    4990 version.go:256] remote version is much newer: v1.29.3; falling back to: stable-1.24
[init] Using Kubernetes version: v1.24.17
[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:
        [ERROR CRI]: container runtime is not running: output: time="2024-04-01T07:41:12Z" level=fatal msg="validate service connection: CRI v1 runtime API is not implemented for endpoint \"unix:///var/run/containerd/containerd.sock\": rpc error: code = Unimplemented desc = unknown service runtime.v1.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

 

/etc/containerd/config.toml 파일을 열고

vagrant@k8s-master:~$ sudo vi /etc/containerd/config.toml

disabled_plugins 을 주석 처리 한다.

#disabled_plugins = ["cri"]

 

재구동

$ sudo systemctl restart containerd

 

 

 

 3. 차후에

kubeadm init 명령의 출력에는 워커 노드를 클러스터에 추가하는 데 필요한 kubeadm join 명령이 포함되어 있습니다. 이 명령을 복사하여 나중에 사용하십시오.

예)

vagrant@k8s-master:~$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16
I0401 03:30:52.171233    7235 version.go:256] remote version is much newer: v1.29.3; 
~

~
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Writing "admin.conf" kubeconfig file
[kubeconfig] Writing "kubelet.conf" kubeconfig file

~
~

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/
~
~


kubeadm join 10.0.2.15:6443 --token ptgttc.v8jpd43nlkoom44n \
    --discovery-token-ca-cert-hash sha256:37d995197197bf17cc3b2bfa8e088c769c8d616a4a0b8e35f57f8e7f9de633e6

 

워커노드에서 다음을 붙여서 넣는다

sudo kubeadm join 10.0.2.15:6443 --token ptgttc.v8jpd43nlkoom44n \
    --discovery-token-ca-cert-hash sha256:37d995197197bf17cc3b2bfa8e088c769c8d616a4a0b8e35f57f8e7f9de633e6

 

 

4.마지막으로, kubectl 명령을 사용할 수 있도록 설정합니다:

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

 

재구동

sudo systemctl restart kubelet

 

이제 마스터 노드가 준비되었습니다. 다음 단계는 워커 노드를 클러스터에 추가하는 것입니다. 이 작업은 각 워커 노드에서 수행해야 합니다. SSH로 각 워커 노드에 접속한 후, 앞서 복사한 kubeadm join 명령을 실행하면 됩니다.

이 모든 작업이 완료되면, 쿠버네티스 클러스터가 성공적으로 구축된 것입니다. 이제 kubectl 명령을 사용하여 클러스터를 관리할 수 있습니다. 예를 들어, kubectl get nodes 명령을 실행하면 클러스터의 노드 상태를 확인할 수 있습니다.

 

마스터 노드에서 실행 상태 확인

vagrant@k8s-master:~$ kubectl get nodes
NAME         STATUS     ROLES           AGE   VERSION
k8s-master   NotReady   control-plane   43m   v1.24.17

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

최종: 만약 다음과 같은 3개의 서버가 존재 만한다면  vagrantfile 작성 방법

1. 3개의 우분트 서버가 각각 따로 존재한다.

2. 마스터 노드 k8s-master 이름으로 서버는 아이피 주소가 125.125.125.1 이다.

3. 첫번째 워커노드 k8s-node01 이름으로 서버는 아이피 주소가 125.125.125.2 이다.

4. 두번째 워커노드 k8s-node02 이름으로 서버는 아이피 주소가 125.125.125.3 이다.

 

 

 

1. Vagrantfile 1 - k8s-master (마스터노드 서버)

Vagrant.configure("2") do |config|
  config.vm.define "k8s-master" do |master|
    master.vm.box = "ubuntu/jammy64"
    master.vm.network "private_network", ip: "125.125.125.1"
    master.vm.hostname = "k8s-master"
    master.vm.provider "virtualbox" do |v|
      v.memory = 4096
      v.cpus = 4
    end
    master.vm.provision "shell", inline: <<-SHELL
      # Kubernetes GPG 키와 v1.24용 repository 추가
      curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.24/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
      echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.24/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
       
      # apt 패키지 인덱스 업데이트
      sudo apt-get update
 
      # Kubernetes 구성 요소 설치
      sudo apt-get install -y kubelet kubeadm kubectl
    SHELL
  end
end

 

 

2. Vagrantfile 2 - k8s-node01 (첫번째 워커노드 서버)

Vagrant.configure("2") do |config|
  config.vm.define "k8s-node01" do |worker|
    worker.vm.box = "ubuntu/jammy64"
    worker.vm.network "private_network", ip: "125.125.125.2"
    worker.vm.hostname = "k8s-node01"
    worker.vm.provider "virtualbox" do |v|
      v.memory = 2048
      v.cpus = 2
    end
    worker.vm.provision "shell", inline: <<-SHELL
      # Kubernetes GPG 키와 v1.24용 repository 추가
      curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.24/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
      echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.24/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
       
      # apt 패키지 인덱스 업데이트
      sudo apt-get update
 
      # Kubernetes 구성 요소 설치
      sudo apt-get install -y kubelet kubeadm kubectl
    SHELL
  end
end

 

 

3.Vagrantfile 3 - k8s-node02 (두번째 워커노드 서버)

Vagrant.configure("2") do |config|
  config.vm.define "k8s-node02" do |worker|
    worker.vm.box = "ubuntu/jammy64"
    worker.vm.network "private_network", ip: "125.125.125.3"
    worker.vm.hostname = "k8s-node02"
    worker.vm.provider "virtualbox" do |v|
      v.memory = 2048
      v.cpus = 2
    end
    worker.vm.provision "shell", inline: <<-SHELL
      # Kubernetes GPG 키와 v1.24용 repository 추가
      curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.24/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
      echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.24/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
       
      # apt 패키지 인덱스 업데이트
      sudo apt-get update
 
      # Kubernetes 구성 요소 설치
      sudo apt-get install -y kubelet kubeadm kubectl
    SHELL
  end
end

 

 

 

이렇게 각각의 Vagrantfile을 생성하면, 각각의 서버가 독립적으로 운영됩니다.

이 Vagrantfile들을 사용하여 각각의 서버를 시작하면 됩니다. 이렇게 설정하면, 각 서버는 요청하신대로 각각의 IP 주소를 가지게 됩니다.

이제 Kubernetes 클러스터를 설정하실 준비가 되었다.

 

 

접속 방법

 

첫번째 워커 노드에 접속하는 방법은 여러 가지가 있습니다.

일반적으로는 SSH를 사용하여 원격으로 접속하는 것이 가장 흔한 방법입니다. 아래는 몇 가지 SSH를 사용하여 첫번째 워커 노드에 접속하는 방법입니다.

 

1)Vagrant SSH 명령어 사용:

vagrant ssh k8s-node01

 

위 명령을 실행하면 Vagrant가 관리하는 가상 머신인 "k8s-node01"에 SSH 연결이 설정됩니다.

 

2)SSH 클라이언트를 직접 사용: 가상 머신의 IP 주소와 Vagrant에서 설정한 사용자 이름을 사용하여 SSH로 접속할 수도 있습니다.

 

ssh vagrant@125.125.125.2

 

  1. 위 명령을 실행하면 첫번째 워커 노드에 직접 SSH 연결이 설정됩니다.

  2. Vagrant 파일에서 프로비저닝된 SSH 키 사용: Vagrant가 생성한 SSH 키를 사용하여 접속할 수도 있습니다.

  3.  

  4. Vagrantfile에 설정된 기본 사용자 이름과 같은 방식으로 접속할 수 있습니다.

위의 방법 중 하나를 선택하여 마스터 노드에서  첫번째 워커 노드에 접속할 수 있습니다.

 

 

 

 

쿠버네티스 클러스터를 설정하는 방법은 다음과 같습니다:

  1. 마스터 노드 초기화: 쿠버네티스 클러스터를 생성하기 위해 마스터 노드를 초기화해야 합니다. 이를 위해 kubeadm init 명령어를 사용합니다1.

  2. 워커 노드 추가: 워커 노드를 클러스터에 추가하기 위해 kubeadm join 명령어를 사용합니다1.

  3. kubectl 설치 및 설정: 클러스터를 관리하기 위해 kubectl이 필요합니다. 이를 설치하고 설정하는 방법은 다음과 같습니다2:

    • kubectl 바이너리를 다운로드합니다.
    • 다운로드한 바이너리에 실행 권한을 추가합니다.
    • 바이너리를 검증합니다(선택 사항).
    • kubectl을 설치합니다.
    • 설치한 버전이 최신인지 확인합니다.
  4. 클러스터 구성 확인: 마스터 노드에서 kubectl get nodes 명령어를 사용하여 클러스터 구성을 확인합니다1.

이 과정은 쿠버네티스 클러스터를 로컬 환경에 설정하는 기본적인 방법입니다. 클라우드 환경에서 쿠버네티스 클러스터를 설정하는 방법은 클라우드 제공자의 문서를 참조하시기 바랍니다3.

참고로, 쿠버네티스 클러스터를 설정하고 관리하는 과정은 복잡하고 시간이 많이 소요될 수 있습니다. 따라서, 처음 쿠버네티스를 사용하시는 경우에는 간단한 클러스터를 생성해 볼 수 있는 Minikube와 같은 도구를 사용해 보시는 것을 추천드립니

 

=================================================================================

=================================================================================

=================================================================================

=================================================================================

=================================================================================

  1. k8s-master Vagrantfile:
Vagrant.configure("2") do |config|
  config.vm.define "k8s-master" do |master|
    master.vm.box = "ubuntu/jammy64"
    master.vm.network "private_network", ip: "125.125.125.1"
    master.vm.hostname = "k8s-master"
    master.vm.provider "virtualbox" do |v|
      v.memory = 4096
      v.cpus = 4
    end
    master.vm.provision "shell", inline: <<-SHELL
      # Kubernetes GPG 키와 v1.24용 repository 추가
      curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.24/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
      echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.24/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
       
      # apt 패키지 인덱스 업데이트
      sudo apt-get update
 
      # Kubernetes 구성 요소 설치
      sudo apt-get install -y kubelet kubeadm kubectl

      # 마스터 노드 초기화
      sudo kubeadm init --pod-network-cidr=10.244.0.0/16
    SHELL
  end
end

 

2. k8s-node01 Vagrantfile:

Vagrant.configure("2") do |config|
  config.vm.define "k8s-node01" do |worker|
    worker.vm.box = "ubuntu/jammy64"
    worker.vm.network "private_network", ip: "125.125.125.2"
    worker.vm.hostname = "k8s-node01"
    worker.vm.provider "virtualbox" do |v|
      v.memory = 2048
      v.cpus = 2
    end
    worker.vm.provision "shell", inline: <<-SHELL
      # Kubernetes GPG 키와 v1.24용 repository 추가
      curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.24/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
      echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.24/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
       
      # apt 패키지 인덱스 업데이트
      sudo apt-get update
 
      # Kubernetes 구성 요소 설치
      sudo apt-get install -y kubelet kubeadm kubectl
    SHELL
  end
end

 

 

3. k8s-node02 Vagrantfile

 

Vagrant.configure("2") do |config|
  config.vm.define "k8s-node02" do |worker|
    worker.vm.box = "ubuntu/jammy64"
    worker.vm.network "private_network", ip: "125.125.125.3"
    worker.vm.hostname = "k8s-node02"
    worker.vm.provider "virtualbox" do |v|
      v.memory = 2048
      v.cpus = 2
    end
    worker.vm.provision "shell", inline: <<-SHELL
      # Kubernetes GPG 키와 v1.24용 repository 추가
      curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.24/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
      echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.24/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
       
      # apt 패키지 인덱스 업데이트
      sudo apt-get update
 
      # Kubernetes 구성 요소 설치
      sudo apt-get install -y kubelet kubeadm kubectl
    SHELL
  end
end

 

 

 

 Vagrantfile에서 마스터 노드는 쿠버네티스 클러스터를 초기화하는 역할을 합니다. 이는 kubeadm init 명령을 통해 수행되며, 이 명령은 쿠버네티스 클러스터의 첫 번째 노드를 설정합니다. 이 과정에서 마스터 노드는 쿠버네티스 컨트롤 플레인 구성 요소를 실행하고, 클러스터에 필요한 설정을 적용합니다. 이렇게 설정된 마스터 노드는 이후 워커 노드들이 클러스터에 조인할 수 있도록 준비됩니다

 

 

워커 노드를 쿠버네티스 클러스터에 추가하는 과정은 마스터 노드를 초기화한 후에 수행되어야 합니다. 마스터 노드를 초기화하면 kubeadm init 명령의 출력에 워커 노드를 추가하기 위한 kubeadm join 명령이 포함됩니다. 이 명령은 토큰과 해시 값 등 클러스터에 특정한 정보를 포함하므로, 이를 미리 알 수 없습니다.

따라서, Vagrantfile에 워커 노드를 클러스터에 추가하는 명령을 직접 작성하는 것은 어렵습니다. 대신, 마스터 노드를 초기화한 후에 출력되는 kubeadm join 명령을 복사하여 워커 노드에서 수동으로 실행해야 합니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

about author

PHRASE

Level 1  라이트

댓글 ( 0)

댓글 남기기

작성
  •    
  •    
  •