容器_Docker ( 06 )

news/发布时间2024/9/20 5:51:19

容器_Docker ( 05 )

Kubernetes 资源对象管理

资源对象文件

模板与帮助信息
  • 资源对象文件优势
    • 命令无法实现高级复杂的功能
    • 某些资源对象使用命令无法创建
    • 方便管理 , 保存 , 追溯历史
  • 资源对象文件太长 , 记不住怎么办
    • 使用命令创建模板
    • 查询帮助信息
    • 查询官方手册
生成资源对象模板
  • 资源对象 Pod 模板使用 run 生成
# 获取 Pod 模板
[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: Alwaysstatus: {}
创建资源对象模板
  • 除了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: {}
资源文件参数查询
  • 使用 “.” 分割层级结构关系

请添加图片描述

  • 是以 explain 资源对象 + 层级关系
# 查询帮助信息
[root@master ~]# kubectl explain Pod.spec.restartPolicy
KIND:     Pod
VERSION:  v1
FIELD:    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"`
资源对象文件
[root@master ~]# mkdir app
[root@master ~]# cd app
[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]# ls
nginx.yaml  phpfpm.yaml# 使用资源对象文件创建应用
[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 ~]# kubectl apply -f app.yaml
pod/nginx created
pod/php created# 删除资源对象
[root@master ~]# kubectl delete -f app.yaml
pod "nginx" deleted
pod "php" deleted
自定义命令
  • Pod自定义命令
    • 创建 Pod时 , 可以为其设置启动时要执行的自定义命令 , 如果配置了自定义命令 , 那么镜像中自带的默认启动命令不再执行
    • 自定义命令设置在 command 字段下 , 如果要命令有参数 , 就填写在 args
    • 例 : 执行sleep 30的自定义命令
[root@master ~]# vim mycmd.yaml
---
kind: Pod
apiVersion: v1
metadata:name: mycmd
spec:containers:- name: linuximage: myos:8.5command: ["sleep"]  # 自定义命令args: ["30"]        # 自定义命令参数
容器保护策略
  • restarPolicy 策略
    • Pod会根据策略决定容器结束后是否重启
    • 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: ["30"]
宽限期策略
  • terminationGracePeriodSeconds 策略
    • 宽限期是为了避免服务突然中断 , 造成的事务不一致的问题
    • 宽限期默认 30s , 不等待设置为 0
[root@master ~]# kubectl delete -f mycmd.yaml
pod "mycmd" deleted
[root@master ~]# kubectl apply -f mycmd.yaml
pod/mycmd created
[root@master ~]# kubectl delete -f mycmd.yaml
pod "mycmd" deleted[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"]
最大生命周期
  • activeDeadlineSeconds 策略
    • 循环死锁
      • 如果一个 Pod内部程序在运行时出现循环死锁 , 那么就会永远不停的重复执行
    • activeDeadlineSeconds 策略
      • 允许 Pod 运行的最大时长
      • 时间到期后会向 Pod 发送 signal , 如果 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"]
自定义命令进阶
yaml 多行表达式
# 最终结果为 [01234 空格 56789]
---
string1: >0123456789# 最终结果为 [01234 换行 56789]
---
string1: |0123456789
在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
  • 脚本在标准输出写入的数据可以使用log查看
mycmd   1/1     Running   0          3s
[root@master ~]# kubectl logs mycmd 
hello world.
hello world.
hello world.
多容器Pod
创建多wrongdoingPod
[root@master ~]# vim mynginx.yaml
---
kind: Pod
apiVersion: v1
metadata:name: mynginx
spec:terminationGracePeriodSeconds: 0restartPolicy: Alwayscontainers:                        # 容器资源是个数组 , 可以定义多个Pod- name: nginx                      # 容器名称image: myos:nginx                # 启动容器的镜像- name: phpimage: myos:php-fpm[root@master ~]# kubectl apply -f mynginx.yaml 
pod/mynginx created[root@master ~]# kubectl get pods
管理多容器 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

资源监控工具

资源指标概述
  • 在安装部署程序之后 , 必须要了解应用程序在部署后的性能以及资源使用情况 , 可以通过检测 Pod容器或节点来了解整个集群的情况
  • KubernetesMetrics-server组件提供有关节点和 Pod的资源使用情况的信息 , 包括 CPU和内存的指标 . 如果将Metrics-server部署到集群中 , 就可以查询并使用到这些信息管理应用及服务
Metrics组件安装
  • Metrics-server是什么
    • Metrics-server是集群核心监控数据的聚合器
    • 通过 kublete 获取 node 和 Pod 的CPU , 内存等监控数据 , 为调度器 , 弹性控制器 , 以及 Dashboard等UI组件提供数据来源
  • 安装条件
    • kube-apiserver 必须启用聚合服务 , 或使用 kube-proxy代理转发
    • 节点必须启用身份验证和授权 , kubelet证书需要由集群证书颁发机构签名
    • 使用 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>    
安装插件metrics
# 上传镜像到私有仓库
[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# 使用资源对象文件创建服务
[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>#--------------- 在所有计算节点配置证书 -----------------[root@node ~]# echo 'serverTLSBootstrap: true' >>/var/lib/kubelet/config.yaml[root@node ~]# systemctl restart kubelet#--------------- 在 master 签发证书 -------------------[root@master ~]# kubectl certificate approve $(kubectl get csr -o name)
certificatesigningrequest.certificates.k8s.io/csr-2hg42 approved
certificatesigningrequest.certificates.k8s.io/csr-9gu29 approved
certificatesigningrequest.certificates.k8s.io/csr-xhp83 approved
certificatesigningrequest.certificates.k8s.io/csr-8k69w approved
certificatesigningrequest.certificates.k8s.io/csr-t8799 approved
certificatesigningrequest.certificates.k8s.io/csr-69qhz 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
查看节点资源指标
# 获取资源指标有延时,等待 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%
监控资源指标
  • 资源指标
    • CPU 资源指标
    • MEMORY 资源指标
  • CPU资源单位
    • CPU资源的约束和请求以豪核(m)为单位 . 在 k8s 中 1m 是最小的调度单元 , CPU的一个核心可以看作1000m
  • 内存资源类型
    • memory的约束和请求以字节为单位
    • 可以使用 E , P , T , G , M , KEi , Pi , Ti , Gi , Mi , Ki
创建Pod并获取监控指标
  • 拷贝 memtest.py 到 master
[root@ecs-proxy s4]# rsync -av public/memtest.py 192.168.1.50:./#-------------------- 增加执行权限 --------------------[root@master ~]# vim memtest.py
1: #!/usr/libexec/platform-python[root@master ~]# chmod 0755 memtest.py
  • 创建 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
  • 查看 Pod 资源指标
# 查看 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# 实验完成以后清空所有容器
[root@master ~]# kubectl delete pods --all

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

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

相关文章

Android和Linux的开发差异

最近开始投入Android的怀抱。说来惭愧&#xff0c;08年就听说这东西&#xff0c;当时也有同事投入去看&#xff0c;因为恶心Java&#xff0c;始终对这玩意无感&#xff0c;没想到现在不会这个嵌入式都快要没法搞了。为了不中年失业&#xff0c;所以只能回过头又来学。 首先还是…

在FPGA上为FPGA设计PCB

在 FPGA(Zynq™ UltraScale™ MPSoC) 上的 Ubuntu 22.04 桌面映像上安装了各种 EE 设计应用程序&#xff08;包括 KiCad&#xff09;&#xff0c;并用它设计 PCB。 步骤 从 Kria SOM wiki&#xff08;https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/1641152513/KriaSO…

自然语言处理: 第十三章Xinference部署

项目地址: Xorbitsai/inference 理论基础 正如同Xorbits Inference&#xff08;Xinference&#xff09;官网介绍是一个性能强大且功能全面的分布式推理框架。可用于大语言模型&#xff08;LLM&#xff09;&#xff0c;语音识别模型&#xff0c;多模态模型等各种模型的推理。通…

[linux]进程信号(信号的概念,信号的产生方式,信号的相关接口、指令,函数,信号怎么保存(原理),信号怎么处理)

目录 一、信号的概念 二、信号的产生方式 通过键盘发送信号 通过系统调用&#xff0c;指令 异常 软件条件 三、信号怎么保存&#xff08;原理&#xff09; 信号其他相关常见概念 在内核中表示 sigset_t 四、信号的相关接口、指令&#xff0c;函数 signal sigpr…

Android基础开发-数据存储

SharedPreferences-xml 共享参数的用法 SharedPreferences是Android的一个轻量级存储工具&#xff0c;采用的存储结构是Key-Value的 键值对方式。 共享参数的存储介质是符合XML规范的配置文件。保存路径是:/data/data/应用包名/shared_prefs/文件名.xml 类似于java中的*.prop…

猜猜心里数字(个人学习笔记黑马学习)

1.定义一个变量&#xff0c;数字类型&#xff0c;内容随意 2.基于input语句输入猜想的数字&#xff0c;通过if和多次elif的组合&#xff0c;判断猜想数字是否和心里数字一致 num5if int(input("请输入第一次猜想的数字&#xff1a;"))5:print("猜对了&#xff0…

初谈软件工程(一)

我就读于兰州交通大学的软件工程专业。虽然在全国众多的985、211高校中&#xff0c;兰州交通大学可能并不显眼&#xff0c;似乎未能跻身这些所谓的“顶尖”行列就意味着不被认可。然而&#xff0c;在甘肃省的教育领域中&#xff0c;它无疑是一座璀璨的明珠&#xff0c;名列前茅…

el-table通过这样封装可以实现校验-表格校验的原理

我们一般在后台系统中&#xff0c;很常见的操作时表格里面嵌套表单&#xff0c;之前我的网上找到了一些封装的用法&#xff1a; <el-form :model"formData" :rules"ruleData" ref"formDom"><el-table :data"formData.tableData&q…

TCP面试问题集锦

1.TCP 三次握手过程&#xff1f; 目的是同步连接双方的序列号和确认号&#xff0c;并交换TCP窗口。 第一次握手&#xff0c;客户端发送(seqx)&#xff0c;客户端进入SYN_SEND状态&#xff1b; 第二次握手&#xff0c;服务端响应(Seqy, Ackx1)&#xff0c;服务器端就进入SYN_R…

springboot+vue网站开发-后端管理框架-vue-admin-template

为了方便国内用户下载&#xff0c;我把自己的百度网盘分享给大家一份地址&#xff0c;可以去下载。 如果你有上网盒子软件&#xff0c;那就自己去下载&#xff0c;很小。不到1MB. 链接&#xff1a;https://pan.baidu.com/s/15LJ2MoSWToFGFp28VaxBeQ?pwdbaby 提取码&#xff…

4核8G服务器并发数多少?性能如何?

腾讯云4核8G服务器支持多少人在线访问&#xff1f;支持25人同时访问。实际上程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&#xff0c;假设公网带宽太小&#xff0c;流量直接卡在入口&#xff0c;4核8G配置的CPU内存也会造成计算…

普中51单片机学习(8*8LED点阵)

8*8LED点阵 实验代码 #include "reg52.h" #include "intrins.h"typedef unsigned int u16; typedef unsigned char u8; u8 lednum0x80;sbit SHCPP3^6; sbit SERP3^4; sbit STCPP3^5;void HC595SENDBYTE(u8 dat) {u8 a;SHCP1;STCP1;for(a0;a<8;a){SERd…

Docker硬件直通:如何在容器中高效利用GPU与硬盘资源

Docker硬件直通&#xff1a;如何在容器中高效利用GPU与硬盘资源 引言Docker基础容器与虚拟机的区别Docker的工作原理 访问服务器硬件资源概述为何需要在Docker容器中访问硬件资源可访问的硬件资源类型 在Docker中使用GPU配置Docker以使用宿主机的GPU资源安装NVIDIA Docker插件 …

CSS转换(2D)transform属性及animation动画

1、倾斜效果&#xff0c;旋转效果 <style type"text/css"> .transrorm_bar{ padding:150px; display: flex; align-items: center;} .transrorm_bar div{ width: 120px; height: 120px; background-color: #eee; margin: 10px; display: flex; align-items: c…

ES6 | (二)ES6 新特性(下) | 尚硅谷Web前端ES6教程

文章目录 &#x1f4da;迭代器&#x1f407;定义&#x1f407;工作原理&#x1f407;自定义遍历数据 &#x1f4da;生成器函数&#x1f407;声明和调用&#x1f407;生成器函数的参数传递&#x1f407;生成器函数案例 &#x1f4da;Promise&#x1f4da;Set&#x1f407;Set的定…

搭建私有Git服务器:GitLab部署详解

引言&#xff1a; 为了方便团队协作和代码管理&#xff0c;许多组织选择搭建自己的私有Git服务器。GitLab是一个集成了Git版本控制、项目管理、代码审查等功能的开源平台&#xff0c;是搭建私有Git服务器的理想选择。 目录 引言&#xff1a; 一、准备工作 在开始部署GitLab之…

数据分析(二):学生成绩预测分析报告

目录 摘要 一、引言 二、 数据源介绍 三、 数据清洗和预处理 3.1 缺失值处理 3.2 异常值处理 3.3 数据编码 四、 探索性数据分析 4.1 可视化相关统计量 4.2 目标数据的分布情况 4.3 Pearson 相关性分析 五、 特征工程 5.1 特征构造 5.1.1 总饮酒量 5.1.2 整体关…

type may not be empty [type-empty]

原因是使用了规范commit信息的工具&#xff0c;你的提交信息不符合规范&#xff0c;所以被拒绝了 commit规范工具 commitlinthusky 解决方式一&#xff1a; 修改提交信息&#xff0c; 使其符合规范 git commit -m "feat: 新功能"使用Git Gui的使用以下格式写提交…

Python爬虫-爬取B站番剧封面

本文是本人最近学习Python爬虫所做的小练习。如有侵权&#xff0c;请联系删除。 页面获取url 代码 import requests import os import re# 创建文件夹 path os.getcwd() /images if not os.path.exists(path):os.mkdir(path)# 当前页数 page 1 # 总页数 total_page 2# 自动…

electron安装最后一部卡住了?

控制台如下错误 不是的话基本可以划走了 这个很可能是镜像出现问题了&#xff0c;不一定是npm镜像 打开npm的配置文件添加下述 electron_mirrorhttps://cdn.npmmirror.com/binaries/electron/ electron_builder_binaries_mirrorhttps://npmmirror.com/mirrors/electron-build…
推荐文章