美文网首页
使用minikube快速搭建本地环境

使用minikube快速搭建本地环境

作者: 猴子精h | 来源:发表于2017-10-27 11:44 被阅读2172次

    前言

    Kubernets现在这么火,我们再不学学真怕调队了,我学习一门新东西的办法就是快速上手去体验一番,那些具体的概念可以先放一放;俗话说:工欲善其事,必先利其器,那么我们就先快速地搭建一个环境来体验下。

    安装的方式

    Kubernets官方提供三种部署方式:

    • MiniKube: Minikube可以实现一种轻量级的Kubernetes集群,通过在本地计算机上创建虚拟机并部署只包含单个节点的简单集群。Minikube适用于Linux,MacOS和Windows系统。Minikube CLI提供集群管理的基本操作,包括 start、stop、status、 和delete。

    • kubeadm: kubeadm是Kubernetes1.6开始官方推出的快速部署Kubernetes集群工具,其思路是将Kubernetes相关服务容器化(Kubernetes静态Pod)以简化部署。

    • Custom solutions: 最完整的方式,从零开始搭建。

    显而易见,MiniKube的方式是最简单的,下面我们就来介绍这种安装方式,主要是想把里面的坑给大家说说。

    Minikube

    环境:MacOS

    minikube其实就是启动了一个Linux 虚拟机,这里虚拟机中包含Docker容器、Kubernetes的全部组件。所以需要你的环境支持虚拟化,目前Mac支持的虚拟化有xhyve driver, VirtualBox, or VMware Fusion,这些需要先准备好。

    1. 安装kubectl

      brew install kubectl
      
      kubectl version 
      
    2. Install Minikube

      curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 && \
      chmod +x minikube && \
      sudo mv minikube /usr/local/bin/
      
    3. 通过minikube启动一个k8s的集群

      # 指定了hypervisor, 我这里使用的是VirtualBox
      minikube start --vm-driver=virtualbox
      

      通过minikube start之后,你就可以在virtualbox中看到一台新建的虚拟机了, 同时在命令行可以输入minikube ssh就能直接登入到虚拟机了,更多命令请见minikube --help

      minikube virtualbox.png

    另:部署kubernets dashboard

    kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
    

    启动一个容器并提供服务

    以上的步骤完成都很轻松,下面我们就使用kubetl启动一个容器并提供服务:

    创建一个deployment

    kubectl run hello-world --image=nginx:1.7.9 --port=80
    

    查看deplopment:

    kubectl get deployments
    
    NAME          DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    hello-world   1         1         1            0           8s
    

    查看pod:

    kubectl get pods
    

    可以看到pod一直处于ContainerCreating状态

    NAME                          READY     STATUS              RESTARTS   AGE
    hello-world-277264851-r8q3n   0/1       ContainerCreating   0          17s
    

    使用kubectl describe pods hello-world-277264851-r8q3n看下这个pod, 可以看到一个Error syncing pod

    minikube.png

    使用minikube logs来查看下有什么错误:

    Oct 27 02:55:21 minikube localkube[3057]: E1027 02:55:21.404996    3057 kuberuntime_sandbox.go:54] CreatePodSandbox for pod "nginx-deployment-431080787-6w421_default(7d61ad84-bac1-11e7-a3f5-080027bf293b)" failed: rpc error: code = 2 desc = unable to pull sandbox image "gcr.io/google_containers/pause-amd64:3.0": Error response from daemon: {"message":"Get https://gcr.io/v1/_ping: dial tcp 74.125.204.82:443: i/o timeout"}
    

    可以看到连接gcr.io的仓库超时了,所以就需要翻墙了,下面假设你有个支持http proxy的网络代理翻墙;(Mac上可以直接使用shadowsocks-NG开启HTTP的支持, 如果是shadowsocks, 就需要使用privoxy将sock5转换成http)

    这里有个问题需要注意下,开启Mac上的shadowsocks并不会对terminal下生效, 你需要有个http proxy,在terminal中export http_proxy=x.x.x.x, 大部分的 Linux 程序都会感知这两个环境变量,并使用代理访问网络;

    在使用minikue启动集群的时候指定代理地址(因为只支持http代理模式):

    https_proxy=<my proxy> minikube start --docker-env HTTP_PROXY=<my proxy> --docker-env HTTPS_PROXY=<my proxy> --docker-env NO_PROXY=192.168.99.0/24
    

    这时候查看deployment和pod都running了

    kubectl get pods
    
    NAME                          READY     STATUS    RESTARTS   AGE
    hello-world-277264851-pbb3l   1/1       Running   0          16s
    
    kubectl get deployments
    
    NAME          DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    hello-world   1         1         1            1           43s
    

    接着使用service为容器暴露一个对外访问的端口:

    kubectl expose deployment hello-world --type=NodePort
    

    查看刚创建的serivce:

    kubectl get services
    
    NAME          TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
    hello-world   NodePort    10.0.0.72    <none>        80:32078/TCP   14m
    kubernetes    ClusterIP   10.0.0.1     <none>        443/TCP        55m
    

    minibute service将打开你本地的浏览器去访问这个应用,

    # minikube service [-n NAMESPACE] [--url] NAME
    # --url:将返回访问的URL 
    
    minikube service hello-world
    
    nginx.png

    最后

    其实搭建还是挺简单的,大部分时间都是花在网络问题上,环境有了,接下来就应该去熟悉kubernets里面的概念了,什么是pods, deployments, services等等,期待下篇吧!

    相关文章

      网友评论

          本文标题:使用minikube快速搭建本地环境

          本文链接:https://www.haomeiwen.com/subject/iryrpxtx.html