[DevOps] Kubernetes

Ryong·2024년 5월 4일

DevOps

목록 보기
4/4
post-thumbnail

Kubernetes 설치

$ curl-LOhttps://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
$ sudo install minikube-linux-amd64 /usr/local/bin/minikube

Kubernetes 시작

$ minikube start
😄  minikube v1.32.0 on Ubuntu 22.04 (amd64)
✨  Automatically selected the docker driver. Other choices: none, ssh
📌  Using Docker driver with root privileges
👍  Starting control plane node minikube in cluster minikube
🚜  Pulling base image ...
💾  Downloading Kubernetes v1.28.3 preload ...
    > preloaded-images-k8s-v18-v1...:  403.35 MiB / 403.35 MiB  100.00% 10.16 M
    > gcr.io/k8s-minikube/kicbase...:  453.90 MiB / 453.90 MiB  100.00% 10.19 M
🔥  Creating docker container (CPUs=2, Memory=3900MB) ...
🐳  Preparing Kubernetes v1.28.3 on Docker 24.0.7 ...
    ▪ Generating certificates and keys ...
    ▪ Booting up control plane ...
    ▪ Configuring RBAC rules ...
🔗  Configuring bridge CNI (Container Networking Interface) ...
    ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🔎  Verifying Kubernetes components...
🌟  Enabled addons: default-storageclass, storage-provisioner
💡  kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'
🏄  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

$ minikube kubectl -- get po -A
$ alias kubectl="minikube kubectl --"
$ kubectl get po -A
NAMESPACE     NAME                               READY   STATUS    RESTARTS      AGE
kube-system   coredns-5dd5756b68-4hspx           1/1     Running   0             12m
kube-system   etcd-minikube                      1/1     Running   0             12m
kube-system   kube-apiserver-minikube            1/1     Running   0             12m
kube-system   kube-controller-manager-minikube   1/1     Running   0             12m
kube-system   kube-proxy-stl6t                   1/1     Running   0             12m
kube-system   kube-scheduler-minikube            1/1     Running   0             12m
kube-system   storage-provisioner                1/1     Running   1 (12m ago)   12m

Kubernetes dashboard

$ minikube dashboard
🔌  Enabling dashboard ...
    ▪ 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


🤔  Verifying dashboard health ...
🚀  Launching proxy ...
🤔  Verifying proxy health ...
🎉  Opening http://127.0.0.1:39979/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...
👉  http://127.0.0.1:39979/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/

Deploy applications

$ kubectl create deployment hello-minikube --image=kicbase/echo-server:1.0
deployment.apps/hello-minikube created
$ kubectl expose deployment hello-minikube --type=NodePort --port=8080
service/hello-minikube exposed

$ minikube service hello-minikube
|-----------|----------------|-------------|---------------------------|
| NAMESPACE |      NAME      | TARGET PORT |            URL            |
|-----------|----------------|-------------|---------------------------|
| default   | hello-minikube |        8080 | http://192.168.49.2:31142 |
|-----------|----------------|-------------|---------------------------|
🏃  Starting tunnel for service hello-minikube.
|-----------|----------------|-------------|------------------------|
| NAMESPACE |      NAME      | TARGET PORT |          URL           |
|-----------|----------------|-------------|------------------------|
| default   | hello-minikube |             | http://127.0.0.1:34635 |
|-----------|----------------|-------------|------------------------|
🎉  Opening service default/hello-minikube in default browser...
👉  http://127.0.0.1:34635
❗  Because you are using a Docker driver on linux, the terminal needs to be open to run it.

$ kubectl port-forward service/hello-minikube 7080:8080
Forwarding from 127.0.0.1:7080 -> 8080
Forwarding from [::1]:7080 -> 8080

cluster에서 서비스는 네트워크서비스라 생각

 $ 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 | enabled ✅   | 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                     |
|-----------------------------|----------|--------------|--------------------------------|

대쉬보드

$ minikube service mymymy

|-----------|---------|------------------------|---------------------------|
| NAMESPACE |  NAME   |      TARGET PORT       |            URL            |
|-----------|---------|------------------------|---------------------------|
| default   | mymymy  | tcp-7777-80-6675g/7777 | http://192.168.49.2:30695 |
|-----------|---------|------------------------|---------------------------|
🏃  Starting tunnel for service mymymy1.
|-----------|---------|-------------|------------------------|
| NAMESPACE |  NAME   | TARGET PORT |          URL           |
|-----------|---------|-------------|------------------------|
| default   | mymymy  |             | http://127.0.0.1:35127 |
|-----------|---------|-------------|------------------------|
🎉  Opening service default/mymymy in default browser...
👉  http://127.0.0.1:35127
❗  Because you are using a Docker driver on linux, the terminal needs to be open to run it.



