资源创建方式

news2024/9/20 18:27:44
  1. kubernetes支持两种创建资源的方式:

    1. 用kubectl命令直接创建,比如:kubectl run nginx-deployment --image=nginx1.7.9 --replicas=2,在命令行中通过参数指定资源的属性

    2. 通过配置文件和kubectl apply创建,创建nginx.yml文件,然后运行命令:kubectl apply -f nginx.yml在这里插入图片描述

    3. 比较:

      1. 基于命令的方式:简单,直观,快捷,上手快
      2. 基于配置文件的方式:配置文件描述了最终要达到的状态,提供了创建资源的模板,能够重复部署,可以像管理代码一样管理部署,适合正式的,跨环境的,规模化部署
  2. 配置文件介绍:

    1. apiVersion: extensions/v1beta1:apiVersion是当前配置格式的版本
    2. kind: Deployment:kind是要创建的资源类型,这里是Deployment
    3. metadata:是该资源的元数据,name是必须的元数据项
    4. spec:是该Deployment的规格说明
    5. replicas:指明副本数量,默认为1
    6. template:定义Pod的模板,这是配置文件的重要部分
    7. metadata:定义Pod的元数据,至少要定义一个label,label的key和value可以任意指定
    8. spec:描述Pod的规格,此部分定义Pod中每一个容器的属性,name和image是必须的
  3. 删除资源:执行kubectl delete deployment nginx-deployment或者kubectl delete -f nginx.yml

  4. 伸缩:

    1. 伸缩是指在线增加或减少Pod的副本数

    2. Deployment nginx-deployment初始是两个副本,k8s-node1和k8s-node2各跑了一个副本,现在修改nginx.yml文件,将副本数改为5个在这里插入图片描述

    3. 再次执行kubectl apply,进行应用的部署,然后执行kubectl get pod -o wide查看pod状态,调度器会根据集群的资源和指定的调度策略(如亲和性规则、亲缘关系和反亲缘性)来选择合适的节点分配pod副本在这里插入图片描述

    4. 三个副本被创建并调度到节点1和节点2上,出于安全考虑,默认配置下kubernetes不会将Pod调度到Master节点上,如果希望将master也当做Node使用,可以执行命令:kubectl taint node k8s-master node-role.kubernetes.io/master- 。如果要回复Master node only状态,执行命令:kubectl taint node k8s-master node-role.kubernetes.io/master=“”:NoSchedule

  5. Failover:

    1. 模拟k8s-node2故障,关闭该节点,等待一段时间后,kubernetes会检查到k8s-node2不可用,将k8s-node2上的pod标记为Unknown状态,并在k8s-node1上新创建k8s-node2上的数量的pod,维持副本数不变在这里插入图片描述

    2. 当k8s-node2恢复后,Unknown的Pod会被创建,不过已经运行的Pod不会重新调度回k8s-node2

  6. 用label控制pod的位置

    1. 默认配置下,scheduler会将pod调度到所有可用的node,不过如果将有大量磁盘IO的pod部署到配置了SSD的Node,或者Pod需要GPU,需要运行在配置了GPU的节点上,希望将Pod部署到指定的Node上

    2. kubernetes通过label来实现这个功能

    3. label是key-value对,各种资源都可以设置label,灵活添加各种自定义属性,比如执行命令标注k8s-node1是配置了SSD的节点

    4. kubectl label node k8s-node1 disktype=ssd,然后通过kubectl get node --show-labels查看节点的label在这里插入图片描述

    5. 部署pod到node1:在pod模板中,spec中通过nodeSelector指定将次pod部署到具有label disktypessd的Node上在这里插入图片描述

    6. 部署Deployment并查看Pod的运行节点,可以看到全部6个副本都运行在node1上在这里插入图片描述

    7. 删除label disktype命令:kubectl label node k8s-node1 disktype- 这个- 就是删除的意思。不过此时的Pod并不会重新部署,依然在k8s-node1上运行。除非在nginx.yml中删除nodeSelector设置,然后通过kubectl apply重新部署。kubernetes会删除之前的Pod并调度和运行新的Pod

  7. DaemonSet:

    1. Deployment部署的副本Pod会分布在各个Node上,每个Node都可能运行好几个副本,DaemonSet的不同之处在于:每个Node上最多只能运行一个副本

    2. DaemonSet的应用场景有:

      1. 在集群的每个节点上运行存储Daemon,比如glusterd或者ceph分布式存储系统
      2. 在每个节点上运行日志收集Daemon,比如flunentd或者logstash
      3. 在每个节点上运行监控Daemon,比如Prometheus Node Exporter或者collectd
    3. kubernetes自己就在用DaemonSet运行系统组件,执行命令:kubectl get daemonset --namespace=kube-system在这里插入图片描述

    4. 查看详细信息:kubectl get pod --namespace=kube-system -o wide在这里插入图片描述

    5. 因为flannel和kube-proxy属于系统组件,需要在命令行中通过–namespace=kube-system指定namespace指定namespace kube-system,若不指定,则只返回默认namespace default中的资源

  8. kube-flannel-ds:

    1. 部署flannel网络的命令:kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml。

    2. flannel的DaemonSet就定义在kube-flannel.yml中在这里插入图片描述

    3. 配置解析

      1. DaemonSet配置文件的语法和结构与Deployment几乎完全一样,只是将kind设为DaemonSet
      2. hostNetwork指定Pod直接使用的是Node网络,相当于docker run --network=host
      3. containers定义了运行flannel服务的两个容器
  9. kube-proxy:

    1. 通过命令:kubectl edit daemonset kube-proxy --namespace=kube-system查看配置在这里插入图片描述

    2. 配置解析:

      1. kind:DaemonSet指定这是一个DaemonSet类型的资源
      2. containers定义了kube-proxy的容器
      3. status是当前DemonSet的运行时状态,这个部分是kubectl edit特有的,
      4. kubernetes集群中每个当前运行的资源都可以通过kubectl edit查看其配置和运行状态,比如:kubectl edit deployment nginx-deployment
  10. Job:

    1. 容器按照持续运行的时间可分为两类,服务类容器,和工作类容器

    2. 服务类容器通常持续提供服务,需要一直运行,比如HTTP,Server,Daemon等,

    3. 工作类容器则是一次性任务,比如批处理程序,完成后容器就退出

    4. kubernetes的Deployment,ReplicaSet和DaemonSet都用于管理服务类容器,对于工作类容器,使用Job

    5. myjob.yam配置解析在这里插入图片描述

      1. batch/v1是当前Job的apiVersion
      2. 指明当前资源的类型为Job
      3. restartPolicy指定什么情况下需要重启容器,对于Job,只能设置为Never或者OnFailure,对于其他controller,比如Deployment,可以设置为Always
      4. 通过kubectl apply -f myjob.yml启动Job
    6. 通过kubectl get job 查看Job的状态在这里插入图片描述

      1. desired和successful都为1,表示按照预期启动了一个pod,并且已经成功执行,通过kubectl get pod 查看pod的状态在这里插入图片描述

      2. 因为pod执行完毕后容器已经退出,需要用–show-all才能看到Completed状态的Pod

      3. 通过kubectl logs可以查看Pod的标准输出在这里插入图片描述

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

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

