k8s-多容器Pod、容器保护策略、宽限期、最大生命周期、嵌入式脚本、多容器Pod、资源监控工具

资源对象文件

一、模板与帮助信息

1、资源对象文件优势

  • 命令无法实现高级复杂的功能
  • 某些资源对象使用命令无法创建
  • 方便管理、保存、追溯历史

2、如何生成资源对象模板

资源对象 Pod 模板使用 run 生成
[root@master ~]# kubectl run myweb --image=myos:nginx --dry-run=client -o yaml
apiVersion: v1
kind: Pod
metadata:creationTimestamp: nulllabels:run: mywebname: myweb
spec:containers:- image: myos:nginxname: mywebresources: {}dnsPolicy: ClusterFirstrestartPolicy: Always
status: {}
其它资源对象模板生成

除 Pod 外,其它资源对象模板使用 create 生成

生成模板命令:--dry-run=client -o yaml

[root@master ~]# kubectl create namespace work --dry-run=client -o yaml
apiVersion: v1
kind: Namespace
metadata:creationTimestamp: nullname: work
spec: {}
status: {}

3、资源文件参数如何查询

使用 "." 分割层级结构关系
---
kind:                         # 一级,可以表示为 .kind
apiVersion:                   # 一级,可以表示为 .apiVersion
metadata:                     # 一级,可以表示为 .metadataname:                       # 二级,可以表示为 .metadata.name
spec: researtPolicy: xx                        containers:- name:                    # 三级,可以表示为 .spec.containers.nameimage: 
status: {}

4、如何获取帮助信息

是以 explain 资源对象 + 层级关系
specrestartPolicy: Always    # 获取Pod中该参数的帮助信息containers:
#------------------------------------------------------------------------------
[root@master ~]# kubectl explain Pod.spec.restartPolicy
KIND:     Pod
VERSION:  v1FIELD:    restartPolicy <string>DESCRIPTION:Restart policy for all containers within the pod. One of Always, OnFailure,Never. Default to Always. More info:https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policyPossible enum values:- `"Always"`- `"Never"`- `"OnFailure"`

5、如何使用资源对象文件管理

[root@master app]# vim nginx.yaml 
---
kind: Pod
apiVersion: v1
metadata:name: nginx
spec:containers:- name: nginximage: myos:nginx[root@master app]# vim phpfpm.yaml
---
kind: Pod
apiVersion: v1
metadata:name: php
spec:containers:- name: phpimage: myos:php-fpm
# 使用资源对象文件创建应用
[root@master app]# kubectl apply -f nginx.yaml -f phpfpm.yaml 
pod/nginx created
pod/php created# 删除应用
[root@master app]# kubectl delete -f /root/app/
pod "nginx" deleted
pod "php" deleted# 合并资源对象文件
[root@master app]# cat nginx.yaml >> app.yaml
[root@master app]# cat phpfpm.yaml >> app.yaml# 调用合并后的文件
[root@master app]# kubectl apply -f app.yaml 
pod/nginx created
pod/php created# 删除资源对象
[root@master app]# kubectl delete -f app.yaml 
pod "nginx" deleted
pod "php" deleted

二、自定义命令

1、Pod自定义命令

  • 创建 Pod 时,可以为其设置启动时要执行的自定义命令,如果配置了自定义命令,那么镜像中自带的默认启动命令将不在执行
  • 自定义命令设置在 command 字段下,如果要命令有参数,就填写在 args 字段下

2、Pod自定义命令样例

例如:执行 sleep 30 的自定义命令
[root@master ~]# vim mycmd.yaml 
---
kind: Pod
apiVersion: v1
metadata:name: mycmd
spec:containers:- name: linuximage: myos:8.5command: ["sleep"]    # 自定义命令args: ["30"]          # 命令参数

三、restartPolicy(容器保护)策略

Pod 会根据策略决定容器结束后是否重启

