mirror of https://github.com/easzlab/kubeasz.git
更新heapster监控持久化配置和文档
parent
84b46057a7
commit
556c2a51a5
|
@ -1,6 +1,6 @@
|
|||
## heapster
|
||||
|
||||
本文档基于heapster 1.5.1和k8s 1.9.x,旧版文档请看[heapster 1.4.3](heapster.1.4.3.md)
|
||||
+ 本文档基于heapster 1.5.1和k8s 1.9.x,旧版文档请看[heapster 1.4.3](heapster.1.4.3.md)
|
||||
|
||||
`Heapster` 监控整个集群资源的过程:首先kubelet内置的cAdvisor收集本node节点的容器资源占用情况,然后heapster从kubelet提供的api采集节点和容器的资源占用,最后heapster 持久化数据存储到`influxdb`中(也可以是其他的存储后端,Google Cloud Monitoring等)。
|
||||
|
||||
|
@ -28,7 +28,7 @@
|
|||
#### influxdb.yaml配置
|
||||
|
||||
+ influxdb 官方建议使用命令行或 HTTP API 接口来查询数据库,从 v1.1.0 版本开始默认关闭 admin UI, 从 v1.3.3 版本开始已经移除 admin UI 插件,如果你因特殊原因需要访问admin UI,请使用 v1.1.1 版本并使用configMap 配置开启它。参考[heapster 1.4.3](heapster.1.4.3.md),具体配置yaml文件参考[influxdb v1.1.1](../../manifests/heapster/influxdb-v1.1.1/influxdb.yaml)
|
||||
|
||||
+ 如果你需要监控持久化存储支持,请参考[influxdb-with-pv.md](influxdb-with-pv.md)
|
||||
|
||||
### 验证
|
||||
|
||||
|
|
|
@ -0,0 +1,76 @@
|
|||
## 监控数据持久化
|
||||
部署[heapster](heapster.md)时我们知道监控数据是持久化存储到`influxdb`中的,但是在influxdb.yaml文件中存储使用的是`emptyDir`类型,所以当influxdb POD被删除时,监控数据也就丢失了。本文档讲解一个使用nfs持久化保存监控数据的例子。
|
||||
|
||||
### 前提
|
||||
环境准备一个nfs服务器,如果没有可以参考[nfs-server](nfs-server.md)创建。
|
||||
|
||||
### 创建 PV
|
||||
PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 提供了方便的持久化卷;`PV` 是集群的存储资源,就像 `node`是集群的计算资源,PV 可以静态或动态创建,这里使用静态方式创建;`PVC` 就是用来申请`PV` 资源,它可以直接挂载在`POD` 里面使用。更多知识请访问[官网](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims)。根据你监控日志的多少和需保存时间需求创建固定大小的`PV` 资源,例子:
|
||||
|
||||
``` bash
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: pv-influxdb
|
||||
spec:
|
||||
capacity:
|
||||
storage: 5Gi
|
||||
accessModes:
|
||||
- ReadWriteMany
|
||||
volumeMode: Filesystem
|
||||
persistentVolumeReclaimPolicy: Recycle
|
||||
storageClassName: slow
|
||||
nfs:
|
||||
# 根据实际共享目录修改
|
||||
path: /share
|
||||
# 根据实际 nfs服务器地址修改
|
||||
server: 192.168.1.208
|
||||
```
|
||||
|
||||
### 修改influxdb 存储卷
|
||||
|
||||
使用PVC 替换 volumes `emptyDir:{}`,创建PVC 如下:
|
||||
|
||||
``` bash
|
||||
kind: PersistentVolumeClaim
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: influxdb-claim
|
||||
namespace: kube-system
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteMany
|
||||
volumeMode: Filesystem
|
||||
resources:
|
||||
requests:
|
||||
storage: 3Gi
|
||||
storageClassName: slow
|
||||
```
|
||||
+ 注意`PV` 是不区分namespace,而`PVC` 是区分namespace的
|
||||
|
||||
### 安装持久化监控
|
||||
|
||||
如果之前已经安装本项目创建了`heapster`,请使用如下删除 `influxdb POD`:
|
||||
|
||||
``` bash
|
||||
kubectl delete -f /etc/ansible/manifests/heapster/influxdb.yaml
|
||||
```
|
||||
|
||||
然后使用如下命令新建持久化的 `influxdb POD` :
|
||||
|
||||
``` bash
|
||||
kubectl create -f /etc/ansible/manifests/heapster/influxdb-with-pv/
|
||||
```
|
||||
|
||||
### 验证监控数据的持久性
|
||||
|
||||
手动删除 `influxdb` POD,半小时后再次创建,登陆grafana 确认历史数据是否还在。
|
||||
|
||||
``` bash
|
||||
# 删除 influxdb deploy
|
||||
kubectl delete -f /etc/ansible/manifests/heapster/influxdb-with-pv/influxdb.yaml
|
||||
|
||||
# 等待半小时后重新创建
|
||||
kubectl create -f /etc/ansible/manifests/heapster/influxdb-with-pv/influxdb.yaml
|
||||
```
|
||||
+ 如果同时删除了 influxdb-pvc,那么根据策略`Recycle`监控历史数据也就删除了。
|
|
@ -0,0 +1,76 @@
|
|||
## 创建 NFS 服务器
|
||||
|
||||
NFS 允许系统将其目录和文件共享给网络上的其他系统。通过 NFS,用户和应用程序可以访问远程系统上的文件,就象它们是本地文件一样。
|
||||
|
||||
### 安装
|
||||
Ubuntu 16.04 键入以下命令安装 NFS 服务器:
|
||||
|
||||
``` bash
|
||||
apt install nfs-kernel-server
|
||||
```
|
||||
|
||||
### 配置
|
||||
编辑`/etc/exports`文件添加需要共享目录,每个目录的设置独占一行,编写格式如下:
|
||||
|
||||
`NFS共享目录路径 客户机IP或者名称(参数1,参数2,...,参数n)`
|
||||
|
||||
例如:
|
||||
|
||||
``` bash
|
||||
/home *(ro,sync,insecure,no_root_squash)
|
||||
/share 192.168.1.*(rw,sync,insecure,no_subtree_check,no_root_squash)
|
||||
```
|
||||
| 参数 | 说明 |
|
||||
| :- | :- |
|
||||
| ro | 只读访问 |
|
||||
| rw | 读写访问 |
|
||||
| sync | 所有数据在请求时写入共享 |
|
||||
| async | nfs在写入数据前可以响应请求 |
|
||||
| secure | nfs通过1024以下的安全TCP/IP端口发送 |
|
||||
| insecure | nfs通过1024以上的端口发送 |
|
||||
| wdelay | 如果多个用户要写入nfs目录,则归组写入(默认) |
|
||||
| no_wdelay | 如果多个用户要写入nfs目录,则立即写入,当使用async时,无需此设置 |
|
||||
| hide | 在nfs共享目录中不共享其子目录 |
|
||||
| no_hide | 共享nfs目录的子目录 |
|
||||
| subtree_check | 如果共享/usr/bin之类的子目录时,强制nfs检查父目录的权限(默认) |
|
||||
| no_subtree_check | 不检查父目录权限 |
|
||||
| all_squash | 共享文件的UID和GID映射匿名用户anonymous,适合公用目录 |
|
||||
| no_all_squash | 保留共享文件的UID和GID(默认) |
|
||||
| root_squash | root用户的所有请求映射成如anonymous用户一样的权限(默认) |
|
||||
| no_root_squash | root用户具有根目录的完全管理访问权限 |
|
||||
| anonuid=xxx | 指定nfs服务器/etc/passwd文件中匿名用户的UID |
|
||||
| anongid=xxx | 指定nfs服务器/etc/passwd文件中匿名用户的GID |
|
||||
|
||||
+ 注1:尽量指定主机名或IP或IP段最小化授权可以访问NFS 挂载的资源的客户端
|
||||
+ 注2:经测试参数insecure必须要加,否则客户端挂载出错mount.nfs: access denied by server while mounting
|
||||
|
||||
### 启动
|
||||
|
||||
配置完成后,您可以在终端提示符后运行以下命令来启动 NFS 服务器:
|
||||
|
||||
``` bash
|
||||
systemctl start nfs-kernel-server.service
|
||||
```
|
||||
|
||||
### 客户端挂载
|
||||
|
||||
Ubuntu 16.04,首先需要安装 `nfs-common` 包
|
||||
|
||||
``` bash
|
||||
apt install nfs-common
|
||||
```
|
||||
|
||||
使用 mount 命令来挂载其他机器共享的 NFS 目录。可以在终端提示符后输入以下类似的命令:
|
||||
|
||||
``` bash
|
||||
mount example.hostname.com:/ubuntu /local/ubuntu
|
||||
```
|
||||
挂载点 /local/ubuntu 目录必须已经存在。而且在 /local/ubuntu 目录中没有文件或子目录。
|
||||
|
||||
另一个挂载NFS 共享的方式就是在 /etc/fstab 文件中添加一行。该行必须指明 NFS 服务器的主机名、服务器输出的目录名以及挂载 NFS 共享的本机目录。
|
||||
|
||||
以下是在 /etc/fstab 中的常用语法:
|
||||
|
||||
``` bash
|
||||
example.hostname.com:/ubuntu /local/ubuntu nfs rsize=8192,wsize=8192,timeo=14,intr
|
||||
```
|
|
@ -0,0 +1,17 @@
|
|||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: pv-influxdb
|
||||
spec:
|
||||
capacity:
|
||||
storage: 5Gi
|
||||
accessModes:
|
||||
- ReadWriteMany
|
||||
volumeMode: Filesystem
|
||||
persistentVolumeReclaimPolicy: Recycle
|
||||
storageClassName: slow
|
||||
nfs:
|
||||
# 根据实际共享目录修改
|
||||
path: /share
|
||||
# 根据实际 nfs服务器地址修改
|
||||
server: 192.168.1.208
|
|
@ -0,0 +1,19 @@
|
|||
---
|
||||
kind: PersistentVolumeClaim
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: influxdb-claim
|
||||
namespace: kube-system
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteMany
|
||||
volumeMode: Filesystem
|
||||
resources:
|
||||
requests:
|
||||
storage: 3Gi
|
||||
storageClassName: slow
|
||||
#selector:
|
||||
# matchLabels:
|
||||
# release: "stable"
|
||||
# matchExpressions:
|
||||
# - {key: environment, operator: In, values: [dev]}
|
|
@ -0,0 +1,47 @@
|
|||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: monitoring-influxdb
|
||||
namespace: kube-system
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
k8s-app: influxdb
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
task: monitoring
|
||||
k8s-app: influxdb
|
||||
spec:
|
||||
containers:
|
||||
- name: influxdb
|
||||
#image: gcr.io/google_containers/heapster-influxdb-amd64:v1.3.3
|
||||
image: mirrorgooglecontainers/heapster-influxdb-amd64:v1.3.3
|
||||
volumeMounts:
|
||||
- mountPath: /data
|
||||
name: influxdb-storage
|
||||
volumes:
|
||||
- name: influxdb-storage
|
||||
persistentVolumeClaim:
|
||||
claimName: influxdb-claim
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
labels:
|
||||
task: monitoring
|
||||
# For use as a Cluster add-on (https://github.com/kubernetes/kubernetes/tree/master/cluster/addons)
|
||||
# If you are NOT using this as an addon, you should comment out this line.
|
||||
# kubernetes.io/cluster-service: 'true'
|
||||
kubernetes.io/name: monitoring-influxdb
|
||||
name: monitoring-influxdb
|
||||
namespace: kube-system
|
||||
spec:
|
||||
ports:
|
||||
- port: 8086
|
||||
targetPort: 8086
|
||||
name: http
|
||||
selector:
|
||||
k8s-app: influxdb
|
Loading…
Reference in New Issue