zoukankan      html  css  js  c++  java
  • 浅入Kubernetes(4):使用Minikube体验

    Minikube

    打开 https://github.com/kubernetes/minikube/releases/tag/v1.19.0 下载最新版本的二进制软件包(deb、rpm包),再使用 apt 或 yum 安装。

    PS:买台香港的服务器吧,或者白嫖 Google 、Azure 的试用额度。不然就有 N 种网络问题。

    或者直接下载 minikube 最新版本二进制文件(推荐)。

    curl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.19.0/minikube-linux-amd64
    # 上面的是阿里云构建的版本,如果使用 google 构建的,需要翻qiang。
    #linux版本 curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
    #win版本 curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64
    
    chmod +x minikube
    
    sudo mv minikube /usr/local/bin
    

    通过 minikube version 命令可以查看 minikube 的版本,接下来我们使用 minikube start 命令,可以直接创建一个 kubernetes 集群。minikube 会自动下载 kubeadm、kubectl、kubelet。

    如果启动不起来,可以创建一个 docker 用户。

        useradd -m docker
        passwd docker
        # 修改密码后,加入用户组
        gpasswd -a docker docker
    

    打开 /etc/sudoers 文件,在 root ALL=(ALL:ALL) ALL 下 增加新的一行:

    docker ALL=(ALL)ALL
    

    然后切换为 docker 用户:su docker

    笔者注:如果使用 root 用户启动 minikube 命令,会提示错误,需要使用非 root 用户(一般为docker)。如果你不想切换为别的用户,可以使用 --driver==none
        minikube start --driver=none
    * Pulling base image ...
    * Downloading Kubernetes v1.20.2 preload ...
        > preloaded-images-k8s-v10-v1...: 491.71 MiB / 491.71 MiB  100.00% 60.04 Mi
        > gcr.io/k8s-minikube/kicbase...: 357.67 MiB / 357.67 MiB  100.00% 7.41 MiB
    * Creating docker container (CPUs=2, Memory=4000MB) .../  
    

    接下来 minikube 会拉取各种镜像,需要一些时间。minikube 完成初始化后,打开新的终端窗口,执行 minikube dashboard 启动面板,根据 URL 地址,可以访问面板。

    PS:如果报 X Exiting due to GUEST_MISSING_CONNTRACK: Sorry, Kubernetes 1.20.2 requires conntrack to be installed in root's path,则需要安装 constrack ,apt install constrack

    正常的话,执行 docker ps 后是这样的。

    脚本

    如果觉得麻烦。。。可以用脚本。。。

    新建一个 start.sh,文件内容如下:

    echo -n "Starting Kubernetes..."
    
    minikube version
    minikube start --wait=false
    sleep 2
    n=0
    until [ $n -ge 10 ]
    do
       minikube addons enable dashboard && break
       n=$[$n+1]
       sleep 1
    done
    sleep 1
    n=0
    until [ $n -ge 10 ]
    do
       kubectl apply -f /opt/kubernetes-dashboard.yaml &>/dev/null  && break
       n=$[$n+1]
       sleep 1
    done
    
    echo "Kubernetes Started"
    
    

    新建一个 kubernetes-dashboard.yaml ,文件内容如下:

    apiVersion: v1
    kind: Namespace
    metadata:
      labels:
        addonmanager.kubernetes.io/mode: Reconcile
        kubernetes.io/minikube-addons: dashboard
      name: kubernetes-dashboard
      selfLink: /api/v1/namespaces/kubernetes-dashboard
    spec:
      finalizers:
      - kubernetes
    status:
      phase: Active
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: kubernetes-dashboard
      name: kubernetes-dashboard-katacoda
      namespace: kubernetes-dashboard
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 9090
        nodePort: 30000
      selector:
        k8s-app: kubernetes-dashboard
      type: NodePort
    

    把 kubernetes-dashboard.yaml 放到 /opt 目录中。

    然后启动 启动 start.sh 即可。

    创建 Deployment

    Kubernetes Deployment 可以检查 Pod 的健康状况,并在 Pod 中的容器终止的情况下重新启动新的容器。

    deployment 可以部署应用并管理实例数量,它提供了一种故障的自我修复机制,当应用挂了后,deployment 可以自动启动一个新的实例,维护固定数量的 pod。

    kubectl create 命令创建管理 Pod 的 Deployment。

    kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4
    # k8s.gcr.io/echoserver:1.4 是镜像名称,hello-node 是 node 名称
    

    k8s.gcr.io/echoserver 镜像暴露了 8080 端口。

    查看 Deployment:

    kubectl get deployments
    

    查看 pod :

    kubectl get pods
    

    查看集群事件:

    kubectl get events
    

    查看 kubectl 配置:

    kubectl config view
    

    创建 Service

    默认情况下,pod 只能在 kubernetes 集群的内部网络访问,如果要外部网络访问,则需要暴露 pod 为 kubnetes service。这里我们把上一小节的 hello-node 节点暴露出去。

    kubectl expose deployment hello-node --type=LoadBalancer --port=8080
    

    然后查看刚刚创建的 service:

    kubectl get services
    
    NAME         TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
    hello-node   LoadBalancer   10.96.194.154   <pending>     8080:31686/TCP   85s
    kubernetes   ClusterIP      10.96.0.1       <none>        443/TCP          22m
    

    然后试用 minikube service 提供一个 ip 供外界访问。

    minikube service hello-node
    
    root@instance-1:~# minikube service hello-node
    |-----------|------------|-------------|-------------------------|
    | NAMESPACE |    NAME    | TARGET PORT |           URL           |
    |-----------|------------|-------------|-------------------------|
    | default   | hello-node |        8080 | http://10.170.0.2:31686 |
    |-----------|------------|-------------|-------------------------|
    * Opening service default/hello-node in default browser...
      http://10.170.0.2:31686
    

    清理集群资源

    首先生成 service、deployment 。

    kubectl delete service hello-node
    kubectl delete deployment hello-node
    

    然后停止 Minikube 虚拟机(VM):

    minikube stop
    

    接着删除 Minikube 虚拟机(VM):

    minikube delete
    
    一个逗逗的大学生
  • 相关阅读:
    Spring MVC 处理 Multipart/form-data
    微信/支付宝调用获取用户信息(服务号/小程序)
    springmvc Controller接收前端参数的几种方式总结
    java 远程方法调用(RMI)
    设计模式---结构型模式之适配器模式(Adapter Pattern)
    设计模式----行为型模式之命令模式(Command Pattern)
    设计模式----创建型型模式之单件模式(Singleton pattern)
    设计模式----创建型模式之工厂模式(FactoryPattern)
    java 反射
    设计模式----行为型模式之观察者模式(Observer Pattern)
  • 原文地址:https://www.cnblogs.com/whuanle/p/14673787.html
Copyright © 2011-2022 走看看