데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      OpenLab - Deep Dive Kubernetes 2차 모임(minikube, kind 설치하기)

      seungkyua 24.05.07
      366 2 0
      DEVOTEE 요약
      Minikube 및 Docker로 Kubernetes 클러스터를 설정하려면, 먼저 Docker를 설치한 후 Minikube를 설치하고, 드라이버로 Docker를 사용하여 클러스터를 시작합니다. 추가적으로 필요에 따라 노드를 추가하고, 애드온을 활성화하며, 클러스터 상태를 관리할 수 있습니다. Minikube 트러블슈팅 방법도 제공되며, Kind 클러스터 설정 방법과 클러스터 관리 방법에 대해서도 설명되어 있습니다.
      DEVOTEE 추천 블로그

      Minikube 설치하기

      minkube 설치는 아래 사이트를 참고한다.

      https://minikube.sigs.k8s.io/docs/start/

      $ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-arm64
      $ install minikube-darwin-arm64 /Users/ask/bin/minikube

      start cluster

      https://minikube.sigs.k8s.io/docs/drivers/docker/

      driver 를 docker 로 사용하기 때문에 docker 를 미리 설치해 놓아야 한다.

      $ docker context use default

      이후에 minikube 로 cluster 를 생성한다.

      $ minikube start --driver=docker --memory=4096
      --- output ---
      😄  Darwin 13.5.2 (arm64) 의 minikube v1.33.0
      ✨  유저 환경 설정 정보에 기반하여 docker 드라이버를 사용하는 중
      📌  Using Docker Desktop driver with root privileges
      👍  Starting "minikube" primary control-plane node in "minikube" cluster
      🚜  Pulling base image v0.0.43 ...
      🔥  Creating docker container (CPUs=2, Memory=4096MB) ...
      ❗  This container is having trouble accessing https://registry.k8s.io
      💡  To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/
      🐳  쿠버네티스 v1.30.0 을 Docker 26.0.1 런타임으로 설치하는 중
          ▪ 인증서 및 키를 생성하는 중 ...
          ▪ 컨트롤 플레인을 부팅하는 중 ...
          ▪ RBAC 규칙을 구성하는 중 ...
      🔗  bridge CNI (Container Networking Interface) 를 구성하는 중 ...
      🔎  Kubernetes 구성 요소를 확인...
          ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
      🌟  애드온 활성화 : storage-provisioner, default-storageclass
      
      ❗  /Users/ask/bin/kubectl is version 1.28.2, which may have incompatibilities with Kubernetes 1.30.0.
          ▪ Want kubectl v1.30.0? Try 'minikube kubectl -- get pods -A'
      🏄  끝났습니다! kubectl이 "minikube" 클러스터와 "default" 네임스페이스를 기본적으로 사용하도록 구성되었습니다.

      디폴트 메모리를 config 에 세팅할 수 도 있다.


      config 세팅은 기존에 만든 minikube node 에는 적용이 안되고 새롭게 만드는 노드에만 적용된다.

      $ minikube config set memory 4096

      node 추가

      minikube 에 worker node 를 추가할 수 있다.

      $ minikube node add

      node 가 추가된 것을 볼 수 있다.

      $ kubectl get nodes
      NAME           STATUS   ROLES           AGE     VERSION
      minikube       Ready    control-plane   8m22s   v1.30.0
      minikube-m02   Ready    <none>          86s     v1.30.0

      node 에 Role 을 추가하고 싶으면 다음과 같이 지정한다.

      $ kubectl label node minikube-m02 node-role.kubernetes.io/node=enabled --overwrite
      
      $ kubectl get nodes
      NAME           STATUS   ROLES           AGE     VERSION
      minikube       Ready    control-plane   15m     v1.30.0
      minikube-m02   Ready    node            8m12s   v1.30.0

      minikube 명령어

      • 현재 설치된 minkube node 를 조회한다.

      $ minkube status
      --- output ---
      minikube
      type: Control Plane
      host: Running
      kubelet: Running
      apiserver: Running
      kubeconfig: Configured
      
      minikube-m02
      type: Worker
      host: Running
      kubelet: Running
      • minikube 로 만든 kubernetes cluster 의 모든 namespace 를 잠시 멈춘다.

      $ minkube pause -A
      --- output --
      ⏸️  Pausing node minikube ...
      ⏸️  Pausing node m02 ...
      ⏯️  Paused 16 containers
      • minkube 로 pause 한 cluster 를 다시 실행한다.

      $ minikube unpause -A
      --- output ---
      ⏸️  Unpausing node minikube ...
      ⏸️  Unpausing node m02 ...
      ⏸️  Unpaused 16 containers
      • minikube 모든 노드를 중지한다.

      $ minikube stop --all=true
      --- output ---
      ✋  "minikube-m02" 노드를 중지하는 중 ...
      🛑  "minikube-m02"를 SSH로 전원을 끕니다 ...
      ✋  "minikube" 노드를 중지하는 중 ...
      🛑  "minikube"를 SSH로 전원을 끕니다 ...
      🛑  2개의 노드가 중지되었습니다.
      • aged 란 이름의 다른 쿠버네티스 버전을 추가로 설치한다.

      $ minikube start -p aged --kubernetes-version=v1.28.2
      • 모든 minikube 로 만든 kubernetes cluster 를 삭제한다.

      minikube delete --all
      • minikube addons 목록을 살펴본다.

      $ minikube addons list
      |-----------------------------|----------|--------------|--------------------------------|
      |         ADDON NAME          | PROFILE  |    STATUS    |           MAINTAINER           |
      |-----------------------------|----------|--------------|--------------------------------|
      | ambassador                  | minikube | disabled     | 3rd party (Ambassador)         |
      | auto-pause                  | minikube | disabled     | minikube                       |
      | cloud-spanner               | minikube | disabled     | Google                         |
      | csi-hostpath-driver         | minikube | disabled     | Kubernetes                     |
      | dashboard                   | minikube | disabled     | Kubernetes                     |
      | default-storageclass        | minikube | enabled ✅   | Kubernetes                     |
      | efk                         | minikube | disabled     | 3rd party (Elastic)            |
      | freshpod                    | minikube | disabled     | Google                         |
      | gcp-auth                    | minikube | disabled     | Google                         |
      | gvisor                      | minikube | disabled     | minikube                       |
      | headlamp                    | minikube | disabled     | 3rd party (kinvolk.io)         |
      | helm-tiller                 | minikube | disabled     | 3rd party (Helm)               |
      | inaccel                     | minikube | disabled     | 3rd party (InAccel             |
      |                             |          |              | [info@inaccel.com])            |
      | ingress                     | minikube | disabled     | Kubernetes                     |
      | ingress-dns                 | minikube | disabled     | minikube                       |
      | inspektor-gadget            | minikube | disabled     | 3rd party                      |
      |                             |          |              | (inspektor-gadget.io)          |
      | istio                       | minikube | disabled     | 3rd party (Istio)              |
      | istio-provisioner           | minikube | disabled     | 3rd party (Istio)              |
      | kong                        | minikube | disabled     | 3rd party (Kong HQ)            |
      | kubeflow                    | minikube | disabled     | 3rd party                      |
      | kubevirt                    | minikube | disabled     | 3rd party (KubeVirt)           |
      | logviewer                   | minikube | disabled     | 3rd party (unknown)            |
      | metallb                     | minikube | disabled     | 3rd party (MetalLB)            |
      | metrics-server              | minikube | disabled     | Kubernetes                     |
      | nvidia-device-plugin        | minikube | disabled     | 3rd party (NVIDIA)             |
      | nvidia-driver-installer     | minikube | disabled     | 3rd party (Nvidia)             |
      | nvidia-gpu-device-plugin    | minikube | disabled     | 3rd party (Nvidia)             |
      | olm                         | minikube | disabled     | 3rd party (Operator Framework) |
      | pod-security-policy         | minikube | disabled     | 3rd party (unknown)            |
      | portainer                   | minikube | disabled     | 3rd party (Portainer.io)       |
      | registry                    | minikube | disabled     | minikube                       |
      | registry-aliases            | minikube | disabled     | 3rd party (unknown)            |
      | registry-creds              | minikube | disabled     | 3rd party (UPMC Enterprises)   |
      | storage-provisioner         | minikube | enabled ✅   | minikube                       |
      | storage-provisioner-gluster | minikube | disabled     | 3rd party (Gluster)            |
      | storage-provisioner-rancher | minikube | disabled     | 3rd party (Rancher)            |
      | volumesnapshots             | minikube | disabled     | Kubernetes                     |
      | yakd                        | minikube | disabled     | 3rd party (marcnuri.com)       |
      |-----------------------------|----------|--------------|--------------------------------|
      • dashboard 를 설치한다.

      $ minikube addons enable dashboard
      --- output ---
      💡  dashboard is an addon maintained by Kubernetes. For any concerns contact minikube on GitHub.
      You can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS
          ▪ Using image docker.io/kubernetesui/dashboard:v2.7.0
          ▪ Using image docker.io/kubernetesui/metrics-scraper:v1.0.8
      💡  Some dashboard features require the metrics-server addon. To enable all features please run:
      
      	minikube addons enable metrics-server
      
      🌟  'dashboard' 애드온이 활성화되었습니다
      • metrics-server 를 설치한다.

      $ minikube addons enable metrics-server
      --- output ---
      💡  metrics-server is an addon maintained by Kubernetes. For any concerns contact minikube on GitHub.
      You can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS
          ▪ Using image registry.k8s.io/metrics-server/metrics-server:v0.7.1
      🌟  'metrics-server' 애드온이 활성화되었습니다
      • dashboard 에 접속한다.

      $ minikube dashboard --url

      minikube trouble shooting

      • docker hub 으로 부터 이미지를 다운 받지 못하는 문제

      Error response from daemon: Get "https://registry-1.docker.io/v2/": tls: failed to verify certificate: x509: certificate signed by unknown authority

      minikube 의 docker-env 를 확인한 후 세팅한다.

      $ minikube -p minikube docker-env
      --- output ---
      export DOCKER_TLS_VERIFY="1"
      export DOCKER_HOST="tcp://127.0.0.1:53131"
      export DOCKER_CERT_PATH="/Users/ask/.minikube/certs"
      export MINIKUBE_ACTIVE_DOCKERD="minikube"
      
      $ docker context create minikube --description "Minikube" --docker "host=tcp://localhost:53131,ca=/Users/ask/.minikube/certs/ca.pem,cert=/Users/ask/.minikube/certs/cert.pem,key=/Users/ask/.minikube/certs/key.pem"
      $ docker context use minikube

      혹은 minikube 를 띄울 때 --insecure-registry 를 추가한다.

      $ minikube start --insecure-registry="registry-1.docker.io"

      3번째 방법은 minikube 로 노드에 접속해서 docker 에 인증서를 추가한다.

      $ minikube ssh
      $ sudo su -
      
      $ update-ca-certificates --fresh
      $ openssl s_client -showcerts -verify 5 -connect k8s.gcr.io:443 < /dev/null 2>/dev/null | openssl x509 -outform PEM | tee ~/k8s.gcr.io.crt
      $ openssl s_client -showcerts -verify 5 -connect registry-1.docker.io:443 < /dev/null 2>/dev/null | openssl x509 -outform PEM | tee ~/registry-1.docker.io.crt
      $ openssl s_client -showcerts -verify 5 -connect auth.docker.io:443 < /dev/null 2>/dev/null | openssl x509 -outform PEM | tee ~/auth.docker.io.crt
      $ cp ~/k8s.gcr.io.crt /usr/local/share/ca-certificates/
      $ cp ~/registry-1.docker.io.crt /usr/local/share/ca-certificates/
      $ cp ~/auth.docker.io.crt /usr/local/share/ca-certificates/
      $ update-ca-certificates
      
      $ systemctl restart docker

      Kind 설치

      kind 는 아래 설치 사이트를 참조한다.

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

      $ [ $(uname -m) = arm64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.22.0/kind-darwin-arm64
      $ chmod +x kind
      $ mv kind ~/bin/kind


      kind config 세팅

      image 는 아래 사이트에서 확인 가능하다.

      https://github.com/kubernetes-sigs/kind/releases

      kind config 는 여기를 참조한다.

      https://kind.sigs.k8s.io/docs/user/quick-start/#configuring-your-kind-cluster

      ingress 를 사용하기 위해서는 아래 내용 처럼 port mapping 을 해야 한다.

      https://kind.sigs.k8s.io/docs/user/ingress

      $ vi kind-config.yaml
      kind: Cluster
      apiVersion: kind.x-k8s.io/v1alpha4
      # patch the generated kubeadm config with some extra settings
      kubeadmConfigPatches:
      - |
        apiVersion: kubelet.config.k8s.io/v1beta1
        kind: KubeletConfiguration
        evictionHard:
          nodefs.available: "0%"
      # patch it further using a JSON 6902 patch
      kubeadmConfigPatchesJSON6902:
      - group: kubeadm.k8s.io
        version: v1beta3
        kind: ClusterConfiguration
        patch: |
          - op: add
            path: /apiServer/certSANs/-
            value: my-hostname
      nodes:
      - role: control-plane
        image: kindest/node:v1.29.2@sha256:51a1434a5397193442f0be2a297b488b6c919ce8a3931be0ce822606ea5ca245
      #  extraPortMappings:
      #  - containerPort: 80
      #    hostPort: 10080
      #    listenAddress: "0.0.0.0" # Optional, defaults to "0.0.0.0"
      #    protocol: tcp # Optional, defaults to tcp
      - role: worker
        image: kindest/node:v1.29.2@sha256:51a1434a5397193442f0be2a297b488b6c919ce8a3931be0ce822606ea5ca245
      #featureGates:
      #  FeatureGateName: true


      kind create cluster

      $ KIND_EXPERIMENTAL_PROVIDER=docker && kind create cluster --name kind --config kind-config.yaml
      --- output ---
      Creating cluster "kind" ...
       ✓ Ensuring node image (kindest/node:v1.29.2) 🖼
       ✓ Preparing nodes 📦 📦
       ✓ Writing configuration 📜
       ✓ Starting control-plane 🕹️
       ✓ Installing CNI 🔌
       ✓ Installing StorageClass 💾
       ✓ Joining worker nodes 🚜
      Set kubectl context to "kind-kind"
      You can now use your cluster with:
      
      kubectl cluster-info --context kind-kind
      
      Thanks for using kind! 😊
      • kind cluster 보기

      $ kind get clusters
      • context 로 cluster 조회하기

      $ kubectl cluster-info --context kind-kind
      • cluster 삭제하기

      $ kind delete cluster --name kind

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      seungkyua 님의 최신 블로그

      더보기

      DEVOTEE 추천 블로그

      동영상 기고하기