kubernetes를 공부하려고 하는데 katacoda에 직접 쳐볼 수 있고 시나리오대로 잘 나와있어서
하나씩 해석 하고 적어가는 것이 제일 내 것으로 만들기 좋기에 정리해서 적는다.
Minikube는 local에서 쉽게 Kubernetes를 운영할 수 있게 해주는 도구입니다.
Minikube는 노트북의 VM에서 Kubernetes 클러스터의 싱글 노드 실행하므로 Kubernetes를 사용해 보거나 매일 테스트해보려는 것에 적합하다.
미니쿠에 대한 자세한 정보는
https://github.com/kubernetes/minikube
Step 1 - Start Minikube
Minikube를 설치 및 구성했다고 가정하고 진행한다.
minikube version을 실행하여 올바르게 설치되었는지 확인한다.
$ minikube version
minikube version: v1.8.1
commit: cbda04cf6bbe65e987ae52bb393c10099ab62014
minikube start --wait=false 명령어를 사용해서 클러스터를 시작한다.
$ minikube start --wait=false
* minikube v1.8.1 on Ubuntu 18.04
* Using the none driver based on user configuration
* Running on localhost (CPUs=2, Memory=2460MB, Disk=145651MB) ...
* OS release is Ubuntu 18.04.4 LTS
* Preparing Kubernetes v1.17.3 on Docker 19.03.6 ...
- kubelet.resolv-conf=/run/systemd/resolve/resolv.conf
* Launching Kubernetes ...
* Enabling addons: default-storageclass, storage-provisioner
* Configuring local host environment ...
* Done! kubectl is now configured to use "minikube"
위면 [Launching Kubernetes] 라고 해서 terminal에서 실행 중인 Kubernetes 클러스터가 있다.
Minikube가 VM을 시작했고, 해당 VM에서 Kubernetes 클러스터가 실행되고 있다.
Step 2 - Cluster Info
클러스터는 kubectl를 사용하여 상호 작용할 수 있다.
(매우 중요) kubectl은 클러스터 위에서 실행되는 Kubernetes 및 애플리케이션을 관리하는 데
사용되는 주요 접근 방식이다.
cluster 및 상태에 대한 세부 정보는 kubectl cluster-info를 통해 검색할 수 있다.
$ kubectl cluster-info
Kubernetes master is running at https://172.17.0.37:8443
KubeDNS is running at https://172.17.0.37:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
cluster를 사용하는 node를 보는 명령어는 다음과 같다.
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready master 3m31s v1.17.3
노드가 NotReady 로 표시되어도 여전히 components를 시작하고 있다.
이 명령은 애플리케이션을 호스팅 하는 데 사용할 수 있는 모든 노드를 표시한다.
이제 노드가 하나뿐이고 노드 상태가 ready 상태(애플리케이션을 배포할 수 있음)를 확인할 수 있다.
Step 3 - Deploy Containers
실행 중인 Kubernetes 클러스터를 통해 컨테이너를 배포할 수 있다.
kubectl run 을 통해서 컨테이너를 클러스터에 배포할 수 있다.
$ kubectl create deployment first-deployment --image=katacoda/docker-http-server
deployment.apps/first-deployment created
※ 알아두면 좋은 오브젝트 생성 방법
- run: 컨테이너를 실행할 새로운 파드를 생성한다.
- expose: 파드에 걸쳐 트래픽을 로드 밸런스하도록 새로운 서비스 오브젝트를 생성한다.
- autoscale: 디플로이먼트와 같이, 하나의 컨트롤러에 대해 자동으로 수평적 스케일이 이루어 지도록 새로운 Autoscaler 오브젝트를 생성한다.
kubectl 툴은 오브젝트 타입에 의해 구동되는 생성 커맨드를 지원한다
- create <오브젝트 타입> [<서브 타입>] <인스턴스명>
다음은 NodePort 서브 타입을 통해 서비스를 생성하는 예제이다.
kubectl create service nodeport <사용자 서비스 명칭>
실행 중인 pod 상태를 명령어를 통해 알 수 있다.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
first-deployment-666c48b44-s5x5t 1/1 Running 0 30s
일단 실행 중인 컨테이너는 요구 사항에 따라 다양한 네트워킹 옵션을 고를 수 있다.
- ClusterIP: 서비스를 클러스터-내부 IP에 노출시킨다. 이 값을 선택하면 클러스터 내에서만 서비스에 도달할 수 있다. 이것은 ServiceTypes의 기본 값이다.
- NodePort: 고정 포트 (NodePort)로 각 노드의 IP에 서비스를 노출시킨다. NodePort 서비스가 라우팅되는 ClusterIP 서비스가 자동으로 생성된다. <NodeIP>:<NodePort>를 요청하여, 클러스터 외부에서 NodePort 서비스에 접속할 수 있다.
- LoadBalancer: 클라우드 공급자의 로드 밸런서를 사용하여 서비스를 외부에 노출시킨다. 외부 로드 밸런서가 라우팅 되는NodePort와 ClusterIP 서비스가 자동으로 생성된다.
- ExternalName: 값과 함께 CNAME 레코드를 리턴하여, 서비스를 externalName 필드의 콘텐츠 (예:foo.bar.example.com)에 매핑한다. 어떤 종류의 프록시도 설정되어 있지 않다.
한 가지 가능한 솔루션은 컨테이너에 동적 포트를 제공하는 NodePort이다.
$ kubectl expose deployment first-deployment --port=80 --type=NodePort
service/first-deployment exposed
아래 명령은 할당된 포트를 찾아 HTTP 요청을 실행합니다.
$ export PORT=$(kubectl get svc first-deployment -o go-template='{{range.spec.ports}}{{if .nodePort}}{{.nodePort}}{{"\n"}}{{end}}{{end}}')
$ echo "Accessing host01:$PORT"
Accessing host01:30617
$ curl host01:$PORT
<h1>This request was processed by host: first-deployment-666c48b44-s5x5t</h1>
그 결과 요청을 처리한 컨테이너가 생성됩니다.
Step 4 - Dashboard
Minikub를 사용해서 dashboard를 활성화할 수 있다.
$ minikube addons enable dashboard
* The 'dashboard' addon is enabled
다음 YAML 정의를 배포하여 Kubernetes Dashboard를 사용할 수 있도록 합니다
$ kubectl apply -f /opt/kubernetes-dashboard.yaml
namespace/kubernetes-dashboard configured
service/kubernetes-dashboard-katacoda created
kubernetes-dashboard.yaml
apiVersion: v1
kind: Namespace
metadata:
labels:
addonmanager.kubernetes.io/mode: Reconcile
kubernetes.io/minikube-addons: dashboard
name: kubernetes-dashboard
selfLink: /api/v1/namespaces/kubernetes-dashboard
spec:
finalizers:
- kubernetes
status:
phase: Active
---
apiVersion: v1
kind: Service
metadata:
labels:
app: kubernetes-dashboard
name: kubernetes-dashboard-katacoda
namespace: kubernetes-dashboard
spec:
ports:
- port: 80
protocol: TCP
targetPort: 9090
nodePort: 30000
selector:
k8s-app: kubernetes-dashboard
type: NodePort
Kubernetes 대시보드를 통해 애플리케이션 UI를 볼 수 있습니다. 이 deployment에서 대시보드는 port 30000에서 사용할 수 있도록 설정되었지만 시작하는 데 시간이 다소 걸릴 수 있습니다.
Dashboard 시작 진행 상황을 보려면 다음을 명령어를 사용하면 된다.
$ kubectl get pods -n kubernetes-dashboard -w
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-7b64584c5c-rbbpr 1/1 Running 0 19m
kubernetes-dashboard-79d9cd965-bqt8p 1/1 Running 0 19m
처음보면 명령어도 많고 이게 무슨말인가 싶은데 지금 나도 같은 마음이다.
전체적인 흐름이 어떻게 되는것인가 파악하고 하나씩 쳐보면서 이게 이거구나 느끼는게 제일 빠른것 같다.
출처 : https://kubernetes.io/ko/docs/concepts/services-networking/service/
'개발' 카테고리의 다른 글
쿠버네티스 뜨게 된 이유와 컴포넌트 정리 (0) | 2021.07.04 |
---|---|
katacoda 따라 하기 - Start containers using Kubectl (0) | 2021.07.03 |
개발자 신입으로 입사 했을때 팀장님에게 받았던 조언 (0) | 2021.06.30 |
Field Injection vs Constructor Injection With Java Spring's @Autowired (0) | 2021.06.29 |
java8 과 stream, reduce 연산 (0) | 2021.06.27 |