第5篇K8S创建资源的两种方式

 
一、创建方式分类:
命令 vs 配置文件
Kubernetes 支持两种方式创建资源:
1.用 kubectl 命令直接创建,比如:
kubectl run httpd-app --image=reg.yunwei.edu/learn/httpd:latest --replicas=2
在命令行中通过参数指定资源的属性。
2. 通过配置文件和 kubectl apply 创建,要完成前面同样的工作,可执行命令:
kubectl apply -f httpd.yml
httpd.yml 的内容为:
资源的属性写在配置文件中,文件格式为 YAML。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:name: httpd-deployment
spec:replicas: 2template:metadata:labels:name: httpdspec:containers:- name: httpd-appimage: reg.yunwei.edu/learn/httpd:latest

 

下面对这两种方式进行比较。
基于命令的方式:
  1. 简单直观快捷,上手快。
  2. 适合临时测试或实验。
 
基于配置文件的方式:
  1. 配置文件描述了 What,即应用最终要达到的状态。
  2. 配置文件提供了创建资源的模板,能够重复部署。
  3. 可以像管理代码一样管理部署。
  4. 适合正式的、跨环境的、规模化部署。
  5. 这种方式要求熟悉配置文件的语法,有一定难度。
后面我们都将采用配置文件的方式,大家需要尽快熟悉和掌握。
kubectl apply 不但能够创建 Kubernetes 资源,也能对资源进行更新,非常方便。不过 Kubernets 还提供了几个类似的命令,例如 kubectl createkubectl replacekubectl edit 和 kubectl patch
为避免造成不必要的困扰,我们会尽量只使用 kubectl apply
此命令已经能够应对超过 90% 的场景,事半功倍。
 
 
 
二: 读懂 Deployment YAML
Deployment 的配置格式
分析一个 Deployment 的配置文件。 其他 Controller(比如 DaemonSet)非常类似。
① apiVersion 是当前配置格式的版本。
② kind 是要创建的资源类型,这里是 Deployment。
③ metadata 是该资源的元数据,name 是必需的元数据项。
④ spec 部分是该 Deployment 的规格说明。
⑤ replicas 指明副本数量,默认为 1。
⑥ template 定义 Pod 的模板,这是配置文件的重要部分。
⑦ metadata 定义 Pod 的元数据,至少要定义一个 label。label 的 key 和 value 可以任意指定。
⑧ spec 描述 Pod 的规格,此部分定义 Pod 中每一个容器的属性,name 和 image 是必需的。
 
 
运行yaml配置文件:
 
执行如下命令:
 kubectl apply -f httpd.yml     运行pod
 kubectl delete -f http.yml      删除pod
 
(1)伸缩(Scale Up/Down): 是指在线增加或减少 Pod 的副本数。直接写改yaml配置文件的replicas: 参数即可
 
出于安全考虑,默认配置下 Kubernetes 不会将 Pod 调度到 Master 节点。
 
 
(2)节点故障(Failover): 若其中一个node故障, Kubernetes 会检查到 k8s-node1 不可用,将 k8s-node1 上的 Pod 标记为 Unknown 状态,并在 k8s-node2 上新创建两个 Pod,维持总副本数为原指定副本数 3。
 
当 k8s-node1 恢复后,Unknown 的 Pod 会被删除,不过已经运行的 Pod 不会重新调度回 k8s-node1。
 
 
(3)用 label 控制 Pod 的位置: 默认配置下,Scheduler 会将 Pod 调度到所有可用的 Node。不过有些情况我们希望将 Pod 部署到指定的 Node,比如将有大量磁盘 I/O 的 Pod 部署到配置了 SSD 的 Node;或者 Pod 需要 GPU,需要运行在配置了 GPU 的节点上。
 
Kubernetes 是通过 label 来实现这个功能的。label 是 key-value 对,各种资源都可以设置 label,灵活添加各种自定义属性。比如执行如下命令标注 k8s-node3 是配置了 SSD 的节点。
kubectl label node 172.16.254.23 disktype=ssd
 
然后通过:kubectl get node --show-labels  查看节点的 label。
disktype=ssd 已经成功添加到 k8s-node3,除了 disktype,Node 还有几个 Kubernetes 自己维护的 label。
 
