kubernetes使用minikube安装

⽂档地址:

https://kubernetes.io/zh-cn/docs

搭建方式

kubeadm 工具化部署(推荐新手 / 中小团队)

kubeadm 是官方提供的自动化部署工具,能快速初始化集群,降低搭建复杂度,适合绝大多数场景。

  • 核心优势
    1. 自动化程度高,只需几条命令即可完成集群初始化。
    2. 官方维护,兼容性和稳定性有保障,支持集群升级。
    3. 学习成本低,无需深入理解 K8s 组件底层细节。
  • 关键步骤
    1. 准备至少 2 台 Linux 服务器(推荐 CentOS/Ubuntu),配置静态 IP、关闭防火墙和 SELinux。
    2. 在所有节点安装 Docker、kubeadm、kubelet 和 kubectl。
    3. 在主节点(Master)执行kubeadm init初始化控制平面。
    4. 按照初始化输出的提示,在主节点配置 kubectl 命令行工具。
    5. 在从节点(Worker)执行kubeadm join命令,将节点加入集群。

二进制手动部署(适合对集群有深度控制需求的场景)

通过手动下载 K8s 各组件(如 kube-apiserver、kube-controller-manager)的二进制包,逐一配置启动,灵活性最高但复杂度也最大。

  • 核心优势
    1. 组件版本、配置参数可完全自定义,适合特殊业务需求。
    2. 无依赖工具,集群性能和资源占用可控性更强。
    3. 能深入理解 K8s 各组件的工作原理,便于问题排查。
  • 核心劣势
    1. 部署步骤繁琐,需手动配置证书、服务启停脚本、网络插件等。
    2. 集群升级、维护成本高,需手动处理组件依赖和版本兼容。

Minikube搭建(学习)
Minikube 是 Kubernetes 官方推荐的本地单节点测试 / 学习环境搭建工具,核心优势是 轻量、一键部署、资源占用低,适合新手入门学习、本地开发测试(无需多台服务器),但不适合生产环境(仅单节点,无高可用)。

云服务商托管部署(适合企业级生产环境)

阿里云(ACK)、腾讯云(TKE)、AWS(EKS)等云厂商提供托管 K8s 服务,无需手动维护控制平面,专注于业务容器管理。

  • 核心优势
    1. 控制平面(Master 节点)由云厂商托管,无需担心高可用和运维。
    2. 支持弹性扩容、自动修复节点,与云厂商的存储、网络服务无缝集成。
    3. 提供监控、日志、告警等配套工具,降低运维复杂度。
  • 核心劣势
    1. 长期使用有服务费用,成本高于自建集群。
    2. 对云厂商有一定依赖,迁移到其他平台需额外适配。

minikube搭建

主要是为了学习k8s相关命令。

Docker环镜:

1
2
3
4
# 查看版本(需 >= 19.03)
docker --version
# 查看 Docker 状态(无报错即可)
docker info

Mac os

1
brew install minikube
1
minikube version

linux

购买2C8G的虚拟机 中国香港

1
2
3
4
5
6
# 安装docker
yum -y install docker-ce
docker -v
systemctl enable docker.service
systemctl start docker
systemctl status docker
1
docker info
1
2
3
4
5
# 如果下载慢,先下下来再上传
curl -LO https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-amd64
install minikube-linux-amd64 /usr/local/bin/minikube

minikube version

启动

1
2
# minikube start --force minikube的docker驱动不允许使用root用户启动
minikube start

安装kubectl用于验证:

1
2
3
4
5
6
7
8
9
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-\$basearch/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
1
yum install -y kubectl

命令

查看k8s集群信息

1
kubectl cluster-info
1
2
3
4
5
kubectl cluster-info
Kubernetes control plane is running at https://192.168.49.2:8443
CoreDNS is running at https://192.168.49.2:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

查看节点信息

1
kubectl get node
1
2
NAME       STATUS   ROLES           AGE     VERSION
minikube Ready control-plane 6m39s v1.34.0

查看内部组件

1
kubectl get pod -A
1
2
3
4
5
6
7
8
NAMESPACE     NAME                               READY   STATUS    RESTARTS        AGE
kube-system coredns-66bc5c9577-nvh5f 1/1 Running 0 8m5s
kube-system etcd-minikube 1/1 Running 0 8m11s
kube-system kube-apiserver-minikube 1/1 Running 0 8m11s
kube-system kube-controller-manager-minikube 1/1 Running 0 8m11s
kube-system kube-proxy-67bvn 1/1 Running 0 8m5s
kube-system kube-scheduler-minikube 1/1 Running 0 8m11s
kube-system storage-provisioner 1/1 Running 1 (7m35s ago) 8m10s

