ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • KinD 알아보기.
    Kubernetes 2023. 11. 27. 23:01
    728x90
    반응형

     

    - 목차

     

    소개.

    KinD 는 "카인드" 라고 발음되며, 로컬 머신에서 쿠버네티스를 간편하게 실행할 수 있는 도구입니다.

    KinD 는 Kubernetes in Docker 의 약자이구요.

    Docker 를 활용하여 쿠버네티스 환경을 구성할 수 있습니다.

     

     

    쿠버네티스 클러스터 실행.

    KinD 는 도커를 활용하여 쿠버네티스 클러스터를 실행하는 구조입니다.

    따라서 Docker 가 실행되어 있어야합니다.

    그리고 kind 라는 CLI 또한 설치되어 있어야 하며,
    KinD 설치 링크를 아래에 첨부하겠습니다.


    https://kind.sigs.k8s.io/docs/user/quick-start/

     

    kind – Quick Start

    Quick Start This guide covers getting started with the kind command. If you are having problems please see the known issues guide. NOTE: kind does not require kubectl, but you will not be able to perform some of the examples in our docs without it. To inst

    kind.sigs.k8s.io

     

    그리고 아래와 같이 kind 의 create 명령어로 쿠버네티스 클러스터를 실행할 수 있습니다.

    클러스터의 이름과 클러스터에서 사용할 노드의 이미지 또한 지정이 가능합니다.

     

    < KinD Create Cluster >

    kind create cluster --name test-cluster --image kindest/node:v1.24.0

     

    < 출력 로그 >

    Creating cluster "test-cluster" ...
     ✓ Ensuring node image (kindest/node:v1.24.0) 🖼 
     ✓ Preparing nodes 📦  
     ✓ Writing configuration 📜 
     ✓ Starting control-plane 🕹️ 
     ✓ Installing CNI 🔌 
     ✓ Installing StorageClass 💾 
    Set kubectl context to "kind-test-cluster"
    You can now use your cluster with:
    
    kubectl cluster-info --context kind-test-cluster
    
    Have a question, bug, or feature request? Let us know! https://kind.sigs.k8s.io/#community

     

     

    < 클러스터 조회하기 >

    생성된 클러스터를 조회할 수 있습니다.

    명령어는 아래와 같습니다.

    kind get clusters

     

    < 출력 로그 >

    test-cluster

     

     

    < 클러스터 삭제하기 >

     

    클러스터를 삭제하는 방법은 아래와 같습니다.

    kind delete cluster --name test-cluster

     

    < 출력 로그 >

    Deleting cluster "test-cluster" ...
    Deleted nodes: ["test-cluster-control-plane"]

     

     

     

    멀티 노드 클러스터 실행하기.

    2개 이상의 노드를 가지는 클러스터를 생성하기 위해서는 config 파일이 필요합니다.

     

    < multi node cluster config >

    kind: Cluster
    apiVersion: kind.x-k8s.io/v1alpha4
    nodes:
    - role: control-plane
    - role: worker
    - role: worker
    - role: worker

     

     

    < 파일 저장 >

    cat <<EOF> /tmp/multinode_config.yaml
    kind: Cluster
    apiVersion: kind.x-k8s.io/v1alpha4
    nodes:
    - role: control-plane
    - role: worker
    - role: worker
    - role: worker
    EOF

     

     

    < 멀티 노드 클러스터 생성 >

    kind create cluster \
    --name test-cluster \
    --image kindest/node:v1.24.0 \
    --config /tmp/multinode_config.yaml

     

    < 출력 로그 >

    Creating cluster "test-cluster" ...
     ✓ Ensuring node image (kindest/node:v1.24.0) 🖼
     ✓ Preparing nodes 📦 📦 📦 📦  
     ✓ Writing configuration 📜 
     ✓ Starting control-plane 🕹️ 
     ✓ Installing CNI 🔌 
     ✓ Installing StorageClass 💾 
     ✓ Joining worker nodes 🚜 
    Set kubectl context to "kind-test-cluster"
    You can now use your cluster with:
    
    kubectl cluster-info --context kind-test-cluster
    
    Have a question, bug, or feature request? Let us know! https://kind.sigs.k8s.io/#community 🙂

     

    아래와 같이 3개의 worker node 와 1개의 control plane 이 존재하게 됩니다.

     

     

    Pod 생성해보기.

    가볍게 NodeJS Pod 를 생성해보겠습니다.

    Pod 를 생성하는 yaml 은 아래와 같습니다.

     

    NodeJs 이미지 생성하기.

     

     

     

    < Dockerfile >

    cat <<EOF> /tmp/Dockerfile
    FROM node:14
    WORKDIR /usr/src/app
    COPY app.js ./
    RUN npm install
    EXPOSE 3000
    CMD ["node", "app.js"]
    EOF

     

    < 파일 생성 >

    cat <<EOF> /tmp/app.js
    var http = require('http');
    
    http.createServer(function (req, res) {
      for (var i = 0; i < 1000000; i++) {
        if (i % 100000 == 0) console.log(i)
      }  
      res.writeHead(200, {'Content-Type': 'text/plain'});
      res.end('Hello World!');
    }).listen(8080);
    EOF

     

    < 도커 이미지 빌드 >

    docker build -t test-nodejs:1 -f /tmp/Dockerfile /tmp/

     

    kind load docker-image test-nodejs:1 --name test-cluster

     

    < Pod.yaml >

    cat <<EOF> /tmp/node_pod.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: nodejs-pod
    spec:
      containers:
      - name: nodejs-container
        image: test-nodejs:1
        imagePullPolicy: Never
        ports:
        - containerPort: 8080
        workingDir: /usr/src/app
        command: ["node", "app.js"]
      restartPolicy: Always
    EOF

     

    < pod 생성 >

    kubectl create -f /tmp/node_pod.yaml

     

     

    < Pod 조회 >

    kubectl get pods
    NAME         READY   STATUS    RESTARTS   AGE
    nodejs-pod   1/1     Running   0          48s

     

     

    KinD Cluster 로 Docker Image Load 하기.

    로컬 머신에 저장되어 있는 Docker Image 를 Kind Cluster 로 업로드할 수 있습니다.

    kind load docker-image confluentinc/cp-kafka:7.4.3 --name test-cluster

     

    Image: "confluentinc/cp-kafka:7.4.3" with ID "sha256:593b1742e91aab51f0969132af543f723617dc48d87f0f9543181f886a967091" not yet present on node "test-cluster-worker3", loading...
    Image: "confluentinc/cp-kafka:7.4.3" with ID "sha256:593b1742e91aab51f0969132af543f723617dc48d87f0f9543181f886a967091" not yet present on node "test-cluster-worker2", loading...
    Image: "confluentinc/cp-kafka:7.4.3" with ID "sha256:593b1742e91aab51f0969132af543f723617dc48d87f0f9543181f886a967091" not yet present on node "test-cluster-control-plane", loading...
    Image: "confluentinc/cp-kafka:7.4.3" with ID "sha256:593b1742e91aab51f0969132af543f723617dc48d87f0f9543181f886a967091" not yet present on node "test-cluster-worker", loading...

     

     

     

    반응형

    'Kubernetes' 카테고리의 다른 글

    Kubernetes Certificate 알아보기  (0) 2023.12.11
    Kubernetes ReplicaSet 알아보기  (2) 2023.11.28
    Kubernetes Ephemeral Volume  (0) 2023.08.09
    [Kubernetes] Service 이해하기  (0) 2023.08.01
    Kubernetes Pod 이해하기  (0) 2023.07.26
Designed by Tistory.