容器_Docker ( 06 )

news2024/11/17 3:27:48

容器_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: null
  labels:
    run: myweb
  name: myweb
spec:
  containers:
  - image: myos:nginx
    name: myweb
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: 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: null
  name: 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-policy
     Possible 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: nginx
    image: myos:nginx

[root@master app]# vim phpfpm.yaml
---
kind: Pod
apiVersion: v1
metadata:
  name: php
spec:
  containers:
  - name: php
    image: 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: linux
    image: myos:8.5
    command: ["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: linux
    image: myos:8.5
    command: ["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: Never
  containers:
  - name: linux
    image: myos:8.5
    command: ["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: 0
  activeDeadlineSeconds: 60  # 可以执行的最大时长
  restartPolicy: Never
  containers:
  - name: linux
    image: myos:8.5
    command: ["sleep"]
    args: ["300"]
自定义命令进阶
yaml 多行表达式
# 最终结果为 [01234 空格 56789]
---
string1: >
	01234
	56789

# 最终结果为 [01234 换行 56789]
---
string1: |
	01234
	56789
在Pod中嵌入脚本
[root@master ~]# vim mycmd.yaml
---
kind: Pod
apiVersion: v1
metadata:
  name: mycmd
spec:
  terminationGracePeriodSeconds: 0
  restartPolicy: Always
  containers:
  - name: linux
    image: myos:8.5
    command: ["/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: 0
  restartPolicy: Always
  containers:                        # 容器资源是个数组 , 可以定义多个Pod
  - name: nginx                      # 容器名称
    image: myos:nginx                # 启动容器的镜像
  - name: php
    image: 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 -- ps
    PID TTY          TIME CMD
      1 ?        00:00:00 php-fpm
      7 ?        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/".+ ]] && continue
    docker 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: linux
    image: myos:8.5
    command: ["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.coloradmin.cn/o/1467422.html

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

相关文章

数据价值在线化丨TiDB 在企查查数据中台的应用及 v7.1 版本升级体验

本文介绍了企查查在数据中台建设中使用 TiDB 的经验和应用。通过从 MySQL 到 TiDB 的迁移&#xff0c;企查查构建了基于 TiDB Flink 的实时数仓框架 &#xff0c;充分利用了 TiDB 的分布式架构、MySQL 兼容性和完善的周边工具等特性&#xff0c;实现了数据的在线化处理。2023 年…

构建生物医学知识图谱from zero to hero (3):生物医学命名实体识别和链接

生物医学实体链接 🤓现在是激动人心的部分。对于NLP和命名实体识别和链接的新手,让我们从一些基础知识开始。命名实体识别技术用于检测文本中的相关实体或概念。例如,在生物医学领域,我们希望在文本中识别各种基因、药物、疾病和其他概念。 生物医学概念提取 在这个例子中…

C++入门学习(三十六)函数的声明

程序是自上而下运行的&#xff0c;比如我下面的代码&#xff1a; #include <iostream> #include<string> using namespace std;int main() { int a1; int b2;int sumaddNumbers(a,b); cout<<sum;return 0; }int addNumbers(int a, int b) { int sum …

一种基于javax.max注解的能力增强技术

目录 现有框架的不足之处 我的改进内容 改进的成果 现有框架的不足之处 Max是javax.validation包中的一个常用注解&#xff0c;用于对传入参数进行最大值校验。但是其校验区间为闭区间&#xff0c;且不支持修改&#xff0c;如&#xff1a;Max(2)&#xff0c;表示表示传入参…

Debug|百度OCR识别错误error_code: 216205

1. 什么错误 在使用百度OCR识别时遇到了错误error_code: 216205。 参照文档【百度OCR文字识别 - API文档 - 错误码】中的描述&#xff0c;是我的图片转base64后大于10M 测试两张图片&#xff1a;923k图片的Base64 大于 10M&#xff1b;2M图片的Base64 小于 10M。 # 电脑上看…

抖音视频下载工具|视频内容提取软件

引言部分&#xff1a; 针对抖音视频下载需求&#xff0c;我们团队自豪推出一款功能强大的工具&#xff0c;旨在解决用户获取抖音视频繁琐问题的困扰。我们通过基于C#开发的工具&#xff0c;让用户能够轻松通过关键词搜索实现自动批量抓取视频&#xff0c;并根据需求进行选择性批…

yolov8-seg dnn调用

接上篇一直更换torch、opencv版本都无法解决这个问题&#xff08;seg调用dnn报错&#xff09;。那问题会不会出在yolov8源码本身呢。yolov8的讨论区基本都看过了&#xff0c;我决定尝试在其前身yolov5的讨论区上找找我不信没人遇到这个问题。很快找到下面的讨论第一个帖子&…

Node.JS入门(day01)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学&#xff0c;可以点心心支持一下哈 一、为什么要学习Node.JS ①可以让其他人访问我们编写的网页 ②为后续的框架学习打基础 二、Node.JS是什么 官方&#xff1a;Node.js是一个…

8.qt5使用opencv的库函数打开图片

1.配置opencv动态库的环境变量 2.在创建的qt工程中加入如下opencv代码&#xff0c;具体代码如下&#xff1a; 使用opencv库函数显示图片

编写LLVM Pass的一个小问题

在阅读官方文档时发现一个很有趣的细节&#xff0c;官方给出了一个测试用例&#xff0c;此处有一个小问题&#xff08;%无法复制&#xff09;。但是我在使用自己编译的ll文件时&#xff0c;我发现该pass无法正常使用。最后经过测试发现是利用-O0编译产生的ll文件有optnone的fla…

数据库管理-第154期 Oracle Vector DB AI-06(20240223)

数据库管理154期 2024-02-23 数据库管理-第154期 Oracle Vector DB & AI-06&#xff08;20240223&#xff09;1 环境准备创建表空间及用户TNSNAME配置 2 Oracle Vector的DML操作创建示例表插入基础数据DML操作UPDATE操作DELETE操作 3 多Vector列表4 固定维度的向量操作5 不…

【达梦数据库】数据库的方言问题导致的启动失败

问题场景 在项目中采用了hibernate &#xff0c;连接数据库原本为ORACLE&#xff0c;后续打算改造为国产数据库 达梦 链接配置&#xff1a; # 达梦写法&#xff0c; index:driver-class-name: dm.jdbc.driver.DmDriverjdbc-url: jdbc:dm://192.168.220.225:5236/IDX4username:…

深入探索pdfplumber:从PDF中提取信息到实际项目应用【第94篇—pdfplumbe】

深入探索pdfplumber&#xff1a;从PDF中提取信息到实际项目应用 在数据处理和信息提取的过程中&#xff0c;PDF文档是一种常见的格式。然而&#xff0c;要从PDF中提取信息并进行进一步的分析&#xff0c;我们需要使用适当的工具。本文将介绍如何使用Python库中的pdfplumber库来…

危险!Wyze 摄像头安全漏洞致1.3万用户隐私遭窥探

最近&#xff0c;一则关于 Wyze 摄像头再次出现安全漏洞的新闻引起了人们的广泛关注。据报道&#xff0c;该安全漏洞导致约1.3万用户的摄像头受到了未经授权的访问&#xff0c;使得这些用户的隐私信息遭到了窥视。这一事件再次引发了人们对网络安全的关注和讨论。 网络安全不仅…

老杨说运维 | 运维大数据价值探索

文末附有视频 伴随第六届双态IT乌镇用户大会的圆满完成&#xff0c;擎创科技“一体化数智管理和大模型应用”主题研讨会也正式落下了帷幕。 云原生转型正成为很多行业未来发展战略&#xff0c;伴随国家对信创数字化要求的深入推进&#xff0c;面对敏稳共存这一近年出现的新难…

svn客户端下载、安装、使用

下载、使用 打开360软件管家&#xff0c;选怎宝库&#xff0c;搜索svn&#xff0c;点击安装 可以修改安装路径 使用 在桌面右键弹出菜单&#xff0c;点击 输入地址&#xff0c;点击ok 输入用户名、密码 &#xff0c;等待检出完成

Linux 可视化管理-webmin 和 bt 运维工具安装教程

Linux 可视化管理-webmin 和 bt 运维工具安装教程 webmin webmin 是功能强大的基于 Web 的 Unix/linux 系统管理工具。管理员通过浏览器访问 Webmin 的各种管理功能并完成相应的管理操作。除了各版本的 linux 以外还可用于&#xff1a;AIX、HPUX、Solaris、Unixware、Irix 和…

Linux学习方法-框架学习法——Linux应用程序编程框架

配套视频学习链接&#xff1a;https://www.bilibili.com/video/BV1HE411w7by?p4&vd_sourced488bc722b90657aaa06a1e8647eddfc 目录 Linux应用程序编程 Linux应用程序编程 Linux文件I/O(input/output) Linux文件I/O(五种I/O模型) Linux多进程 Linux多线程 网络通信(s…

游戏空间划分技术

一、 前言 空间划分算法有很多&#xff0c;比如均匀网格&#xff0c;四/八叉树&#xff0c;k-d树&#xff0c;Bsp树&#xff0c;每一种算法都有自己的优缺点&#xff0c;我们需要从理论上理解这些算法&#xff0c;然后在实际项目中进行灵活的运用。 游戏中经常使用空间划分算…

【深度学习】Pytorch 系列教程(七):PyTorch数据结构:2、张量的数学运算(5):二维卷积及其数学原理

文章目录 一、前言二、实验环境三、PyTorch数据结构1、Tensor&#xff08;张量&#xff09;1. 维度&#xff08;Dimensions&#xff09;2. 数据类型&#xff08;Data Types&#xff09;3. GPU加速&#xff08;GPU Acceleration&#xff09; 2、张量的数学运算1. 向量运算2. 矩阵…