首页 » K8s » 第2章 环境搭建

第2章 环境搭建

 

本章目录(点击跳转):

本章目标:在你自己的电脑上装好一个可以随便折腾的 Kubernetes 集群,并跑通第一个应用。学 K8s 一定要动手,不要只看不练。

2.1 学习路线选择

初学者学习 K8s 有几种典型路径:

方案 说明 适合谁
minikube(本书推荐) 在本机起一个单节点集群,一条命令搞定 所有初学者
kind 用 Docker 容器模拟 K8s 节点,轻量 已会 Docker 的人、CI 场景
k3s 轻量版 K8s,一个二进制文件 想在一台小服务器上玩真集群
云厂商托管集群(ACK/EKS/GKE) 花钱,最接近生产 想直接体验生产环境

建议:先用 minikube 把本书所有内容跑通,之后想体验"多节点真集群"再上 k3s 或云上集群。本书所有命令在 minikube / kind / 云上集群都通用。

本章以 minikube 为主线(Windows + WSL2 / macOS / Linux 都支持),附带 kind 的安装方法。

2.2 安装 kubectl(命令行工具)

kubectl 是操作集群的"遥控器",任何方案都要装它。

2.2.1 Windows

# 方式一:winget 一键安装(推荐)
winget install kubectl

# 方式二:scoop
scoop install kubectl

# 验证
kubectl version --client

2.2.2 macOS

# 方式一:Homebrew
brew install kubectl

# 方式二:官方脚本
curl -LO "https://dl.k8s.io/release/$(curl -Ls https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl"
chmod +x kubectl && sudo mv kubectl /usr/local/bin/

# 验证
kubectl version --client

2.2.3 Linux

# 以 Ubuntu/Debian 为例
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://packages.cloud.google.com/apt kubernetes-main $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

sudo apt update
sudo apt install -y kubectl

# 验证
kubectl version --client

安装完成后应该看到类似输出:

Client Version: v1.35.0
Kustomize Version: v5.x.x

2.3 安装并启动 minikube

minikube 依赖一个虚拟机/容器运行时(Docker、Hyper-V、WSL2 等)。

2.3.1 Windows(WSL2,推荐)

  1. 安装 WSL2:
# 管理员 PowerShell
wsl --install
# 重启后安装一个发行版,比如:
wsl --install -d Ubuntu
  1. 在 WSL2(Ubuntu)里安装 Docker Desktop 的 WSL 集成,或直接在 WSL2 里装 minikube 使用 docker 驱动。最简单的组合是 Docker Desktop + WSL2 后端:
# 安装 Docker Desktop(Windows)
winget install Docker.DockerDesktop
  1. Docker Desktop 设置里勾选 "Use the WSL 2 based engine"。
  2. 安装 minikube(在 WSL2 的 Ubuntu 里执行,这样网络和文件系统最快):
curl -Lo minikube https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-amd64
chmod +x minikube
sudo mv minikube /usr/local/bin/
minikube version

2.3.2 macOS

brew install minikube
minikube version

2.3.3 Linux

curl -Lo minikube https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-amd64
chmod +x minikube
sudo mv minikube /usr/local/bin/

2.3.4 启动集群

# Windows(用 Docker 驱动)
minikube start --driver=docker

# macOS(默认虚拟机驱动即可)
minikube start

# 查看状态
minikube status
minikube ip

启动成功的输出末尾会有:

Done! kubectl is now configured to use "minikube" cluster

2.3.5 常用 minikube 命令

minikube status          # 看状态
minikube stop            # 关机(省内存)
minikube start           # 再开机
minikube delete          # 彻底删除,从头再来
minikube dashboard       # 打开 Web 控制台(浏览器里看集群)
minikube service list    # 看暴露的服务

提示: minikube dashboard 是新手的好朋友:浏览器里能看 Pod、日志、YAML,不用背命令也能感受集群。

2.4 跑第一个应用:Hello Kubernetes

现在开始真刀真枪。

2.4.1 命令行方式(30 秒上手)

# 1) 创建一个 nginx Pod
kubectl run hello-web --image=nginx:1.27

# 2) 查看它是否 Running
kubectl get pods

# 3) 打开浏览器访问(minikube 特殊方式)
minikube service hello-web --url

