应用编排与管理:核心原理|学习笔记

简介: 快速学习应用编排与管理:核心原理

开发者学堂课程【Kubernetes 入门 应用编排与管理:核心原理】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/51/detail/1011


应用编排与管理:核心原理


内容介绍:

一、资源元信息

二、操作演示

三、控制器模式

四、控制器模式总结

 

一、资源元信息

1、Kubernetes 资源对象

l Spec:期望的状态

l Status:观测到的状态

l Metadata

l Labels

l Annotations

l OwnerReference

2、Labels

l 标识型的Key: Value 元数据

l 作用

用于筛选资源

唯一的组合资源的方法

可以使用 selector 来查询

类似于 SQL'select * where ...'

例子:

environment: production

release: stable

app.kubernetes.io/version: 5.7.21

failure-domain.beta.kubernetes.io/region:

cn-hangzhou

3、Selector

l 集合型 Selector:Env in (test,gray )

l 其他集合 Selector 例子:

tie notin (front, back)

release

!release

annotations

l Key: Value

l 作用:

存储资源的非标识性信息

扩展资源的 spec/status

l 特点:

一般比 label更大

可以包含特殊字符

可以结构化也可以非结构化

4、Ownereference

l “所有者"即集合类资源

Pod 的集合: replicaset, statefulset

l 集合类资源的控制器创建了归属资源

Replicaset 控制器创建 pod

双击可隐藏空白

l 作用

方便反向查找创建资源的对象

方便进行级联删除

 

二、操作演示

No resources fourd.

a kubectl apply -f pod

Pod1.yuml 
pod2.yuml


a kubectl apply -f pod

Pod1.yuml 
pod2.yuml


a kubectl apply -f pod1.yuml

bod/nginx1 created


a kubectl apply -f pod2.yuml

bod/nginx2 created


a kubectl get pods --show-labels


NAME  READY  STATUS  RESTARTS  AGE    LABLES

Nginx1  1/1    Running   0        12s   env=dev.tie=front

Nginx2  1/1    Running   0        8s    env=dev.tie=front

a kubectl get pods nginx1 -o yuml 1 less

a kubectl lable pods nginx1  env=test

Error:env already has a value(dev).and overwrite is false

a kubectl lable pods nginx1  env=test  overwrite

Pod\nginx1 labeled

a kubectl get pods --show-labels


NAME  READY  STATUS  RESTARTS  AGE    LABLES

Nginx1  1/1    Running   0        91s   env=test.tie=front

Nginx2  1/1    Running   0        87s   env=dev.tie=front

a kubectl label pods nginx1 tie-

Pod\nginx1 labeled

a kubectl get pods --show-labels


NAME  READY  STATUS  RESTARTS  AGE    LABLES

Nginx1  1/1    Running   0     2m11s   env=test

Nginx2  1/1    Running   0     2m7s    env=dev.tie=front

a kubectl get pods --show-labels
-1 env=test

NAME  READY  STATUS  RESTARTS  AGE    LABLES

Nginx1  1/1    Running   0     2m41s   env=test

a kubectl get pods --show-labels
-1 env=test.env=dev

No resources found.

a kubectl get pods --show-labels
-1 env=dev.tie=front

NAME  READY  STATUS  RESTARTS  AGE    LABLES

Nginx2  1/1    Running   0      3m8s   env=dev.tie=front

a kubectl get pods --show-labels
-1 env in (test.dev)

NAME  READY  STATUS  RESTARTS  AGE    LABLES

Nginx1  1/1    Running   0     3m43s   env=test

Nginx2  1/1    Running   0     3m39s   env=dev.tie=front

 

三、控制器模式

1、控制循环

image.png

控制循环包括控制器、被控制的系统以及能够观测系统的控制器三个

控制操作会使得系统产生新的输出

2、逻辑组件

各组件独立自主地运行

不断使系统向终态趋近 status -> spec

3、sensor

image.png

List 进行系统资源的全量更新

Watch 只在多次 List 之中进行增量分析

事件处理函数会监听事件,控制循环中的控制器组件主要由事件处理函数以及 work 组成,事件处理函数会监听 informer 资源的新增,更新,删除的事件并根据控制器的逻辑决定是否需要处理,对需要处理的事件,会把事件关联资源命名空间以及名字塞入一个工作队列中并且由后续处理

4、控制循环例子-扩容

