一、创建方式分类:
命令 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:
template:
metadata:
labels:
name: httpd
spec:
containers:
- name: httpd-app
image: 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 中的资源。

第5篇K8S创建资源的两种方式的更多相关文章

  1. k8s创建资源的两种方式

    命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1. 用 kubectl 命令直接创建 kubectl run nginx-deployment --image=nginx: -- ...

  2. k8s创建资源的两种方式及DaemonSet应用(5)

    一.创建方式分类 Kubernetes 支持两种方式创建资源: (1)用 kubectl 命令直接创建,比如: kubectl run httpd-app --image=reg.yunwei.com ...

  3. k8s 创建资源的两种方式 - 每天5分钟玩转 Docker 容器技术(124)

    命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1. 用 kubectl 命令直接创建,比如: kubectl run nginx-deployment --image=nginx ...

  4. k8s 创建资源的两种方式【转】

    命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1. 用 kubectl 命令直接创建,比如: kubectl run nginx-deployment --image=nginx ...

  5. k8s创建资源的两种方式(5)

    一.创建方式分类: 命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1.用 kubectl 命令直接创建,比如: kubectl run httpd-app --image=reg ...

  6. centos7下kubernetes(6。kubernetes创建资源的两种方式)

    两种方式:1.命令:2.配置文件 之前我们在部署K8S的时候分别用到了命令和配置文件创建K8s资源: 1.命令方式:kubectl run nginx-deployment --image=nginx ...

  7. pod(一):Kubernetes(k8s)创建pod的两种方式

    目录 一.系统环境 二.前言 三.pod 四.创建pod 4.1 环境介绍 4.2 使用命令行的方式创建pod 4.2.1 创建最简单的pod 4.2.2 创建pod,指定镜像下载策略 4.2.3 创 ...

  8. kubernetes创建资源的两种方式

    一.创建方式分类: 命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1.用 kubectl 命令行的方式直接创建,比如: kubectl run httpd-app --image ...

  9. kubernetes第五章--创建资源的两种方式

随机推荐

  1. 第02章 IOC和bean的配置

    第02章 IOC容器和Bean的配置 1.IOC和DI ①IOC(Inversion of Control):反转控制. 在应用程序中的组件需要获取资源时,传统的方式是组件主动的从容器中获取所需要的资 ...

  2. js append()和appendChild()和insertBefore()的区别

    <body> <input type="button" value="删除" id="btn"> <scrip ...

  3. IntelliJ IDEA设置maven

    1.更改默认的maven仓库 2.手动更新maven 项目——也就是下载依赖的jar包 3. 不想每次手动更新,设置IDEA自动更新mav项目,下载jar包

  4. 【CF1100F】Ivan and Burgers(线性基,分治)

    题意:给定n个数,每个数为c[i],有q个询问,每次询问从第l个到第r个数字的最大xor和 n,q<=5e5,c[i]<=1e6,时限3s 思路:直接线段树维护区间线性基是3个log,会T ...

  5. 9.26-mkdir,tree,touch命令

    mkdir -- 创建文件 [root@wen data]# mkdir --help 用法:mkdir [选项]... 目录... 若指定目录不存在则创建目录. 长选项必须使用的参数对于短选项时也是 ...

  6. Unity编程标准导引-1.1下载和安装Unity

    本文为博主原创文章,欢迎转载,请保留出处:http://blog.csdn.net/andrewfan 1.1.下载和安装Unity 1.1.1 选取版本 首先找到Unity官方网站https://s ...

  7. 用 Flask 来写个轻博客 (34) — 使用 Flask-RESTful 来构建 RESTful API 之三

    目录 目录 前文列表 应用请求中的参数实现 API 分页 测试 前文列表 用 Flask 来写个轻博客 (1) - 创建项目 用 Flask 来写个轻博客 (2) - Hello World! 用 F ...

  8. Python 进阶_模块 & 包

    目录 目录 模块的搜索路径和路径搜索 搜索路径 命名空间和变量作用域的比较 变量名的查找覆盖 导入模块 import 语句 from-import 语句 扩展的 import 语句 as 自动载入模块 ...

  9. Windows 08R2 IIS网站架设

    目录 目录 配置和安装IIS 环境设置 安装IIS服务器 网站的站点目录和欢迎页面 配置和安装IIS IIS是Windows的网站服务器,所以配置IIS服务的前提是需要一个网址.和DNS域名并添加主机 ...

  10. pip install 报SSL异常和timeout异常

    在安装pip3 install virtualenv时报了SSL异常 如图 pip is configured with locations that require TLS/SSL, however ...