部署Nginx

1
kubectl create deployment my-nginx --image=nginx:1.23.0

查看deployment和pod

1
kubectl get deployment,pod,svc
1
2
3
4
5
6
7
8
NAME                       READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/my-nginx 1/1 1 1 45s

NAME READY STATUS RESTARTS AGE
pod/my-nginx-99d9f854c-jr4zd 1/1 Running 0 45s

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10m

暴露80端⼝, 就是service服务

1
kubectl expose deployment my-nginx --port=80 --type=NodePort

转发端⼝(Mini Kube临时)

1
2
3
4
kubectl port-forward --address 0.0.0.0 service/my-nginx 80:80

解释:
kubectl port-forward 转发⼀个本地端⼝到 Pod 端⼝,不会返回数据,需要打开另⼀个终端来继续这个练习

在浏览器访问,可以看到nginx的index.html

Minikube vs Kubeadm 的网络差异

1. Kubeadm 集群的网络(直接暴露)

Kubeadm 是把 Kubernetes 组件(apiserver、kubelet 等)直接部署在宿主机上(或物理节点):

  • NodePort 服务会在 宿主机的物理网卡 上监听一个端口(比如 30000-32767 之间);
  • 所以你能直接用「宿主机 IP + NodePort 端口」访问(比如 http://192.168.1.100:30080),因为宿主机的端口和 Kubernetes 服务是 “直接绑定” 的。

2. Minikube 集群的网络(隔离在虚拟环境)

Minikube 为了 “一键搭建、不污染宿主机”,会创建一个 独立的虚拟环境(默认是 Docker 容器,也支持 VM):

  • 这个虚拟环境相当于一个 “迷你虚拟机”,有自己独立的内网 IP(比如你之前看到的 192.168.49.2);
  • Kubernetes 集群的所有组件(包括 NodePort 服务)都运行在这个 “虚拟环境” 内部,没有直接绑定宿主机的端口
  • 宿主机和 Minikube 虚拟环境之间是隔离的,所以你直接用「宿主机 IP + NodePort 端口」访问时,宿主机根本不知道这个端口对应的服务在哪里 —— 相当于 “门牌号指到了小区门口,但小区里的房子藏在独立院子里,外面进不去”。

“minikube service” 和 “端口转发” 的本质:打通隔离的 “通道”

既然 Minikube 的服务藏在 “虚拟环境” 里,就需要两种方式 “打通通道”,让外部(宿主机或公网)能访问:

1. minikube service(内网访问:宿主机→Minikube 虚拟环境)

minikube service <服务名> --url 是 Minikube 内置的 “快捷通道”,作用是:

  • 自动找到 Minikube 虚拟环境的内网 IP(比如 192.168.49.2);
  • 找到 NodePort 服务的端口(比如 30080);
  • 直接输出「Minikube 内网 IP + NodePort 端口」的访问地址(比如 http://192.168.49.2:30080)。

为什么能访问?

这个地址的 IP 是 Minikube 虚拟环境的内网 IP(宿主机能通过 Docker 桥接网络访问这个 IP),相当于 “直接访问小区里的房子门牌号”,而不是 “小区门口的门牌号”。

适用场景:

  • 仅在 宿主机内部访问(比如你在搭建 Minikube 的机器上用浏览器或 curl 访问);
  • 简单快捷,无需手动配置,适合开发 / 测试。

2. 端口转发(公网访问:外部机器→宿主机→Minikube 虚拟环境)

如果需要让 宿主机以外的机器(比如同一局域网的其他电脑、公网机器) 访问 Minikube 里的服务,就需要 “端口转发”,本质是:

  • 宿主机的物理网卡 上监听一个端口(比如 8080);
  • 把所有访问「宿主机 IP:8080」的请求,转发到「Minikube 内网 IP:NodePort 端口」(比如 192.168.49.2:30080);
  • 相当于在 “小区门口” 设一个中转站,外部访客找中转站,中转站再把人领到小区里的房子。

方式 1:kubectl 端口转发(临时,重启失效)

1
2
# 格式:kubectl port-forward svc/<服务名> 宿主机端口:服务内部端口
kubectl port-forward svc/nginx-test 8080:80

方式 2:Minikube 隧道(永久,后台运行)

1
2
# 后台启动隧道(转发所有 NodePort 服务到宿主机)
minikube tunnel &

kubernetes使用minikube安装
http://hanqichuan.com/2025/11/23/devops/kubernetes使用minikube安装/
作者
韩启川
发布于
2025年11月23日
许可协议