k8s的部署方式有很多种,但对于初学者来说,可以先从minikube学起,使用minikube可以很轻松的搭建起包含一个node节点的k8s集群。

1. minikube支持kubernetes的大部分功能,包括以下几点。

  • DNS
  • NodePorts
  • ConfigMaps 和 Secrets
  • Dashboards

  • 容器运行时: Docker、CRI-O 以及 containerd
  • 启用 CNI (容器网络接口)
  • Ingress

关于这七个功能的介绍我会在后续的博客中与实例结合进行讲解,敬请期待。

2. 安装minikube

2.1 在windows系统上安装minikube

【1】开启系统虚拟化功能

1)进入BIOS,选择Security,然后选择Virtualization

2)然后选择Intel Virtual Technology回车,将其值设置成:设置为Enabled。

3)F10保存退出即可。

【2】安装docker环境

参考链接:

【3】安装虚拟化驱动程序

minikube需要虚拟化管理软件做支撑,下面是两种常见的虚拟化管理软件:

  • Hyper-v
  • Virtbox

在windows系统上个人是建议使用windows系统自带的hyper-v虚拟化服务,操作简单,后面我会出几篇博客讲解使用hyper-v在windoes系统上创建虚拟机以及相关配置的教程。hyper-v的安装在第二步中已经附了相关连接,大家可以参考进行安装及启动虚拟化服务。

【4】开启hyper-v服务

打开控制面板点击程序和功能:

点击启用或关闭Windows功能:

检查Hyper-v是否开启:

图中Hyper-V如果已经打勾,则表示Hyper-V已经打开,如果没有则打勾开启即可,然后确定。如果没有找到Hyper-V则表示系统没有安装Hyper-V,请参考第二步中的连接完成安装后,启动服务。

【5】安装kubectl

在win10上安装kubectl有两种方式,选择其一即可,这里我使用方法二:

方法一: 使用 Chocolatey 包管理器安装

choco install minikube

方法二: 使用curl命令安装kubectl可执行文件

curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/windows/amd64/kubectl.exe

如果你没有安装curl命令,则直接复制链接在浏览器中打开就开始下载了。目前最新版是1.18,要安装其他版本你只需要将链接中v1.18.0做修改即可。

下载完成后,创建一个目录将kubectl.exe文件放到对应目录里面,并将这个目录添加到环境变量中。

配置好环境变量,重新打开一个cmd,查看kubectl命令的版本:

kubectl  version

【6】安装minikube

下载minikube,下载完成后,将文件名称改为minikube.exe,同样需要将这个文件添加到环境变量中。

【7】启动k8s集群

minikube  start命令可以启动一个k8s集群,这个命令会创建并配置一台虚拟机,运行一个单节点k8s集群。

使用minikube start --help命令查看相关的帮助信息,这里介绍两个常用的命令:

1)指定kubernetes版本

通过 --kubernetes-version 指定 kubernetes 版本,比如你想使用1.18.0版本的kubernetes,可以使用下面的命令创建集群:

minikube start --kubernetes-version v1.18.0

2)指定VM驱动程序

通过 --driver="" 指定VM驱动程序,VM驱动程序有下面几种:

  • virtualbox
  • vmwarefusion
  • kvm2 (驱动安装)
  • hyperkit (驱动安装)
  • hyperv (驱动安装) 请注意,下面的 IP 是动态的,可以更改。可以使用 minikube ip 检索。
  • vmware (驱动安装) (VMware 统一驱动)
  • none (在主机上运行Kubernetes组件,而不是在 VM 中。使用该驱动依赖 Docker (安装 Docker) 和 Linux 环境)

如指定使用hyper-v驱动程序:

minikube start --driver="hyperv"

细心的小伙伴会发现上图中第五行说虚拟机无权访问k8s.gcr.io,这个并不影响集群镜像的拉取,如果你有自己的仓库可以在启动的时候使用--image-repository参数指定即可。

查看集群状态,如下所示,表示启动成功:

C:\>minikube status
m01
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

【8】按照管理,运行一个hello world服务

使用echoserver创建一个kubernetes deployment。

C:\>kubectl create deployment hello-minikube --image=cilium/echoserver

等Status变成Running则表示Pod已经起来了,如下图:

开放80端口,对外服务:

kubectl expose deployment hello-minikube --type=NodePort --port=80

获取公开服务的URL以查看服务详细信息:

C:\>minikube service hello-minikube --url
http://192.168.226.50:32653

在浏览器访问对应的url,这里我访问的是:http://192.168.226.50:32653