相关文章

9月18日

思维导图 配置桥接网络的过程 配置桥接网络 确保虚拟机提供了桥接模式菜单栏>编辑>虚拟机网络编辑器确保虚拟机可以设置桥接网络(如无法通过桥接连接网络,则可以还原设置后重新尝试,如果还不行则找到VMware的软件安装包,双…

Pc端关于不同PDF阅读器的实际体验

因为马上研究生开学了,平时也会阅读很多pdf,实际上我们电脑上也自带一个pdf阅读的软件:也就是我们的edge,但是还是可能有些不够我们使用。下面是一些容易获取到的软件资源。 下面的评价仅是个人观点,请理性看待。 一…

【Pycharm使用技巧记录手册】批量检索与替换功能——辅助Yolo训练标签label配置文件构建

在yolo训练前的准备工作中,需要编写yaml配置文件中的信息。对于多分类问题,需要将其类别与索引一一对应。实践中,类别与索引的关系可能写在字典数据格式内,如何将其转换为配置文件内的信息,这是一个看起来简单但如果纯…

亲测有效,长期有效的RTSP流地址公网RTSP地址,各种类型的视频源

我们经常需要做一些实时视频流的测试,但是手边又没有办法及时弄到一个摄像机,我们经常会去搜索一下“公网RTSP地址”,但是大部分现在都失效了,有什么办法能够让我们快速构建一个RTSP流,点几下就能直接用? …

yolov5/8/9/10模型在车辆检测中的应用【代码+数据集+python环境+GUI系统】

yolov5/8/9/10模型在车辆检测中的应用【代码数据集python环境GUI系统】 1.背景意义 随着城市化进程的加速和机动车数量的激增,交通拥堵、交通事故等问题日益严重。传统的交通管理手段已经难以满足日益增长的交通需求。基于计算机视觉的车辆检测技术通过实时捕捉道路…

C/C++语言基础--C++面向对象、类、对象概念讲解

本专栏目的 更新C/C的基础语法,包括C的一些新特性 前言 今天更新的比较晚了,主要一直用是谷歌Colab训练模型,访问国内csdn反而不好使了,请大家见谅;C是面向对象的语言,本文将介绍什么是面向对象、什么是类…

jmeter+ant+git+jenkins

基于工具的接口自动化(jmeterantgitjenkins) 1.1 简介 Jmeter、Ant、Git和Jenkins是一套结合了测试、代码管理和持续集成/持续部署(CI/CD)的工具链,可以帮助开发者进行高效的接口开发和测试。这四个工具可以相互配合…

828华为云征文|华为云Flexus云服务器X实例之openEuler系统下部署SQLite数据库浏览器sqlite-web

828华为云征文|华为云Flexus云服务器X实例之openEuler系统下部署SQLite数据库浏览器sqlite-web 前言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 二、sqlite-web介绍2.1 sqlite-web简介2.2…

C语言 | Leetcode C语言题解之第406题根据身高重建队列

题目: 题解: int cmp(const void* _a, const void* _b) {int *a *(int**)_a, *b *(int**)_b;return a[0] b[0] ? a[1] - b[1] : b[0] - a[0]; }int** reconstructQueue(int** people, int peopleSize, int* peopleColSize, int* returnSize, int** …

TypeScript入门 (二)控制语句

引言 大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年9月学习赛的TypeScript学习总结文档。本文主要讲解TypeScript中控制语句的部分;希望通过我的知识点总结,能够帮助你更好地…

OpenCV基础入门30讲(Python)——第一讲 环境配置

学习基础要求: 1、会Python。 版本要求: 1、电脑系统:Windows10(理论上Ubuntu或者Windows10和Windows11都可以) 2、Python版本:Python 3.8(理论上Python 3.6-3.9都可以) 3、OpenCV版…

微博计算架构实战

课前回顾-性能估算方法 用户量预估 用户行为建模和性能估算 高性能计算架构设计 发微博 发微博是写操作,可以用与写缓冲(Buffer)么?最好是不要加,写缓冲会使得写入速度变慢,比如发送了微博10分钟后,别人还看不到&…

Ansible——Playbook基本功能

文章目录 一、Ansible Playbook介绍1、Playbook的简单组成1)“play”2)“task”3)“playbook” 2、Playbook与ad-hoc简单对比区别联系 3、YAML文件语法:1. 基本结构2. 数据类型3. 列表4. 字典(映射)5. 注释…

