目录

    1. 基本概念

    1.1 Kubernetes

    Kubernetes(简称,K8s),前身是 Google 的 Borg,是用于自动部署、扩展和管理容器化应用程序的开源系统。

    提供的功能有:

    • 容器的自动化部署
    • 自动化扩缩容
    • 自动化应用/服务升级
    • 容器成组,对外提供服务,支持负载均衡
    • 服务的健康检查,自动重启

    1.2 Kubernetes 集群

    如上图,Kubernetes 集群包括两种类型资源:

    • Master 节点,协调控制整个集群

      Master 负责集群的管理。Master 协调集群中的所有行为和活动,例如,应用的运行、修改、更新等。

    • Node 节点,运行应用的工作节点。

      Node 节点作为 Kubernetes 集群中的工作节点,可以是 VM 虚拟机、物理机。每个 Node 上都有一个 Kubelet,用于管理 node 节点与 Kubernetes Master 通信。

    1.3 Kubelet

    Kubelet 的主要功能就是定时从本地或 API 获取节点上 Pod/Container 的期望状态(运行什么容器、运行的副本数量、网络或者存储如何配置等),并调用对应的容器平台接口达到这个状态。Kubelet 提供的主要功能:

    • Pod 管理
    • 容器健康检查
    • 容器监控

    1.4 MiniKube

    在开发时,可以使用 Minikube, 通过在本地创建虚拟机并部署只包含单个节点的简单集群,实现轻量级的 Kubernetes 集群。

    Minikube CLI 提供集群管理的基本操作,包括 start、stop、status、 和 delete。

    2. 安装

    2.1 安装要求

    • kubectl,用于管理 Node 节点
    • Windows
      • VirtualBox or Hyper-V,依赖的虚拟机
    • VT-x/AMD-v virtualization must be enabled in BIOS,开启虚拟化指令集
    • Internet connection on first run,首次运行需要联网

    由于之前安装 Docker Toolbox for Windows,已经安装 VirtualBox,这里主要讲一下如何安装 kubectl 和 MiniKube。

    2.2 安装 Kubectl

    官方文档中,详细描述了各种系统中如何安装 kubectl。在 Windows 下,使用 Chocolatey (安装方式可以参考之前的文章)包管理工具:

    choco install kubernetes-cli
    Chocolatey v0.10.11
    Installing the following packages:
    kubernetes-cli
    By installing you accept licenses for the packages.
    Progress: Downloading kubernetes-cli 1.11.3... 100%
    
    kubectl version
    Client Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.3", GitCommit:"a4529464e4629c21224b3d52edfe0ea91b072862", GitTreeState:"clean", BuildDate:"2018-09-09T18:02:47Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"windows/amd64"}
    Unable to connect to the server: dial tcp 127.0.0.1:8080: connectex: No connection could be made because the target machine actively refused it.
    

    由于服务没有启动,会提示无法连接。

    2.3 安装 MiniKube

    在 MiniKube 的 GitHub 仓库 中,详细描述了各种系统中如何安装 MiniKube。MiniKube 是使用 Go 语言开发的。在 Windows 上可以直接下载 MiniKube 可执行程序安装,也可以使用 Chocolatey 包管理工具安装。

    choco install minikube
    Chocolatey v0.10.11
    Installing the following packages:
    minikube
    By installing you accept licenses for the packages.
    Progress: Downloading Minikube 0.28.2... 100%
    
    Minikube v0.28.2 [Approved]
    minikube package files install completed. Performing other installation steps.
     ShimGen has successfully created a shim for minikube.exe
     The install of minikube was successful.
      Software install location not explicitly set, could be in package or
      default install location if installer.
    

    3. 使用

    3.1 创建并启动集群

    使用 minikube start 命令,可以创建并配置一个运行单节点 Kubernetes 集群的虚拟机,同时配置 kubectl 以与此集群进行通信。

    minikube start
    Starting local Kubernetes v1.10.0 cluster...
    Starting VM...
    Downloading Minikube ISO
     160.27 MB / 160.27 MB  100.00% 0ssss
    Getting VM IP address...
    Moving files into cluster...
    Downloading kubelet v1.10.0
    Downloading kubeadm v1.10.0
    Finished Downloading kubelet v1.10.0
    Finished Downloading kubeadm v1.10.0
    Setting up certs...
    Connecting to cluster...
    Setting up kubeconfig...
    Starting cluster components
    

    Minikube 默认使用 VirtualBox 来驱动安装,使用 --vm-driver 参数可以指定驱动。通过设置环境变量 MINIKUBE_HOME 可以指定安装目录,默认安装目录在 C:\Users\Your User Name\.minikube

    检查节点是否正常:

    kubectl get nodes
    NAME       STATUS    ROLES     AGE       VERSION
    minikube   Ready     master    1d        v1.10.0
    

    3.2 拉取镜像

    如果网络受限,不能打开 gcr.io 页面。有两种方法可以解决镜像拉取不到的问题。由于我的使用环境,能够科学上网,这里只提供一下解决的思路。

    • 第一种,配置代理
    minikube start --docker-env HTTP_PROXY=127.0.0.1:1234
    

    如果找到可用的代理,不是件很容易的事,可以试一下第二种方法。

    • 第二种,通过阿里云镜像下载并打 tag
    minikube ssh
    docker pull registry.cn-hangzhou.aliyuncs.com/google-containers/kube-addon-manager-amd64:v6.1
    docker tag registry.cn-hangzhou.aliyuncs.com/google-containers/kube-addon-manager-amd64:v6.1 gcr.io/google-containers/kube-addon-manager:v6.1
    

    3.3 启动一个服务

    创建一个 Nginx Pod 服务

    kubectl run kube-nginx --image=nginx:latest --port=80
    deployment.apps/kube-nginx created
    

    通过 NodePort 暴露服务

    kubectl expose deployment kube-nginx --type=NodePort
    service/kube-nginx exposed
    

    检查 Pod 状态

    kubectl get pods
    NAME                             READY     STATUS              RESTARTS   AGE
    kube-nginx-6d8f6d45-rwz2g        1/1       Running             0          1d
    

    获取 Nginx 访问的 URL 地址

    minikube service kube-nginx --url
    http://192.168.99.100:30832
    

    打开页面

    3.4 MiniKube 基本操作命令

    • 启动集群
    minikube start
    
    • 查看状态
    minikube status
    minikube: Running
    cluster: Running
    kubectl: Correctly Configured: pointing to minikube-vm at 192.168.99.100
    
    • 查看日志
    minikube logs
    
    • 关闭集群
    minikube stop
    Stopping local Kubernetes cluster...
    Stopping "minikube"...
    
    • 删除集群
    minikube delete
    
    • 查看 IP
    minikube ip
    192.168.99.100
    

    3.5 查看 Dashboard

    minikube dashboard
    Opening kubernetes dashboard in default browser...
    

    4. 参考