[root@master ~]# kubectl apply -f mycmd.yaml 
pod/mycmd created
[root@master ~]# kubectl get pods -w
NAME    READY   STATUS    RESTARTS   AGE
mycmd   1/1     Running   0          10s
mycmd   0/1     Completed   0          31s
mycmd   1/1     Running     1 (1s ago)   32s-w:实时监视资源的状态变化

选项:重启(Always)、不重启(Never)、失败就重启(OnFailure)

[root@master ~]# vim mycmd.yaml 
---
kind: Pod
apiVersion: v1
metadata:name: mycmd
spec:restartPolicy: Never    # 配置保护策略containers:- name: linuximage: myos:8.5command: ["sleep"]args: ["10"]
[root@master ~]# kubectl apply -f mycmd.yaml 
pod/mycmd created
[root@master ~]# kubectl get pods -w
NAME    READY   STATUS    RESTARTS   AGE
mycmd   1/1     Running   0          4s
mycmd   0/1     Completed   0          12s
mycmd   0/1     Completed   0          13s

四、terminationGracePeriodSeconds(宽限期)策略

宽限期是为了避免服务突然中断,造成的事务不一致的问题

[root@master ~]# kubectl delete -f mycmd.yaml
[root@master ~]# kubectl apply -f mycmd.yaml
# 为什么删除要等一会
[root@master ~]# kubectl delete -f mycmd.yaml
# 等待 .
# 等待 ..
# 等待 ...
pod "mycmd" deleted

宽限期默认30s,不等待设置为0 

[root@master ~]# vim mycmd.yaml
---
kind: Pod
apiVersion: v1
metadata:name: mycmd
spec:terminationGracePeriodSeconds: 0  # 设置宽限期restartPolicy: Nevercontainers:- name: linuximage: myos:8.5command: ["sleep"]args: ["30"][root@master ~]# kubectl apply -f mycmd.yaml
pod/mycmd created
[root@master ~]# kubectl delete -f mycmd.yaml
pod "mycmd" deleted

五、activeDeadlineSeconds策略

1、循环死锁

如果一个Pod的内部程序在运行时出现循环死锁,那么就会永远不停的重复执行,如何避免这种情况发生

2、activeDeadlineSeconds策略

允许Pod运行的最大时长

时间到期后会向Pod发送singal,如果Pod无法结束就把它强制关闭,并且设置为Error状态

[root@master ~]# vim mycmd.yaml
---
kind: Pod
apiVersion: v1
metadata:name: mycmd
spec:terminationGracePeriodSeconds: 0activeDeadlineSeconds: 60  # 可以执行的最大时长restartPolicy: Nevercontainers:- name: linuximage: myos:8.5command: ["sleep"]args: ["300"][root@master ~]# kubectl delete -f mycmd.yaml
pod "mycmd" deleted
[root@master ~]# kubectl apply -f mycmd.yaml
pod/mycmd created[root@master ~]# kubectl get pods -w
mycmd   1/1     Running             0          1s
mycmd   1/1     Running             0          60s
mycmd   0/1     Error               0          64s

六、自定义命令进阶

1、如何执行复杂命令

Yaml多行表达式
---
string: >    # 最终结果为 [01234空格56789]0123456789---
string2: |    # 最终结果为 [01234换行56789]0123456789

2、在Pod中嵌入脚本

[root@master ~]# vim mycmd.yaml
---
kind: Pod
apiVersion: v1
metadata:name: mycmd
spec:terminationGracePeriodSeconds: 0restartPolicy: Alwayscontainers:- name: linuximage: myos:8.5command: ["/bin/bash"]    # 调用bash命令args:                     # 设置命令的参数- -c                      # 从字符串中读取命令- |                       # 以下多行字符串保留原格式while sleep 5;do        # 脚本指令,注意缩进对齐echo "hello world."done[root@master ~]# kubectl apply -f mycmd.yaml 
pod/mycmd created
[root@master ~]# kubectl get pods
NAME    READY   STATUS    RESTARTS   AGE
mycmd   1/1     Running   0          3s
[root@master ~]# kubectl logs mycmd 
hello world.
hello world.
hello world.

