k8s miniKube 入门

k8s miniKube 入门

miniKube 是单机版kubernetes, 可以配置运行在同一台主机上的服务和pod,并使用docker作为虚拟化工具

  1. 下载:直接下载可执行文件,复制到path 路径,免安装。

  2. 启动: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文件。

  3. 然后创建一个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

  4. 再将deployment 暴露成服务

    kubectl expose deployment hello-minikube --type=NodePort
    

    输出:service/hello-minikube exposed

  5. 最后获取访问url

    minikube service hello-minikube --url
    

    输出访问url:http:😕/xxxxx:port

    通过url可以访问服务资源

删除服务资源

  1. 先删除服务: minikube delete service hello-minikube
  2. 再删除deployment: minikube delete deployment hello-minikube
  3. 最后删除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

posted @ 2019-07-22 15:34  SnailRush  阅读(2667)  评论(0编辑  收藏  举报