1.kubernetes容器资源限制

Kubernetes采用request和limit两种限制类型来对资源进行分配。
request(资源需求):即运行Pod的节点必须满足运行Pod的最基本需求才能运行Pod。
limit(资源限额):即运行Pod期间,可能内存使用量会增加,那最多能使用多少内存,这就是资源限额。

资源类型:
CPU 的单位是核心数,内存的单位是字节。
一个容器申请0.5个CPU,就相当于申请1个CPU的一半,你也可以加个后缀m 表示千分之一的概念。比如说100m的CPU,100豪的CPU和0.1个CPU都是一样的。

内存单位:
K、M、G、T、P、E #通常是以1000为换算标准的。
Ki、Mi、Gi、Ti、Pi、Ei #通常是以1024为换算标准的。

1.1.内存 CPU限制

在本博客有体现
2.4 内存与限制

1.2namespace设置资源限制

vi limitrang.yamlapiVersion: v1
kind: LimitRange
metadata:name: limitrange-demo
spec:limits:- default:cpu: 0.5memory: 512MidefaultRequest:cpu: 0.1memory: 256Mimax:cpu: 1memory: 1Gimin:cpu: 0.1memory: 100Mitype: Container

执行清单limitrange.yaml,查看信息:

kubectl apply -f limitrange.yaml kubectl apply -f limitrange.yaml
kubectl describe limitranges limitrange
kubectl apply -f limitrange.yaml
kubectl describe limitranges limitrange
kubectl apply -f limitrange.yaml
kubectl describe limitranges limitrange
kubectl describe limitranges limitrange

vi deploy..yaml apiVersion: apps/v1
kind: Deployment
metadata:name: deployment-nginx
spec:replicas: 6selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx

执行清单,并查看deploy的信息:
可以看到会使用limitrange.yaml的内存和cpu限制
kubectl describe pod deployment-nginx-6799fc88d8-

添加内存限制

apiVersion: apps/v1
kind: Deployment
metadata:name: deployment-nginx
spec:replicas: 6selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginxresources:requests:cpu: 0.1memory: 50Milimits:memory: 300Mi

再次执行deploy.yaml 清单。会发现报错了:
因为namespace的限制最小为100M,而内存限制最小为50M,所以冲突了!

kubectl delete -f deploy.yaml
kubectl apply -f deploy.yaml
kubectl describe rs deployment-nginx-5f9bd8b44c

1.3namespace设置资源配额

再次将namespace设置资源配额

vi quota.yamlapiVersion: v1
kind: ResourceQuota
metadata:  name: mem-cpu-demo
spec:  hard:    requests.cpu: "1"    ##所有容器的cpu请求总额不能超过1核requests.memory: 1Gi    ##所有容器的内存请求总额不能超过1GIBlimits.cpu: "2"       ##所有容器的cpu限额总额不能超过2核limits.memory: 2Gi##所有容器的内存限额总额不能超过2GIB

执行配额清单quota.yaml
并将其中的资源限制清除

kubectl apply -f quota.yaml
kubectl delete -f  deploy.yaml
kubectl describe resourcequotas mem-cpu-demo


将内存限制注释

apiVersion: apps/v1
kind: Deployment
metadata:name: deployment-nginx
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx# resources:#   requests:#     cpu: 0.1#     memory: 50Mi#   limits:#     memory: 300Mi

执行查看
kubectl describe resourcequotas

若将replicas改成6则并删除在重新执行时会报错

kubectl describe rs deployment-nginx-6799fc88d8

1.4 Namespace 配置Pod配额

vi quota.yamlapiVersion: v1
kind: ResourceQuota
metadata:name: mem-cpu-demo
spec:hard:requests.cpu: "1"requests.memory: 1Gilimits.cpu: "2"limits.memory: 2Gi
---
apiVersion: v1
kind: ResourceQuota
metadata:  name: pod-demo
spec:  hard:    pods: "3"     #最多3个

执行清单quota.yaml,查看配额信息,可以看到配置Pod配额出现:

kubectl describe resourcequotas

将deploy的replicas改成4后重新执行后查看rs也会有报错

kubectl describe rs deployment-nginx-6799fc88d8

2. kubernetes资源监控

2.1.Metrics-Server介绍