七、多容器Pod

1、创建多容器Pod

[root@master ~]# vim mynginx.yaml
---
kind: Pod
apiVersion: v1
metadata:name: mynginx
spec:terminationGracePeriodSeconds: 0restartPolicy: Alwayscontainers:- name: nginximage: myos:nginx- name: phpimage: myos:php-fpm[root@master ~]# kubectl apply -f mynginx.yaml 
pod/mynginx created
[root@master ~]# kubectl get pods
NAME      READY   STATUS    RESTARTS   AGE
mynginx   2/2     Running   0          3s

2、管理多容器Pod

受多容器配置影响,以下命令需要使用<-c 容器名字>

受影响命令:[logs,exec,cp]

[root@master ~]# echo "hello world" >hello.html
[root@master ~]# kubectl cp hello.html mynginx:/usr/local/nginx/html/ -c nginx
[root@master ~]# kubectl exec mynginx -c php -- psPID TTY          TIME CMD1 ?        00:00:00 php-fpm7 ?        00:00:00 ps
[root@master ~]# kubectl logs mynginx -c nginx
[root@master ~]#

资源指标监控

一、资源指标有什么用

在安装部署程序之后,必须要了解应用程序在部署后的性能以及资源使用情况。你可以通过检测Pod容器或节点来了解整个集群的情况

二、如何监控资源指标

Kubernetes的Metrics-server组件提供有关节点和Pod的资源使用情况的信息,包括CPU和内存的指标。如果将Metrics-server部署到集群中,就可以查询并使用到这些信息管理应用及服务

三、Metrics-server

1、概述

Metrics-Server是集群核心监控数据的聚合器。通俗的说,它存储了集群中各节点和Pod的监控数据,并且提供了API以供查询和使用

Metrics-Server通过kubelet获取node和Pod的CPU,内存等监控数据。为调度器、弹性控制器、以及Dashboard等UI组件提供数据来源

2、安装

kube-apiserver必须启用聚合服务,或使用kube-proxy代理转发

节点必须启用身份验证和授权。kubelet证书需要由集群证书颁发机构签名

Metrics-Server使用443、4443端口,所有节点上kubelet必须能够访问该端口

启用引导令牌,并签发

# 追加配置参数并重启服务
[root@master ~]# echo 'serverTLSBootstrap: true' >>/var/lib/kubelet/config.yaml
[root@master ~]# systemctl restart kubelet
# 获取证书名称,并签发
[root@master ~]# kubectl get certificatesigningrequests 
NAME        AGE   SIGNERNAME                      REQUESTOR            REQUESTEDDURATION   CONDITION
csr-2hg42   14s   kubernetes.io/kubelet-serving   system:node:master   <none>              Pending
[root@master ~]# kubectl certificate approve csr-2hg42
certificatesigningrequest.certificates.k8s.io/csr-2hg42 approved
[root@master ~]# kubectl get certificatesigningrequests 
NAME        AGE   SIGNERNAME                      REQUESTOR            REQUESTEDDURATION   CONDITION
csr-2hg42   28s   kubernetes.io/kubelet-serving   system:node:master   <none>              Approved,Issued

导入镜像,并上传到私有仓库

将镜像导入到私有仓库plugins目录下

# 导入镜像
[root@master metrics]# docker load -i metrics-server.tar.xz
# 上传镜像到私有仓库
[root@master metrics]# docker images|while read i t _;do[[ "${t}" == "TAG" ]] && continue[[ "${i}" =~ ^"harbor:443/".+ ]] && continuedocker tag ${i}:${t} harbor:443/plugins/${i##*/}:${t}docker push harbor:443/plugins/${i##*/}:${t}docker rmi ${i}:${t} harbor:443/plugins/${i##*/}:${t}
done