Kubernetes(쿠버네티스), 종종 'K8s'로 줄여서 부르는 이 시스템은 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 오픈 소스 플랫폼. Kubernetes는 Google의 내부 시스템인 Borg에 영감을 받아 만들어졌으며, 현재는 Cloud Native Computing Foundation(CNCF)에서 관리하고 있다.

Kubernetes의 주요 개념 및 구성요소

  1. 클러스터(Cluster):

    • Kubernetes 시스템은 노드라고 하는 여러 머신(물리적 컴퓨터 또는 가상 머신)의 집합으로 구성된 클러스터로 운영된다. 클러스터는 애플리케이션을 실행하는데 필요한 컴퓨팅, 네트워킹, 스토리지 리소스를 제공한다.
  2. 노드(Node):

    • 클러스터의 기본 작업 단위. 각 노드는 클러스터의 일부로 여러 개의 파드를 호스팅할 수 있다. 노드는 마스터 노드(제어 플레인을 담당)와 워커 노드(애플리케이션 컨테이너를 실행)로 분류될 수 있다.
  3. 파드(Pod):

    • 파드는 하나 이상의 컨테이너로 구성된 Kubernetes의 기본 실행 단위. 파드는 스토리지 리소스, IP 주소, 컨테이너가 동작하는 방식에 대한 정보를 공유한다.
  4. 컨트롤러(Controller):

    • 컨트롤러는 클러스터의 상태를 관찰하고 필요한 경우 조정하는 역할을 한다. 예를 들어, ReplicaSet 컨트롤러는 설정된 수의 파드 복제본이 항상 실행되도록 보장한다.
  5. 서비스(Service):

    • 서비스는 특정 파드 집합에 대한 일관된 접근 방식을 제공하는 추상적인 개념이다. 서비스를 통해, 소비자는 파드의 변경 없이도 파드 그룹에 지속적으로 트래픽을 전송할 수 있다.
  6. 네임스페이스(Namespace):

    • 네임스페이스는 리소스를 분리하여 사용하는 방법을 제공합니다. 다수의 사용자가 다양한 프로젝트, 팀 또는 고객을 위해 하나의 클러스터를 공유할 때 유용합니다.
  7. 매니페스트(Manifest):

    • Kubernetes 리소스와 객체는 YAML 또는 JSON 형식의 매니페스트 파일로 정의된다. 이 파일들은 Kubernetes API를 통해 시스템에 제출한다.

Kubernetes의 작동 원리

Kubernetes 클러스터의 관리 및 조정은 컨트롤 플레인에서 수행된다. 컨트롤 플레인은 다음과 같은 주요 컴포넌트로 구성된다

  1. API 서버(kube-apiserver):

    • 클러스터의 게이트웨이 역할을 하며, 모든 내부 통신은 API 서버를 통해 수행된다.
  2. 스케줄러(kube-scheduler):

    • 새로 생성된 파드를 사용 가능한 노드에 할당한다.
  3. 컨트롤러 매니저(kube-controller-manager):

    • 다양한 컨트롤러를 실행한다. 이 컨트롤러들은 복제 컨트롤러, 엔드포인트 컨트롤러, 네임스페이스 컨트롤러 등을 포함한다.
  4. 클러스터 저장소(etcd):

    • 모든 클러스터 데이터를 저장하는 일관된 및 고가용성의 키-값 저장소.

워커 노드는 다음과 같은 컴포넌트로 구성된다.

  1. kubelet:

    • 각 노드에서 실행되며 파드의 실행을 관리한다.
  2. kube-proxy:

    • 네트워크 프록시와 로드 밸런서 역할을 하며, 컨테이너의 네트워크 환경을 관리한다.
  3. 컨테이너 런타임:

    • 컨테이너 실행을 담당한다. Docker, containerd 등이 이에 해당한다.

Kubernetes의 장점

  1. 휴먼 리소스 절약: 자동화된 스케줄링, 자가 치유, 스케일링 기능은 인적 개입을 최소화한다.
  2. 환경 일관성: 개발, 테스트, 프로덕션 환경 간의 일관성을 제공한다.
  3. 확장성과 가용성: 애플리케이션의 요구 사항에 따라 리소스를 자동으로 확장하거나 축소할 수 있다.
  4. 운영 효율성: 배포, 업데이트 및 유지 관리의 복잡성을 줄인다.
profile
새로운 시작. 그리고 도약

0개의 댓글