CSS概览

概述 是什么 cascading style css 层叠样式表 由W3C制定的网页元素定义规则 为什么 美化 怎么办 设置样式 布局 css 引入 内部样式表 在head标签内部使用style标签 <html><head><style>.id{width: 400px;height: 400px;border: 1px solid black;ma…

2-98 基于matlab的苹果特征检测

基于matlab的苹果特征检测&#xff0c;苹果面积&#xff1a;利用函数bwarea计算白色区域的像素点的个数total。利用total与整幅图片的像素值&#xff08;x*y&#xff09;之比,再与图片的面积相乘,得出苹果面积&#xff1b;缺陷检测&#xff1a;提取出坏损部位的轮廓&#xff0c…

[Golang] Context

[Golang] Context 文章目录 [Golang] Context什么是context创建context创建根context创建context context的作用并发控制context.WithCancelcontext.WithDeadlinecontext.WithTimeoutcontext.WithValue 什么是context Golang在1.7版本中引入了一个标准库的接口context&#xf…

新手学习Python第十一天,准备今天全部学完系列

——早上07&#xff1a;30到达实验室&#xff0c;开始学习&#xff0c;中秋小长假已过&#xff0c;心已收—— 一、__new__与__init__创建对象的过程 class Person(object):def __new__(cls,*args,**kwargs): *表示位置参数&#xff0c;**表示关键字参数print(__new__被调用…

管道缺陷检测系统源码分享

管道缺陷检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

【鸿蒙 HarmonyOS NEXT】组件嵌套滚动:nestedScroll

✨本人自己开发的开源项目&#xff1a;土拨鼠充电系统 ✨踩坑不易&#xff0c;还希望各位大佬支持一下&#xff0c;在GitHub给我点个 Start ⭐⭐&#x1f44d;&#x1f44d; ✍GitHub开源项目地址&#x1f449;&#xff1a;https://github.com/cheinlu/groundhog-charging-syst…

Java SE基础知识详解:源于技术书籍的深度解读

写在前面 ⭐️在无数次的复习巩固中&#xff0c;我逐渐意识到一个问题&#xff1a;面对同样的面试题目&#xff0c;不同的资料来源往往给出了五花八门的解释&#xff0c;这不仅增加了学习的难度&#xff0c;还容易导致概念上的混淆。特别是当这些信息来自不同博主的文章或是视…