安装metrics组件 

# 修改镜像地址
[root@master metrics]# sed -ri 's,^(\s*image: )(.*/)?(.+),\1harbor:443/plugins/\3,' components.yaml
140:     image: harbor:443/plugins/metrics-server:v0.6.2
# 安装插件服务
[root@master metrics]# kubectl apply -f components.yaml
# 验证插件 Pod 状态
[root@master metrics]# kubectl -n kube-system get pods -l k8s-app=metrics-server
NAME                             READY   STATUS    RESTARTS   AGE
metrics-server-ddb449849-c6lkc   1/1     Running   0          64s

获取监控指标

[root@master metrics]# kubectl top nodes
NAME        CPU(cores)    CPU%         MEMORY(bytes)     MEMORY%     
master      99m           4%           1005Mi            27%         
node-0001   <unknown>     <unknown>    <unknown>        <unknown>
node-0002   <unknown>     <unknown>    <unknown>        <unknown>
node-0003   <unknown>     <unknown>    <unknown>        <unknown>
node-0004   <unknown>     <unknown>    <unknown>        <unknown>
node-0005   <unknown>     <unknown>    <unknown>        <unknown>

获取node节点监控指标

为所有node节点启用引导令牌

#--------------- 在所有计算节点配置证书 -----------------
[root@node ~]# echo 'serverTLSBootstrap: true' >>/var/lib/kubelet/config.yaml
[root@node ~]# systemctl restart kubelet

签发所有令牌

[root@master ~]# kubectl certificate approve $(kubectl get csr -o name)
certificatesigningrequest.certificates.k8s.io/csr-2hg42 approved
certificatesigningrequest.certificates.k8s.io/csr-9gu29 approved
......
[root@master ~]# kubectl get certificatesigningrequests 
NAME        AGE   SIGNERNAME                      REQUESTOR   CONDITION
csr-2hg42   14m   kubernetes.io/kubelet-serving   master      Approved,Issued
csr-9gu29   28s   kubernetes.io/kubelet-serving   node-0001   Approved,Issued
csr-xhp83   21s   kubernetes.io/kubelet-serving   node-0002   Approved,Issued
csr-69qhz   15s   kubernetes.io/kubelet-serving   node-0003   Approved,Issued
csr-t8799   15s   kubernetes.io/kubelet-serving   node-0004   Approved,Issued
csr-8k69w   15s   kubernetes.io/kubelet-serving   node-0005   Approved,Issued

获取node监控指标

# 获取资源指标有延时,等待 15s 即可查看
[root@master ~]# kubectl top nodes
NAME        CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
master      83m          4%     1789Mi          50%       
node-0001   34m          1%     747Mi           20%       
node-0002   30m          1%     894Mi           24%       
node-0003   39m          1%     930Mi           25%       
node-0004   45m          2%     896Mi           24%       
node-0005   40m          2%     1079Mi          29%

四、资源指标

1、CPU资源指标

CPU资源的约束和请求以毫核(m)为单位。在k8s中1m是最小的调度单元,CPU的一个核心可以看作1000m

如果你有2颗CPU,且每CPU为4核心,那么你的CPU资源总量就是8000m

2、MEMORY资源指标

memory的约束和请求以字节为单位

可以使用以下单位来表示内存:E、P、T、G、M、K

也可以使用对应的2的幂数:Ei、Pi、Ti、Gi、Mi、Ki

五、创建Pod并获取监控指标

