6 posts tagged with "k8s"
View All Tagsdjango 安装prometheus exporter
https://github.com/korfuri/django-prometheus
新增路径
path('prometheus/', include('django_prometheus.urls')),
查看
http://0.0.0.0:8101/prometheus/metrics
最后想了想
其实在 nginx 上装就行了 放弃
qdrant 安装和部署
Qdrant是一个开源的向量数据库,专门用于存储和检索高维向量数据。它提供了一种高效的方式来处理大规模的向量数据,例如图像、文本、音频等。以下是Qdrant的一些功能和特性:
-
高维向量存储:Qdrant专注于存储和检索高维向量数据,能够有效地处理数百甚至数千维的向量。
-
相似度搜索:Qdrant支持根据向量之间的相似度进行搜索和检索,可以快速找到与查询向量最相近的向量。
-
多种索引算法:Qdrant支持多种索引算法,包括HNSW(Hierarchical Navigable Small World)和FAISS(Facebook AI Similarity Search)等,以提高检索效率。
-
分布式存储:Qdrant可以在分布式环境中部署,支持数据的分片和复制,以提高系统的可扩展性和容错性。
-
RESTful API:Qdrant提供了基于RESTful API的接口,使用户可以方便地与数据库进行交互和管理。
-
灵活的配置选项:Qdrant提供了丰富的配置选项,用户可以根据自己的需求进行调整和优化。
-
开源和可扩展: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进行相似度搜索。
k8s-core-dns 支持 外部 dns 解析
修改 配置
修改 forward 配置
promtail 收集 k8s 日志踩坑
创建服务账号
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 才可以收到
k3s 拉取私有镜像 和 代理镜像配置
写在 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
然后记得重启
service k3s restart
service k3s-agent restart