為了方便闯狱,在開(kāi)發(fā)環(huán)境windows使用minikube來(lái)掌握Kubernetes的使用几缭。
本文講述內(nèi)容涉及:
需要工具
Docker(本文使用DockerToolbox-18.09.3)
(1)Minikube的安裝
(2)把SpringBoot應(yīng)用程序打包Docker鏡像
(3)在K8s中使用打包后的鏡像運(yùn)行container,發(fā)布service和pod
(4)在一個(gè)K8s的Node運(yùn)行多個(gè)pod形成LoadBalance集群
如果參照此文來(lái)嘗試和研究蝶溶,請(qǐng)看完全文再動(dòng)手。
1.安裝Minikube,Install Minikube
查看systeminfo
開(kāi)啟虛擬機(jī)
Hyper-V?(windows自帶,啟用后重啟系統(tǒng))
下載kubectl.exe,并設(shè)置PATH惧眠,如C:\k8s
下載minikube-windows,修改名稱為minikube.exe于个,設(shè)置PATH氛魁,如C:\k8s
注意:實(shí)際情況,禁用Hyper-V厅篓,安裝VirtualBox使用秀存。
2. 啟動(dòng) minikube start
使用minikube status命令查看到如下信息,說(shuō)明正常羽氮。
c:\workspaces\appdemo>minikube status
host: Running
kubelet: Running
apiserver: Running
kubectl: Correctly Configured: pointing to minikube-vm at 192.168.99.100
3. 注意:使用minikube自帶的Docker Host或链,安裝Docker的時(shí)候就不用安裝再次安裝虛擬機(jī)和VM了。
C:\Users\yangliu>minikube docker-env
SET DOCKER_TLS_VERIFY=1
SET DOCKER_HOST=tcp://192.168.99.100:2376
SET DOCKER_CERT_PATH=C:\Users\yangliu\.minikube\certs
REM Run this command to configure your shell:
REM @FOR /f "tokens=*" %i IN ('minikube docker-env') DO @%i
在windows命令行直接執(zhí)行@FOR /f "tokens=*" %i IN ('minikube docker-env') DO @%i档押,使得在當(dāng)前的cmd命令行操作環(huán)境具備前面三個(gè)docker的變量值澳盐。接下來(lái)使用docker命令就直接連接minkube里面的Docker Host。
執(zhí)行命令查看環(huán)境變量是否生效
c:\workspaces\appdemo>echo %DOCKER_CERT_PATH%
C:\Users\yangliu\.minikube\certs
使用kubectl查看Node令宿,Pod的情況叼耙。
C:\Users\yangliu>kubectl get nodes
NAME???????STATUS???ROLES????AGE???VERSION
minikube???Ready????master???62m???v1.15.2
C:\Users\yangliu>kubectl get pods
No resources found.
4.進(jìn)入minikube內(nèi)嵌的docker命令行模式(可忽略)
寫(xiě)在這里是對(duì)比內(nèi)外部docker命令。
minikube ssh or?
>minikube ssh
$docker ps
$docker image ls
5.單獨(dú)安裝docker后打包image
前面外部Docker已經(jīng)設(shè)置好變量了粒没。
在基于SpringCloud或者SpringBoot里面寫(xiě)一個(gè)簡(jiǎn)單的Dockfile筛婉,內(nèi)容大致如下:
FROM openjdk:8
VOLUME /tmp
COPY build/libs/*.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
執(zhí)行命令打包鏡像: docker build -t sayhello:v1.0 .
成功后,通過(guò)docker images查看:
c:\workspaces\appdemo>docker images
REPOSITORY? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TAG? ? ? ? ? ? ? ? IMAGE ID? ? ? ? ? ? CREATED? ? ? ? ? ? SIZE
appdemo? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? v1.0? ? ? ? ? ? ? ? e599764f88b1? ? ? ? 2 hours ago? ? ? ? 504MB
sayhello? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? v1.0? ? ? ? ? ? ? ? 575780b2efc8? ? ? ? 7 hours ago? ? ? ? 520MB
openjdk? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 8? ? ? ? ? ? ? ? ? 08ded5f856cc? ? ? ? 7 days ago? ? ? ? ? 488MB
k8s.gcr.io/kube-controller-manager? ? ? ? v1.15.2? ? ? ? ? ? 9f5df470155d? ? ? ? 2 weeks ago? ? ? ? 159MB
k8s.gcr.io/kube-scheduler? ? ? ? ? ? ? ? v1.15.2? ? ? ? ? ? 88fa9cb27bd2? ? ? ? 2 weeks ago? ? ? ? 81.1MB
k8s.gcr.io/kube-apiserver? ? ? ? ? ? ? ? v1.15.2? ? ? ? ? ? 34a53be6c9a7? ? ? ? 2 weeks ago? ? ? ? 207MB
k8s.gcr.io/kube-proxy? ? ? ? ? ? ? ? ? ? v1.15.2? ? ? ? ? ? 167bbf6c9338? ? ? ? 2 weeks ago? ? ? ? 82.4MB
k8s.gcr.io/kube-addon-manager? ? ? ? ? ? v9.0? ? ? ? ? ? ? ? 119701e77cbc? ? ? ? 7 months ago? ? ? ? 83.1MB
k8s.gcr.io/coredns? ? ? ? ? ? ? ? ? ? ? ? 1.3.1? ? ? ? ? ? ? eb516548c180? ? ? ? 7 months ago? ? ? ? 40.3MB
k8s.gcr.io/kubernetes-dashboard-amd64? ? v1.10.1? ? ? ? ? ? f9aed6605b81? ? ? ? 8 months ago? ? ? ? 122MB
k8s.gcr.io/etcd? ? ? ? ? ? ? ? ? ? ? ? ? 3.3.10? ? ? ? ? ? ? 2c4adeb21b4f? ? ? ? 8 months ago? ? ? ? 258MB
k8s.gcr.io/k8s-dns-sidecar-amd64? ? ? ? ? 1.14.13? ? ? ? ? ? 4b2e93f0133d? ? ? ? 11 months ago? ? ? 42.9MB
以上信息說(shuō)明打包并發(fā)布到本地Minikube里面的Docker Host成功革娄。
6.使用前面創(chuàng)建的鏡像倾贰,創(chuàng)建和運(yùn)行Container;并創(chuàng)建Deployment部署來(lái)管理這個(gè)Container
c:\workspaces\spring-cloud-demo\say-hello>kubectl run sayhelloapp --image=sayhello:v1.0??--port=8090
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/sayhelloapp created
7.真正發(fā)布或者說(shuō)暴露部署資源resource?
把一個(gè)資源作為一個(gè)新的Kubernetes服務(wù)暴露出去(外部可以通過(guò)url地址或者接口訪問(wèn)此服務(wù)了)拦惋。
可能的資源包含:
容器組pod (po), 服務(wù)service (svc), replicationcontroller (rc), 部署deployment (deploy), 副本集replicaset (rs)
執(zhí)行命令:kubectl expose deployment sayhelloapp --type="LoadBalancer"
service/sayhelloapp? exposed
kubectl get services 查看已經(jīng)發(fā)布的service
c:\workspaces\spring-cloud-demo\say-hello>kubectl get services
NAME??????????TYPE???????????CLUSTER-IP???????EXTERNAL-IP???PORT(S)??????????AGE
kubernetes????ClusterIP??????10.96.0.1????????<none>????????443/TCP??????????25h
sayhelloapp???LoadBalancer???10.106.198.166???<pending>?????8090:31580/TCP???36s
查看sayhelloapp運(yùn)行的地址
minikube service sayhelloapp --url
8.運(yùn)行多個(gè)容器組Pod匆浙,形成副本數(shù)3個(gè)的集群
kubectl scale deployment sayhelloapp --replicas=3
在minikube dashboard中查看
9 集群是否生效
本文發(fā)布的是web服務(wù),通過(guò)在瀏覽器訪問(wèn)url厕妖,就能直觀知道服務(wù)是否工作正常首尼。
到此,已經(jīng)完成本文開(kāi)頭(1)-(4)所描述的內(nèi)容言秸。
10. 刪除副本集
docker stop 0631598db76b
kubectl delete rs sayhelloapp-54864b84c9
以上普通的刪除方式软能,k8s會(huì)自動(dòng)重新生成repicaSet,pod and container
kubectl delete?deployment.apps/sayhelloapp?service/sayhelloapp
同時(shí)刪除部署和服務(wù)举畸,能夠把集群徹底刪除查排。
執(zhí)行刪除命令后可以在minikube dashboard中查看或者通過(guò)執(zhí)行命令kubuctl get all查看。
11.再次打包另一個(gè)應(yīng)用程序鏡像驗(yàn)證發(fā)布流程
使用應(yīng)用程序appdemo抄沮,重新docker build一個(gè)鏡像
Dockfile內(nèi)容:
FROM openjdk:8
VOLUME /tmp
COPY target/*.jar appdemo.jar
ENTRYPOINT ["java","-jar","/appdemo.jar"]
docker build -t appdemo:v1.0 .
kubectl run appdemoapp --image=appdemo:v1.0
kubectl expose deployment appdemoapp --type="LoadBalancer" --port=8090?--target-port=8080
c:\workspaces\appdemo>minikube service appdemoapp --url
* http://192.168.99.100:32391
kubectl scale deployment?appdemoapp--replicas=3
一切運(yùn)行正常跋核。
總結(jié):
1.Kubernetes使得管理應(yīng)用程序容器岖瑰,發(fā)布,規(guī)纳按化發(fā)布管理更加專業(yè)蹋订,更加自動(dòng)化,熟悉以后效率更高刻伊。
2.minikube在開(kāi)發(fā)環(huán)境使用起來(lái)很方便露戒,確實(shí)很強(qiáng)大有效。