Skip to main content

6 posts tagged with "k8s"

View All Tags

qdrant 安装和部署

· 5 min read
timger
timger

Qdrant是一个开源的向量数据库,专门用于存储和检索高维向量数据。它提供了一种高效的方式来处理大规模的向量数据,例如图像、文本、音频等。以下是Qdrant的一些功能和特性:

  1. 高维向量存储:Qdrant专注于存储和检索高维向量数据,能够有效地处理数百甚至数千维的向量。

  2. 相似度搜索:Qdrant支持根据向量之间的相似度进行搜索和检索,可以快速找到与查询向量最相近的向量。

  3. 多种索引算法:Qdrant支持多种索引算法,包括HNSW(Hierarchical Navigable Small World)和FAISS(Facebook AI Similarity Search)等,以提高检索效率。

  4. 分布式存储:Qdrant可以在分布式环境中部署,支持数据的分片和复制,以提高系统的可扩展性和容错性。

  5. RESTful API:Qdrant提供了基于RESTful API的接口,使用户可以方便地与数据库进行交互和管理。

  6. 灵活的配置选项:Qdrant提供了丰富的配置选项,用户可以根据自己的需求进行调整和优化。

  7. 开源和可扩展:Qdrant是一个开源项目,用户可以根据自己的需求对其进行定制和扩展。

安装使用

https://qdrant.tech/documentation/guides/installation/

docker run -it -d \
    --name qdrant \
    -p 6333:6333 \
    -p 6334:6334 \
    -v ./qdrant_data:/qdrant/storage \
    qdrant/qdrant

访问

http://127.0.0.1:6333/dashboard

功能

以下是一个简单的Python示例,演示如何使用Qdrant加载文档数据并进行相似度搜索以及Range搜索:

import requests

# 定义Qdrant的API地址
QDRANT_API_URL = 'http://localhost:6333'

# 加载文档数据
def load_documents(documents):
response = requests.post(f'{QDRANT_API_URL}/collection', json={'documents': documents})
return response.json()

# 进行相似度搜索
def search_document(query_vector, top_k=5):
response = requests.post(f'{QDRANT_API_URL}/search', json={'vector': query_vector, 'top': top_k})
return response.json()

# 进行Range搜索
def range_search_document(min_range, max_range, top_k=5):
response = requests.post(f'{QDRANT_API_URL}/search', json={'range': {'min': min_range, 'max': max_range}, 'top': top_k})
return response.json()

# 示例文档数据
documents = [
{'id': '1', 'vector': [0.1, 0.2, 0.3], 'text': 'Document 1'},
{'id': '2', 'vector': [0.4, 0.5, 0.6], 'text': 'Document 2'},
{'id': '3', 'vector': [0.7, 0.8, 0.9], 'text': 'Document 3'}
]

# 加载文档数据
load_documents(documents)

# 查询文档
query_vector = [0.2, 0.3, 0.4]
result = search_document(query_vector)

print(result)

# Range搜索文档
min_range = 0.4
max_range = 0.6
result = range_search_document(min_range, max_range)

print(result)

在这个示例中,我们首先定义了Qdrant的API地址,并编写了三个函数:load_documents用于加载文档数据,search_document用于进行相似度搜索,range_search_document用于进行Range搜索。然后我们定义了一些示例的文档数据,加载文档数据并查询一个文档的相似文档以及进行Range搜索。最后打印出搜索结果。

Qdrant是一个向量索引库,它的搜索功能是基于向量相似度的。因此,查询向量(query_vector)通常是一个数值向量,表示待搜索的文档或查询的特征。如果要将文字转换为向量进行搜索,可以使用文本嵌入模型(如Word2Vec、BERT等)将文字转换为数值向量,然后再进行搜索。在实际应用中,可以先将文字转换为向量,然后再将向量传递给Qdrant进行相似度搜索。

promtail 收集 k8s 日志踩坑

· 3 min read
timger
timger

创建服务账号

apiVersion: v1

kind: ServiceAccount

metadata:

name: promtail-serviceaccount

namespace: monitor



---

apiVersion: rbac.authorization.k8s.io/v1

kind: ClusterRole

metadata:

name: promtail-clusterrole

#namespace: monitor

rules:

- apiGroups: [""]

resources:

- nodes

- services

- pods

- namespaces

- configmaps

- jobs

- cronjobs

- persistentvolumeclaims

- ingresses

- deployments

- replicationcontrollers

verbs:

- get

- watch

- list

- apiGroups:

- apps

resources:

- deployments

verbs:

- get

- list

- watch



---

apiVersion: rbac.authorization.k8s.io/v1

kind: ClusterRoleBinding

metadata:

name: promtail-clusterrolebinding

#namespace: monitor

subjects:

- kind: ServiceAccount

name: promtail-serviceaccount

namespace: monitor

- kind: User

name: danny

#- kind: ServiceAccount

# name: promtail-serviceaccount

