容器与 Kubernetes 基本概念与架构

文章目录

    • [1. 典型环境层次结构](#1. 典型环境层次结构)
    • [2. Kubernetes 生态三大类](#2. Kubernetes 生态三大类)
      • [2.1 核心组件](#2.1 核心组件)
      • [2.2 集群管理工具](#2.2 集群管理工具)
      • [2.3 生态辅助工具](#2.3 生态辅助工具)
      • [2.4 资源管理关系](#2.4 资源管理关系)
    • [3. Docker 容器技术与实践](#3. Docker 容器技术与实践)
      • [3.1 镜像拉取加速](#3.1 镜像拉取加速)
      • [3.2 认证与登录](#3.2 认证与登录)
      • [3.3 常用命令](#3.3 常用命令)
      • [3.4 存储挂载方式对比](#3.4 存储挂载方式对比)
      • [3.5 docker-compose 启动](#3.5 docker-compose 启动)
      • [3.6 容器化应用部署示例](#3.6 容器化应用部署示例)
    • [4. kind 快速启动](#4. kind 快速启动)
    • [5. 参考资料](#5. 参考资料)

1. 典型环境层次结构

  1. 物理机/宿主机:运行虚拟化或容器化环境的基础硬件。
  2. 虚拟机(可选):部分场景下,容器运行在虚拟机之上,增强隔离性和资源管理。
  3. Docker(或其他容器引擎):负责容器的创建、运行和管理。
  4. Kubernetes:在容器引擎之上,负责容器集群的编排与调度。

2. Kubernetes 生态三大类

Kubernetes 生态可分为三大类:

  • 核心组件:实现集群基本功能,构成 Kubernetes 的分布式系统本体。
  • 集群管理工具:用于集群的安装、模拟、管理和测试。
  • 生态辅助工具:提升开发、部署、运维效率,简化复杂操作。

2.1 核心组件

组件 作用简介
kube-apiserver 集群 API 服务入口,所有操作都通过它进行。
etcd 分布式键值存储,保存集群所有数据。
kube-scheduler 负责 Pod 的调度。
kube-controller-manager 负责各种控制器(如副本、节点、命名空间等)。
kubelet 每个节点上的代理,负责 Pod 的生命周期管理。
kube-proxy 负责服务的网络代理和负载均衡。
container runtime 容器运行时(如 Docker、containerd),负责容器的创建和管理。

注意:Kubernetes(K8s)不是一个单一可执行程序,而是由多个核心组件(如 kube-apiserver、kubelet、etcd 等)和生态工具协同组成的分布式系统,kubectl 只是常用的客户端入口。

2.2 集群管理工具

工具 作用与简要描述
kubeadm 官方主流的生产级集群安装和生命周期管理工具,适合自建高可用生产集群。
Kind 基于 Docker 容器的本地多节点 Kubernetes 集群工具,便于本地模拟和测试。
Minikube 在本地 VM 或容器中运行单节点 Kubernetes,适合个人开发和测试。

2.3 生态辅助工具

工具 作用与简要描述
Docker 主流的容器运行时,负责容器的打包、分发、运行和隔离。
kubectl Kubernetes 官方命令行工具,管理和操作集群资源。
Helm Kubernetes 的包管理器,将应用及其所有相关资源打包为 Chart,简化安装、升级和回滚。
Skaffold 持续开发工具,自动化构建、部署并同步本地代码到集群,支持多种构建和部署后端。
  • Docker:一切容器化的基础,Kind/Minikube等本地K8s方案都依赖于 Docker 或兼容容器引擎。
  • Kind/Minikube:本地快速搭建 Kubernetes 集群,适合开发、测试和学习。
  • kubectl:与 Kubernetes 集群直接交互的 CLI,所有集群操作的标准入口。
  • Helm:K8s 应用的包管理与部署标准,提升运维效率。
  • Skaffold:本地开发到集群的自动化桥梁,适合持续集成与敏捷开发。

以上工具均为主流开源方案,广泛应用于开发、测试和生产环境。

Chart 就是 Helm 的"打包格式",负责描述、版本化、分享和管理一组 Kubernetes 资源,是 Helm 能够简化应用部署与运维的核心所在。

参考:Kubernetes官方文档

2.4 资源管理关系

  • Node:物理机或虚拟机
  • Pod:容器的运行单元
  • ReplicaSet:管理 Pod 的副本数量
  • Deployment:管理 ReplicaSet,实现应用升级、回滚
  • Service:为 Pod 提供统一入口,负责流量分发

3. Docker 容器技术与实践

3.1 镜像拉取加速

  • 镜像加速配置参考:Docker Hub 国内镜像源配置

  • 配置文件(macOS):~/docker/daemon.json

  • 示例:

    json 复制代码
    {
      "registry-mirrors": [
        "https://mi0m0nd3.mirror.aliyuncs.com",
        "https://dockerproxy.com",
        "https://mirror.baidubce.com",
        "https://docker.m.daocloud.io",
        "https://docker.nju.edu.cn",
        "https://docker.mirrors.ustc.edu.cn"
      ]
    }
  • 如遇镜像拉取失败,可用 dig 命令测试 DNS 解析,例如:

    bash 复制代码
    dig @114.114.114.114 registry-1.docker.io
  • 支持从私有仓库拉取镜像,例如:

    bash 复制代码
    docker pull 10.132.17.6:28443/nginx

3.2 认证与登录

  • 推荐使用代理或科学上网

  • 阿里云镜像仓库登录示例:

    bash 复制代码
    sudo docker login --username=xxx registry.cn-hangzhou.aliyuncs.com
  • docker login 会将认证凭据存储在配置文件(如 ~/.docker/config.json),拉取镜像时自动使用。

  • 认证和镜像加速配置均可在 config.json 查看。

安全提示:config.json 中的 auths 字段内容为 base64 编码的用户名和密码,注意保护,不要泄露。

参考:Docker CLI config reference

3.3 常用命令

  • 查看所有容器:docker ps -a

  • 启动容器:docker start <容器名>

  • 停止容器:docker stop <容器名>

  • 重启容器:docker restart <容器名>

  • 查看日志:docker logs <容器名>

  • 进入容器:docker exec -it <容器名> /bin/bash

  • 删除容器:docker rm <容器名>

  • 查看挂载:docker inspect <容器ID> | grep -A 5 "Mounts"

  • 批量删除某类容器:

    bash 复制代码
    docker ps --filter "name=llm" --format '{{.ID}}' | xargs docker rm -f
  • 其他常用命令:

    • 查看卷:docker volume ls
    • 查看详细信息:docker inspect <容器名或ID>
    • 保存镜像为文件:docker save <镜像ID> -o <文件名>
    • 构建镜像:docker build -t <镜像名> .

3.4 存储挂载方式对比

特性 命名卷(-v volume_name:/container/path) 宿主机目录挂载(-v /host/path:/container/path)
可移植性 更好,不依赖宿主机路径 较差,依赖宿主机目录结构
备份管理 由 Docker 集中管理 需手动管理宿主机目录
访问便捷性 不易直接访问内容 可直接在宿主机上查看和修改
性能 取决于 Docker 存储驱动 直接访问宿主机文件系统
用途 应用数据、数据库存储 代码开发、配置文件、日志输出

3.5 docker-compose 启动

bash 复制代码
docker-compose --compatibility up -d

如使用代理,需确保 Docker Desktop 已开启代理。

3.6 容器化应用部署示例

PostgreSQL 15 容器部署:

bash 复制代码
docker run --name postgres15 \
  -p 5432:5432 \
  -e POSTGRES_PASSWORD=your_password \
  -v postgres_data:/var/lib/postgresql/data \
  -d postgres:15-alpine

4. kind 快速启动

bash 复制代码
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 create cluster

验证 API Server 是否正常响应:

bash 复制代码
kubectl --context kind-kind get --raw /

5. 参考资料

相关推荐
掘金-我是哪吒1 小时前
分布式微服务系统架构第156集:JavaPlus技术文档平台日更-Java线程池使用指南
java·分布式·微服务·云原生·架构
国服第二切图仔1 小时前
文心开源大模型ERNIE-4.5-0.3B-Paddle私有化部署保姆级教程及技术架构探索
百度·架构·开源·文心大模型·paddle·gitcode
SelectDB2 小时前
SelectDB 在 AWS Graviton ARM 架构下相比 x86 实现 36% 性价比提升
大数据·架构·aws
weixin_437398213 小时前
转Go学习笔记(2)进阶
服务器·笔记·后端·学习·架构·golang
liulilittle4 小时前
SNIProxy 轻量级匿名CDN代理架构与实现
开发语言·网络·c++·网关·架构·cdn·通信
喷火龙8号4 小时前
深入理解MSC架构:现代前后端分离项目的最佳实践
后端·架构
Codebee4 小时前
“自举开发“范式:OneCode如何用低代码重构自身工具链
java·人工智能·架构
掘金-我是哪吒5 小时前
分布式微服务系统架构第158集:JavaPlus技术文档平台日更-JVM基础知识
jvm·分布式·微服务·架构·系统架构
JohnYan5 小时前
模板+数据的文档生成技术方案设计和实现
javascript·后端·架构
Da_秀5 小时前
软件工程中耦合度
开发语言·后端·架构·软件工程