1. 基本概念
1.1 Kubernetes
Kubernetes(简称,K8s),前身是 Google 的 Borg,是用于自动部署、扩展和管理容器化应用程序的开源系统。
提供的功能有:
- 容器的自动化部署
- 自动化扩缩容
- 自动化应用/服务升级
- 容器成组,对外提供服务,支持负载均衡
- 服务的健康检查,自动重启
1.2 Kubernetes 集群
如上图,Kubernetes 集群包括两种类型资源:
Master 负责集群的管理。Master 协调集群中的所有行为和活动,例如,应用的运行、修改、更新等。
Node 节点作为 Kubernetes 集群中的工作节点,可以是 VM 虚拟机、物理机。每个 Node 上都有一个 Kubelet,用于管理 node 节点与 Kubernetes Master 通信。
1.3 Kubelet
Kubelet 的主要功能就是定时从本地或 API 获取节点上 Pod/Container 的期望状态(运行什么容器、运行的副本数量、网络或者存储如何配置等),并调用对应的容器平台接口达到这个状态。Kubelet 提供的主要功能:
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 (安装方式可以参考之前的文章)包管理工具:
1
2
3
4
5
6
| 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%
|
1
2
3
| 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 包管理工具安装。
1
2
3
4
5
6
7
8
9
10
11
12
13
| 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 以与此集群进行通信。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| 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
。
检查节点是否正常:
1
2
3
| kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready master 1d v1.10.0
|
3.2 拉取镜像
如果网络受限,不能打开 gcr.io 页面。有两种方法可以解决镜像拉取不到的问题。由于我的使用环境,能够科学上网,这里只提供一下解决的思路。
1
| minikube start --docker-env HTTP_PROXY=127.0.0.1:1234
|
如果找到可用的代理,不是件很容易的事,可以试一下第二种方法。
1
2
3
| 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 服务
1
2
| kubectl run kube-nginx --image=nginx:latest --port=80
deployment.apps/kube-nginx created
|
通过 NodePort 暴露服务
1
2
| kubectl expose deployment kube-nginx --type=NodePort
service/kube-nginx exposed
|
检查 Pod 状态
1
2
3
| kubectl get pods
NAME READY STATUS RESTARTS AGE
kube-nginx-6d8f6d45-rwz2g 1/1 Running 0 1d
|
获取 Nginx 访问的 URL 地址
1
2
| minikube service kube-nginx --url
http://192.168.99.100:30832
|
打开页面
3.4 MiniKube 基本操作命令
1
2
3
4
| minikube status
minikube: Running
cluster: Running
kubectl: Correctly Configured: pointing to minikube-vm at 192.168.99.100
|
1
2
3
| minikube stop
Stopping local Kubernetes cluster...
Stopping "minikube"...
|
1
2
| minikube ip
192.168.99.100
|
3.5 查看 Dashboard
1
2
| minikube dashboard
Opening kubernetes dashboard in default browser...
|
4. 参考