使用 minikube 輕鬆上手 kubernetes
安裝minikube
macOS只需要透過brew即可快速安裝...
brew cask install minikube
|
Linux環境可以直接下載執行檔,放到環境變數可以吃到的路徑即可...
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && \
chmod +x minikube && \
sudo mv minikube /usr/local/bin/ |
Windows的下載網址如下:
如果您的kubectl尚未安裝,可以直接使用google cloud sdk來安裝:
curl https://sdk.cloud.google.com | bash
gcloud components install kubectl |
安裝完成後,原則上minikube會在本地端加入minikube的k8s context,我們可以透過下面指令來使用該context…
kubectl config use-context minikube
|
然後,可檢查一下您的minikube node是否正常運作....
$ kubectl get node -o wide
NAME STATUS AGE VERSION EXTERNAL-IP OS-IMAGE KERNEL-VERSION minikube Ready 2d v1.7.5 |
基本使用
由於這邊主要介紹minikube,先暫時不介紹kubernetes的概念與操作... 有需要可以先切換到kubernetes的基本篇來看看^^
在minikube中,有提供一些不錯的工具,可以供您操作minikube的環境... 我們可以用minikube help來檢視可以使用的指令...
$ minikube help
Minikube is a CLI tool that provisions and manages single-node Kubernetes clusters optimized for development workflows. Usage: minikube [command] Available Commands: addons Modify minikube's kubernetes addons completion Outputs minikube shell completion for the given shell (bash) config Modify minikube config dashboard Opens/displays the kubernetes dashboard URL for your local cluster delete Deletes a local kubernetes cluster docker-env Sets up docker env variables; similar to '$(docker-machine env)' get-k8s-versions Gets the list of available kubernetes versions available for minikube ip Retrieves the IP address of the running cluster logs Gets the logs of the running localkube instance, used for debugging minikube, not user code mount Mounts the specified directory into minikube profile Profile sets the current minikube profile service Gets the kubernetes URL(s) for the specified service in your local cluster ssh Log into or run a command on a machine with SSH; similar to 'docker-machine ssh' ssh-key Retrieve the ssh identity key path of the specified cluster start Starts a local kubernetes cluster status Gets the status of a local kubernetes cluster stop Stops a running local kubernetes cluster update-context Verify the IP address of the running cluster in kubeconfig. version Print the version of minikube Flags: --alsologtostderr log to standard error as well as files -b, --bootstrapper string The name of the cluster bootstrapper that will set up the kubernetes cluster. (default "localkube") --log_backtrace_at traceLocation when logging hits line file:N, emit a stack trace (default :0) --log_dir string If non-empty, write log files in this directory --loglevel int Log level (0 = DEBUG, 5 = FATAL) (default 1) --logtostderr log to standard error instead of files -p, --profile string The name of the minikube VM being used. This can be modified to allow for multiple minikube instances to be run independently (default "minikube") --stderrthreshold severity logs at or above this threshold go to stderr (default 2) -v, --v Level log level for V logs --vmodule moduleSpec comma-separated list of pattern=N settings for file-filtered logging Use "minikube [command] --help" for more information about a command. |
啟動與關閉minikube
畢竟minikube會實際使用主機的資源,如果在不需要操作時候,可以透過stop將minikube關閉,當然,也可以start他...
$ minikube stop
Stopping local Kubernetes cluster...
Machine stopped.
$ minikube start
Starting local Kubernetes v1.7.5 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
|
確認minikube狀態
minikube啟動後,我們可以透過status來確認目前minikube的執行狀態,他也會同時顯示minikube所在的ip位置...
$ minikube status
minikube: Running cluster: Running kubectl: Correctly Configured: pointing to minikube-vm at 192.168.99.100 |
檢視minikube實際ip位置
minikube另外提供一個更簡單的指令來顯示ip位置,未來可以透過這個指令來結合一些自動化程式...
$ minikube ip
192.168.99.100 |
切入minikube所在的linux環境
由於minikube也是啟動在linux的環境上,所以minikube也提供了讓您連入minikube底層linux的指令...
$ minikube ssh
_ _ _ _ ( ) ( ) ___ ___ (_) ___ (_)| |/') _ _ | |_ __ /' _ ` _ `\| |/' _ `\| || , < ( ) ( )| '_`\ /'__`\ | ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )( ___/ (_) (_) (_)(_)(_) (_)(_)(_) (_)`\___/'(_,__/'`\____) |
連線minikube部署的服務
下面是我們透過簡單的k8s操作來建立起的服務,然後可以展示如何連線到minikube上的應用...
$ kubectl run nginx --image=nginx --port=80
deployment "nginx" created
$ kubectl get all
NAME READY STATUS RESTARTS AGE
po/nginx-1423793266-svb16 0/1 ContainerCreating 0 1m
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc/kubernetes 10.0.0.1
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deploy/nginx 1 1 1 0 1m
NAME DESIRED CURRENT READY AGE
rs/nginx-1423793266 1 1 0 1m
$ kubectl expose deploy/nginx --type=NodePort
service "nginx" exposed
$ kubectl get all
NAME READY STATUS RESTARTS AGE
po/nginx-1423793266-svb16 1/1 Running 0 2m
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc/kubernetes 10.0.0.1
svc/nginx 10.0.0.227
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deploy/nginx 1 1 1 1 2m
NAME DESIRED CURRENT READY AGE
rs/nginx-1423793266 1 1 1 2m
$ minikube service nginx --url
http://192.168.99.100:31659
|
上面的步驟中,主要是先建立nginx的deployment,然後透過export service來將nginx deployment的端口呈現在minikube的node上... 最後,我們可以透過minikube來show出該service最後binding在哪個位置...
如果您嚐試建立mysql的服務... 您會發現最後minikube service還是會用http來顯示連線資訊... 這部分是因為service連接layer 4的網路,在協定上有太多可能性.. minikube無法逐一判斷,因此用一個大家最熟悉也最可能的方式呈現,最主要的資訊其實是port,minikube已經很人性化了^^... 另外,如果沒有加上”--url”的參數,則minikube會直接使用browser開啟網頁,就可以直接瀏覽了ㄛ^^
開啟minikube的擴充套件
minikube提供addons來擴充minikube,我們可以使用minikube addons list來查看哪些addons可以使用... 然後把他enable或是disable...
開啟ingress服務
上面所介紹的簡單操作,最後minikube service nginx是以k8s service的部分顯示nginx可以連線的位置,由於minikube為單機服務,因此也沒有很需要使用真正的service(真正的service將會有特定的主機擔任traffic forwarding的任務,在開通的過程中,會需要通知該主機把port對應上所要導向的pod… 而在雲服務,service則會與layer 4 load balancer結合...)。而ingress因為為layer 7層的網路服務,其中包含load balancer的特殊功能,因此minikube特地把ingress放在addons list中,讓使用者可以快速的啟用他... 下面是檢視目前addons與啟用ingress的方式...
# minikube addons list
- addon-manager: enabled
- kube-dns: enabled
- heapster: enabled
- registry-creds: disabled
- dashboard: enabled
- default-storageclass: enabled
- ingress: enabled
- registry: disabled
# minikube addon enable ingress |
啟用後,我們可以再次檢視是否已經完成啟用... 等待一切就緒,我們就可以建立一個ingress來試試...
首先,我們需要建立ingress的yaml檔案,以上面的nginx服務為例,我們以nginx service來建立80 port的服務對應... 把下面的檔案存成ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress metadata: name: nginx spec: backend: serviceName: nginx servicePort: 80 |
儲存完成後,我們可以透過下面指令將ingress建立起來...
$ kubectl create -f ingress.yaml
ingress "nginx" created |
接下來,我們需要等待一點時間,讓ingress取到可以用的ip位置...
$ kubectl get ingress
NAME HOSTS ADDRESS PORTS AGE nginx * 192.168.99.100 80 4m |
然後我們就可以直接連線 http://192.168.99.100 來測試了,沒問題的話,應該可以直接顯示nginx的歡迎畫面...
由於ingress有不少東西可以玩,這邊不贅述ingress的功能,留給大家試試ingress強大的功能^^
開啟heapster服務
heapster是kubernetes中負責蒐集k8s內container運作的相關資訊的服務,他通常會結合Grafana來做BI的查詢... 同ingress的啟用方式,我們也可以快速的將heapster addon啟動...
$ minikube addon enable heapster
|
接下來可以開啟heapster的UI… 這邊會直接開啟Grafana作為客製化報表查詢的地方...
$ minikube addon open heapster
|
如果想要知道heapster的連線資訊,也可以直接用minikube service來show出url位置,但因為heapster是屬於kube-system這個namespace,所以這邊就需要多指定namespace為kube-system…
$ minikube service monitoring-grafana -n kube-system --url
http://192.168.99.100:31644 |
參考
- minikube github:https://github.com/kubernetes/minikube