从零开始入门 K8s | K8s 的应用编排与管理
点击蓝色“程序猿DD”关注我
回复“资源”获取独家整理的学习资料!
作者 | 张振
一、资源元信息
1. Kubernetes 资源对象
2. labels
3. Selector
4. Annotations
5. Ownereference
二、操作演示
- 查看 Pod,现在没有任何的一个 Pod;
- kubectl get pods
- 然后用事先准备好的一个 Pod 的 yaml,创建一个 Pod 出来;
- kubectl apply -f pod1.yaml
- kubectl apply -f pod2.yaml
- 现在查看一下 Pod 打的标签,我们用 --show-labels 这个选项,可以看到这两个 Pod 都打上了一个部署环境和层级的标签;
- kubectl get pods —show-labels
- 我们也可以通过另外一种方式来查看具体的资源信息。首先查看 nginx1 第一个 Pod 的一个信息,用 -o yaml 的方式输出,可以看到这个 Pod 元数据里面包括了一个 lables 的字段,里面有两个 lable;
- kubectl get pods nginx1 -o yaml | less
- 现在再想一下,怎么样对 Pod 已有的 lable 进行修改?我们先把它的部署环境,从开发环境改成测试环境,然后指定 Pod 名字,在环境再加上它的一个值 test ,看一下能不能成功。这里报了一个错误,可以看到,它其实是说现在这个 label 已经有值了;
- kubectl label pods nginx1 env=test
- 如果想覆盖掉它的话,得额外再加上一个覆盖的选项。加上之后呢,我们应该可以看到这个打标已经成功了;
- kubectl label pods nginx1 env=test —overwrite
- 我们再看一下现在集群的 lable 设置情况,首先可以看到 nginx1 的确已经加上了一个部署环境 test 标签;
- kubectl get pods —show-labels
- 如果想要对 Pod 去掉一个标签,也是跟打标签一样的操作,但是 env 后就不是等号了。只加上 label 名字,后面不加等号,改成用减号表示去除 label 的 k:v;
- kubectl label pods nginx tie-
- 可以看到这个 label,去标已经完全成功;
- kubectl get pods —show-labels
- 下面来看一下配置的 label 值,的确能看到 nginx1 的这个 Pod 少了一个 tie=front 的标签。有了这个 Pod 标签之后,可以看一下怎样用 label Selector 进行匹配?首先 label Selector 是通过 -l 这个选项来进行指定的 ,指定的时候,先试一下用相等型的一个 label 来筛选,所以我们指定的是部署环境等于测试的一个 Pod,我们可以看到能够筛选出一台;
- kubectl get pods —show-labels -l env=test
- 假如说有多个相等的条件需要指定的,实际上这是一个与的关系,假如说 env 再等于 dev,我们实际上是一个 Pod 都拿不到的;
- kubectl get pods —show-labels -l env=test,env=dev
- 然后假如说 env=dev,但是 tie=front,我们能够匹配到第二个 Pod,也就是 nginx2;
- kubectl get pods —show-labels -l env=dev,tie=front
- 我们还可以再试一下怎么样用集合型的 label Selector 来进行筛选。这一次我们还是想要匹配出所有部署环境是 test 或者是 dev 的一个 Pod,所以在这里加上一个引号,然后在括号里面指定所有部署环境的一个集合。这次能把两个创建的 Pod 都筛选出来;
- kubectl get pods —show-labels -l ’env in (dev,test)’
- 我们再试一下怎样对 Pod 增加一个注解,注解的话,跟打标是一样的操作,但是把 label 命令改成 annotate 命令;然后,一样指定类型和对应的名字。后面就不是加上 label 的 k:v 了,而是加上 annotation 的 k:v。这里我们可以指定一个任意的字符串,比如说加上空格、加上逗号都可以;
- kubectl annotate pods nginx1 my-annotate=‘my annotate,ok’
- 然后,我们再看一下这个 Pod 的一些元数据,我们这边能够看到这个 Pod 的元数据里面 annotations,这是有一个 my-annotate 这个 Annotations;
- kubectl get pods nging1 -o yaml | less
- 然后我们再演示一下看 Pod 的 Ownereference 是怎么出来的。原来的 Pod 都是直接通过创建 Pod 这个资源方式来创建的,这次换一种方式来创建:通过创建一个 ReplicaSet 对象来创建 Pod 。首先创建一个 ReplicaSet 对象,这个 ReplicaSet 对象可以具体查看一下;
- kubectl apply -f rs.yaml
- kubectl get replicasets nginx-replicasets -o yaml |less
- 我们可以关注一下这个 ReplicaSet 里面 spec 里面,提到会创建两个 Pod,然后 selector 通过匹配部署环境是 product 生产环境的这个标签来进行匹配。所以我们可以看一下,现在集群中的 Pod 情况;
- kubectl get pods
- 将会发现多了两个 Pod,仔细查看这两个 Pod,可以看到 ReplicaSet 创建出来的 Pod 有一个特点,即它会带有 Ownereference,然后 Ownereference 里面指向了是一个 replicasets 类型,名字就叫做 nginx-replicasets;
- kubectl get pods nginx-replicasets-rhd68 -o yaml | less
三、控制器模式
1. 控制循环
2. Sensor
3. 控制循环例子-扩容
四、控制器模式总结
1. 两种 API 设计方法
2. 命令式 API 的问题
- 命令 API 最大的一个问题在于错误处理;
- 实际上许多命令式的交互系统后台往往还会做一个巡检的系统,用来修正命令处理超时、重试等一些场景造成数据不一致的问题;
- 最后,命令式 API 在处理多并发访问时,也很容易出现问题;
- 相对的,声明式 API 系统里天然地记录了系统现在和最终的状态。
3. 控制器模式总结
- Kubernetes 所采用的控制器模式,是由声明式 API 驱动的。确切来说,是基于对 Kubernetes 资源对象的修改来驱动的;
- Kubernetes 资源之后,是关注该资源的控制器。这些控制器将异步的控制系统向设置的终态驱近;
- 这些控制器是自主运行的,使得系统的自动化和无人值守成为可能;
- 因为 Kubernetes 的控制器和资源都是可以自定义的,因此可以方便的扩展控制器模式。特别是对于有状态应用,我们往往通过自定义资源和控制器的方式,来自动化运维操作。这个也就是后续会介绍的 operator 的场景。
本文总结
Kubernetes 资源对象中的元数据部分,主要包括了用来识别资源的标签:Labels, 用来描述资源的注解;Annotations, 用来描述多个资源之间相互关系的 OwnerReference。这些元数据在 K8s 运行中有非常重要的作用;
控制型模式中最核心的就是控制循环的概念;
两种 API 设计方法:声明式 API 和命令式 API ;Kubernetes 所采用的控制器模式,是由声明式 API 驱动的。
留言交流不过瘾
关注我,回复“加群”加入各种主题讨论群
点击“阅读原文”直达腾讯云双十一超级优惠
从零开始入门 K8s | K8s 的应用编排与管理相关推荐
- 从零开始入门 K8s | Kubernetes 存储架构及插件使用
作者 | 阚俊宝 阿里巴巴高级技术专家 本文整理自<CNCF x Alibaba 云原生技术公开课>第 21 讲. 关注"阿里巴巴云原生"公众号,回复关键词**&quo ...
- k8s使用volume将ConfigMap作为文件或目录直接挂载_从零开始入门 K8s | 如何实现应用配置管理?...
作者 | 何淋波(新胜) 阿里云容器服务技术专家 需求来源 背景问题 首先一起来看一下需求来源.大家应该都有过这样的经验,就是用一个容器镜像来启动一个 container.要启动这个容器,其实有很多需 ...
- kubelet配置cni插件_从零开始入门 K8s | 理解 CNI 和 CNI 插件
原标题:从零开始入门 K8s | 理解 CNI 和 CNI 插件 作者 | 溪恒 阿里巴巴高级技术专家 本文整理自<CNCF x Alibaba 云原生技术公开课>第 26 讲,点击直达课 ...
- 企业入门实战--k8s之Ingress加密、认证以及地址重写
企业入门实战--k8s之Ingress加密.认证以及地址重写 一.Ingress 加密 二.Ingress 认证 三.Ingress 地址重定向 一.Ingress 加密 加密访问80默认重定向443 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...
- 画活动图教程_如何画一只漫画风的手,看着自己的俩只手,带你从零开始入门手绘——008...
给零基础新手的入门系列教程: 何天衢:[干货1]零基础小白学画画,到底应该从哪下手?zhuanlan.zhihu.com 不知道谁说:画兽难画狗,画人难画手,脸比手更难,一捂遮百丑. 虽然不知道为什 ...
- 从零开始入门创作游戏——游戏对象的脚本编辑
做教程远比自己开发游戏要花时间...继续写小恐龙的游戏教程 环境搭建在这里 从零开始入门创作游戏--Unity3d的环境搭建_默哀d的博客-CSDN博客 素材导入和基本页面介绍在这里 从零开始入门创作 ...
- rmd中无法打开链结r_从零开始入门R语言—Rstudio下载与安装
注意:在安装Rstudio之前一定要现状R软件. 安装方法: QQ ZHOU:从零开始入门R语言-软件下载及安装zhuanlan.zhihu.com 一.下载安装RStudio 上节我们已经下载了R ...
- CKA考试习题:K8S日志、监控与应用管理
所有命令都验证过,有更好的方式,欢迎留言~~~ CKA 习题和真题汇总 CKA考试经验:报考和考纲 CKA :2019年12月英文原题和分值 CKA考试习题:K8S基础概念--API 对象 CKA考试 ...
最新文章
- OKR能给公司和团队带来什么价值?
- 7.第一次使用java连接mongodb遇到的问题
- 跟无闻学习GO Web 编程(一) -- go 开发环境搭配(win7 64bit)
- java象棋无框架版_Java版中国象棋
- Python time.time()方法
- 苏宁张近东和富士康郭台铭为什么要抛售阿里巴巴股票?
- linux共享软件_为什么 linux 要用 tar.gz,很少用 7z 或 zip?
- Entity Framework Fluent API
- CAS学习笔记(三)—— SERVER登录后用户信息的返回
- 【优化预测】基于matlab灰狼算法优化BP神经网络预测【含Matlab源码 1729期】
- JavaEE 启示录
- apk逆向出来只有几百k的java_Android逆向之路---改apk包名、达到多开效果
- 如何在PHP中使用Modulo运算符
- java计算某一天是这一年的第几天
- ospf在NBMA网络中的配置
- 标号法求解单源最短路径
- pythoninput输入数字_python如何保证输入键入数字的方法
- Ubuntu 18.04 安装搜狗输入法
- r语言赋值为na_R语言数据框中,用0替代NA缺失值
- java垃圾回收浅析