[root@master ~]# vim mylinux.yaml
---
kind: Pod
apiVersion: v1
metadata:name: mylinux
spec:containers:- name: linuximage: myos:8.5command: ["awk", "BEGIN{while(1){}}"][root@master ~]# kubectl apply -f mylinux.yaml
pod/mylinux created
# 查看 CPU 资源消耗
[root@master ~]# kubectl top pods
NAME      CPU(cores)   MEMORY(bytes)   
mylinux   999m         6Mi # 测试消耗内存资源
[root@master ~]# kubectl cp memtest.py mylinux:/usr/bin/
[root@master ~]# kubectl exec -it mylinux -- memtest.py 2500
use memory success
press any key to exit :
#--------------- 在另一个终端查看------------------------
[root@master ~]# kubectl top pods
NAME      CPU(cores)   MEMORY(bytes)   
mylinux   1001m        2503Mi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/764424.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10、chrome拓展程序的实现

一、拓展程序的实现 拓展程序项目的构成 和前端项目一样&#xff0c;拓展程序也是有Html、CSS、JS文件实现的&#xff0c;现在看来它就是一个静态的前端页面。但是不同的是&#xff0c;拓展程序中还需要额外的一个清单文件&#xff0c;就是manifest.json&#xff0c;清单文件可…

Prompt进阶系列5:LangGPT(提示链Prompt Chain)--提升模型鲁棒性

Prompt进阶系列5:LangGPT(提示链Prompt Chain)–提升模型鲁棒性 随着对大模型的应用实践的深入&#xff0c;许多大模型的使用者&#xff0c; Prompt 创作者对大模型的应用越来越得心应手。和 Prompt 有关的各种学习资料&#xff0c;各种优质内容也不断涌现。关于 Prompt 的实践…

SQLiteC/C++接口详细介绍sqlite3_stmt类(十)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;九&#xff09; 下一篇&#xff1a; SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;十一&#xff09; 38、sqlite3_column_value sqlite3_column_valu…

云计算系统等保测评对象和指标选取

1、云计算服务模式与控制范围关系 参考GBT22239-2019《基本要求》附录D 云计算应用场景说明。简要理解下图&#xff0c;主要是云计算系统安全保护责任分担原则和云服务模式适用性原则&#xff0c;指导后续的测评对象和指标选取。 2、测评对象选择 测评对象 IaaS模式 PaaS模式…

Python Flask 返回json类型数据

