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

启动 Minikube

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

# 默认启动
minikube start

# 指定 driver 和 runtime
minikube start --driver docker --container-runtime docker
  
# 指定阿里云容器镜像。在网络下载镜像不畅时通过镜像加速 --推荐方式
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

安装 Kubectl

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

配置命令补全

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

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

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

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

如果您使用zsh

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

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

远程访问 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