# namespace: foldspace-apps

#- kind: ServiceAccount

# name: promtail-serviceaccount

# namespace: default

#- kind: ServiceAccount

# name: promtail-serviceaccount

# namespace: dapr-system

#- kind: ServiceAccount

# name: promtail-serviceaccount

# namespace: openfunction

#- kind: ServiceAccount

# name: promtail-serviceaccount

# namespace: kube-system

#- kind: ServiceAccount

# name: promtail-serviceaccount

# namespace: kubernetes-dashboard

#- kind: ServiceAccount

# name: promtail-serviceaccount

# namespace: kube-public

#- kind: ServiceAccount

# name: promtail-serviceaccount

# namespace: ingress-apisix

roleRef:

kind: ClusterRole

name: promtail-clusterrole

#name: admin

apiGroup: rbac.authorization.k8s.io

创建部署

apiVersion: v1

kind: ConfigMap

metadata:

name: promtail-configmap

namespace: monitor

data:

promtail.yaml: |-

server:

http_listen_port: 9080

grpc_listen_port: 0



positions:

filename: /tmp/positions.yaml



clients:

- url: http://192.168.31.203:3100/loki/api/v1/push #${ip}填入loki的对应地址



scrape_configs:

- job_name: kubernetes-pods-app

pipeline_stages:

- docker: {}

kubernetes_sd_configs:

- role: pod

relabel_configs:

- action: drop

regex: .+

source_labels:

- __meta_kubernetes_pod_label_name

- source_labels:

- __meta_kubernetes_pod_label_app

target_label: __service__

- source_labels:

- __meta_kubernetes_pod_node_name

target_label: __host__

- action: replace

replacement: $1

separator: /

source_labels:

- __meta_kubernetes_namespace

- __meta_kubernetes_pod_name

target_label: job

- action: replace

source_labels:

- __meta_kubernetes_namespace

target_label: namespace

- action: drop

regex: ''

source_labels:

- __service__

- action: labelmap

regex: __meta_kubernetes_pod_label_(.+)

- replacement: /var/log/pods/*$1/*.log

separator: /

source_labels:

- __meta_kubernetes_pod_uid

- __meta_kubernetes_pod_container_name

target_label: __path__




---

apiVersion: apps/v1

kind: DaemonSet

metadata:

name: promtail-log-collector

namespace: monitor

labels:

app: promtail

spec:

selector:

matchLabels:

app: promtail

type: daemonset

author: danny

template:

metadata:

labels:

app: promtail

type: daemonset

author: danny

spec:

containers:

- name: promtail

image: registry.dafengstudio.cn/grafana/promtail:2.9.2

args:

- -config.file=/etc/promtail/promtail.yaml

- -config.expand-env=true

env:

- name: HOSTNAME

valueFrom:

fieldRef:

apiVersion: v1

fieldPath: spec.nodeName

- name: TZ

value: Asia/Shanghai

ports:

- containerPort: 3101

name: http-metrics

protocol: TCP

securityContext:

#readOnlyRootFilesystem: true

runAsGroup: 0

runAsUser: 0

volumeMounts:

- mountPath: /etc/promtail

name: promtail-configmap

- mountPath: /run/promtail

name: run

- mountPath: /var/lib/kubelet/pods

name: kubelet

readOnly: true

- mountPath: /var/lib/docker/containers

name: docker

readOnly: true

- mountPath: /var/log/pods

name: pod-log

readOnly: true

- name: timezone

mountPath: /etc/localtime

volumes:

- configMap:

defaultMode: 420

name: promtail-configmap

name: promtail-configmap

- name: timezone

hostPath:

path: /usr/share/zoneinfo/Asia/Shanghai

- hostPath:

path: /run/promtail

type: ""

name: run

- hostPath:

path: /var/lib/kubelet/pods

type: ""

name: kubelet

- hostPath:

path: /var/lib/docker/containers

type: ""

name: docker

- hostPath:

path: /var/log/pods

type: ""

name: pod-log

serviceAccount: promtail-serviceaccount

serviceAccountName: promtail-serviceaccount

updateStrategy:

type: RollingUpdate

最后发现 好几个 namespace 的 日志怎么也收集不上开

原来发现必须要 打标 app 才可以收到

https://github.com/grafana/loki/issues/353

k3s 拉取私有镜像 和 代理镜像配置

· One min read
timger
timger

写在 2024 年 7 月 docker hub 被墙之后

/etc/rancher/k3s/registries.yaml

mirrors:
registry.dafengstudio.cn:
endpoint:
- "https://registry.dafengstudio.cn"
docker.io:
endpoint:
- https://docker.m.daocloud.io
- https://huecker.io
- https://dockerhub.timeweb.cloud
- https://noohub.ru
configs:
"registry.dafengstudio.cn":
auth:
username: xxx
password: xxxx

然后记得重启

  1. service k3s restart
  2. service k3s-agent restart