from flask import Flask, make_responseapp Flask(__name__)app.route("/") def hello():data {"name": "张三"}return make_response(data)if __name__ __main__:app.run(debugTrue)如果像返回字符串那么可以用 return make_response(json.…

HTML(二)

一、表格标签 1.1表格的主要作用 表格主要用于显示、展示数据&#xff0c;因为它可以让数据显示的非常的规整&#xff0c;可读性非常好。特别是后台展示数据的时候&#xff0c;能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据表现得很有条理。 1.2 表格的…

工作量证明机制

引言 区块链是一几年极其火爆的技术概念,因为比特币的超高价格引起了公众对区块链技术的关注。犹记得当年各类区块链包装的应用游戏层出不穷,区块链所到之处,投资流量唾手可得,真可谓占尽天时,那种勃勃生机,万物竞发的境界,犹在眼前。短短十年之后,热度不在。不过也很…

鸿蒙一次开发,多端部署(十一)交互归一

对于不同类型的智能设备&#xff0c;用户可能有不同的交互方式&#xff0c;如通过触摸屏、鼠标、触控板等。如果针对不同的交互方式单独做适配&#xff0c;会增加开发工作量同时产生大量重复代码。为解决这一问题&#xff0c;我们统一了各种交互方式的API&#xff0c;即实现了交…

Spring Boot集成chronicle queue快速入门demo

1.chronicle queue介绍 Chronicle Queue使用一个内存映射文件来持久化每一条消息。这使我们能够在进程之间共享消息。它直接将数据存储到堆外内存&#xff0c;因此&#xff0c;使其没有GC开销。它被设计用来为高性能应用程序提供低延迟的消息框架。使用开源的Chronicle Queue可…

【SQL】1407. 排名靠前的旅行者

题目描述 leetcode题目&#xff1a;1407. 排名靠前的旅行者 Code 写法一 先过滤&#xff0c;再连表 -- 写法一&#xff1a;先过滤再连表 select name, ifnull(summ, 0) as travelled_distance from Users left join(select user_id, sum(distance) as summfrom Ridesgroup …

kubernetes K8s的监控系统Prometheus安装使用(一)

简单介绍 Prometheus 是一款基于时序数据库的开源监控告警系统&#xff0c;非常适合Kubernetes集群的监控。Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态&#xff0c;任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做…

网络安全知识核心之RIP的工作原理

RIP 动态路由选择协议&#xff08;网络层协议&#xff09; RIP 是一种基于距离矢量&#xff08;Distance-Vector&#xff09;算法的协议&#xff0c;它使用跳数&#xff08;Hop Count&#xff09;作为度量来衡量到达目的网络的路由距离。RIP 通过 UDP 报文进行路由信息的交换&…

前端工程化的理解

简单来说&#xff0c;前端工程化是对前端开发流程的改良&#xff0c;是效率工具。 可以通过一下四个块来理解前端工程化 模块化&#xff1a; 就是将代码拆分&#xff0c;分成独立的单独的相互依赖的片段 首先说JS&#xff0c;CommonJS和ES Module都是JS模块化的一种表现形式&a…

TS + Vue3 elementUI 表格列表中如何方便的标识不同类型的内容,颜色区分 enum

TS Vue3 elementUI 表格列表中如何方便的标识不同类型的内容&#xff0c;颜色区分 enum 本文内容为 TypeScript 一、基础知识 在展示列表的时候&#xff0c;列表中的某个数据可能是一个类别&#xff0c;比如&#xff1a; enum EnumOrderStatus{"未受理" 1,"…

SQL执行原理

文章目录 SQL执行原理慢SQL分析优化案例优化步骤&#xff1a; 分库分表实施分库分表时&#xff0c;如何保证数据一致性&#xff1f;实践案例案例实施垂直拆分的步骤&#xff1a; SQL执行原理 SQL&#xff08;Structured Query Language&#xff09;是一种用于管理与查询关系数…

【LeetCode-74.搜索二维矩阵】

题目详情&#xff1a; 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&am…

Csharp学习Linq

Linq的学习 这里继续使用之前文章创建的学生类&#xff0c;首先简单介绍一下linq的使用。 Student.cs public class Student{public int Id { get; set; }public int ClassId { get; set; }public string Name { get; set; }public int Age { get; set; }public string Descr…

基于python+vue 的一加剧场管理系统的设计与实现flask-django-nodejs-php

二十一世纪我们的社会进入了信息时代&#xff0c;信息管理系统的建立&#xff0c;大大提高了人们信息化水平。传统的管理方式对时间、地点的限制太多&#xff0c;而在线管理系统刚好能满足这些需求&#xff0c;在线管理系统突破了传统管理方式的局限性。于是本文针对这一需求设…

Kubernetes自动化配置部署

在新建工程中&#xff0c;使用k8s的devops服务&#xff0c;自动化部署项目 1、在搭建好k8s的集群中&#xff0c;确认已开启devops服务&#xff1b; 2、新建Maven项目之后&#xff0c;创建dockerfile、deploy和Jenkins文件 例如&#xff1a; Dockerfile FROM bairong.k8s.m…

【思维】第十四届蓝桥杯省赛C++ C组/研究生组 Python A组/C组《翻转》(C++)

【题目描述】 小蓝用黑白棋的 n 个棋子排成了一行&#xff0c;他在脑海里想象出了一个长度为 n 的 01 串 T&#xff0c;他发现如果把黑棋当做 1&#xff0c;白棋当做 0&#xff0c;这一行棋子也是一个长度为 n 的 01 串 S。 小蓝决定&#xff0c;如果在 S 中发现一个棋子和它…