注意:如果URL不能访问,请检查端口号和防火墙策略,这里不做赘述。

删除service和deployment:

C:\>kubectl delete service hello-minikube
service "hello-minikube" deleted

C:\>kubectl delete deployment hello-minikube
deployment.apps "hello-minikube" deleted

【9】集群的关闭及删除

关闭集群:

C:\>minikube stop
* Stopping "minikube" in hyperv ...
* 正在通过 SSH 关闭“minikube”…
* Node "m01" stopped.

删除集群:

C:\>minikube delete
* Stopping "minikube" in hyperv ...
* 正在删除 hyperv 中的“minikube”…
* Removed all traces of the "minikube" cluster.

2.2 在Linux(ubuntu 19.04)系统安装minikube

同样你需要开通虚拟化功能,参考2.1,这里不再赘述。

【1】安装虚拟化驱动程序

请参考我的另一篇博客:ubuntu系统安装kvm

注意:在ubuntu 19.04系统不需要安装libvirt-bin软件

【2】安装docker环境

1)更新apt包索引

root@randomw:~# sudo apt-get update

2)安装 apt 依赖包,用于通过HTTPS来获取仓库

root@randomw:~# sudo apt-get install \
     apt-transport-https \
     ca-certificates \
     curl \
     gnupg-agent \
     software-properties-common

3)添加 Docker 的官方 GPG 密钥

root@randomw:~#  curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

4)使用以下指令设置稳定版仓库

root@randomw:~# udo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

5)更新 apt 包索引

root@randomw:~# sudo apt-get update

6)安装最新版本的 Docker Engine-Community 和 containerd

root@randomw:~# sudo apt-get install docker-ce docker-ce-cli containerd.io

注意:要安装特定版本的 Docker Engine-Community,请在仓库中列出可用版本,然后选择一种安装。列出您的仓库中可用的版本:

root@randomw:~# apt-cache madison docker-ce
 docker-ce | 5:19.03.6~3-0~ubuntu-disco | https://download.docker.com/linux/ubuntu disco/stable amd64 Packages
 docker-ce | 5:19.03.3~3-0~ubuntu-disco | https://download.docker.com/linux/ubuntu disco/stable amd64 Packages
 docker-ce | 5:19.03.2~3-0~ubuntu-disco | https://download.docker.com/linux/ubuntu disco/stable amd64 Packages
 docker-ce | 5:19.03.1~3-0~ubuntu-disco | https://download.docker.com/linux/ubuntu disco/stable amd64 Packages
 docker-ce | 5:19.03.0~3-0~ubuntu-disco | https://download.docker.com/linux/ubuntu disco/stable amd64 Packages
root@randomw:~# apt-cache madison docker-ce-cli
docker-ce-cli | 5:19.03.6~3-0~ubuntu-disco | https://download.docker.com/linux/ubuntu disco/stable amd64 Packages
docker-ce-cli | 5:19.03.3~3-0~ubuntu-disco | https://download.docker.com/linux/ubuntu disco/stable amd64 Packages
docker-ce-cli | 5:19.03.2~3-0~ubuntu-disco | https://download.docker.com/linux/ubuntu disco/stable amd64 Packages
docker-ce-cli | 5:19.03.1~3-0~ubuntu-disco | https://download.docker.com/linux/ubuntu disco/stable amd64 Packages
docker-ce-cli | 5:19.03.0~3-0~ubuntu-disco | https://download.docker.com/linux/ubuntu disco/stable amd64 Packages
root@randomw:~# apt-cache madison containerd.io
containerd.io |   1.2.13-1 | https://download.docker.com/linux/ubuntu disco/stable amd64 Packages
containerd.io |   1.2.10-3 | https://download.docker.com/linux/ubuntu disco/stable amd64 Packages
containerd.io |   1.2.10-2 | https://download.docker.com/linux/ubuntu disco/stable amd64 Packages
containerd.io |    1.2.6-3 | https://download.docker.com/linux/ubuntu disco/stable amd64 Packages
containerd.io |    1.2.5-1 | https://download.docker.com/linux/ubuntu disco/stable amd64 Packages

使用第二列中的版本字符串安装特定版本:

root@randomw:~# sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io=<VERSION_STRING> 

7)按照管理运行一个hello world容器

安装成功。

【3】安装kubectl命令

1)使用下面命令安装v1.18.0版本的kubectl

curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl

2)给下载下来的kubectl文件添加可执行权限

root@randomw:~# chmod +x ./kubectl

3)将kubectl文件移动到PATH目录

root@randomw:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

