1. 快速开始
minikube 是一种轻量化的 Kubernetes 集群管理工具,是为了帮助开发者和学习者能够更好学习和体验 Kubernetes 功能而推出的便捷管理工具。
借助容器和虚拟化环境就可以实现 Kubernetes 的快速创建与启动,目前已支持在 macOS、Linux、Windows 平台上利用各类本地虚拟化环境作为驱动运行 Kubernetes。
由 minikube 构建的集群支持 Kubernetes 的大部分功能,从基础的容器编排管理,到高级特性如负载均衡、Ingress,权限控制等。非常适合作为 Kubernetes 入门,或开发测试环境使用。
用户使用 Minikube CLI 管理虚拟机上的 Kubernetes 环境,比如:启动,停止,删除,获取状态等。一旦 Minikube 虚拟机启动,用户就可以使用熟悉的 Kubectl CLI 在 Kubernetes 集群上执行操作。
minikube 有以下几点优势:
- 支持管理多个 Kubernetes 版本,最新版本+6个以前的小版本。设计上也期望是管理兼容更可能多的 Kubernetes 历史版本。
- 支持跨平台,在不同的平台(Linux、macOS、Windows)上快速安装 minikube 来运行管理 Kubernetes 集群。
- 支持虚拟机、容器或裸金属部署。支持多种类型的驱动,可以通过虚拟化的虚拟机,或容器以及裸金属来运行 Kubernetes 集群。
- 支持多个容器运行时 。minikube 支持在构建 Kubernetes 集群时选择使用不同的容器运行时,可以支持 cri-o、containd、docker。
- 支持通过 Docker API 快速镜像推送。支持使用 Docker API 的方式来向 minikube 中推送容器镜像。
- 高级特性支持。minikube 构建的 Kubernetes 支持一些高级腾讯,如 LoadBalancer、文件系统挂载、和 FeatureGates。
- 插件应用可以轻松安装到 Kubernetes。minikube 管理的插件可以快速的安装到 Kubernetes 集群中使用。
- 支持通用的 CI 环境。
1.1. minikube 管理架构
Minikube 核心是提供 Kubernetes 的集群的管理,在不同的层次提供不同的管理工具。以下是 minikube 管理的分层工具命令
minikube 控制服务: 该部分主要是 minikube 工具本身相关的工具,例如查看 minikube 的版本信息,shell 命令行快速补齐命令等。
硬件驱动虚拟化:这部分内容主要是准备 Kubernetes 集群运行的基础设备,该设备可以通过使用虚拟化的方式提供,也可以通过远程主机或者 docker 来提供,也可以直接使用本地的原始 docker 环境。
运行 OS 系统:这部分主要管理主机环境,例如可以查看对应机器的 ip 地址信息,或者 ssh 登录到系统。
容器运行时:这部分主要是容器化管理层,例如镜像的管理,容器运行时是管理等。
Kubernetes:最上层是管理 Kubernetes 集群以及集群中运行的服务。
1.2. 安装
安装方式还可以选择:
- 安装方式可以是二进制,还可以按照 Debian 包,RPM 包。
- 安装的版本可以是稳定版本,还可以按照开发版本
- 安装的平台可以是Linux, 还支持 MacOS 和 Windows
- 安装的硬件架构可以是 X86,还支持 ARM64, ARMv7, ppc64, S390X
在新版本(应该是在v1.20版本后吗???)后,要求使用非 root 的管理员用户来执行 minikube 的安装。
1.2.1. Linux 系统安装
minikube 的安装和运行包都是一个独立的基于 golang 编译的二进制文件。安装方式也非常简单,就是将二进制文件放在指定的路径后,提供可执行权限即可。
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
1.2.2. Window 系统安装
todo
1.2.3. MacOS 系统安装
todo
1.3. 集群生命周期管理
1.3.1. 驱动
minikube 支持多种不同的驱动来运行 Kubernetes 集群。根据资源环境选择合适的驱动:
HyperKit 驱动
: HyperKit 是 macOS 平台上的开源的虚拟化技术,为轻量级虚拟机和容器部署进行了优化。Hyper-V 驱动
: Hyper-V 是内置在现代版本 Microsoft Windows 中的虚拟化程序。KVM 驱动
: KVM 基于内核的虚拟机 是一个基于 x86 硬件的 Linux 的全虚拟化解决方案,包含虚拟化扩展。Docker 驱动
: Docker 驱动允许你将 Kubernetes 安装到现有的 Docker 服务中。在 Linux 系统中,这不需要启用虚拟化。none 驱动
: 即 Minikube 不使用任何类型的驱动,直接使用当前操作系统来运行 Kubernetes 集群,也称为裸金属(bare-metal)。podman 驱动
: 是一种可以代替 Docker 容器运行时的另外一种驱动。ssh 驱动
: 程序允许高级 minikube 用户跳过虚拟机创建,允许 minikube 在用户提供的虚拟机上运行。Parallels 驱动
: 对于拥有 Parallels Desktop for Mac 的用户特别有用,因为它不需要 VT-x 硬件支持。VirtualBox 驱动
: 是 minikube 的早期支持驱动。它可能不能提供最快的启动时间,但它是 Microsoft Windows Home 用户可用的最稳定的驱动程序。vmware 驱动
: 支持所有基于 vmware 的虚拟化环境。
驱动选择可以分为一下几类:
- 裸金属无驱动:none
- 容器驱动:docker、podman
- 远程主机驱动: ssh
- 虚拟化虚拟机驱动 MacOS 平台:HyperKit、Parallels、VirtualBox、Vmware
- 虚拟化虚拟机驱动 Windows 平台:Hyper-V、VirtualBox、Vmware
- 虚拟化虚拟机驱动 Linux 平台:KVM、VirtualBox、Vmware
注:
- 由于minikube复用了docker-machine,在其软件包中已经支持了相应的VirtualBox, VMware Fusion驱动
- VT-x/AMD-v 虚拟化必须在 BIOS 中开启
- 在Windows环境下,如果开启了Hyper-V,不支持VirtualBox方式
根据我们的物理设备运行环境,可以选择不同的驱动来运行 Kubernetes 集群。通过 --drvier=''
的方式来指定驱动
minikube start --drvier="docker"
1.3.2. 指定版本
minikube 支持管理不同版本的 Kubernetes 集群。 minikube 设计之初就希望作为一个便于研发使用 minikube 的工具,而支持不同的 Kubernetes 历史版本就是其中核心功能之一。
minikube 会稳定支持发布版本的 6 个历史版本,实际上可以支持更多的历史版本。
如果需要使用或验证某个历史版本的兼容性,可以通过 --kubernetes-version
来指定 Kubernetes 版本
minikube start --kubernetes-version v1.19.16
1.3.3. 多集群
minikube 支持管理多个 Kubernetes 集群。当我们需要在不同的 Kubernetes 版本间切换验证时,希望同事保留多个 Kubernetes 集群实例,可以通过 minikube 的集群配置 profile 的方式配置和管理多集群。
在创建或后续管理使用 Kubernetes 时,都可以通过 -p
选项来指定一个 Kubernetes 集群配置,相关的操作都可以限定在指定的集群中
minikube start -p k8s-v1.19.16
1.3.4. Linux 参考创建集群
除了上诉的几个功能选项,minikube 在创建集群时还有很多其他有用的选项,
minikube start \
-p k8s-v1.19.16 \
--kubernetes-version v1.19.16 \
--registry-mirror=https://registry.docker-cn.com \
--image-mirror-country=cn \
--driver=docker \
--extra-config=kubelet.cgroup-driver=systemd \
--cni=calico
1.3.5. Windows 平台创建集群
todo
1.3.6. MacOS 平台创建集群
todo
1.4. 群管理
集群创建完成后,可以通过 profile 来查看集群配置
[minikube@wenyu-poc-gitlab ~]$ minikube profile list
|---------|-----------|---------|--------------|------|---------|---------|-------|
| Profile | VM Driver | Runtime | IP | Port | Version | Status | Nodes |
|---------|-----------|---------|--------------|------|---------|---------|-------|
| k8s1 | docker | docker | 192.168.49.2 | 8443 | v1.22.3 | Stopped | 3 |
| k8s2 | docker | docker | 192.168.58.2 | 8443 | v1.22.3 | Running | 2 |
|---------|-----------|---------|--------------|------|---------|---------|-------|
minikube 在管理 Kubernetes 集群状态和生命周期时,在对状态的管理分为三类:"start/delete"、"start/stop" 和 "pause/unpause"
- start/delete 是管理 Kubernetes 生命周期的创建与删除,决定集群存在与否,在集群被删除时相关的数据也会一起清理。
- start/stop 是管理 Kubernetes 集群的启动与停止,决定集群和机器是否是运行状态,集群停止不会删除数据,只是将相关的机器以及机器上的 Kubernetes 停止
- pause/unpause 是管理 Kubernetes 集群本身的状态,暂停的集群可以被快速恢复,数据也不会丢失。与 stop 的区别是,stop 会将集群和机器一起停止,而 pause 只会停止 Kubernetes 集群,不会停止对应的机器。
1.5. 使用 Kubernetes 集群
当通过 minikube 创建好 Kubernetes 集群后,该如何访问集群呢?minikube 提供了以下几种方式来访问
1.5.1. minikube kubectl
minikube kubectl
alias kubectl="minikube kubectl --"
kubectl config context
1.5.2. kubeconfig
在 minikube 安装好集群后,会自动在宿主机的 /root/.kube/config
中生存集群的 kubeconfig,因此只需要下载一个 kubectl 二进制文件,即可远程访问 Kubernetes 集群
1.5.3. dashboard
minikube 提供 minikube dashboard
命令,可以自动安装 dashboard 插件,打开 dashboard 的 web 页面,通过 页面的方式来访问和管理 Kubernetes 集群
====================================
1.6. 插件管理 addons
minikube 内置了很多插件,这些插件可以通过 minikube addons 命令快速的安装和卸载
minikube addons list
1.7. 应用部署与访问
1.8. 配置管理
1.8.1. 镜像管理
1.8.2. config管理
1.8.3. 节点管理
1.9. 其他
国内 gcr 访问不了的问题,通过阿里云加速
离线部署问题