티스토리 뷰

Cloud/Cloud Native

application deploy using minikube

jacobbaek Jacob_baek 2017. 9. 4. 15:27

minikube는 all-in-one kubernetes 이다.
kubernetes가 설치된 하나의 VM을 생성하고 해당 VM을 통해 kubernetes를 연결할 수 있도록 도와주는 도구라 생각하면 좋다.

설치방법은 다음과 같다.

Windows

간단히 아래 command를 통해 설치가 가능하다.

choco install minikube

이후 powershell command line으로 연결해서 kubectl 명령을 수행해보면 정상적으로 명령이 실행됨을 확인할 수 있다.

이후 아래와 같은 명령을 통해 minikube VM을 실행한다. windows의 경우 hyperV (windows 내장 hypervisor)혹은 virtualbox를 사용할 수 있다. 기본은 virtualbox임으로 아래와 같이 수행한다.

minikube start

CentOS / RHEL

CentOS 7 기반 설치 방법

현재 시점(2017.6)에는 docker machine kvm driver는 v0.10.0이 테스트 되어 해당 버전으로 설치를 진행

curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube
chmod +x minikube
sudo mv minikube /usr/local/bin/
curl -L https://github.com/dhiltgen/docker-machine-kvm/releases/download/v0.10.0/docker-machine-drvier-kvm-centos7 > /usr/local/bin/docker-machine-driver-kvm
chmod +x /usr/local/bin/docker-machine-driver-kvm
minikube start --vm-driver=kvm

Ubuntu

만약 kubectl 실행시 command not found로 출력된다면 minikube kubectl 명령을 사용하던지 직접 kubectl을 설치하여 사용할 수 있다. (snap install kubectl --classic)

minikube 사용법

minikube는 지정한 hypervisor를 사용하여 VM 형태로 생성이 된다.
참고로 minikube VM의 spec을 변경하고자 한다면 아래 명령을 참고하여 VM spec을 지정해줄수 있다.

# 기본으로 생성되는 VM의 size가 2G임으로 위와 같이 spec을 지정해주는것이 좀더 편리하게 사용할 수 있다.
minikube start --memory=8192 --cpus=4 --disk-size=50g

minikube start 이후 kubectl을 통해 서비스의 상태를 확인한다.

https://darkowlzz.github.io/post/minikube-config/

우선

모두 가동된 후에는 아래와 같이 service를 확인하고 dashboard에 접속할 수 있다.