可以看到PATH目录有很多,这里我放到/usr/local/bin/目录:

root@randomw:~# mv ./kubectl /usr/local/bin/kubectl

4)检查版本

root@randomw:~# kubectl version --client
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.0", GitCommit:"9e991415386e4cf155a24b1da15becaa390438d8", GitTreeState:"clean", BuildDate:"2020-03-25T14:58:59Z", GoVersion:"go1.13.8", Compiler:"gc", Platform:"linux/amd64"}

【4】安装minikube

1)下载minikube并添加可执行权限

root@randomw:~# curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \
>   && chmod +x minikube
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 52.0M  100 52.0M    0     0  1838k      0  0:00:28  0:00:28 --:--:-- 1250k
root@randomw:~# ls
minikube

2)将minikube安装到PATH目录

# 检查/usr/local/bin目录是否存在,不存在则创建
root@randomw:~# sudo mkdir -p /usr/local/bin/
#  将minikube移动到/usr/local/bin目录
root@randomw:~# sudo install minikube /usr/local/bin/

注意:install命令在这里的作用和mv命令是一样的,具体用法可以执行install --help查看:

root@randomw:~# install --help
用法:install [选项]... [-T] 源文件 目标文件
 或:install [选项]... 源文件... 目录
 或:install [选项]... -t 目录 源文件...
 或:install [选项]... -d 目录...

This install program copies files (often just compiled) into destination
locations you choose.  If you want to download and install a ready-to-use
package on a GNU/Linux system, you should instead be using a package manager
like yum(1) or apt-get(1).

【5】启动minikube

注意:启动minikube请使用非root用户,负责因为权限问题,不能启动。

切换到非root用户,开启minikube:

注意:这里要使用--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers,指定镜像仓库,否则因为墙的原因无法启动。

random@randomw:~$ minikube start --driver="kvm2" --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers
😄  Ubuntu 19.04 上的 minikube v1.9.0
✨  根据用户配置使用 kvm2 驱动程序
✅  正在使用镜像存储库 registry.cn-hangzhou.aliyuncs.com/google_containers
💾  Downloading Kubernetes v1.18.0 preload ...
🔥  Creating kvm2 VM (CPUs=2, Memory=3900MB, Disk=20000MB) ...
🐳  正在 Docker 19.03.8 中准备 Kubernetes v1.18.0…
    > kubeadm.sha256: 65 B / 65 B [--------------------------] 100.00% ? p/s 0s
    > kubectl.sha256: 65 B / 65 B [--------------------------] 100.00% ? p/s 0s
    > kubelet.sha256: 65 B / 65 B [--------------------------] 100.00% ? p/s 0s
    > kubeadm: 37.96 MiB / 37.96 MiB [---------------] 100.00% 2.44 MiB p/s 16s
    > kubectl: 41.98 MiB / 41.98 MiB [---------------] 100.00% 2.50 MiB p/s 17s
    > kubelet: 108.01 MiB / 108.01 MiB [-------------] 100.00% 2.12 MiB p/s 51s
🌟  Enabling addons: default-storageclass, storage-provisioner
🏄  完成!kubectl 已经配置至 "minikube"

开启比较慢,请耐心等待。

查看minikube状态:

random@randomw:~$ minikube status
m01
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

可以看到已经是running状态了。

【6】创建一个hello-minikube服务

1)使用root用户拉取nginx镜像(当然你可以使用其他镜像)

root@randomw:~# docker pull nginx

2)创建deployment和service

random@randomw:~$ kubectl create deployment nginx --image=nginx
deployment.apps/nginx created

#  查看pod状态,目前正在创建状态
random@randomw:~$ kubectl get pod
NAME                    READY   STATUS              RESTARTS   AGE
nginx-f89759699-7jbf4   0/1     ContainerCreating   0          12s

#  等待一会pod状态变为Running
random@randomw:~$ kubectl get pod
NAME                    READY   STATUS    RESTARTS   AGE
nginx-f89759699-7jbf4   1/1     Running   0          56s

# 将80端口对外开放
random@randomw:~$ kubectl expose deployment nginx --type=NodePort --port=80
service/nginx exposed

3)查看访问地址

random@randomw:~$ minikube service nginx --url
http://192.168.39.127:31837

大功告成,希望对你有所帮助。

FAQ

1. minikube start 报错 open C:\Users\.minikube\machines\minikube\config.json: The system cannot find the file specified.

删除C:\Users\.minikube\machines\minikube目录,然后minikube start

 

参考链接:minikube官方安装文档

Logo

开源、云原生的融合云平台

更多推荐