Minikube

Minikube

minikube 是一个工具, 能让你在本地运行 Kubernetes。 minikube 在你的个人计算机(包括 Windows、macOS 和 Linux PC)上运行一个一体化(all-in-one)或多节点的本地 Kubernetes 集群,以便你来尝试 Kubernetes 或者开展每天的开发工作。

以下安装教程仅在 Linux 环境下进行测试,如果您使用 MacOS 或者 Windows 系统, 请参阅官方文档进一步了解。

前置需求

我们推荐您使用 Linux 系统(或在虚拟机中运行 Linux)进行 minikube 的安装

  • 双核及以上 CPU
  • 2GiB 及以上内存
  • 20GiB 硬盘空间
  • 网络连接
  • 容器或虚拟机(推荐使用 docker)
  • 具有管理员权限的用户(非必须,某些场景可能需要)

docker 安装请参阅官方文档,根据您使用的操作系统及其发行版进行安装方式的选择。

安装 Minikube

官方文档给出了不同系统的安装方式,请根据您使用的操作系统及其发行版进行安装方式的选择。

ArchLinux为例,使用如下命令进行安装:

sudo pacman -S minikube

安装完成后,执行:

minikube version

输出如下:

minikube version: v1.30.1
commit: 08896fd1dc362c097c925146c4a0d0dac715ace0-dirty

如果您使用 Linux 或 MacOS,可以安装 minikube 的命令行自动补全工具。

如果您使用zsh

mkdir ~/.k8s
minikube completion zsh > ~/.k8s/minikube.zsh
echo "source ~/.k8s/minikube.zsh" >> ~/.zshrc
source ~/.zshrc

如果您使用bash

mkdir ~/.k8s
minikube completion bash > ~/.k8s/minikube.sh
echo "source ~/.k8s/minikube.sh" >> ~/.bashrc
source ~/.bashrc

启动 Minikube

Minikube 的启动非常简单,仅需要执行如下命令即可启动:

minikube start

但是如果您的环境中有不同的driver(驱动)runtime(容器运行时), 您可以使用--driver来指定驱动,--container-runtime来指定容器运行时。

minikube start \
  --driver docker \
  --container-runtime docker

在 Minikube 启动时,会通过网络拉取相关镜像,但是由于某些原因,网路可能不通或较慢,这时可以通过一些镜像进行加速,一般使用阿里云的镜像。

minikube start \
  --image-mirror-country cn \
  --image-repository "registry.cn-hangzhou.aliyuncs.com/google_containers" \
  --binary-mirror "https://dl.k8s.io" \
  --container-runtime docker \
  --driver docker

等待几分钟,具体等待时间视网络状况和机器配置而定。若无报错,执行如下命令查看是否启动成功:

minikube status

若输出如下信息,则说明启动成功

minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

安装管理工具

K8S 使用kubectl命令行工具进行管理,请参照官方文档进行安装。

和 minikube 类似,kubectl 也可以配置命令行补全:

如果您使用zsh

mkdir ~/.k8s
kubectl completion zsh > ~/.k8s/kubectl.zsh
echo "source ~/.k8s/kubectl.zsh" >> ~/.zshrc
source ~/.zshrc

如果您使用bash

mkdir ~/.k8s
kubectl completion bash > ~/.k8s/kubectl.sh
echo "source ~/.k8s/kubectl.sh" >> ~/.bashrc
source ~/.bashrc

远程访问 Minikube

到目前为止,我们已经能够在本地使用 Minikube 了,但是在本机之外的机器是无法访问 Minikube 的, 想要从外部机器访问,还需要进行如下配置:

启动 proxy

kubectl proxy \
  --address '0.0.0.0' \
  --port 8443 \
  --api-prefix / \
  --accept-hosts '^.*'

将配置文件拷贝到外部机器

# 主要配置文件
scp ~/.kube/config username@remote-host:/home/username/.kube/config
# 认证文件
scp  ~/.minikube/ca.crt username@remote-host:/home/username/.minikube/ca.crt
scp ~/.minikube/profiles/minikube/client.crt username@remote-host:/home/username/.minikube/profiles/minikube/client.crt
scp ~/.minikube/profiles/minikube/client.key username@remote-host:/home/username/.minikube/profiles/minikube/client.key

修改外部机器配置

修改外部机器~/.kube/config,主要修改 ApiServer 地址和认证文件的位置。做如下修改

apiVersion: v1
clusters:
  - cluster:
      # 修改为对应的文件位置
      certificate-authority: /home/your-username/.minikube/ca.crt
      extensions:
        - extension:
            last-update: Mon, 17 Jul 2023 14:28:18 CST
            provider: minikube.sigs.k8s.io
            version: v1.30.1
          name: cluster_info
      # 修改为Minikube的 ${ip}:${port}
      server: http://minikube-ip:8443
    name: minikube
contexts:
  - context:
      cluster: minikube
      extensions:
        - extension:
            last-update: Mon, 17 Jul 2023 14:28:18 CST
            provider: minikube.sigs.k8s.io
            version: v1.30.1
          name: context_info
      namespace: default
      user: minikube
    name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
  - name: minikube
    user:
      # 修改为对应的文件位置
      client-certificate: /home/your-username/.minikube/profiles/minikube/client.crt
      # 修改为对应的文件位置
      client-key: /home/your-username/.minikube/profiles/minikube/client.key

注意,在修改 ApiServer 地址时,URL 的 scheme 是http而非https,这是因为我们使用的 proxy 将请求进行了转发。 虽然 minikube 本身的 ApiSever 的 scheme 是 https,但 proxy 的 scheme 却是 http,因此要使用 http.

验证

执行如下命令,验证是否配置成功。

kubectl cluster-info

外部访问 Minikube 的 LoadBalancer 服务

minikube tunnel --bind-address 0.0.0.0