kubernetes1.6 安装Heapster+dashboard(五)_柳清风09的博客-程序员秘密

技术标签: kubernetes  Kubernetes  

heapster是kubernetes默认的监控系统,它通过kubelet里面的cadvisor获取容器的监控信息。
这里写图片描述
上面的图显示了heapster监控流程,采集的数据放到influxdb中,influxdb支持rest的方式存储数据,熟悉openstb的人对此很容易上手。
通过yaml文件的方式就可以完成安装:

heapster-deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: heapster
  namespace: kube-system
spec:
  replicas: 1
  template:
    metadata:
      labels:
        task: monitoring
        k8s-app: heapster
    spec:
      serviceAccountName: heapster
      containers:
      - name: heapster
        image: gcr.io/google_containers/heapster-amd64:v1.3.0-beta.1 
        imagePullPolicy: IfNotPresent
        command:
        - /heapster
        - --source=kubernetes:https://kubernetes.default
        - --sink=influxdb:http://monitoring-influxdb:8086

这个里面source是从kubernetes获取监控对象信息,sink制定数据存储的路径,通过influxdb的api保存数据。上面serviceAccountName是1.6后的rbac准备的

heapster-rbac.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: heapster
  namespace: kube-system

---

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1alpha1
metadata:
  name: heapster
subjects:
  - kind: ServiceAccount
    name: heapster
    namespace: kube-system
roleRef:
  kind: ClusterRole
  name: system:heapster
  apiGroup: rbac.authorization.k8s.io

这个里对heapster这个ServiceAccount,授权system:heapster。

heapster-service.yaml

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: Heapster
  name: heapster
  namespace: kube-system
spec:
  ports:
  - port: 80
    targetPort: 8082
  selector:
    k8s-app: heapster

因为dashboard需要访问heapster,所以这里配置service。紧接着是数据库influxdb,先定义配置文件,通过configmap挂载到容器里面。

influxdb-cm.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: influxdb-config
  namespace: kube-system
data:
  config.toml: |
    reporting-disabled = true
    bind-address = ":8088"

    [meta]
      dir = "/data/meta"
      retention-autocreate = true
      logging-enabled = true

    [data]
      dir = "/data/data"
      wal-dir = "/data/wal"
      query-log-enabled = true
      cache-max-memory-size = 1073741824
      cache-snapshot-memory-size = 26214400
      cache-snapshot-write-cold-duration = "10m0s"
      compact-full-write-cold-duration = "4h0m0s"
      max-series-per-database = 1000000
      max-values-per-tag = 100000
      trace-logging-enabled = false

    [coordinator]
      write-timeout = "10s"
      max-concurrent-queries = 0
      query-timeout = "0s"
      log-queries-after = "0s"
      max-select-point = 0
      max-select-series = 0
      max-select-buckets = 0

    [retention]
      enabled = true
      check-interval = "30m0s"

    [admin]
      enabled = true
      bind-address = ":8083"
      https-enabled = false
      https-certificate = "/etc/ssl/influxdb.pem"

    [shard-precreation]
      enabled = true
      check-interval = "10m0s"
      advance-period = "30m0s"

    [monitor]
      store-enabled = true
      store-database = "_internal"
      store-interval = "10s"

    [subscriber]
      enabled = true
      http-timeout = "30s"
      insecure-skip-verify = false
      ca-certs = ""
      write-concurrency = 40
      write-buffer-size = 1000

    [http]
      enabled = true
      bind-address = ":8086"
      auth-enabled = false
      log-enabled = true
      write-tracing = false
      pprof-enabled = false
      https-enabled = false
      https-certificate = "/etc/ssl/influxdb.pem"
      https-private-key = ""
      max-row-limit = 10000
      max-connection-limit = 0
      shared-secret = ""
      realm = "InfluxDB"
      unix-socket-enabled = false
      bind-socket = "/var/run/influxdb.sock"

    [[graphite]]
      enabled = false
      bind-address = ":2003"
      database = "graphite"
      retention-policy = ""
      protocol = "tcp"
      batch-size = 5000
      batch-pending = 10
      batch-timeout = "1s"
      consistency-level = "one"
      separator = "."
      udp-read-buffer = 0

    [[collectd]]
      enabled = false
      bind-address = ":25826"
      database = "collectd"
      retention-policy = ""
      batch-size = 5000
      batch-pending = 10
      batch-timeout = "10s"
      read-buffer = 0
      typesdb = "/usr/share/collectd/types.db"

    [[opentsdb]]
      enabled = false
      bind-address = ":4242"
      database = "opentsdb"
      retention-policy = ""
      consistency-level = "one"
      tls-enabled = false
      certificate = "/etc/ssl/influxdb.pem"
      batch-size = 1000
      batch-pending = 5
      batch-timeout = "1s"
      log-point-errors = true

    [[udp]]
      enabled = false
      bind-address = ":8089"
      database = "udp"
      retention-policy = ""
      batch-size = 5000
      batch-pending = 10
      read-buffer = 0
      batch-timeout = "1s"
      precision = ""

    [continuous_queries]
      log-enabled = true
      enabled = true
      run-interval = "1s"

