企业运维实战--k8s学习笔记.k8s容器资源限制 Metrics-Server部署 图形化监控Dashboard部署 K9S的安装
1.kubernetes容器资源限制Kubernetes采用request和limit两种限制类型来对资源进行分配。request(资源需求):即运行Pod的节点必须满足运行Pod的最基本需求才能运行Pod。limit(资源限额):即运行Pod期间,可能内存使用量会增加,那最多能使用多少内存,这就是资源限额。资源类型:CPU 的单位是核心数,内存的单位是字节。一个容器申请0.5个CPU,就相当于申
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.yaml
apiVersion: v1
kind: LimitRange
metadata:
name: limitrange-demo
spec:
limits:
- default:
cpu: 0.5
memory: 512Mi
defaultRequest:
cpu: 0.1
memory: 256Mi
max:
cpu: 1
memory: 1Gi
min:
cpu: 0.1
memory: 100Mi
type: 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: 6
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
执行清单,并查看deploy的信息:
可以看到会使用limitrange.yaml的内存和cpu限制
kubectl describe pod deployment-nginx-6799fc88d8-
添加内存限制
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-nginx
spec:
replicas: 6
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
resources:
requests:
cpu: 0.1
memory: 50Mi
limits:
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.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: mem-cpu-demo
spec:
hard:
requests.cpu: "1" ##所有容器的cpu请求总额不能超过1核
requests.memory: 1Gi ##所有容器的内存请求总额不能超过1GIB
limits.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: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: 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.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: mem-cpu-demo
spec:
hard:
requests.cpu: "1"
requests.memory: 1Gi
limits.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.yaml
serverTLSBootstrap: 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 {
errors
health {
lameduck 5s
}
ready
hosts {
172.25.76.1 server1
172.25.76.2 server2
172.25.76.3 server3
fallthrough
}
再次查看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.yaml
image: 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-dashboard
type: 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.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard
namespace: 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上的镜像搞到本地
更多推荐
所有评论(0)