AI LLM 利器 Ollama 架构和对话处理流程解析
Ollama 概述
Ollama
是一个快速运行 LLM
(Large Language Models,大语言模型)的简便工具。通过 Ollama
,用户无需复杂的环境配置,即可轻松与大语言模型对话互动。
Ollama
是一个快速运行 LLM
(Large Language Models,大语言模型)的简便工具。通过 Ollama
,用户无需复杂的环境配置,即可轻松与大语言模型对话互动。
在云原生环境中,为确保容器化应用的安全运行,Kubernetes 利用了 Linux 内核的三大安全机制:Seccomp
、AppArmor
和 SELinux
,并引入了 Pod 安全性标准与准入控制来增强 Pod 的安全性。
在 Kubernetes 中,kube-proxy
和 CNI
插件协同工作,确保集群内 Pod 之间的互联互通。
如上图所示,假设我们有一个类型为 ClusterIP
的 Service
,它对应两个位于不同节点的 Pod。
本文将会以 CSI driver - NFS 为例,讲述 CSI
驱动的工作流程和原理。
CSI
驱动通常分为两个部分:
Controller plugin
: 负责存储资源的管理,如卷的创建、删除、扩容、快照等。Node plugin
: 处理节点级别的存储操作,负责在具体的节点上执行卷的挂载和卸载等任务。在容器化技术的演进中,OCI
(Open Container Initiative)提供了一套标准化的规范,帮助统一容器的构建、分发和运行。OCI
规范包含三个部分:
kubectl
是与 Kubernetes 集群交互的命令行工具,用户通过它可以对集群资源进行操作和管理。你有没有想过,当我们执行一条 kubectl
命令之后,背后都发生了什么?
根据通信类型,我把 kubectl
命令分为两类:单向通信和双向通信。
在互联网早期,随着连接设备数量的增加,IP 地址的管理与记忆变得越来越复杂。为了简化网络资源的访问,DNS
(Domain Name System)应运而生。DNS
的核心作用是将用户可读的域名(如 www.example.com)解析为对应的 IP 地址(如 93.184.215.34),从而使用户无需记忆复杂的数字串,便能轻松访问全球各地的网络资源。
网络是容器通信的基础,Kubernetes 本身并未提供开箱即用的网络互通功能,只提出了两点基本要求:
- pods can communicate with all other pods on any other node without NAT
- agents on a node (e.g. system daemons, kubelet) can communicate with all pods on that node
至于如何实现这些通信能力,通常依赖于 CNI
插件来完成。
当一个新的 Pod 被提交创建之后,Kubelet
、CRI
、CNI
这三个组件之间进行了哪些交互?
如上图所示:
Kubelet
从 kube-api-server 处监听到有新的 pod 被调度到了自己的节点且需要创建。Kubelet
创建 sandbox 并配置好 Pod 的环境,其中包括:Kubelet
通过 gRPC 调用 CRI
组件创建 sandbox。CRI
通过命令行调用 CNI
设置 pod 的网络。Kubelet
创建 container 阶段:CRI
拉取镜像。CRI
创建 container。CRI
启动 container。注意:
随着 Kubernetes 在云原生领域的广泛使用,流量管理成为了至关重要的一环。为了有效地管理从外部流入集群的流量,Kubernetes 提供了多种解决方案,其中最常见的是 Ingress
和新兴的 Gateway API
。