如何从零开始构建 Kubernetes 集群

KubernetesKubernetesBeginner
立即练习

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

简介

Kubernetes 是一个强大的开源容器编排系统,已成为现代应用程序部署和管理的基石。在本全面教程中,我们将引导你采用 “Kubernetes 实战” 方法,通过这种方法你将学习如何从零开始设置 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/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/delete("Delete") kubernetes/BasicCommandsGroup -.-> kubernetes/run("Run") kubernetes/CoreConceptsGroup -.-> kubernetes/architecture("Architecture") kubernetes/ClusterInformationGroup -.-> kubernetes/cluster_info("Cluster Info") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") subgraph Lab Skills kubernetes/initialization -.-> lab-390503{{"如何从零开始构建 Kubernetes 集群"}} kubernetes/get -.-> lab-390503{{"如何从零开始构建 Kubernetes 集群"}} kubernetes/create -.-> lab-390503{{"如何从零开始构建 Kubernetes 集群"}} kubernetes/delete -.-> lab-390503{{"如何从零开始构建 Kubernetes 集群"}} kubernetes/run -.-> lab-390503{{"如何从零开始构建 Kubernetes 集群"}} kubernetes/architecture -.-> lab-390503{{"如何从零开始构建 Kubernetes 集群"}} kubernetes/cluster_info -.-> lab-390503{{"如何从零开始构建 Kubernetes 集群"}} kubernetes/describe -.-> lab-390503{{"如何从零开始构建 Kubernetes 集群"}} end

Kubernetes 基础

Kubernetes 基础介绍

Kubernetes 是一个强大的容器编排平台,旨在自动化容器化应用程序的部署、扩展和管理。作为一个云原生平台,它为高效管理复杂的分布式系统提供了强大的基础设施。

核心架构概述

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

关键组件

组件 功能 职责
主节点 集群管理 控制和协调集群操作
工作节点 应用托管 运行容器化应用程序
Pod 基本部署单元 最小的可部署计算单元
服务 网络抽象 公开和负载均衡应用程序

基本配置示例

这是一个适用于 Ubuntu 22.04 的简单 Pod 配置:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
    - name: nginx
      image: nginx:latest
      ports:
        - containerPort: 80

容器运行时设置

要为 Kubernetes 准备一个 Ubuntu 22.04 系统,请安装容器运行时:

## 更新系统软件包
sudo apt update

## 安装 Docker
sudo apt install docker.io -y

## 启用 Docker 服务
sudo systemctl enable docker
sudo systemctl start docker

集群初始化

在 Ubuntu 上初始化 Kubernetes 集群:

## 安装 kubeadm、kubelet、kubectl
sudo apt install kubeadm kubelet kubectl -y

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

本节介绍 Kubernetes 基础,重点介绍其架构、核心组件以及云原生环境中容器编排的基本配置策略。

集群配置

Kubernetes 集群基础设施供应

Kubernetes 集群配置涉及建立一个强大且可扩展的基础设施,以支持跨多个节点的容器编排。此过程需要仔细规划和精确的网络配置。

网络配置拓扑

graph TD A[主节点] --> B[控制平面网络] A --> C[Pod 网络] A --> D[服务网络] B --> E[API 服务器] C --> F[容器网络接口] D --> G[负载均衡器]

集群网络配置类型

网络类型 CIDR 范围 用途
Pod 网络 10.244.0.0/16 容器间通信
服务网络 10.96.0.0/12 内部服务发现
节点网络 主机 IP 范围 外部连接

使用 kubeadm 初始化集群

为在 Ubuntu 22.04 上部署 Kubernetes 集群做准备:

## 禁用交换空间
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

## 配置内核模块
sudo tee /etc/modules-load.d/k8s.conf << EOF
overlay
br_netfilter
EOF

## 加载内核模块
sudo modprobe overlay
sudo modprobe br_netfilter

## 配置网络设置
sudo tee /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

## 应用 sysctl 设置
sudo sysctl --system

多节点集群配置

使用独特的配置来配置主节点和工作节点:

## 在主节点上
--pod-network-cidr=10.244.0.0/16 \
--kubernetes-version=v1.26.0

## 为工作节点生成加入令牌

## 在工作节点上
--token <令牌> \
--discovery-token-ca-cert-hash <哈希值>

网络插件安装

安装用于 Pod 网络的 Flannel 网络插件:

kubectl apply -f

本节展示了全面的 Kubernetes 集群配置策略,重点是针对 Ubuntu 22.04 环境的基础设施供应、网络设置和多节点部署技术。

应用管理

Kubernetes 工作负载部署策略

Kubernetes 提供了多种部署策略来高效管理容器化应用程序,支持在分布式环境中进行动态扩展和无缝更新。

部署类型概述

graph TD A[Kubernetes 工作负载] --> B[部署] A --> C[有状态集] A --> D[守护进程集] A --> E[副本集]

工作负载管理比较

工作负载类型 用例 扩展能力
部署 无状态应用程序 水平 Pod 自动缩放
有状态集 有状态应用程序 有序、持久的扩展
守护进程集 节点级服务 每个节点的部署
副本集 副本管理 一致的 Pod 复制

应用部署示例

在 Ubuntu 22.04 上创建一个简单的 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

扩展应用工作负载

实施水平 Pod 自动缩放:

## 创建水平 Pod 自动缩放器
kubectl autoscale deployment nginx-deployment \
  --cpu-percent=50 \
  --min=2 \
  --max=10

滚动更新策略

执行零停机时间的应用程序更新:

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

## 检查滚动更新状态
kubectl rollout status deployment/nginx-deployment

服务暴露配置

通过负载均衡器服务暴露部署:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: LoadBalancer
  selector:
    app: nginx
  ports:
    - port: 80
      targetPort: 80

本节阐述了 Kubernetes 中全面的应用管理技术,展示了容器化工作负载的部署、扩展和更新策略。

总结

本 “Kubernetes 实战” 教程深入探讨了 Kubernetes 的世界,涵盖了从架构概述到应用程序的部署与管理,以及集群的安全和监控等所有内容。通过遵循这种实践方法,你将全面了解 Kubernetes 的内部工作原理,以及管理和运营一个可用于生产的 Kubernetes 集群所需的技能。