influxdb-deployment.yaml
这个里使用上面的配置文件

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: monitoring-influxdb
  namespace: kube-system
spec:
  replicas: 1
  template:
    metadata:
      labels:
        task: monitoring
        k8s-app: influxdb
    spec:
      containers:
      - name: influxdb
        image: gcr.io/google_containers/heapster-influxdb-amd64:v1.1.1
        volumeMounts:
        - mountPath: /data
          name: influxdb-storage
        - mountPath: /etc/
          name: influxdb-config
      volumes:
      - name: influxdb-storage
        emptyDir: {}
      - name: influxdb-config
        configMap:
          name: influxdb-config

创建influxdb服务
influxdb-service.yaml

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:
  type: NodePort
  ports:
  - port: 8086
    targetPort: 8086
    name: http
  - port: 8083
    targetPort: 8083
    name: admin
  selector:
    k8s-app: influxdb

下面是配置页面的yaml文件,如果只是集群内部访问可以去掉上面的NodePort。
测试一下:

curl  http://10.254.101.26/api/v1/model/namespaces/default/pod-list/busybox,busybox1/metrics/cpu/usage_rate
{
   "items":[{
   "metrics":[{
   "timestamp":"2017-05-05T01:36:00Z","value":0},{
   "timestamp":"2017-05-05T01:37:00Z","value":0},{
   "timestamp":"2017-05-05T01:38:00Z","value":0},{
   "timestamp":"2017-05-05T01:39:00Z","value":0},{
   "timestamp":"2017-05-05T01:40:00Z","value":0},{
   "timestamp":"2017-05-05T01:41:00Z","value":0},{
   "timestamp":"2017-05-05T01:42:00Z","value":0},{
   "timestamp":"2017-05-05T01:43:00Z","value":0},{
   "timestamp":"2017-05-05T01:44:00Z","value":0},{
   "timestamp":"2017-05-05T01:45:00Z","value":0},{
   "timestamp":"2017-05-05T01:46:00Z","value":0},{
   "timestamp":"2017-05-05T01:47:00Z","value":0},{
   "timestamp":"2017-05-05T01:48:00Z","value":0},{
   "timestamp":"2017-05-05T01:49:00Z","value":0},{
   "timestamp":"2017-05-05T01:50:00Z","value":0}],"latestTimestamp":"2017-05-05T01:50:00Z"},{
   "metrics":[],"latestTimestamp":"0001-01-01T00:00:00Z"}]}

通过heapster服务地址就可以获取监控数据了。
dashboard的安装也是通过yaml文件,设计到调用kubernetes接口权限问题,所以也是一样先授权
dashboard-rbac.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: dashboard
  namespace: kube-system

---

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1alpha1
metadata:
  name: dashboard
subjects:
  - kind: ServiceAccount
    name: dashboard
    namespace: kube-system
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io

配置了cluster-admin最高访问权限,
dashboard-controller.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: kubernetes-dashboard
  namespace: kube-system
  labels:
    k8s-app: kubernetes-dashboard
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
spec:
  selector:
    matchLabels:
      k8s-app: kubernetes-dashboard
  template:
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
      annotations:
        scheduler.alpha.kubernetes.io/critical-pod: ''
    spec:
      serviceAccountName: dashboard
      containers:
      - name: kubernetes-dashboard
        image: gcr.io/google_containers/kubernetes-dashboard-amd64:v1.6.0
        imagePullPolicy: IfNotPresent
        resources:
          # keep request = limit to keep this container in guaranteed class
          limits:
            cpu: 100m
            memory: 50Mi
          requests:
            cpu: 100m
            memory: 50Mi
        ports:
        - containerPort: 9090
        livenessProbe:
          httpGet:
            path: /
            port: 9090
          initialDelaySeconds: 30
          timeoutSeconds: 30
      tolerations:
      - key: "CriticalAddonsOnly"
        operator: "Exists"

从外部访问的服务

dashboard-service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: kubernetes-dashboard
  namespace: kube-system
  labels:
    k8s-app: kubernetes-dashboard
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
spec:
  type: NodePort 
  selector:
    k8s-app: kubernetes-dashboard
  ports:
  - port: 80
    targetPort: 9090

这里为了从外部访问所以设置NodePort。这样dashboard就可以访问了。

kubectl get svc --namespace=kube-system
NAME                   CLUSTER-IP      EXTERNAL-IP   PORT(S)                         AGE
kubernetes-dashboard   10.254.244.7    <nodes>       80:31508/TCP                    1d

那么就可以通过任意计算节点+端口31508访问服务了

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010278923/article/details/71191329

智能推荐

curl CURLOPT_WRITEFUNCTION 的参数设置_superdos的博客-程序员秘密