ReplicaSet 中通过 Selector 来匹配所有关联的 prod

image.png

5、两种 API 设计方法

(1)命令式(和孩子交流)

l 吃饭

l 刷牙

l 睡觉

l 唱一首歌

l 新扩一个 pod

l 删除一个 pod

(2)声明式(和员工交流)

l 市场占有率达到80%

l 稳定性达到99.99%

l 做一个身高体重正常的孩子

l 副本数保持在3个

6、命令式

l 如果命令没有响应怎么办?

反复重试

需要记录当前的操作-复杂

l 如果多重试了怎么办?

巡检做修正-额外工作、危险

l 如果多方并发访问怎么办?

需要加锁-复杂、低效

7、声明式

天然地记录了状态

幂等操作、可在任意时刻反复操做

正常操作即巡检

可合并多个变更

 

四、控制器模式总结

由声明式的 API 驱动-K8S 资源对象

由控制器异步地控制系统向终态驱近

使系统的自动化和无人值守化成为可能

便于扩展-自定义资源和控制器

(特别的,operator)

image.png

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
数据采集 安全 数据处理
制造业、工程设计行业、创投行业的数据治理痛点与解决方案
关注监管政策动态:密切关注数据治理相关法律法规的发布和更新,及时调整企业数据治理策略,确保合规经营。
制造业、工程设计行业、创投行业的数据治理痛点与解决方案
|
消息中间件 存储 运维
从 Kafka 2.x 到 Kafka 3.x:升级之旅
从 Kafka 2.x 到 Kafka 3.x:升级之旅
2805 2
|
Rust 安全 Java
Java Stream 使用指南
本文介绍了Java中Stream流的使用方法,包括如何创建Stream流、中间操作(如map、filter、sorted等)和终结操作(如collect、forEach等)。此外,还讲解了并行流的概念及其可能带来的线程安全问题,并给出了示例代码。
815 0
|
Kubernetes Cloud Native 开发者
OpenKruise:Kubernetes的超级插件,一键解锁容器运行时操作的超能力!
【8月更文挑战第8天】在云原生领域,Kubernetes虽已成为容器编排的标准,但仍有限制,比如批量操作不便和高级调度功能缺失。OpenKruise是一款增强工具,提供CloneSet、Advanced StatefulSet等功能,既保持Kubernetes API特性又增加了扩展性,使Pod管理更灵活。可通过Helm安装OpenKruise,并使用CloneSet轻松实现批量部署。这类增强工具让开发者能更高效地突破原生Kubernetes的限制,预计未来将更加受到欢迎。
337 48
|
Kubernetes 容器 Perl
Kubernetes网络插件体系及flannel基础
文章主要介绍了Kubernetes网络插件体系,特别是flannel网络模型的工作原理、配置和测试方法。
369 3
Kubernetes网络插件体系及flannel基础
|
缓存 前端开发 安全
预检请求:为跨域请求保驾护航(下)
预检请求:为跨域请求保驾护航(下)
|
存储 算法 缓存
高并发架构设计三大利器:缓存、限流和降级问题之滑动窗口算法的原理是什么
高并发架构设计三大利器:缓存、限流和降级问题之滑动窗口算法的原理是什么
218 0
|
缓存 NoSQL Redis
Redis系列-9.Redis布隆过滤器BloomFilter
Redis系列-9.Redis布隆过滤器BloomFilter
283 1
|
自然语言处理 数据挖掘 知识图谱
【提示学习】Knowledgeable Prompt-tuning: Incorporating Knowledge into Prompt Verbalizer for Text Classific
目前流行的第四大范式Prompt的主流思路是PVP,即Pattern-Verbalizer-Pair,主打的就是Pattern(模板)与Verbalizer(标签映射器)。   本文是在Verbalizer(标签映射器)方面做出的创新。   文章思路是数据增强+去噪,不过数据增强在于verbalizer对于label space至expanding word space的映射,引入外部的扩展标签词集,辅助分类,去噪并不新颖,就是在细化两个场景,zeroshot滤掉扩展标签词集的低频词,并上下文校验。fewshot则是引入可学习权值,减小噪声影响。
388 0
|
Java Linux 网络安全
群晖DS218+部署Harbor(1.10.3)
家里的群晖用来装上GitLab,可以保存代码,也可以执行GitLab CI
768 1
群晖DS218+部署Harbor(1.10.3)