zoukankan      html  css  js  c++  java
  • k8s之dashboard认证、资源需求、资源限制及HeapSter

    1.部署dashboard

    kubernetes-dashboard运行时需要有sa账号提供权限

    Dashboard官方地址:https://github.com/kubernetes/dashboard

    # 在node1上下载镜像
    docker pull googlecontainer/kubernetes-dashboard-amd64:v1.10.1
    docker tag googlecontainer/kubernetes-dashboard-amd64:v1.10.1 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
    # 在master上下载yaml文件
    wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
    文件中需要做以下修改
    

    a.创建一个sa并绑定到cluster-admin上

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

    b.修改Service的type为NodePort

    kind: Service
    apiVersion: v1
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
      name: kubernetes-dashboard
      namespace: kube-system
    spec:
      ports:
        - port: 443
          targetPort: 8443
          nodePort: 31443
      type: NodePort
      selector:
        k8s-app: kubernetes-dashboard
    
    # 获取不记名token
    kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
    

    访问https://10.0.0.20:31443,将这一段内容复制到令牌中,即可看到dashboard面板

    该部分内容参考:https://github.com/kubernetes/dashboard/wiki/Creating-sample-user

    拿这个sa的token登录,pod就获得了这个sa的权限,即整个集群的管理权限,用命令行再创建个sa,限定它只能访问default名称空间

    kubectl create serviceaccount def-ns-admin -n default
    kubectl create rolebinding def-ns-admin --clusterrole=admin --serviceaccount=default:def-ns-admin
    # 拿这个token登录到web页面,进去后只能看default名称空间
    kubectl describe secret def-ns-admin-token-646gx
    

    2.用kubeconfig的方法来验证登录

    原理:将sa的token赋给一个用户,然后封装成kubeconfig文件,下面这些操作只是让def-ns-admin用户对kubernetes集群中的default名称空间具有管理权限;更广泛的用法是让某用户对不同集群都有管理权限.

    cd /etc/kubernetes/pki
    kubectl config set-cluster kubernetes --certificate-authority=./ca.crt 
    --server="https://172.16.1.100:6443" --embed-certs=true --kubeconfig=/root/def-ns-admin.conf
    kubectl config view --kubeconfig=/root/def-ns-admin.conf
    kubectl get secret def-ns-admin-token-646gx -o json
    DEF_NS_ADMIN_TOKEN=$(kubectl get secret  def-ns-admin-token-646gx  -o jsonpath={.data.token}|base64 -d)
    kubectl config set-credentials def-ns-admin --token=$DEF_NS_ADMIN_TOKEN --kubeconfig=/root/def-ns-admin.conf 
    User "def-ns-admin" set
    # 创建一个上下文
    kubectl config set-context def-ns-admin@kubernetes --cluster=kubernetes --user=def-ns-admin 
    --kubeconfig=/root/def-ns-admin.conf 
    Context "def-ns-admin@kubernetes" created.
    # 切换用户,此时可以用/root/def-ns-admin.conf文件进行登录
    # 认证账号必须是ServiceAccount,被dashboard pod拿来进行认证集群认证
    kubectl config use-context def-ns-admin@kubernetes --kubeconfig=/root/def-ns-admin.conf 
    

    3.容器的资源需求、资源限制

    request:需求,最低保障,在调度时,节点必须满足request需求的资源大小才符合需求;

    limits:限制、硬限制,限制容器无论怎么运行都不会超过limits的值.

    CPU:一颗物理CPU杯虚拟成两颗逻辑cpu,一个逻辑cpu还可以划分为1000个毫核(millcores),所以500m=0.5个CPU,相当于二分之一的核心.

    kubectl explain pods.spec.containers.resources.requests
    kubectl explain pods.spec.containers.resources.limits
    # -m 1表示启动一个子进程对内存做压测,-c 1表示启动一个子进程对cpu做压测,
    默认stress-ng的一个子进程使用256M内存
    cat pod-demo.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-demo
      labels:
        app: myapp
        tier: frontend
    spec:
      containers:
      - name: myapp
        image: ikubernetes/stress-ng:v1
        command: ["/usr/bin/stress-ng", "-m 1", "-c 1", "--metrics-brief"]
        resources:
          requests:
            cpu: "200m"
            memory: "128Mi"
          limits:
            cpu: "1" # 没有单位表示是1个cpu
            memory: "200Mi"
    # 容器分配了资源限制后,k8s会自动分配一个Qos(服务质量)
    

    Qos可以分为三类:

    Guranteed:表示每个容器的cpu和内存资源设置了相同的requests和limits值,即cpu.requests=cpu.limitsmemory.requests=memory.limits,Guranteed会确保这类pod有最高的优先级,会被优先运行的,即使节点上的资源不够用;

    Burstable:表示pod中至少有一个容器设置了cpu或内存资源的requests属性,可能没有定义limits属性,那么这类pod具有中等优先级;

    BestEffort:指没有任何一个容器设置了requests或者limits属性,那么这类pod是最低优先级,当这类pod的资源不够用时,BestEffort中的容器会被优先终止,以便腾出资源来,给另外两类pod中的容器正常运行.

    4.HeapSter

    HeapSter的作用是收集个节点pod的资源使用情况,然后以图形界面展示给用户.kubelet中的cAdvisor负责收集每个节点上的资源使用情况,然后把信息存储HeapSter中,HeapSter再把数据持久化的存储在数据库InfluxDB中,然后我们再通过Grafana来图形化展示.

    一般监控的指标包括k8s集群的系统指标、容器指标和应用指标. 默认InfluxDB使用的是存储卷是emptyDir,容器一关数据就没了,所以要换成glusterfs等存储卷才行.

    InfluxDB--https://github.com/kubernetes/heapster/blob/master/deploy/kube-config/influxdb/influxdb.yaml

    mkdir metrics && cd metrics
    wget https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/influxdb.yaml 
    # 访问https://github.com/kubernetes/heapster/tree/master/deploy/kube-config/rbac
    wget https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/rbac/heapster-rbac.yaml
    # 访问https://github.com/kubernetes/heapster/blob/master/deploy/kube-config/influxdb/heapster.yaml
    wget https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/heapster.yaml
    # 访问https://github.com/kubernetes/heapster/blob/master/deploy/kube-config/influxdb/grafana.yaml
    # 为了能在集群外部访问Grafana,所以在文件最后一行加个type: NodePort
    # 在v1.12之后的版本,已经完全抛弃了heapster,模板地址:https://grafana.com/dashboards/9733
    wget https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/grafana.yaml
    

    参考博客:http://blog.itpub.net/28916011/viewspace-2215214/

    参考博客:http://blog.itpub.net/28916011/viewspace-2216324/

  • 相关阅读:
    洛谷 U141580 简化罗波切问题
    洛谷 U141578 维修电路
    洛谷 U140760 狭义公因子
    CF75C Modified GCD
    算法题-求解斐波那切数列的第N个数是几?
    算法题-求N的阶乘
    JAVA8新特性
    nginx启动脚本,手动编辑
    javah生成带有包名的头文件
    Matlab图像处理(03)-基本概念
  • 原文地址:https://www.cnblogs.com/fawaikuangtu123/p/11296191.html
Copyright © 2011-2022 走看看