Metrics-Server是集群核心监控数据(cpu、内存)的聚合器,用来替换之前的heapster。

容器相关的 Metrics 主要来自于 kubelet 内置的 cAdvisor 服务,有了MetricsServer之后,用户就可以通过标准的 Kubernetes API 来访问到这些监控数据。
Metrics API 只可以查询当前的度量数据,并不保存历史数据。
Metrics API URI 为 /apis/metrics.k8s.io/,在 k8s.io/metrics 维护。
必须部署 metrics-server 才能使用该 API,metrics-server 通过调用 Kubelet Summary API 获取数据。

Metrics Server 并不是 kube-apiserver 的一部分,而是通过 Aggregator 这种插件机制,在独立部署的情况下同 kube-apiserver 一起统一对外服务的。
kube-aggregator 其实就是一个根据 URL 选择具体的 API 后端的代理服务器。

Metrics-server属于Core metrics(核心指标),提供API metrics.k8s.io,仅提供Node和Pod的CPU和内存使用情况。而其他Custom Metrics(自定义指标)由Prometheus等组件来完成。

2.2Metrics-Server安装部署

mkdir metrics-server
cd metrics-server/
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

在server5上:
接下来将需要的镜像拉取下来上传到私有仓库中:

接下来将刚才wget下来的components.yaml文件编辑:
修改镜像名:

vim components.yaml

 image: metrics-server/metrics-server:v0.5.1

执行文件components.yaml,查看节点信息:

kubectl apply -f components.yaml
kubectl get pod -n kube-system

发现没有就绪

2.3.解决报错

2.3.1 错误一

查看日志的报错,解决问题:

kubectl -n kube-system logs  metrics-server-758d676578-b8xxm

需要再次修改清单配置:
将两处的端口改为4443

vi components.yaml

--secure-port=4443
- containerPort: 4443

执行后重新查看日志

2.3.2 错误二

解决报错:
报错:x509: certificate signed by unknown authority

启用TLS Bootstrap 证书签发(在master和各个节点中)

server123都需要修改
添加参数:

vi /var/lib/kubelet/config.yamlserverTLSBootstrap: true

添加之后,重启服务
systemctl restart kubelet

kubectl get csr
kubectl certificate approve csr-7rhv9
kubectl certificate approve csr-qczmb
kubectl certificate approve csr-ld2xk

kubectl get csr

2.3.3 错误三

报错:dial tcp: lookup server2 on 10.96.0.10:53: no such host
这是因为没有内网的DNS服务器,所以metrics-server无法解析节点名字。可以直接修改 coredns的configmap,将各个节点的主机名加入到hosts中,这样所有Pod都可以从 CoreDNS中解析各个节点的名字。

kubectl -n kube-system edit cm coredns