# 或者端口转发到本地
kubectl port-forward pod/hello-web 8080:80
# 浏览器打开 http://localhost:8080 ,应该看到 "Welcome to nginx!"

kubectl get pods 输出:

NAME        READY   STATUS    RESTARTS   AGE
hello-web   1/1     Running   0          30s

字段含义:

字段 含义
NAME Pod 名字
READY 就绪容器数/总容器数,1/1 表示 1 个容器且已就绪
STATUS 状态,Running 才算正常
RESTARTS 重启次数,持续增加说明容器一直崩溃
AGE 存在时长

2.4.2 用 YAML 方式(正式做法)

创建文件 hello-pod.yaml:

apiVersion: v1
kind: Pod
metadata:
  name: hello-web
  labels:
    app: hello-web
spec:
  containers:
    - name: nginx
      image: nginx:1.27
      ports:
        - containerPort: 80

应用它:

kubectl apply -f hello-pod.yaml

# 验证
kubectl get pod hello-web -o wide

# 查看完整定义(学习资源结构的好方法)
kubectl get pod hello-web -o yaml

# 清理
kubectl delete -f hello-pod.yaml

2.4.3 用 Deployment + Service(生产形态)

创建文件 hello-app.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-web
spec:
  replicas: 2
  selector:
    matchLabels:
      app: hello-web
  template:
    metadata:
      labels:
        app: hello-web
    spec:
      containers:
        - name: nginx
          image: nginx:1.27
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: hello-web
spec:
  selector:
    app: hello-web
  ports:
    - port: 80
      targetPort: 80
kubectl apply -f hello-app.yaml
kubectl get deploy,pod,svc

现在试试"自愈":

# 干掉一个 Pod
kubectl delete pod -l app=hello-web

# 3 秒后看,K8s 会自动补一个新的
kubectl get pods -w

恭喜!你已经体验了 Kubernetes 的核心魅力:声明 2 个副本,集群里永远有 2 个。

2.5 备选方案:用 kind 建集群(了解)

如果你更喜欢"纯 Docker"的方式,kind 10 分钟就能起一个集群:

# 1) 安装 kind(Linux/macOS)
curl -Lo kind https://kind.sigs.k8s.io/dl/latest/kind-linux-amd64
chmod +x kind && sudo mv kind /usr/local/bin/

# Windows 用户在 WSL2 里安装:
curl -Lo kind https://kind.sigs.k8s.io/dl/latest/kind-linux-amd64
chmod +x kind && sudo mv kind /usr/local/bin/

# 2) 创建集群
kind create cluster --name mycluster

# 3) 验证
kubectl get nodes -o wide

# 4) 用完删除
kind delete cluster --name mycluster

2.6 环境检查清单

开始后面的章节前,确认这些都通过:

# 1) kubectl 能连上集群
kubectl cluster-info

# 2) 节点健康
kubectl get nodes

# 3) 能拉镜像、能跑容器(再跑一遍 hello world)
kubectl run check --image=busybox:1.36 --rm -- sh -c 'echo ok'

# 4) 核心组件都 Running
kubectl get pods -n kube-system

2.7 常见问题 FAQ

Q1:minikube start 报错,提示驱动不可用? 先确保 Docker Desktop(Windows/macOS)已启动且 WSL2 后端已开启,再 minikube start --driver=docker。

**Q2:kubectl get pods 提示 "The connection to the server was refused"?** 集群没启动。minikube start 后执行 minikube dashboard 或 kubectl get nodes 验证。

**Q3:Pod 一直 ImagePullBackOff?** 镜像拉不下来:多半是网络问题或镜像名写错。国内环境可给镜像加前缀,例如 docker.io/library/nginx:1.27 换成可用的镜像源(如阿里云 ACR 的公共镜像)。

Q4:minikube 太占内存? minikube config set memory 4096(分配 4G),然后 minikube delete && minikube start。

Q5:想完全重来?

minikube delete
minikube start

2.8 本章小结

  • 用 minikube 在本机建了单节点集群;kubectl 是所有操作的入口。
  • 跑通了三种形态:单 Pod、YAML 定义的 Pod、Deployment + Service。
  • 体验了 K8s 自愈:删 Pod 自动补。
  • 记住排障起点:kubectl get pods 看 STATUS 列。

下一章:深入 Pod——K8s 最基础也最重要的对象。

原文链接:第2章 环境搭建,转载请注明来源!

赞 0