注册CSDN有十几年了,第一次发文。写博客不求有没有看,最大的好处是可以记录一些心得。最近研究CURL,第一步就卡了一天。代码如下:        string operation="";curl_easy_setopt(curl,CURLOPT_URL, "http://localhost/index2.php?username=superdos&password=1

net-snmp 远程监控linux cpu,Net-SNMP中缺少CPU核心_新店韩师傅的博客-程序员秘密

我有一台运行OEL(RHEL)6.4的双Intel Xeon E5-2667 cpu(6核HT)的服务器由于某种原因,snmp查询显示只有1个cpu的内核.这是输出传感器命令.[[email protected] log]# sensorscoretemp-isa-0000Adapter: ISA adapterPhysical id 0: +56.0°C (high = +96.0°C,crit = +102...

linux/kali中的vulhub靶场搭建_linux vulhub搭建_一颗小黑橙的博客-程序员秘密

记录一次顺利搭建vulhub靶场过程以及vulhub简单的食用方法

android 随记 ContentValues_weixin_30820077的博客-程序员秘密

ContentValues 和HashTable类似都是一种存储的机制 但是两者最大的区别就在于,contenvalues只能存储基本类型的数据,像string,int之类的,不能存储对象这种东西,而HashTable却可以存储对象。在忘数据库中插入数据的时候,首先应该有一个ContentValues的对象所以:ContentValues initialValues = new ...

linux下i2c与pca9555通信,Linux下Led&amp;Button设备驱动PCA9555_kimi的萌miki的博客-程序员秘密

struct pca9555_led {u8 id;struct i2c_client *client;char *name;struct led_classdev ldev;struct work_struct work;enum pca9555_state state;};struct pca9555_btn {int irq;char *name;u8 id;int keycode;stru...

雷赛控制卡总线方式的坑_a_freshbird的博客-程序员秘密

最近在做一台设备,用的雷赛总线控制方式,第一次用,碰到一些坑,记录下。以前我用的雷赛控制卡采用的控制一直是脉冲式。1.复位方式不同。//仅贴出不同之处//脉冲式 复位时的最小速度可以为0 高速 低速给0 和1 就行if ( 0 != dmc_set_profile( nCardID, nAxisID, dMinVel, dMaxVel ,dAccTime,dDecTime, dStopVel) ){ return false ;}//回零模式 2 二次回零 EZ_count

随便推点

qemu构建嵌入式环境_qemu nandflash_ddddfang的博客-程序员秘密

编译qemu下载qemu源码(我下的是v2.8.0,原来是想下载v5.2.0,后来发现网络连接总是配置不好,v2.8.0 configure需要&gt;pyth2.6,且&lt;pyth3),然后#不加 --target-list 则编译支持的所有平台, --enable-debug 允许gdb qemu./configure --enable-kvm --enable-debug --prefix=/opt/qemu --target-list="arm-softmmu x86_64-sof

git 拉取历史版本_git拉历史版本_阿闰的博客-程序员秘密

git clone http://127.0.0.1/git/yfb_crm.gitgit checkout 9ae2c2ce4ad80c87615965f8036fe01c661e646b具体操作如下:  1.使用gitbash进入git命令行,查看commit记录。操作如下:git log1  2.找到你想提取的目标版本,复制对应的SHA值。  3.新建一个分...

纯css实现鼠标悬停文字的汽泡提示_蘅潇嗜玉的博客-程序员秘密

1 固定样式&lt;!--标签上加title属性--&gt;&lt;div class="tooltip" title="提示内容"&gt;&lt;/div&gt;2 伪类实现&lt;!--标签上自定义属性--&gt;&lt;td labelTooltip="提示内容"&gt;声乐&lt;/td&gt;td { position: relative;}td:...

判断当前运行进程权限_火红的小太阳的博客-程序员秘密

判断当前运行进程权限// checkProcessAdmin.cpp : Defines the entry point for the console application.//#include &lt;Windows.h&gt;#include&lt;stdio.h&gt;void ShowProcessIntegrityLevel(){ HANDLE hToken; HANDLE hProcess; DWORD dwLengthNeeded; DWORD dwError = E

编程界失传秘术,SSO单点登录,什么是单点,如何实现登录?_chuibo2465的博客-程序员秘密

单点登录 多系统,单一位置登录,实现多系统同时登录的一种技术。 常出现在互联网应用和企业级平台中。 如:京东。 单点登录一般是用于互相授信的系统,实现单一位置登录,全系统有效的。 三方登录:某系统,使用其他系统的用户,实现本系统登录的方式。如,在京东中使用微信登录。解决...

Android-系统服务-NotificationManager_深度安全实验室的博客-程序员秘密

需求接口NotificationManagerpublic static final String NOTIFICATION_SERVICEConnectivityManagerpublic static final String CONNECTIVITY_SERVICEClipboardManagerpublic static final String CLIPBOARD_SERVICEActivityManagerWindowManager

推荐文章

热门文章

相关标签