有了 disktype 这个自定义 label,接下来就可以指定将 Pod 部署到 k8s-node3。编辑 httpd.yml:
在 Pod 模板的 spec 里通过 nodeSelector 指定将此 Pod 部署到具有:
label disktype=ssd 的 Node 上。
部署 Deployment 并查看 Pod 的运行节点:
kubectl apply -f .
kubectl get pod -o wide
全部 2 个副本都运行在 k8s-node1 上,符合我们的预期。
 
要删除 label disktype,执行如下命令:kubectl label node k8s-node1 disktype- 即删除。 不过此时 Pod 并不会重新部署,依然在 k8s-node1 上运行。
kubectl get node --show-labels
除非在 nginx.yml 中删除 nodeSelector 设置,然后通过 kubectl apply 重新部署。 Kubernetes 会删除之前的 Pod 并调度和运行新的 Pod。
Kubernetes 会删除之前的 Pod 并调度和运行新的 Pod。
 
 
三、DaemonSet:
DeamonSet应用
Deployment 部署的副本 Pod 会分布在各个 Node 上,每个 Node 都可能运行好几个副本。DaemonSet 的不同之处在于:每个 Node 上最多只能运行一个副本。
DaemonSet 的典型应用场景有:
  1. 在集群的每个节点上运行存储 Daemon,比如 glusterd 或 ceph。
  2. 在每个节点上运行日志收集 Daemon,比如 flunentd 或 logstash。
  3. 在每个节点上运行监控 Daemon,比如 Prometheus Node Exporter 或 collectd。
其实 Kubernetes 自己就在用 DaemonSet 运行系统组件。执行如下命令:
kubectl get daemonset --namespace=kube-system
DaemonSet calico-node分别负责在每个节点上运行 calico-node 组件。
因为 calico-node 属于系统组件,需要在命令行中通过 --namespace=kube-system 指定 namespace kube-system。如果不指定则只返回默认 namespace default 中的资源。

转载于:https://www.cnblogs.com/zhou2019/p/10799591.html

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

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

相关文章

javascript 传多个参数的正则表达式(用来获取某个参数值)

例子: //javascript传参数(多个)var url "B.aspx?txtA"document.getElementById("txtName").value; url "&txtB"document.getElementById("txtAge").value; window.open(url,xWindow,width640,height400,statusno,toolbarno,men…

bind安装配置以及应用

实验环境:两台centos6.6服务器,主DNS服务器IP为172.26.249.29,从DNS服务器IP为172.16.249.98,解析域名为stu07.com一、主DNS服务器搭建1、 检查系统是否安装bind包,否则用yum安装2、安装好bind包后,编辑主…

mysql英文介绍_每日科技英文48: MySQL C API简介

今日要点:MySQL C API的定义MySQL C API包含的内容如何获取MySQL C API什么是库(library)的解释windows版外带调试库JDBC,ODBC,ADO,PDO....,每门语言都有各自的数据链接库。如果写服务器的话,肯定是经常使用。如果对于Mysql数据库来说,不管是…

收藏属于自己flash类库集工具

这一篇是临时的笔录,我们知道as3 是面向对象的语言,这种语言能够方便的封装好一些类,重用性得到加强。每一个人都有一套绝活,这些绝活就像武林当中每一派的武学那样。在平时的工作使用上,收集这些工具能够方便自己工作…

ADT Running Android Lint has encountered a problem

解决办法: Window--->Preferences----->Android--------> LInt Error Checking----->when saving files, check for errors 。去掉勾选 如果此方法还行不通,可能是你系统是64位的,但是安装的却是32位的eclipse! 重装个…

mysql数据库 常用函数_《MySQL数据库》常用函数整理

