본문 바로가기
컨테이너/쿠버네티스

kind를 이용한 쿠버네티스 클러스터 구성

by ^..^v 2023. 4. 7.
728x90
반응형

kind(Kubernetes IN Docker)

https://kind.sigs.k8s.io/

 

kind

kind is a tool for running local Kubernetes clusters using Docker container “nodes”. kind was primarily designed for testing Kubernetes itself, but may be used for local development or CI. If you have go (1.17+) and docker installed go install sigs.k8s

kind.sigs.k8s.io

도커 컨테이너 이미지를 이용해 노드를 생성하고 쿠버네티스 클러스터를 구성해 주는 도구

 

 

윈도우 버전 확인

시작 메뉴에서 winver 명령을 입력해 윈도우의 버전을 확인합니다. OS 빌드가 18362 이하인 경우 OS 업그레이드를 먼저 실행합니다.

윈도우 버전 확인

 

WSL 설치

Windows 10 버전 2004 이상(빌드 19041 이상) 또는 Windows 11인 경우 자동 설치 방법으로, 그 이하인 경우 수동 설치 방법으로 WSL을 설치합니다. 

자동 설치 방법 : https://learn.microsoft.com/ko-kr/windows/wsl/install

수동 설치 방법 : https://learn.microsoft.com/ko-kr/windows/wsl/install-manual

WSL 자동 설치

 

우분투 설치

