k8s miniKube 入門
miniKube 是單機版kubernetes, 可以配置運行在同一台主機上的服務和pod,並使用docker作為虛擬化工具
-
下載:直接下載可執行文件,復制到path 路徑,免安裝。
-
啟動:minikube 支持多種虛擬化工具,如:virtualbox, 不過在linux里可以支持docker
minikube start --vm-driver=none
等待一會最終輸出
* Done! kubectl is now configured to use "minikube"
由於需要下載很多支持的東西,經常失敗,最好添加
74.125.204.82 k8s.gcr.io
到hosts文件。 -
然后創建一個Deployment
kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.10 --port=8080
這個鏡像下載比較慢,可以下載阿里的
registry.cn-qingdao.aliyuncs.com/k8slast/echoserver
即kubectl run hello-minikube --image=registry.cn-qingdao.aliyuncs.com/k8slast/echoserver --port=8080
輸出:
deployment.apps/hello-minikube created
-
再將deployment 暴露成服務
kubectl expose deployment hello-minikube --type=NodePort
輸出:
service/hello-minikube exposed
-
最后獲取訪問url
minikube service hello-minikube --url
輸出訪問url:http:😕/xxxxx:port
通過url可以訪問服務資源
刪除服務資源
- 先刪除服務:
minikube delete service hello-minikube
- 再刪除deployment:
minikube delete deployment hello-minikube
- 最后刪除minikube集群
minikube stop && minikube delete
一個簡單的演示完成
通過yaml 文件管理服務和deployment
- 通過yaml 文件管理好處是可以通過git 來管理yaml文件,
- yaml的格式簡單,只有maps 和 lists,兩者可以相互嵌套
- minikube 的很多命令可以使用
--dry-run -o yaml
來導出yaml 文件,簡化編寫效率
首先看一個 yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
run: myapp
name: myapp
spec:
replicas: 1
selector:
matchLabels:
run: myapp
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
run: myapp
spec:
containers:
- image: 'springboot'
name: myapp
ports:
- containerPort: 8088
resources: {}
status: {}
這里說明一下參數
-
kind:Deployment, 這里表示這個yaml是用來生成deploy的,另外還有Service,
-
replicas: 1 這個表示備份的個數,1個表示一個pod
其他配置看字面意思可以理解。
這個yaml是通過dry-run 生成的,dry-run 意思是只跑一遍,但不會生成資源
minikube run myapp --image=springboot --port=8088 --dry-on -o yaml
將命令的輸出保存到demo.yaml, 有了yaml 文件可以直接指定文件執行,跟上面的命令一樣的效果
minikube create -f demo.yaml
另外再寫服務的yaml
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
run: myapp
name: myapp
spec:
ports:
- port: 8088
protocol: TCP
targetPort: 8088
nodePort: 30001
selector:
run: myapp
type: NodePort
status:
loadBalancer: {}
命令導出的yaml 需要手動添加 nodePort 參數,暴露到外部的端口
- port : 8088 表示集群內部訪問端口,集群里的多個服務可以通過這個端口訪問
- targetPort: 8088 是本pod 的監聽端口,springboot 監聽在8088
- nodePort 才是暴露在外面的端口
另外,為了避免與主機其他服務沖突, nodePort 默認范圍在30000-32767
然后通過指定yaml 來暴露服務,效果與命令執行一樣
minikube expose -f demo_service.yaml
最后通過命令獲取url minikube service myapp --url
通過yaml文件可以刪除服務和deploy:
minikube delete -f demo_service.yaml
minikube delete -f demo.yaml