原标题:《MySQL数据库》常用函数整理以下内容,是我整理出来的比较常用的字符串函数,数值函数,日期函数。第一类:字符串函数1、conv(n,from_base,to_base):对from_base进制的数n,转成to_base进制的表示方式(PS:进制范围…

生产计划到底该怎样改进?这6点帮你节省至少60%的计划时间

生产计划贯穿了价值创造的全过程:从概念到投产的设计过程、从订货到送货的信息流通处理过程、从原材料到产成品的物质转换过程以及全生命周期的支持和服务过程,涉及每一个部门,每一个人。 生产计划管理就是计划调动一切资源,快速、…

关于“收获”啰嗦几句。

桌子上有一水杯,杯子里有半杯水。 甲看到了说:太好了,还有半杯水。 乙看到了说:只有半杯水了。 从另一个角度说,甲关注的是“水”,而乙关注的是“空气”即水面到杯子口的那段空间。 收获到了,那…

Linux下安装搭建Memcached集群环境

由于项目需要,需要搭建memcached集群环境,遂开始调研相关技术网络上有不少linux下安装memcached的教程,对于我这个linux零基础的来说,想立马在linux下安装memcached,似乎还是有点阻碍。参照了不少网络教程,…

mysql 连接数测试_mysql最大连接数试验

一、试验基础环境配置1、查看当前数据库的最大连接数mysql> show global variables like %connect%;-------------------------------------------| Variable_name | Value |-------------------------------------------| character_set_connection | utf8 || collation_co…

深入信号和槽(Signals and Slots in Depth)

1、一个信号可以连接到多个槽:connect(slider, SIGNAL(valueChanged(int)),spinBox, SLOT(setValue(int)));connect(slider, SIGNAL(valueChanged(int)),this,SLOT(updateStatusBarIndicator(int)));当信号发出后,槽函数都会被调用,但是调用的…

10个机器学习人工智能开发框架和AI库(优缺点对比表)/贪心学院

概述 通过本文我们来一起看一些用于人工智能的高质量AI库,它们的优点和缺点,以及它们的一些特点。 人工智能(AI)已经存在很长时间了。然而,由于这一领域的巨大进步,近年来它已成为一个流行语。人工智能曾经…

大数据时代的数据存储,非关系型数据库MongoDB(一)(转)

出处:http://www.cnblogs.com/mokafamily/p/4076954.html 爆炸式发展的NoSQL技术 在过去的很长一段时间中,关系型数据库(Relational Database Management System)一直是最主流的数据库解决方案,他运用真实世界中事物与…

mysql集群初始化配置_集群Cluster MySQL的安装配置和使用

集群Cluster MySQL的安装配置和使用发布时间:2020-05-28 14:20:03来源:亿速云阅读:233作者:鸽子MySQL Cluster MySQL集群基本概念:“NDB” 是一种“内存中”的存储引擎,它具有可用性高和数据一致性好的特点…

在一个类型的继承体系中,成员的构造顺序

先看代码,写出结果 class A { public A() { PrintFields(); } public virtual void PrintFields(){} } class B:A { int x1; int y; public B…

IntelliJ IDEA+Mysql connecter/j JDBC驱动连接

在IntelliJ IDEA中用connecter/j jdbc驱动连接MYSQL 以下是解决过程,待整合。。。有点懒,有空再改 官方文档:https://www.cnblogs.com/cn-chy-com/p/10145690.html 创建了mysql新用户:https://blog.csdn.net/weixin_38091140/arti…

成长的路上,痛并快乐着

异地求学七年,从地图的的西北部跨越到地图的南部。一路行走着,一路成长着,有痛,有快乐。或许,痛并快乐着也是一种生活的姿态。或许,有过痛的青春才深刻,而深刻的背后即是思考、理解、包容与成熟…

mysql类exadata功能_Exadata V2数据库一体机的几大致命缺点

昨天客户语重心长的告诉我,他们准备把Exadata V2 上的核心应用迁移走,客户在09年就开始用Exadata,是不是国内第一家我不知道,但至少应该是用于生产的第一批。但是这2年来因为Exadata折腾了无数次,现在终于不想折腾了。…

奇门千金诀-占病

八诈含义值符;阳症。               腾蛇;惊恐、噩梦、遗精。太阴;肺痨、骨虚。            六合;中风、麻木。             勾陈、白虎;翻胃、呕吐、伤亡、道路。   朱雀…

css动画(transition/transform/animation)

在开发中,一个好的用户操作界面,总会夹杂着一些动画。css用对少的代码,来给用户最佳的体验感,下面我总结了一些css动画属性的使用方法及用例代码供大家参考,在不对的地方,希望大佬直接拍砖评论。 1 transit…