如何在本地初始化 Kubernetes

KubernetesKubernetesBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本全面教程将指导开发者完成初始化本地 Kubernetes 环境的过程。无论你是初学者还是经验丰富的专业人士,了解如何在本地设置 Kubernetes 对于高效开发、测试和部署容器化应用程序至关重要。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/CoreConceptsGroup(["Core Concepts"]) kubernetes(("Kubernetes")) -.-> kubernetes/ClusterInformationGroup(["Cluster Information"]) kubernetes(("Kubernetes")) -.-> kubernetes/ConfigurationandVersioningGroup(["Configuration and Versioning"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/expose("Expose") kubernetes/BasicCommandsGroup -.-> kubernetes/run("Run") kubernetes/CoreConceptsGroup -.-> kubernetes/architecture("Architecture") kubernetes/ClusterInformationGroup -.-> kubernetes/cluster_info("Cluster Info") kubernetes/ConfigurationandVersioningGroup -.-> kubernetes/version("Version") subgraph Lab Skills kubernetes/initialization -.-> lab-434745{{"如何在本地初始化 Kubernetes"}} kubernetes/get -.-> lab-434745{{"如何在本地初始化 Kubernetes"}} kubernetes/create -.-> lab-434745{{"如何在本地初始化 Kubernetes"}} kubernetes/expose -.-> lab-434745{{"如何在本地初始化 Kubernetes"}} kubernetes/run -.-> lab-434745{{"如何在本地初始化 Kubernetes"}} kubernetes/architecture -.-> lab-434745{{"如何在本地初始化 Kubernetes"}} kubernetes/cluster_info -.-> lab-434745{{"如何在本地初始化 Kubernetes"}} kubernetes/version -.-> lab-434745{{"如何在本地初始化 Kubernetes"}} end

Kubernetes 基础

什么是 Kubernetes?

Kubernetes 是一个开源的容器编排平台,旨在自动化容器化应用程序的部署、扩展和管理。它最初由谷歌开发,为管理复杂的分布式系统提供了一个强大的框架。

核心概念

集群架构

graph TD A[主节点] --> B[控制平面] A --> C[工作节点] B --> D[API 服务器] B --> E[调度器] B --> F[控制器管理器] C --> G[Kubelet] C --> H[容器运行时]

关键组件

组件 描述 功能
Pod 最小的可部署单元 运行一个或多个容器
节点 物理或虚拟机 运行容器化应用程序
部署 管理副本集 确保所需数量的 Pod
服务 网络抽象 将应用程序暴露给网络

基本的 Kubernetes 对象

Pod

Pod 表示集群中正在运行的进程的单个实例。它可以包含一个或多个共享网络和存储资源的容器。

## 示例 Pod 定义
kubectl run nginx-pod --image=nginx

部署

部署描述了 Pod 的期望状态并管理其生命周期。

## 创建一个部署
kubectl create deployment nginx-deployment --image=nginx

服务

服务允许通过网络访问一组 Pod。

## 将部署暴露为服务
kubectl expose deployment nginx-deployment --port=80 --type=LoadBalancer

为什么使用 Kubernetes?

  1. 自动扩展
  2. 自我修复能力
  3. 声明式配置
  4. 高效的资源利用

开始使用 LabEx

LabEx 提供了实践 Kubernetes 的学习环境,帮助开发者在实际场景中快速理解和实践 Kubernetes 概念。

结论

了解 Kubernetes 基础对于现代云原生应用程序开发至关重要。通过掌握这些基本概念,开发者可以高效地构建、部署和管理可扩展的应用程序。

本地集群设置

前提条件

系统要求

要求 规格说明
操作系统 Ubuntu 22.04 LTS
内存 至少 4GB
CPU 2 核
磁盘空间 20GB

所需工具

## 更新系统软件包
sudo apt update && sudo apt upgrade -y

## 安装必备工具
sudo apt install -y curl wget software-properties-common

安装方法

方法一:Minikube

步骤 1:安装 Docker
sudo apt install docker.io
sudo usermod -aG docker $USER
步骤 2:安装 Minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb
sudo dpkg -i minikube_latest_amd64.deb
步骤 3:启动 Minikube
minikube start --driver=docker

方法二:Kind(Docker 中的 Kubernetes)

步骤 1:安装 Kind
curl -Lo./kind https://kind.sigs.k8s.io/dl/v0.17.0/kind-linux-amd64
chmod +x./kind
sudo mv./kind /usr/local/bin/kind
步骤 2:创建集群
kind create cluster

方法三:K3s

步骤 1:安装 K3s
curl -sfL https://get.k3s.io | sh -

集群验证

## 检查集群状态
kubectl cluster-info

## 列出节点
kubectl get nodes

集群配置工作流程

graph TD A[安装容器运行时] --> B[安装 Kubernetes 工具] B --> C[选择集群设置方法] C --> D[创建本地集群] D --> E[验证集群配置]

常见故障排除

可能出现的问题

  1. 系统资源不足
  2. Docker 配置问题
  3. 网络连接问题

验证命令

## 检查 Kubernetes 组件
kubectl get componentstatus

## 验证 Pod 网络
kubectl get pods -A

LabEx 学习环境

LabEx 提供交互式 Kubernetes 设置教程,通过逐步指导和实时反馈引导用户完成本地集群配置。

最佳实践

  1. 使用轻量级集群解决方案
  2. 分配足够的系统资源
  3. 保持工具和配置更新
  4. 定期进行集群维护

结论

设置本地 Kubernetes 集群使开发者能够在无需复杂基础设施要求的情况下,高效地进行实验、学习和开发云原生应用程序。

部署演练

部署基础

什么是 Kubernetes 部署?

部署为 Pod 和副本集提供声明式更新,支持自动扩展和自我修复机制。

graph TD A[部署配置] --> B[Pod 模板] A --> C[副本数量] A --> D[更新策略] B --> E[容器镜像] B --> F[资源限制]

创建基本部署

示例 Nginx 部署

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - containerPort: 80

部署命令

## 创建部署
kubectl apply -f nginx-deployment.yaml

## 列出部署
kubectl get deployments

## 描述部署
kubectl describe deployment nginx-deployment

扩展策略

手动扩展

## 将部署扩展到 5 个副本
kubectl scale deployment nginx-deployment --replicas=5

自动扩展

## 设置水平 Pod 自动扩缩器
kubectl autoscale deployment nginx-deployment \
  --min=2 --max=10 --cpu-percent=50

部署更新策略

策略 描述 用例
RollingUpdate 逐步替换 Pod 零停机时间部署
Recreate 在创建新 Pod 之前终止所有现有 Pod 有状态应用程序

滚动更新示例

## 更新部署镜像
kubectl set image deployment/nginx-deployment \
  nginx=nginx:1.16.1

监控部署

检查滚动更新状态

## 观察部署滚动更新
kubectl rollout status deployment/nginx-deployment

## 查看滚动更新历史记录
kubectl rollout history deployment/nginx-deployment

回滚机制

## 回滚到上一版本
kubectl rollout undo deployment/nginx-deployment

高级部署技术

蓝绿部署

graph LR A[蓝色环境] -->|切换流量| B[绿色环境] B -->|如有需要回滚| A

金丝雀部署

graph LR A[稳定版本] --> B[金丝雀版本] B -->|逐步转移流量| A

LabEx 部署见解

LabEx 提供交互式部署场景,通过实践练习帮助开发者理解复杂的 Kubernetes 部署策略。

最佳实践

  1. 使用声明式配置
  2. 实施健康检查
  3. 定义资源限制
  4. 使用一致的标签
  5. 实施适当的监控

结论

Kubernetes 部署为管理容器化应用程序提供了强大的机制,在现代云原生环境中提供了灵活性、可扩展性和可靠性。

总结

通过完成本教程,你已经学习了在本地初始化 Kubernetes 集群、配置部署以及深入了解容器编排的基本步骤。这些技能为使用 Kubernetes 技术构建可扩展且具有弹性的云原生应用程序奠定了坚实的基础。