前言:Kubernetes环境构建的开始

学习和使用Kubernetes的第一步是构建合适的环境。根据开发目的、测试环境、生产部署等使用目的,存在多种安装选项。在本第7篇中,我们将介绍从本地开发环境到云托管服务,再到直接构建集群的方法,涵盖Kubernetes环境配置所需的一切。

1. 本地开发环境

本地开发环境最适合学习Kubernetes或开发和测试应用程序。无需额外的云成本,即可在自己的计算机上运行Kubernetes集群。

1.1 Minikube

Minikube是在本地运行单节点Kubernetes集群的最流行工具。它支持多种虚拟化驱动程序,可以在本地测试大多数Kubernetes功能。

主要特点:

  • 支持多种驱动程序(Docker、VirtualBox、Hyper-V、KVM等)
  • 通过Addons扩展功能(Ingress、Dashboard、Metrics Server等)
  • 支持多节点集群模拟
  • 可选择多种Kubernetes版本

1.2 Kind (Kubernetes in Docker)

Kind使用Docker容器作为节点来运行本地Kubernetes集群。它在CI/CD环境中特别有用,可以轻松配置多节点集群。

主要特点:

  • 只需Docker即可运行
  • 快速创建和删除集群
  • 易于配置多节点集群
  • 适合CI/CD流水线

1.3 Docker Desktop

Docker Desktop是一个集成解决方案,允许在Windows和macOS上同时使用Docker和Kubernetes。只需在设置中启用Kubernetes即可立即使用。

主要特点:

  • 安装和设置简单
  • Docker和Kubernetes集成环境
  • 通过GUI轻松管理
  • 支持自动更新

2. 云托管服务

在生产环境中,通常使用云提供商的托管Kubernetes服务。这些服务由云提供商负责控制平面管理,可以大大减少运营负担。

2.1 Amazon EKS (Elastic Kubernetes Service)

AWS提供的托管Kubernetes服务。与AWS的各种服务紧密集成。

主要特点:

  • 与AWS IAM集成的身份验证/授权
  • 与ELB、EBS、VPC等AWS服务原生集成
  • 通过Fargate实现无服务器容器运行
  • 利用AWS全球基础设施

2.2 Google GKE (Google Kubernetes Engine)

由创建Kubernetes的Google提供的托管服务。是最成熟的托管Kubernetes服务之一。

主要特点:

  • Autopilot模式实现完全托管运营
  • 自动升级和恢复
  • 与GCP服务紧密集成
  • 通过Anthos支持多云

2.3 Azure AKS (Azure Kubernetes Service)

Microsoft Azure提供的托管Kubernetes服务。与Azure生态系统完美集成。

主要特点:

  • Azure Active Directory集成
  • 与Azure DevOps联动
  • 通过Azure Monitor进行监控
  • 支持Windows容器

3. 使用kubeadm构建集群

kubeadm是Kubernetes官方提供的集群引导工具。用于在裸机服务器或VM上构建生产级集群。

3.1 前置要求

  • Linux服务器(Ubuntu、CentOS等)
  • 最少2GB RAM,2个CPU
  • 网络连接(各节点间可通信)
  • 禁用swap
  • 容器运行时(containerd、CRI-O等)

3.2 安装步骤

1. 安装容器运行时(containerd示例):

# 安装必需包
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl

# 安装containerd
sudo apt-get install -y containerd

# containerd配置
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd

2. 安装kubeadm、kubelet、kubectl:

# 添加Kubernetes apt仓库
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/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.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

# 安装包
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

3. 初始化集群(在主节点上):

# 初始化集群
sudo kubeadm init --pod-network-cidr=10.244.0.0/16

# kubectl配置
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

4. 安装CNI网络插件(Flannel示例):

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

5. 工作节点加入:

# 使用在主节点上生成的加入命令
sudo kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>

4. Minikube安装和使用方法

让我们详细了解最容易上手的Minikube。

4.1 安装

Windows (PowerShell):

# 使用Chocolatey
choco install minikube

# 或直接下载
New-Item -Path 'c:\' -Name 'minikube' -ItemType Directory -Force
Invoke-WebRequest -OutFile 'c:\minikube\minikube.exe' -Uri 'https://github.com/kubernetes/minikube/releases/latest/download/minikube-windows-amd64.exe'
$oldPath = [Environment]::GetEnvironmentVariable('Path', [EnvironmentVariableTarget]::Machine)
[Environment]::SetEnvironmentVariable('Path', "$oldPath;C:\minikube", [EnvironmentVariableTarget]::Machine)

macOS:

# 使用Homebrew
brew install minikube

# 或直接下载
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64
sudo install minikube-darwin-amd64 /usr/local/bin/minikube

Linux:

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

4.2 基本使用方法

# 启动集群
minikube start

# 使用特定驱动程序启动
minikube start --driver=docker

# 使用特定Kubernetes版本启动
minikube start --kubernetes-version=v1.29.0

# 指定资源
minikube start --cpus=4 --memory=8192

