环境:ubuntu 22.04.3 LTS (虚拟机)
K8s版本:v1.22.17
参考文章:1.InfluxDB数据库快速入门与基础使用-腾讯云开发者社区-腾讯云 (tencent.com)
部署helm
helm提供了多种安装方式,具体参考:Helm | 安装Helm也可以直接选择在终端输入以下代码:
sudo snap install helm --classic
添加helm国内仓库
和其他大部分下载软件一样,helm也需要添加国内仓库,这里只列出了部署influxdb所需的仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update && helm search repo influxdb
导出YAML部署文件
在完成仓库更新后,可以找到当前可以部署的influxdb及其版本号,但此时直接部署容器状态会显示“pending”,我们可以先导出该仓库中influxdb的YAML部署文件
helm show values bitnami/influxdb > influxdb.yml
在终端中使用vim命令进入influxdb.yml文件,属性比较多,但我们只需要关注两处,分别是:
第20行的 storageClass:'' ''
第228行的 nodeSelector: {}
由于没有定义storageClass,在生成pod是会提示PVC生成失败,查阅influxdb官方文档可以找到本地PV的YAML文件。
由于版本更新,新版的PV本地部署中要求节点亲和性设置,这里直接部署到master节点上
vim local-storage.yaml
##*************************************
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: standard-resize
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: Immediate
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: influxdb-data-pv
spec:
capacity:
storage: 8Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Delete
storageClassName: local
local:
path: /var/lib/influxdb/
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- master
##********************************************
kubectl apply -f local-storage.yaml
这里我们定义了storageClass类型:local ,并分给了它8Gi的空间
因此修改influxdb.yml中
第20行的 storageClass:'' '' ------------------> storageClass:'' local''
为了保证influxdb和PV同时部署在master节点上,修改
第228行的 nodeSelector: {} ------------------> nodeSelector: {kubernetes.io/hostname: master}
(已经提前去除了master节点上的污点,部署失败可以尝试先去除master污点)
需要使用nfs类型存储的也可以使用以下文件,自行修改
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: no-provisioner
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: influxdb-data-pv-nfs
namespace: influxdata
spec:
capacity:
storage: 8Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: no-provisioner
nfs:
path: /data
server: nfs.openshift.example.com
部署influxdb
完成上述操作后,在终端输入(确保版本号正确)
helm install prometheus-influxdb bitnami/influxdb -f influxdb.yml --version 5.9.5 -n influxdb --debug --create-namespace
pod部署过程会比较长,可能会出现pod显示running的同时unready,等待容器彻底运行起来即可
端口映射
此时这个容器是没有Nodeport端口供我们访问的,需要修改svc文件
kubectl edit svc -n influxdb prometheus-influxdb
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Service
metadata:
annotations:
meta.helm.sh/release-name: prometheus-influxdb
meta.helm.sh/release-namespace: influxdb
creationTimestamp: "2023-10-09T07:15:26Z"
labels:
app.kubernetes.io/component: influxdb
app.kubernetes.io/instance: prometheus-influxdb
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: influxdb
app.kubernetes.io/version: 2.7.1
helm.sh/chart: influxdb-5.9.5
name: prometheus-influxdb
namespace: influxdb
resourceVersion: "188524"
uid: f0827c4b-0afd-4e26-80d9-75ff90110b27
spec:
clusterIP: 10.97.109.86
clusterIPs:
- 10.97.109.86
externalTrafficPolicy: Cluster
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- nodePort: 31523
port: 8086
protocol: TCP
targetPort: 8086
selector:
app.kubernetes.io/component: influxdb
app.kubernetes.io/instance: prometheus-influxdb
app.kubernetes.io/name: influxdb
sessionAffinity: None
type: NodePort
status:
loadBalancer: {}
修改完成后在网页输入:主机IP:31523 即可进入influxdb网页,也可以在终端进入容器直接操作数据库