Microsoft Store(https://aka.ms/wslstore)에 접속해 우분투를 설치합니다. 

우분투 설치

 

사용자 이름과 패스워드 설정

우분투 실행 후 사용자 이름과 패스워드를 설정합니다.

Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: ubuntu				⇐ 사용자 이름과 패스워드를 설정
New password: ubuntu
Retype new password: ubuntu
passwd: password updated successfully
Installation successful!
이제 Linux용 Windows 하위 시스템을 Microsoft Store에서 사용할 수 있습니다.
'wsl.exe --update'를 실행하거나 https://aka.ms/wslstorepage를 방문하여 업그레이드할 수 있습니다.
Microsoft Store의 WSL을 설치하면 최신 WSL 업데이트가 더 빠르게 제공됩니다.
자세한 내용은 https://aka.ms/wslstoreinfo를 방문하세요.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.10.16.3-microsoft-standard-WSL2 x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

This message is shown once a day. To disable it please create the
/home/ubuntu/.hushlogin file.
ubuntu@DESKTOP-F4BC13L:~$

 

컴퓨터 이름을 k8s로 변경

 

root@DESKTOP-F4BC13L:~# vi /etc/hosts

# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateHosts = false
127.0.0.1       localhost
### 추가 --------------------------------------------
127.0.0.1       k8s.localdomain                 k8s
### 추가 --------------------------------------------
127.0.1.1       DESKTOP-F4BC13L.localdomain     DESKTOP-F4BC13L
192.168.0.2     host.docker.internal
192.168.0.2     gateway.docker.internal
127.0.0.1       kubernetes.docker.internal

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters


root@DESKTOP-F4BC13L:~# hostname k8s
root@DESKTOP-F4BC13L:~# exit
ubuntu@k8s:~$ exit

 

우분투 재시작 후 우분투 패키지 업데이트 

시작 메뉴에서 우분트를 시작 

ubuntu@k8s:~$ sudo su -
[sudo] password for ubuntu: ubuntu

root@k8s:~# apt-get update && apt-get upgrade

root@k8s:~# exit
logout
ubuntu@k8s:~$ exit

 

도커 데스크탑 실행 및 WSL 통합

 

우분투 재시작 후 도커 설치 확인

ubuntu@k8s:~$ sudo su

root@k8s:/home/ubuntu# docker version
Client: Docker Engine - Community
 Cloud integration: v1.0.31
 Version:           20.10.23
 API version:       1.41
 Go version:        go1.18.10
 Git commit:        7155243
 Built:             Thu Jan 19 17:34:13 2023
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Desktop
 Engine:
  Version:          20.10.23
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.18.10
  Git commit:       6051f14
  Built:            Thu Jan 19 17:32:04 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.18
  GitCommit:        2456e983eb9e37e47538f59ea18f2043c9a73640
 runc:
  Version:          1.1.4
  GitCommit:        v1.1.4-0-g5fd4c4d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0


root@k8s:/home/ubuntu# docker container ls
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

 

kind를 이용한 쿠버네티스 설치

kind를 다운로드하고 실행 권한을 부여합니다.

root@k8s:/home/ubuntu# curl -Lo ./kind https://github.com/kubernetes-sigs/kind/releases/download/v0.10.0/kind-linux-amd64
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 7277k  100 7277k    0     0  6010k      0  0:00:01  0:00:01 --:--:-- 43.5M

root@k8s:/home/ubuntu# chmod +x ./kind

root@k8s:/home/ubuntu# mv ./kind /usr/local/bin/

 

쿠버네티스 클러스터를 생성합니다.

root@k8s:/home/ubuntu# kind create cluster --name kubernetes
Creating cluster "kubernetes" ...
 ✓ Ensuring node image (kindest/node:v1.20.2) 🖼
 ✓ Preparing nodes 📦  
 ✓ Writing configuration 📜
 ✓ Starting control-plane 🕹️
 ✓ Installing CNI 🔌
 ✓ Installing StorageClass 💾
Set kubectl context to "kind-kubernetes"
You can now use your cluster with:

kubectl cluster-info --context kind-kubernetes

Not sure what to do next? 😅  Check out https://kind.sigs.k8s.io/docs/user/quick-start/

 

쿠버네티스 구성 정보를 확인합니다. 별다른 설정을 사용하지 않았기 때문에 노드가 하나만 생성된 것을 확인할 수 있습니다.

### 클러스터 정보 확인
root@k8s:/home/ubuntu# kubectl cluster-info
Kubernetes control plane is running at https://127.0.0.1:37679
KubeDNS is running at https://127.0.0.1:37679/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.


### 클러스터 상세 정보 확인
root@k8s:/home/ubuntu# kubectl config view		
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://127.0.0.1:37679
  name: kind-kubernetes
contexts:
- context:
    cluster: kind-kubernetes
    user: kind-kubernetes
  name: kind-kubernetes
current-context: kind-kubernetes
kind: Config
preferences: {}
users:
- name: kind-kubernetes
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED


### 노드 확인
root@k8s:/home/ubuntu# kubectl get node
NAME                       STATUS   ROLES                  AGE   VERSION
kubernetes-control-plane   Ready    control-plane,master   54m   v1.20.2

 

클러스터를 삭제합니다.

root@k8s:/home/ubuntu# kind delete cluster --name kubernetes
Deleting cluster "kubernetes" ...

 

한 개의 마스터 노드와 두 개의 워커 노드로 구성된 클러스터를 생성합니다. 

### 설정 파일 생성
root@k8s:/home/ubuntu# vi kind-3nodes.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  - role: control-plane
  - role: worker
  - role: worker


### 설정 파일을 이용한 클러스터 생성
root@k8s:/home/ubuntu# kind create cluster --name kubernetes --config ./kind-3nodes.yaml
Creating cluster "kubernetes" ...
 ✓ Ensuring node image (kindest/node:v1.20.2) 🖼
 ✓ Preparing nodes 📦 📦 📦
 ✓ Writing configuration 📜
 ✓ Starting control-plane 🕹️
 ✓ Installing CNI 🔌
 ✓ Installing StorageClass 💾
 ✓ Joining worker nodes 🚜
Set kubectl context to "kind-kubernetes"
You can now use your cluster with:

kubectl cluster-info --context kind-kubernetes

Thanks for using kind! 😊


### 노드 정보 조회
root@k8s:/home/ubuntu# kubectl get nodes
NAME                       STATUS   ROLES                  AGE   VERSION
kubernetes-control-plane   Ready    control-plane,master   94s   v1.20.2
kubernetes-worker          Ready    <none>                 58s   v1.20.2
kubernetes-worker2         Ready    <none>                 70s   v1.20.2


### 도커 컨테이너 조회
root@k8s:/home/ubuntu# docker container ls
CONTAINER ID   IMAGE                  COMMAND                  CREATED         STATUS         PORTS                       NAMES
0e568fe5a8cc   kindest/node:v1.20.2   "/usr/local/bin/entr…"   2 minutes ago   Up 2 minutes                               kubernetes-worker2
ca91cc70484b   kindest/node:v1.20.2   "/usr/local/bin/entr…"   2 minutes ago   Up 2 minutes   127.0.0.1:44461->6443/tcp   kubernetes-control-plane
6fd71e10323b   kindest/node:v1.20.2   "/usr/local/bin/entr…"   2 minutes ago   Up 2 minutes                               kubernetes-worker

 

kubectl 명령으로 클러스터를 조작할 수 있습니다. 

728x90
반응형

댓글