PS C:\Users\jacob> minikube service list
|----------------------|---------------------------|--------------|-----|
|      NAMESPACE       |           NAME            | TARGET PORT  | URL |
|----------------------|---------------------------|--------------|-----|
| default              | kubernetes                | No node port |
| kube-system          | kube-dns                  | No node port |
| kubernetes-dashboard | dashboard-metrics-scraper | No node port |
| kubernetes-dashboard | kubernetes-dashboard      | No node port |
|----------------------|---------------------------|--------------|-----|`

nginx-deployment 배포 및 확인

jacob@jacob-laptop:~/workspaces/hellonode$ kubectl apply -f https://k8s.io/examples/application/deployment.yaml
deployment.apps/nginx-deployment created
jacob@jacob-laptop:~/workspaces/hellonode$ kubectl describe deployment nginx-deployment
Name:                   nginx-deployment
Namespace:              default
CreationTimestamp:      Sat, 28 Sep 2019 22:11:32 +0900
Labels:                 <none>
Annotations:            deployment.kubernetes.io/revision: 1
                        kubectl.kubernetes.io/last-applied-configuration:
                          {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"name":"nginx-deployment","namespace":"default"},"spec":{"replica...
Selector:               app=nginx
Replicas:               2 desired | 2 updated | 2 total | 1 available | 1 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=nginx
  Containers:
   nginx:
    Image:        nginx:1.7.9
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      False   MinimumReplicasUnavailable
  Progressing    True    ReplicaSetUpdated
OldReplicaSets:  <none>
NewReplicaSet:   nginx-deployment-54f57cf6bf (2/2 replicas created)
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  18s   deployment-controller  Scaled up replica set nginx-deployment-54f57cf6bf to 2
jacob@jacob-laptop:~/workspaces/hellonode$ kubectl expose deployment nginx-deployment --type=LoadBalancer
service/nginx-deployment exposed

혹은 더 간단하게

PS C:\Users\82103> minikube addons enable ingress
* ingress was successfully enabled
PS C:\Users\82103> kubectl.exe get po -n kube-system
NAME                                        READY   STATUS    RESTARTS   AGE
coredns-5644d7b6d9-9xx4s                    1/1     Running   0          9m31s
coredns-5644d7b6d9-q5gw5                    1/1     Running   0          9m31s
etcd-minikube                               1/1     Running   0          8m23s
kube-addon-manager-minikube                 1/1     Running   0          9m41s
kube-apiserver-minikube                     1/1     Running   0          8m35s
kube-controller-manager-minikube            1/1     Running   0          8m41s
kube-proxy-hfblg                            1/1     Running   0          9m31s
kube-scheduler-minikube                     1/1     Running   0          8m34s
nginx-ingress-controller-6fc5bcc8c9-cfh5z   1/1     Running   0          9m28s
storage-provisioner                         1/1     Running   0          9m28s

hello-node deployment 생성 및 확인

local에 이미지를 생성하고 이를 사용할 예정이기에 imagePullPolicy: Never로 설정하여 사용한다.

jacob@jacob-laptop:~/workspaces/hellonode$ kubectl run node-hello --image=node-hello:v1 --port=8080 --image-pull-policy=Never
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/node-hello created


jacob@jacob-laptop:~/workspaces/hellonode$ docker build -t node-hello:v1 .
Sending build context to Docker daemon  3.072kB
Step 1/4 : FROM node:6.9.2
6.9.2: Pulling from library/node
75a822cd7888: Pull complete 
57de64c72267: Pull complete 
4306be1e8943: Pull complete 
871436ab7225: Pull complete 
0110c26a367a: Pull complete 
1f04fe713f1b: Pull complete 
ac7c0b5fb553: Pull complete 
...

jacob@jacob-laptop:~/workspaces/hellonode$ kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
node-hello-7485d74cdc-jv8pz   1/1     Running   0          35s

jacob@jacob-laptop:~/workspaces/hellonode$ kubectl expose deployment node-hello --type=LoadBalancer
service/node-hello exposed
jacob@jacob-laptop:~/workspaces/hellonode$ kubectl get svc
NAME          TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
kubernetes    ClusterIP      10.96.0.1      <none>        443/TCP          37m
nginxtestlb   LoadBalancer   10.106.79.54   <pending>     8080:30007/TCP   112s
jacob@jacob-laptop:~/workspaces/hellonode$ kubectl get deployment
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
node-hello   1/1     1            1           92s

실제 확인은 minikube ip와 port의 조합으로 접속해보면 다음과 같은 화면이 출력되는것을 확인할 수 있다.

hello-py deployment 생성 및 확인

https://www.jacobbaek.com/829 참고

참고

아래 링크를 참고하여 container runtime을 다르게 설정할수도 있다.
[https://v1-13.docs.kubernetes.io/ko/docs/setup/minikube/#cri-o]

아래 링크는 지원되는 hypervisor list이다.
[https://minikube.sigs.k8s.io/docs/reference/drivers/]

'Cloud > Cloud Native' 카테고리의 다른 글

minikube start in WSL2  (0) 2019.12.07
kubernetes troubleshooting  (0) 2019.11.14
Multi configured kubectl  (0) 2019.10.28
python application deploy with minikube  (0) 2019.09.28
Docker in centos  (0) 2019.06.07
application deploy using minikube  (0) 2017.09.04
댓글
댓글쓰기 폼