当前位置: 首页 > news >正文

资源创建方式

  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的标准输出在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 从零开始讲DDR(0)——DDR的前世今生
  • 《使用 LangChain 进行大模型应用开发》学习笔记(四)
  • 1.pytest基础知识(默认的测试用例的规则以及基础应用)
  • Navicat 17 新特性 | 聚焦 MongoDB
  • 北森笔试测评之言语理解到底难不难
  • LabVIEW机动车动态制动性能校准系统
  • 【运维监控】Prometheus+grafana监控flink运行情况
  • 【ComfyUI】自定义节点ComfyUI-Impact-Pack——人脸、手部、肢体修复
  • Linux常用命令(四)
  • kubernetes架构
  • YOLOv9改进策略【SPPF】| SimSPPF,简化设计,提高计算效率
  • 【每日刷题】Day125
  • 基于SpringBoot+Vue+MySQL的考研互助交流平台
  • SQL进阶的技巧:如何实现某列的累计乘积?
  • 二叉树——数据结构
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • conda常用的命令
  • HashMap剖析之内部结构
  • in typeof instanceof ===这些运算符有什么作用
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Linux中的硬链接与软链接
  • nodejs调试方法
  • SSH 免密登录
  • 规范化安全开发 KOA 手脚架
  • ------- 计算机网络基础
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 前端代码风格自动化系列(二)之Commitlint
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • Linux权限管理(week1_day5)--技术流ken
  • Spring第一个helloWorld
  • zabbix3.2监控linux磁盘IO
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • #stm32驱动外设模块总结w5500模块
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (1)(1.9) MSP (version 4.2)
  • (175)FPGA门控时钟技术
  • (7)摄像机和云台
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)
  • (南京观海微电子)——示波器使用介绍
  • (转)Oracle存储过程编写经验和优化措施
  • (转)编辑寄语:因为爱心,所以美丽
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • ***通过什么方式***网吧
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .Net 8.0 新的变化
  • .Net IE10 _doPostBack 未定义
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