apiVersion: v1
data:Corefile: |.:53 {errorshealth {lameduck 5s}readyhosts {172.25.76.1 server1172.25.76.2 server2172.25.76.3 server3fallthrough}

再次查看pod节点信息,发现恢复运行了!

kubectl -n kube-system get pod   ##查看是否running
kubectl -n kube-system describe svc metrics-server


发现endpoints后端IP地址出现

2.4.测试

测试:
#查看pod分配情况

kubectl top node ##查看pod分配情况

或者用 kubectl -n kube-system top pod

3.Dashboard部署(可视化)

Dashboard可以给用户提供一个可视化的 Web 界面来查看当前集群的各种信息。用户可以用 Kubernetes Dashboard 部署容器化的应用、监控应用的状态、执行故障排查任务以及管理 Kubernetes 各种资源。

首先拉取需要的 拉取镜像

docker pull kubernetesui/dashboard:v2.4.0
docker tag kubernetesui/dashboard:v2.2.0 reg.westos.org/library/kubernetesui/dashboard:v2.4.0
docker push reg.westos.org/library/kubernetesui/dashboard:v2.4.0

创建目录dashboard用来存放关于它的文件:
下载所需要的配置文件:recommended.yaml

cd
mkdir dashboard
cd dashboard/
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml

下载之后,需要将文件中的镜像地址和版本写对.

vi recommended.yamlimage: kubernetesui/dashboard:v2.4.0
image: kubernetesui/metrics-scraper:v1.0.7

执行文件

kubectl apply -f recommended.yaml
kubectl get ns

此时查看节点,发现没有IP地址

kubectl -n kubernetes-dashboard get svc

更改svc kubernetes-dashboard的网络类型为loadbalancer

kubectl -n kubernetes-dashboard edit svc kubernetes-dashboardtype: LoadBalancer

再次查看svc ,可以看到分配的vip

 kubectl -n kubernetes-dashboard get svc

访问刚才查看的svc出现的外部IP地址:

https://172.25.76.12

点击允许访问,之后登陆会需要token
我们可以查看刚才生成的tocken

 kubectl -n kubernetes-dashboard get secrets kubectl -n kubernetes-dashboard describe secrets kubernetes-dashboard-token-***

复制它 粘贴进去

还需授权

vi rbac.yaml apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: kubernetes-dashboard-admin
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin
subjects:
- kind: ServiceAccountname: kubernetes-dashboardnamespace: kubernetes-dashboard

执行rbac.yaml 清单:

kubectl apply -f rbac.yaml

再次访问网页 进入成功

4.集群管理工具 K9S

通常情况下,我们自行部署 k8s 集群之后,要么使用 kubectl 命令做集群管理,要么使用 bashbroad 的 UI 管理界面来管理集群。最近,发现了一个基于终端且比较好用的项目,可以让我们快速查看、导航、观察并解决日常我们使用 Kubernetes 中的一些问题,这就是 k9s 项目.
工具介绍

日常使用终端的你,可谓是一件利器!

k9s 是一个基于 curses 的全屏终端 UI 管理工具,可以与 Kubernetes 集群进行交互,可以观察系统资源,在各种资源之间切换,检查清单、日志、监控事件并执行 Pod 等,从而确保桌面空间不至于被大量终端窗格所占据。

k9s 会以特定时间间隔监控 Kubernetes 资源,默认为 2 秒,并允许查看自己集群中的内容。它可以一目了然地提供了运行中 Pod、日志和部署的可视化视图,以及对 Shell 的快速访问。以下是该工具的主要特性:

信息触手可及跟踪 Kubernetes 集群中运行的资源的实时活动处理 Kubernetes 标准资源和自定义资源定义集群指标跟踪与 Pod,容器和节点等资源关联的实时指标高级特性提供标准的集群管理命令,例如日志,扩展,端口转发,重启定义自己的命令快捷方式,以通过命令别名和热键快速导航支持插件扩展 k9s 来创建属于自己的集群操作管理命令强大的过滤模式,允许用户向下钻取并查看与工作负载相关的资源外观可定制通过 K9s 皮肤定义自己的外观自定义/安排要按资源显示的列

4.1安装

docker pull  derailed/k9s:latest
docker tag derailed/k9s:latest reg.westos.org/library/k9s:latest
docker push reg.westos.org/library/k9s:latest

Docker

# 指定k8s的配置文件路径
$ docker run --rm -it -v $KUBECONFIG:/root/.kube/config derailed/k9s# k8s配置文件的默认路径
$ docker run --rm -it -v ~/.kube/config:/root/.kube/config derailed/k9s

docker save -o **** 可以将docker上的镜像搞到本地

企业运维实战--k8s学习笔记.k8s容器资源限制 Metrics-Server部署 图形化监控Dashboard部署 K9S的安装相关推荐

  1. 《VMware vSphere 6.5企业运维实战》已经出版

    <VMware vSphere 6.5企业运维实战>已经由人民邮电出版社出版,购买链接: https://item.jd.com/26391828617.html 本书以vSphere 6 ...

  2. 企业运维实战--自动化运维Saltstack(上)之saltstack的安装部署、远程执行、grains和pillar详解以及Jinja模板的使用

    企业运维实战--自动化运维Saltstack(上) 前言 一.Saltstack安装部署 二.sls文件远程执行 saltstack安装httpd并启动 saltstack源码编译安装nginx 启动 ...

  3. 《VMware vSphere企业运维实战》——2.6 使用vCenter Converter迁移物理机到虚拟机

    本节书摘来自异步社区<VMware vSphere企业运维实战>一书中的第2章,第2.6节,作者:王春海著,更多章节内容可以访问云栖社区"异步社区"公众号查看 2.6 ...

  4. 企业运维实战--k8s学习笔记 k8s网络通信、Flannel vxlan模式简介、calico网络插件替换、网络策略范例总结

    1.k8s网络通信 k8s通过CNI接口接入其他插件来实现网络通讯.目前比较流行的插件有flannel,calico等. CNI插件存放位置:# cat /etc/cni/net.d/10-flann ...

  5. 企业运维实战之k8s(HPA、Helm)初学者必看,点赞关注后期不迷路

    文章目录 HPA 运行 php-apache 服务器并暴露服务 创建 Horizontal Pod Autoscale 增加负载 停止负载 Helm Helm安装 设置helm命令补齐 chart库 ...

  6. 《精通Spring 4.x 企业应用开发实战》学习笔记

    第四章 IoC容器 4.1 IoC概述 IoC(Inverse of Control 控制反转),控制是指接口实现类的选择控制权,反转是指这种选择控制权从调用类转移到外部第三方类或容器的手中. 也就是 ...

  7. k8s学习笔记——k8s pv rbd手动挂载

    //创建image ceph osd pool create kube 9 9 //可做或者使用默认的rbd rbd pool init kube rbd create --size 2048 kub ...

  8. 企业运维实战--lvs之DR模式负载均衡、keepalived、lvs高可用

    LVS 介绍 lvs 负载均衡( linux virtual server),linux虚拟服务器,是一个虚拟的四层交换器集群系统,根据目标地址和目标端口实现用户请求转发,本身不产生流量,只做用户请求 ...

  9. 企业运维实战--Zabbix监控之结合nginx、mysql、java应用、proxy分布式、睿象云报警、API批量操作、替换mysql为tidb数据库

    一.zabbix server的nginx监控 nginx部署 在server5上进行: tar zxf nginx-1.20.1.tar.gz cd nginx-1.20.1 yum install ...

  10. 想从事运维岗位应该学习什么技能?谁能告诉一下?

    最近看到不少小伙伴都在问,想从事运维岗位应该学习什么技能?哪些是基础呢?有大神能指点迷津吗?今天我们就大家一起来唠嗑吧! 首先我们要知道,想要从事运维工作,Linux是一道坎,建议先把Linux好好学 ...

最新文章

  1. php上传图片到文件夹,2018.09.14PHP获取页面上传的图片存到指定文件夹再存到数据库中...
  2. 计算机机房云部署,公共技能云机房建设方案及配置清单-20210405173307.pdf-原创力文档...
  3. 报告 | 野蛮数据时代,企业和从业者如何应对变革焦虑?
  4. 取代INT 80 的sysenter/sy***it
  5. Python代码中的if __name__ == ‘__main__‘的作用是什么?
  6. [整理]zepto的初次使用
  7. 用神经网络分类无理数和超越数2**0.5,3**0.5,e
  8. 三相pmsm矢量控制仿真模型_学术简报|永磁同步电机无速度传感器控制离散化方法研究...
  9. Java 9 中的 9 个新特性
  10. php中表格怎么垂直居中,如何利用display:table-cell实现垂直居中?
  11. java计算机毕业设计网络教学系统源码+系统+数据库+lw文档
  12. Python3快速入门—7.枚举
  13. 蓝桥杯-决赛A组第九届java
  14. Centos7搭建lamp环境后外网浏览器不能访问
  15. 保留两位小数(四舍五入)
  16. Win10如何进行兼容性视图设置,教程来啦!怎么设置兼容性视图
  17. MTK平台H264编码profile_idc和level_idc的小问题
  18. Android开发--文件系统中的内部存储和外部存储最全解析 附文件数据保存操作封装
  19. 实验室安全事故读后感
  20. 春节假期顺延30天!网友:酸了!员工不乐意了……

热门文章

  1. wacom影拓系列数位板驱动
  2. 500G 史上最全的JAVA全套教学视频网盘分享
  3. java正则表达式 and_Java正则表达式详解
  4. 解决暴风影音2012无法播放rmvb视频文件的问题
  5. cs1.6服务器弹道优化,CS1.6弹道优化命令.doc
  6. 知网论文CAJ格式免费转换成PDF,你学会了吗
  7. 基于S3C2440A的DM9000A的调试笔记
  8. echarts官网打不开。
  9. selenium超详解
  10. UAT测试后上线出现问题的引起的思考