k8s miniKube 入门
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