Kubernetes 环境配置
在开始学习 Kubernetes 之前,搭建一个合适的实验环境至关重要。本章将详细介绍如何在不同平台上安装和配置 Kubernetes 环境,从本地开发环境到生产级云端集群。
环境选择指南
选择合适的 Kubernetes 环境需要考虑多个因素:你是初学者还是需要生产级集群?你在本地开发还是需要云端部署?你的机器资源是否充足?
常见环境对比
| 工具 | 特点 | 资源需求 | 适用场景 |
|---|---|---|---|
| Minikube | 单节点,简单易用,支持多种驱动 | 中等(建议 4GB+ 内存) | 学习、开发、本地测试 |
| Kind | Docker 容器作为节点,启动极快 | 低(共享 Docker 资源) | CI/CD、自动化测试、快速实验 |
| K3s | 轻量级,完整 Kubernetes 功能 | 极低(512MB 内存即可) | 边缘计算、IoT、资源受限环境 |
| Docker Desktop | 内置 Kubernetes,开箱即用 | 中等 | macOS/Windows 用户学习 |
| 云托管服务 | 生产级,高可用,免运维 | 按需付费 | 生产环境、企业应用 |
推荐选择策略
初学者:推荐从 Minikube 或 Docker Desktop 开始。它们配置简单,有完善的文档和社区支持,适合快速上手学习核心概念。
开发者:如果在本地进行应用开发和测试,Kind 是不错的选择。它启动快速,支持多节点集群,可以轻松模拟生产环境拓扑。
CI/CD 环境:Kind 是 CI 环境的最佳选择,因为它是基于 Docker 的,可以在容器中运行容器,非常适合自动化测试。
生产环境:选择云托管服务(如 EKS、GKE、ACK)是最省心的方案。它们提供了高可用、自动扩缩容、安全补丁等企业级特性。
安装 kubectl
kubectl 是与 Kubernetes 集群交互的主要命令行工具。无论你使用哪种 Kubernetes 环境,kubectl 都是必不可少的。
为什么需要 kubectl?
kubectl 是 Kubernetes 的命令行客户端,它通过 API Server 与集群通信。你将使用 kubectl 执行几乎所有操作:创建和删除资源、查看集群状态、调试应用程序、管理配置等。熟练掌握 kubectl 是使用 Kubernetes 的基本技能。
Linux
# 方法1:使用 curl 安装最新稳定版
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# 添加执行权限
chmod +x kubectl
# 移动到 PATH
sudo mv kubectl /usr/local/bin/
# 验证安装
kubectl version --client
# 方法2:使用系统包管理器
# Debian/Ubuntu
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl
# CentOS/RHEL/Fedora
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.33/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.33/rpm/repodata/repomd.xml.key
EOF
sudo yum install -y kubectl
macOS
# 方法1:使用 Homebrew(推荐)
brew install kubectl
# 方法2:使用 curl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
# 方法3:使用 MacPorts
sudo port selfupdate
sudo port install kubectl
Windows
# 方法1:使用 winget(推荐)
winget install Kubernetes.kubectl
# 方法2:使用 Chocolatey
choco install kubernetes-cli
# 方法3:使用 curl(PowerShell)
curl -LO "https://dl.k8s.io/release/v1.33.0/bin/windows/amd64/kubectl.exe"
# 将 kubectl.exe 添加到 PATH
# 方法4:使用 Scoop
scoop install kubectl
配置 kubectl
安装完成后,需要配置 kubectl 连接到你的 Kubernetes 集群。kubectl 通过 kubeconfig 文件(通常位于 ~/.kube/config)存储集群连接信息、凭证和上下文。
理解 kubeconfig 结构
kubeconfig 文件包含三个主要部分:
- clusters:定义要连接的 Kubernetes 集群(API Server 地址、CA 证书)
- users:定义用户凭证(客户端证书、Token、用户名密码)
- contexts:将用户和集群关联起来,定义默认命名空间
一个典型的 kubeconfig 文件结构:
apiVersion: v1
kind: Config
clusters:
- cluster:
server: https://kubernetes.example.com:6443
certificate-authority: /path/to/ca.crt
name: my-cluster
users:
- name: admin
user:
client-certificate: /path/to/client.crt
client-key: /path/to/client.key
contexts:
- context:
cluster: my-cluster
user: admin
namespace: default
name: my-context
current-context: my-context
常用配置命令
# 配置集群访问
kubectl config set-cluster my-cluster \
--server=https://kubernetes.example.com:6443 \
--certificate-authority=/path/to/ca.crt
# 设置凭证
kubectl config set-credentials admin \
--username=admin \
--password=secret
# 创建上下文
kubectl config set-context my-context \
--cluster=my-cluster \
--user=admin
# 切换上下文
kubectl config use-context my-context
Minikube 安装
Minikube 是在本地运行单节点 Kubernetes 的工具,是学习 Kubernetes 的首选方案。它会在你的电脑上创建一个虚拟机(或使用 Docker),并在其中运行一个完整的 Kubernetes 集群。
为什么选择 Minikube?
Minikube 有几个显著的优势使其成为学习者的理想选择:
简单易用:一条命令就能启动一个 Kubernetes 集群,无需复杂的网络和存储配置。Minikube 会自动处理所有底层细节。
功能完整:虽然是单节点集群,但 Minikube 支持几乎所有 Kubernetes 功能,包括 Dashboard、Ingress、存储插件等。你可以用它学习和测试大部分场景。
跨平台支持:Minikube 在 macOS、Linux 和 Windows 上都能运行,支持多种虚拟化驱动(VirtualBox、VMware、Hyper-V、Docker 等)。
内置插件:Minikube 提供了许多预配置的插件,如 Dashboard、Ingress Controller、Metrics Server,通过简单的命令即可启用。
安装 Minikube
# Linux x86-64(使用二进制下载)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# Linux ARM64
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-arm64
sudo install minikube-linux-arm64 /usr/local/bin/minikube
# macOS(使用 Homebrew,推荐)
brew install minikube
# macOS(使用二进制)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64
sudo install minikube-darwin-amd64 /usr/local/bin/minikube
# Windows(使用 winget,推荐)
winget install Kubernetes.minikube
# Windows(使用 Chocolatey)
choco install minikube
# Windows(使用 PowerShell 手动安装)
New-Item -Path "C:\" -Name "minikube" -ItemType "directory" -Force
Invoke-WebRequest -OutFile "C:\minikube\minikube.exe" -Uri "https://storage.googleapis.com/minikube/releases/latest/minikube-windows-amd64.exe"
# 将 C:\minikube 添加到系统 PATH
# 验证安装
minikube version
启动集群
Minikube 启动时会创建一个虚拟环境并部署 Kubernetes 组件。根据你的系统配置,可以选择不同的驱动和资源配置。
基本启动
# 使用默认配置启动(自动选择最佳驱动)
minikube start
指定资源配置
根据你的机器性能和应用需求,可以调整分配给 Minikube 的资源:
# 指定 CPU 和内存(建议至少 2 核 CPU 和 4GB 内存用于学习)
minikube start --cpus 4 --memory 8192
# 指定磁盘大小(默认 20GB,某些应用可能需要更多)
minikube start --disk-size=50g
# 组合多个参数
minikube start --cpus 4 --memory 8192 --disk-size=50g
选择驱动
Minikube 支持多种驱动来运行 Kubernetes 集群:
# 使用 Docker 驱动(推荐,最快最省资源)
minikube start --driver=docker
# 使用 VirtualBox(需要安装 VirtualBox)
minikube start --driver=virtualbox
# 使用 Hyper-V(Windows 专业版/企业版)
minikube start --driver=hyperv
# macOS 使用 Hyperkit
minikube start --driver=hyperkit
驱动选择建议:
- Docker 驱动:推荐使用。如果你的系统已安装 Docker,这是最快、最省资源的选择。
- VirtualBox/Hyper-V:当你需要完全隔离的环境时使用,但会消耗更多资源。
指定 Kubernetes 版本
学习不同版本的功能或测试兼容性时,可以指定 Kubernetes 版本:
# 查看可用版本
minikube start --help | grep version
# 启动特定版本
minikube start --kubernetes-version=v1.28.0
# 使用最新稳定版
minikube start --kubernetes-version=stable
Minikube 常用命令
# 查看状态
minikube status
# 停止集群
minikube stop
# 删除集群
minikube delete
# 启用插件
minikube addons enable ingress
minikube addons enable dashboard
# 打开 Dashboard
minikube dashboard
# 获取 IP
minikube ip
# SSH 到节点
minikube ssh
Kind 安装
Kind(Kubernetes IN Docker)使用 Docker 容器作为节点来运行 Kubernetes 集群。与 Minikube 使用虚拟机不同,Kind 直接在 Docker 容器中运行 Kubernetes,这带来了显著的速度优势。
Kind 的优势
启动极快:因为使用 Docker 容器而非虚拟机,Kind 启动一个集群只需几秒钟,远快于 Minikube。
原生多节点支持:Kind 可以轻松创建多节点集群,包括多个工作节点,这对于测试分布式场景非常有用。
CI/CD 友好:Kind 特别适合 CI 环境。许多 Kubernetes 项目(包括 Kubernetes 本身)都使用 Kind 进行端到端测试。
镜像加载高效:可以直接加载本地构建的镜像到集群,无需推送到外部仓库,加速开发迭代。
Kind vs Minikube
| 特性 | Kind | Minikube |
|---|---|---|
| 启动速度 | 快(几秒) | 较慢(分钟级) |
| 资源占用 | 低 | 较高 |
| 多节点支持 | 原生支持 | 需要额外配置 |
| 插件生态 | 较少 | 丰富 |
| 图形化工具 | 无 | 有 Dashboard |
| 适用场景 | CI/CD、测试 | 学习、开发 |
安装 Kind
# Linux x86-64
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.27.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
# Linux ARM64
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.27.0/kind-linux-arm64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
# macOS(使用 Homebrew,推荐)
brew install kind
# macOS(使用二进制)
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.27.0/kind-darwin-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
# Windows(使用 winget,推荐)
winget install kind
# Windows(使用 Chocolatey)
choco install kind
# Windows(使用 PowerShell 手动安装)
curl.exe -Lo kind-windows-amd64.exe https://kind.sigs.k8s.io/dl/v0.27.0/kind-windows-amd64
Move-Item .\kind-windows-amd64.exe c:\kind.exe
# 验证安装
kind version
创建集群
# 创建默认集群
kind create cluster
# 创建多节点集群
cat > kind-config.yaml << EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
EOF
kind create cluster --config kind-config.yaml
# 指定 Kubernetes 版本
kind create cluster --image kindest/node:v1.28.0
Kind 命令
# 列出集群
kind get clusters
# 删除集群
kind delete cluster
# 加载镜像到集群
kind load docker-image my-app:latest
# 查看节点
kind get nodes
K3s 安装
K3s 是轻量级的 Kubernetes,适合资源受限的环境。
安装 K3s
# 安装 K3s
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable=traefik" sh -
# 查看节点
kubectl get node
# 查看 K3s 状态
systemctl status k3s
# 获取 token
cat /var/lib/rancher/k3s/server/agent-node-token
K3s 客户端配置
# 配置 kubectl 访问 K3s
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
# 或者复制配置
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chmod 644 ~/.kube/config
云端集群
AWS EKS
# 安装 eksctl
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin/
# 创建集群
eksctl create cluster \
--name my-cluster \
--region us-west-2 \
--nodegroup-name my-nodes \
--node-type t3.medium \
--nodes 3
# 更新 kubeconfig
aws eks update-kubeconfig --name my-cluster --region us-west-2
Google GKE
# 安装 gcloud
curl https://sdk.cloud.google.com | bash
gcloud auth login
# 创建集群
gcloud container clusters create my-cluster \
--zone us-central1-a \
--node-locations us-central1-a
# 获取凭证
gcloud container clusters get-credentials my-cluster --zone us-central1-a
阿里云 ACK
# 安装阿里云 CLI
curl -o /usr/local/bin/aliyun https://aliyuncli.alicdn.com/aliyun-cli-linux-latest.tgz
aliyun configure
# 创建集群(需要通过控制台或 OpenAPI)
# 配置 kubeconfig
aliyun cs acknowledge-cluster-token --cluster-id <cluster-id>
集群验证
检查集群状态
# 查看节点
kubectl get nodes
# 查看系统 Pod
kubectl get pods -n kube-system
# 查看集群信息
kubectl cluster-info
# 查看 API 服务器端点
kubectl get endpoints -n default kubernetes
测试应用部署
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
# 部署应用
kubectl apply -f deployment.yaml
# 查看 Pod
kubectl get pods -l app=nginx
# 暴露服务
kubectl expose deployment nginx --port=80 --type=NodePort
# 访问应用
curl $(minikube service nginx --url)
Docker Desktop Kubernetes
如果你使用 Docker Desktop,可以直接启用内置的 Kubernetes:
# 在 Docker Desktop 设置中启用 Kubernetes
# 然后验证
kubectl config get-contexts
# 切换到 docker-desktop 上下文
kubectl config use-context docker-desktop
# 验证
kubectl get nodes
常见问题
1. 镜像拉取失败
# 配置镜像加速器
minikube start --image-mirror-country=cn
# 或手动配置
minikube addons configure registry-aliases
2. 资源不足
# 增加资源
minikube config set memory 8192
minikube config set cpus 4
minikube delete
minikube start
3. 网络问题
# 检查网络插件状态
kubectl get pods -n kube-system -l k8s-app=kube-proxy
# 重置集群网络
minikube delete
minikube start
小结
本章我们学习了:
- kubectl 安装配置:命令行工具的安装和配置
- Minikube:本地单节点 Kubernetes 环境
- Kind:使用 Docker 运行 Kubernetes
- K3s:轻量级 Kubernetes
- 云端集群:EKS、GKE、ACK 的创建和配置
- 集群验证:检查集群状态和测试部署
练习
- 在本地使用 Minikube 搭建 Kubernetes 集群
- 使用 kubectl 部署一个 nginx 应用
- 使用 Kind 创建一个多节点集群
- 配置云端 Kubernetes 集群(可选)
准备好继续学习了吗?点击下一章了解 Pod 的概念和使用!