一、 核心概念与定位

Minikube:Kubernetes 官方提供的单节点本地学习/测试沙盒。
架构逻辑:通过 Docker 驱动,在宿主机上启动一个名为 minikube 的容器(采用 Docker-in-Docker 架构),该容器内部完整集成了 K8s 控制面与工作节点。

组件分工:
minikube:环境部署与集群生命周期管理工具(创建、启动、停止)。
kubectl:集群交互命令行客户端,用于向 K8s API Server 发送 YAML 部署指令。
生产对比:生产环境通常采用 Kubeadm 自动化搭建高可用集群,或直接使用 公有云托管 K8s(如 ACK / EKS);Minikube 仅用于本地开发调试。

二、 实战详细过程(从零到部署)

Step 1: 下载二进制文件(Binary Files)

在 Linux (CentOS/Ubuntu) 环境下,直接下载所需的二进制工具(先获取稳定版本号再下载 kubectl,避免指令嵌套):

1. 下载 minikube 可执行文件
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
2. 获取 K8s 最新稳定版本号并下载 kubectl 客户端
K8S_VERSION=$(curl -s https://dl.k8s.io/release/stable.txt)
curl -LO "https://dl.k8s.io/release/${K8S_VERSION}/bin/linux/amd64/kubectl"
3. 赋予可执行权限并移入系统 PATH
chmod +x minikube kubectl
sudo mv minikube kubectl /usr/local/bin/

Step 2: 启动 Minikube 集群

指定使用 Docker 作为容器运行时驱动来启动单节点 K8s:

minikube start --driver=docker

Step 3: 编写配置与部署应用

编写测试 YAML 配置文件,并使用 kubectl 进行提交:

应用部署配置 (例如 whoami / httpbin)
kubectl apply -f app.yaml
kubectl apply -f ingress.yaml
查看 Pod 运行状态
kubectl get pods -A
SSH 进入 minikube 节点内部
minikube ssh
在节点内部查看 K8s 拉起的底层应用容器
docker ps

三、 总结全链路架构

【宿主机环境】 ──(执行 minikube start)──> 【Minikube Docker容器 (模拟K8s节点)】 ──(执行 kubectl apply)──> 【Pod (容器内运行的具体应用)】
链路流转四步法:
下载(Download):获取 minikube 与 kubectl 二进制文件。
初始化(Initialize):执行 minikube start,在宿主机生成一个名为 minikube 的 Docker 容器(充当 K8s 单节点)。
交互(Interact):使用 kubectl apply -f app.yaml 向 minikube 容器内的 API Server 提交配置。
运行(Run):K8s 在 minikube 节点内部拉取镜像并运行 Pod,通过 Service 或 Ingress 对外暴露服务。

四、 附录:示例配置文件

1.app.yaml

1. httpbin 部署(3 個 Pod 副本)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpbin-deploy
spec:
  replicas: 3
  selector:
    matchLabels:
      app: httpbin
  template:
    metadata:
      labels:
        app: httpbin
    spec:
      containers:
      - name: httpbin
        image: kennethreitz/httpbin
        ports:
        - containerPort: 80

---
2. httpbin Service (內部 ClusterIP)
apiVersion: v1
kind: Service
metadata:
  name: httpbin-svc
spec:
  type: ClusterIP
  selector:
    app: httpbin
  ports:
  - port: 80
    targetPort: 80

---
3. whoami 部署(3 個 Pod 副本)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: whoami-deploy
spec:
  replicas: 3
  selector:
    matchLabels:
      app: whoami
  template:
    metadata:
      labels:
        app: whoami
    spec:
      containers:
      - name: whoami
        image: traefik/whoami
        ports:
        - containerPort: 80

---
4. whoami Service (內部 ClusterIP)
apiVersion: v1
kind: Service
metadata:
  name: whoami-svc
spec:
  type: ClusterIP
  selector:
    app: whoami
  ports:
  - port: 80
    targetPort: 80

2.ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /httpbin(/|$)(.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: httpbin-svc
            port:
              number: 80
      - path: /whoami(/|$)(.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: whoami-svc
            port:
              number: 80

标签: none

评论已关闭