반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- gitea
- blue/green
- 카오스 엔지니어링
- argo rollout
- Model Serving
- serving
- keda
- nginx ingress
- 오퍼레이터
- kubernetes operator
- Litmus
- Argo
- knative
- Continuous Deployment
- argocd
- opentelemetry
- Kubeflow
- mlops
- Kopf
- CANARY
- gitops
- tekton
- seldon core
- CI/CD
- Kubernetes
- opensearch
- operator
- Kubernetes 인증
- Pulumi
- MLflow
Archives
- Today
- Total
Kubernetes 이야기
로컬 Kubernetes 클러스터 - kind 설치 본문
반응형
Kind
Kind 는 Docker Container를 노드로 사용하여 로컬 Kubernetes 클러스터를 실행하기 위한 도구이다.
주로 Kubernetes 자체를 테스트하기 위해 설계되었지만 로컬 개발 또는 CI에 사용될 수 있다.
kind의 기본 디자인은 아래와 같다.
설치
Kind 설치는 아주 간단한다.
Kind 설치 전에 Docker는 필수적으로 미리 설치가 되어 있어야 한다.
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.11.1/kind-linux-amd64
chmod +x ./kind
mv ./kind /some-dir-in-your-PATH/kind
kind를 다운로드 받았으면 이제 설치 명령을 실행해 보자.
아래와 같은 명령으로 쉽게 cluster를 생성할 수 있다.
kind create cluster --name kind
만약, Ingress Controller 까지 설치하려면 아래와 같은 환경으로 설치해야 한다.
cat <<EOF | kind create cluster --name=kind --config=-
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
EOF
설치가 완료되면 아래의 메시지를 볼 수 있다.
Creating cluster "kind" ...
✓ Ensuring node image (kindest/node:v1.21.1) 🖼
✓ Preparing nodes 📦
✓ Writing configuration 📜
✓ Starting control-plane 🕹️
✓ Installing CNI 🔌
✓ Installing StorageClass 💾
Set kubectl context to "kind-kind"
You can now use your cluster with:
kubectl cluster-info --context kind-kind
Thanks for using kind! 😊
kind는 기본적으로 kubectl 이 설치되지 않는다. kubectl을 공식 다운로드 사이트에서 다운받아야 한다.
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
만약 1.21.1 버전의 k8s를 사용중이면 아래와 같이 다운로드 받는다.
curl -LO https://dl.k8s.io/release/v1.21.1/bin/linux/amd64/kubectl
기본 설치 시 ingress controller 가 없기 때문에 nginx ingress controller를 설치해 보자.
# kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml
이제 설치된 Pod 정보를 확인해 보자.
# kubectl get all -A
NAMESPACE NAME READY STATUS RESTARTS AGE
ingress-nginx pod/ingress-nginx-admission-create-cnfcc 0/1 Completed 0 62s
ingress-nginx pod/ingress-nginx-admission-patch-krtvb 0/1 Completed 0 62s
ingress-nginx pod/ingress-nginx-controller-59cbb6ccb6-vlrzq 1/1 Running 0 62s
kube-system pod/coredns-558bd4d5db-fqs9p 1/1 Running 0 108s
kube-system pod/coredns-558bd4d5db-xbsjt 1/1 Running 0 108s
kube-system pod/etcd-kind-control-plane 1/1 Running 0 111s
kube-system pod/kindnet-mw8cm 1/1 Running 0 108s
kube-system pod/kube-apiserver-kind-control-plane 1/1 Running 0 111s
kube-system pod/kube-controller-manager-kind-control-plane 1/1 Running 0 111s
kube-system pod/kube-proxy-ftfts 1/1 Running 0 108s
kube-system pod/kube-scheduler-kind-control-plane 1/1 Running 0 111s
local-path-storage pod/local-path-provisioner-547f784dff-94bff 1/1 Running 0 108s
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2m4s
ingress-nginx service/ingress-nginx-controller NodePort 10.96.21.119 <none> 80:31512/TCP,443:30822/TCP 63s
ingress-nginx service/ingress-nginx-controller-admission ClusterIP 10.96.125.93 <none> 443/TCP 62s
kube-system service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 2m2s
NAMESPACE NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
kube-system daemonset.apps/kindnet 1 1 1 1 1 <none> 2m1s
kube-system daemonset.apps/kube-proxy 1 1 1 1 1 kubernetes.io/os=linux 2m2s
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
ingress-nginx deployment.apps/ingress-nginx-controller 1/1 1 1 62s
kube-system deployment.apps/coredns 2/2 2 2 2m2s
local-path-storage deployment.apps/local-path-provisioner 1/1 1 1 2m1s
NAMESPACE NAME DESIRED CURRENT READY AGE
ingress-nginx replicaset.apps/ingress-nginx-controller-59cbb6ccb6 1 1 1 62s
kube-system replicaset.apps/coredns-558bd4d5db 2 2 2 108s
local-path-storage replicaset.apps/local-path-provisioner-547f784dff 1 1 1 108s
NAMESPACE NAME COMPLETIONS DURATION AGE
ingress-nginx job.batch/ingress-nginx-admission-create 1/1 4s 62s
ingress-nginx job.batch/ingress-nginx-admission-patch 1/1 4s 62s
삭제
kind 클러스터 삭제는 delete명령어를 사용하여 특정 클러스터를 제거할 수 있다.
# kind delete cluster --name kind
테스트
설치가 완료되었으니, 샘플 앱을 올려서 확인해 보자.
kind: Pod
apiVersion: v1
metadata:
name: foo-app
labels:
app: foo
spec:
containers:
- name: foo-app
image: hashicorp/http-echo:0.2.3
args:
- "-text=foo"
---
kind: Service
apiVersion: v1
metadata:
name: foo-service
spec:
selector:
app: foo
ports:
# Default port used by the image
- port: 5678
---
kind: Pod
apiVersion: v1
metadata:
name: bar-app
labels:
app: bar
spec:
containers:
- name: bar-app
image: hashicorp/http-echo:0.2.3
args:
- "-text=bar"
---
kind: Service
apiVersion: v1
metadata:
name: bar-service
spec:
selector:
app: bar
ports:
# Default port used by the image
- port: 5678
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: "example.10.60.100.40.nip.io"
http:
paths:
- pathType: Prefix
path: "/foo"
backend:
service:
name: foo-service
port:
number: 5678
- pathType: Prefix
path: "/bar"
backend:
service:
name: bar-service
port:
number: 5678
---
브라우저에서 호출하면 아래와 같이 호출됨을 확인할 수 있다.
kind는 개발서버나 개인 PC 환경에 빠르게 설치하여 테스트 할 수 있는 좋은 도구이다.
반응형
'Kubernetes > 일반' 카테고리의 다른 글
kubernetes yaml 을 helm chart로 변환하기 (0) | 2022.03.15 |
---|---|
Nginx Ingress Path 기반 라우팅 설정 (0) | 2022.03.15 |
Nginx Ingress 트래픽 모니터링 결과로 Auto Scale 사용하기 (0) | 2022.02.28 |
kubernetes coredns 에 hosts 등록하기 (0) | 2022.02.22 |
Chaos Mesh 를 사용한 카오스 엔지니어링 (0) | 2022.02.21 |
Comments