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官方安装文档