# 检查集群状态
minikube status

# 停止集群
minikube stop

# 删除集群
minikube delete

# 打开Kubernetes仪表板
minikube dashboard

# Addons管理
minikube addons list
minikube addons enable ingress
minikube addons enable metrics-server

5. kubectl安装和配置

kubectl是管理Kubernetes集群的命令行工具。几乎所有Kubernetes操作都使用它。

5.1 安装

Windows:

# 使用Chocolatey
choco install kubernetes-cli

# 或直接下载
curl.exe -LO "https://dl.k8s.io/release/v1.29.0/bin/windows/amd64/kubectl.exe"

macOS:

# 使用Homebrew
brew install kubectl

# 或直接下载
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/

Linux:

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/

5.2 自动补全设置

# Bash
echo 'source <(kubectl completion bash)' >> ~/.bashrc
source ~/.bashrc

# Zsh
echo 'source <(kubectl completion zsh)' >> ~/.zshrc
source ~/.zshrc

# 别名设置
echo 'alias k=kubectl' >> ~/.bashrc
echo 'complete -F __start_kubectl k' >> ~/.bashrc

6. 理解kubeconfig文件

kubeconfig文件包含kubectl连接集群所需的配置。默认位置是~/.kube/config

6.1 kubeconfig结构

apiVersion: v1
kind: Config
current-context: my-cluster

# 集群信息
clusters:
- name: my-cluster
  cluster:
    server: https://192.168.1.100:6443
    certificate-authority-data: LS0tLS1...

# 用户认证信息
users:
- name: admin
  user:
    client-certificate-data: LS0tLS1...
    client-key-data: LS0tLS1...

# 上下文(集群 + 用户 + 命名空间的组合)
contexts:
- name: my-cluster
  context:
    cluster: my-cluster
    user: admin
    namespace: default

6.2 上下文管理

# 查看当前上下文
kubectl config current-context

# 可用上下文列表
kubectl config get-contexts

# 切换上下文
kubectl config use-context my-other-cluster

# 创建新上下文
kubectl config set-context my-context --cluster=my-cluster --user=admin --namespace=my-namespace

# 合并多个kubeconfig文件
export KUBECONFIG=~/.kube/config:~/.kube/config-cluster2
kubectl config view --merge --flatten > ~/.kube/merged-config

7. 检查集群状态

了解确认集群正常运行的各种方法。

7.1 基本状态检查命令

# 集群信息
kubectl cluster-info

# 节点列表和状态
kubectl get nodes
kubectl get nodes -o wide

# 详细节点信息
kubectl describe node <node-name>

# 组件状态检查
kubectl get componentstatuses

# 查看所有命名空间的Pod
kubectl get pods --all-namespaces

# 查看系统Pod
kubectl get pods -n kube-system

7.2 资源使用量检查

# 节点资源使用量(需要metrics-server)
kubectl top nodes

# Pod资源使用量
kubectl top pods

# 特定命名空间的Pod资源使用量
kubectl top pods -n my-namespace

8. 命名空间管理

命名空间是在集群内逻辑分离资源的方法。可以按团队、环境(dev、staging、prod)或项目隔离资源。

8.1 默认命名空间

  • default:未指定命名空间时使用的默认命名空间
  • kube-system:Kubernetes系统组件运行的命名空间
  • kube-public:所有用户可读取的公共资源
  • kube-node-lease:用于节点心跳的命名空间

8.2 命名空间管理命令

# 命名空间列表
kubectl get namespaces
kubectl get ns

# 创建命名空间
kubectl create namespace my-namespace

# 使用YAML创建
kubectl apply -f - <<EOF
apiVersion: v1
kind: Namespace
metadata:
  name: my-namespace
  labels:
    environment: development
EOF

# 删除命名空间(内部资源也会被删除)
kubectl delete namespace my-namespace

# 在特定命名空间中操作
kubectl get pods -n my-namespace
kubectl create deployment nginx --image=nginx -n my-namespace

# 更改默认命名空间
kubectl config set-context --current --namespace=my-namespace

8.3 命名空间资源配额

# resource-quota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
  name: my-quota
  namespace: my-namespace
spec:
  hard:
    requests.cpu: "4"
    requests.memory: 8Gi
    limits.cpu: "8"
    limits.memory: 16Gi
    pods: "20"
    services: "10"
# 应用资源配额
kubectl apply -f resource-quota.yaml

# 查看资源配额
kubectl describe resourcequota my-quota -n my-namespace

结论

在本第7篇中,我们介绍了构建Kubernetes环境所需的各种方法。在本地开发环境中,可以使用Minikube或Kind快速入门;在生产环境中,可以通过云托管服务或kubeadm构建稳定的集群。

熟悉kubectl和kubeconfig的使用方法,理解集群状态检查和命名空间管理方法,就能奠定Kubernetes运维的基础。在下一篇第8篇中,我们将详细介绍Kubernetes的核心资源:Pod、Deployment和Service。