容器与 Kubernetes 基本概念与架构
文章目录
- 1. 典型环境层次结构
- 2. Kubernetes 生态三大类
- 2.1 核心组件
- 2.2 集群管理工具
- 2.3 生态辅助工具
- 2.4 资源管理关系
- 3. Docker 容器技术与实践
- 3.1 镜像拉取加速
- 3.2 认证与登录
- 3.3 常用命令
- 3.4 存储挂载方式对比
- 3.5 docker-compose 启动
- 3.6 容器化应用部署示例
- 4. kind 快速启动
- 5. 参考资料
1. 典型环境层次结构
- 物理机/宿主机:运行虚拟化或容器化环境的基础硬件。
- 虚拟机(可选):部分场景下,容器运行在虚拟机之上,增强隔离性和资源管理。
- Docker(或其他容器引擎):负责容器的创建、运行和管理。
- 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
- 示例:
{"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 解析,例如:
dig @114.114.114.114 registry-1.docker.io
- 支持从私有仓库拉取镜像,例如:
docker pull 10.132.17.6:28443/nginx
3.2 认证与登录
- 推荐使用代理或科学上网
- 阿里云镜像仓库登录示例:
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"
- 批量删除某类容器:
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 启动
docker-compose --compatibility up -d
如使用代理,需确保 Docker Desktop 已开启代理。
3.6 容器化应用部署示例
PostgreSQL 15 容器部署:
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 快速启动
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 是否正常响应:
kubectl --context kind-kind get --raw /
5. 参考资料
- Kubernetes官方文档
- Docker Hub国内镜像源配置
- minikube常见问题解答
- Docker万字教程:从入门到掌握
- Docker CLI config reference