Kubernetes 应用管理领域总揽和入门实践|学习笔记(一)

简介: 快速学习 Kubernetes 应用管理领域总揽和入门实践

开发者学堂课程【Kubernetes 云原生管理实践Kubernetes 应用管理领域总揽和入门实践】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/751/detail/13220


快速学习 Kubernetes 应用管理领域总揽和入门实践


内容介绍:

一、创立 OAM 的背景和原因

二、OAM 基本概念

三、部署 OAM 应用


一、创立 OAM 的背景和原因

1、OAM :自包含、关注点分离的云原生应用定义

1)构建以应用为中心的 Kubernetes

k8s 统一了底层基础设施 (Compute, Network, Storage), 但是在应用层上没有进一步往上抽象。大家在 K8s上主要以使用单个 workload 为主。一旦能力多了,整个管理和扩展的难度会增大,且用户体验也不够友好。

 

2、尝试往应用层做抽象,做统一的云原生应用管理架构。

云原生应用管理架构的领域建模:

Clean architecture :可扩展、易标准化的架构

•越往里,依赖越低,抽象程度越高,接口设计越稳定

•核心层为通用的应用模型 (OAM)PaaS 平台基础能力→用户展示和体验层

 

3、什么是 OAM ?为什么要用 OAM

ubernetes 目前主要价值在于统一了基础设施层,但是在应用层上并没有进一步抽象。大家在 Kubernetes 上主要还是使用单个 workload 为主,一旦能力多了,整个管理和扩展的难度就会增大,并且用户体验也不够友好。为了解决这些问题,尝试往应用层上做抽象,做统一的云原生应用管理架构。有了这个目标,这一层云原生应用管理架构又该怎样建模?可以借鉴微服务领域建模的思想,分享一篇叫做 Clean architecture 领域建模的文章。

image.png

 

这篇文章最核心的思想表达了这样一个观点,一个好的架构设计,关键在于把不容易变换的接口单独分层和抽象出来。越是不容易变化的,在模型里就越靠近或成为内核。一个内核依赖程度越低,抽象程度越高,可重用和标准化能力随之越强。

 

4、设计一个 Paas 层架构模型也是同样的道理。

image.png

最内层的核心是一个通用的应用模型,他有一些特征,比如自包含、关注点分离、结构化组合等。往外一层是 Paas 平台的基础能力,比如 Kubernetes 原生的或自定义的资源、外部的云资源、应用的生命周期管理等等。最外层是用户的展示和体验层,包括 IaC 工具,接下来要讲的 CUE 也是属于这一部分的内容。以及 CLI/UI 工具,类似于 Docker Compose 的定义文件、Source Image 工具等。

 

二、OAM 基本概念

1、OAM 基本概念

WorkloadDefinition:cloneset workload definition

TraitDefinition:ingress trait definition

Component

ApplicationConfiguration

•自包含:所有服务组件和运维能力都在一个定义里。

•结构化: traits attached to components, 避免了 label selector 号等关联资源的方式,让用户使用更简单,体验也更友好。

 

2、OAM 里面有一个目录 Definition 的概念,目前用户 workload Kubernetes 上,它会定义成 CRD,而目录 definition 是帮助 CRD 外再加一些 OAM 本身的概念,比如说子资源的信息等等内容在里面。

image.png

 

3、trait 是一个作用在目录上的运维能力,trait definition 跟目录 definition 类似,是运维能力定义成一个 CRDtrait definition 包住 CRD 外加一些 OAM 本身的概念,比如说下图中的 appliesto

image.png

 

表达可作用于的 workload 类型,还有表达自动填写 workload 信息的字段。

 

4、这里有很多 Componet,这些之后会谈到他都是研发来定义的,每一个 component 代表的是一个微服务的组件。一个 component 是对 workload 实例的一层分装,帮助他来表达其他的内容,比如说 Paramittens

image.png

 

5、Application configuration 是运维侧给 Components 加上运维能力或者最终部署物。直接来看例子。

image.png

 

在这个例子可以看到 Application configuration 是自包含的。所有需要的内容,比如需要多少组件、运维能力都包含在一个含义里面,也就是最终的 Application Configuration。同时它也是结构化的,他的traits和运维能力会 attach component 上,避免了 label selector 等离散的绑定方式,使用户体验更简单也更友好。

 

三、部署 OAM 应用

1、在 demo 里面,将通过 OAM 来部署一个应用。Demo 会依赖 KinD,在本地通过 doc 来运行 Kubernetes 的一种方式。我写了一个 README 来说明有一个样例来给大家展示如何去部署 OAM 应用。首先进到 OAM 目录下。

image.png

 

README 是刚才读的内容,复制 bash create-cluster.sh,接下来创建一个 cluster,一边创建一边可以看cluster做了什么。

image.png

 

他是创建一个 kind cluster,这个 kind cluster有一些本地的 pormetic,本地 pormetic 可以让本地通过 ingress 直接访问里面的服务。kind cluster已经创建完毕。

oam git:(master) bash create-cluster. sh

Creating cluster"kind"...

Ensuring node image(kindest/node:v1.18.2)

Preparing nodes

writing configuration

Starting control-plane

Installing CNI

Installing StorageClass

Set kubectl context to"kind-kind"

You can now use your cluster with:

kubectl cluster-info--context kind-kind

Not sure what to do next? Check out https://kind.sigs.kess.io/docs/user/quick-start/

oam git:(master)

 

2、接下来把 ingress control

kubectl apply-f https://raw.githubusercontent.com/

kubernetes/ingress-ngins/master/deploy/static/provider/kind/deploy.yaml

kind cluster 安装。安装完成如下图

image.png

 

3、在本地构建一个 flask app。复制

docker build-t flash-sample:v1.

kind load docker-image flask-sample:vl

看一下 dockerfile 里面引用 nginx-flask python,并且把本地的 flash app 的代码复制进去。

FROM tiango lo/uwsgi-nginx-flask-python3.8

COPY ./app/app

Flash app 很简单,他直接返回 hello world

 

4、第二个命令 kind load 虽然在本地构建了一个 image

kind load docker-image flask-sample:vl

但是并没有 posh 到远端,而 kind load 可以直接把 image load 到本地 kind 的集群里,这样里面的 kind 部署 deporment 也能直接识别里面的 image,不需要从远端在部一遍。Image 已经 build 完成。

image.png

 

5、接下来这一步将会把 OAM 运行起来

kubectl create namespace oam-system

helm repo add crossplane-master https://charts.

crossplane.io/master/

helm install oam-namespace oam-system crossplane-master/

oam-kubernetes-runtime—devel

通过 helm 的方式来安装,把 crossplain master 作为一个 vipor 加进来,基于 vipor 有一个 OAM Kubernetes runtime,并且把 runtime 装到 oam-system namespace 上面。现在 namespace 下面已经有 oam-system,里面runtine 也被部署起来了。

image.png

6、接下来部署应用。

Kubec apply  -f config /

这个应用里面有 definition 的文件,这个 definition 的文件就是定义了需要部署 load trait 都有哪些?还有一些 compote 文件,就是刚刚 flask app 作为一个 Component 部署进去了。

image.png

最后就是 componentcomponent 也给他打上了 trait,包括 service 的能力和 ingress 的能力,也就是给它加上了一个访问的运维能力。

 

7、ingress 绑定了本地的 pod,可以直接从 local host 上访问。访问成功会显示

oam git:(mastercurl http//localhost/

Hello World from Flask%

这样这个 demo 就完成了。最后需要把他清理掉。

Kubectl delete -f config/

Kind delete cluster

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
7月前
|
Kubernetes 监控 安全
Kubernetes实战:集群管理与自动化技术详解
【6月更文挑战第27天】Kubernetes实战聚焦集群自动化管理,涵盖核心概念如主从架构、API Server及工作节点,强调自动扩缩容、RBAC安全控制与日志监控。通过IaC工具如Helm实现配置自动化,结合Prometheus等进行持续监控,强调安全策略与资源优化,展现K8s在现代应用管理中的威力。
|
2月前
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。
|
2月前
|
存储 运维 Kubernetes
Kubernetes集群管理:从基础到进阶
Kubernetes集群管理:从基础到进阶
|
2月前
|
Kubernetes Cloud Native 前端开发
Kubernetes入门指南:从基础到实践
Kubernetes入门指南:从基础到实践
67 0
|
3月前
|
存储 Kubernetes 负载均衡
掌握Kubernetes:从零到一的集群管理之旅
【10月更文挑战第18天】掌握Kubernetes:从零到一的集群管理之旅
108 0
|
5月前
|
Kubernetes Cloud Native 应用服务中间件
云原生入门:Kubernetes的简易部署与管理
【8月更文挑战第31天】在云计算的浪潮中,云原生技术如同星辰般熠熠生辉。它以容器、服务网格、微服务等为基石,构建起现代化的软件架构。本文将带你一探究竟,通过Kubernetes这个强大的平台,学习如何部署和管理你的应用。我们将手把手教你搭建一个简单的Kubernetes集群,并运行一个示例应用。准备好了吗?让我们启航,探索云原生的世界!
|
5月前
|
Kubernetes Cloud Native 云计算
云原生之旅:Kubernetes 集群管理与应用部署
【8月更文挑战第31天】在数字化时代的浪潮中,云原生技术如Kubernetes已经成为推动企业IT架构转型的核心力量。本文将带领读者深入了解如何通过实践操作掌握Kubernetes集群的管理和应用部署,解锁云计算的无限可能。我们将从搭建一个简单的Kubernetes集群开始,逐步探索其丰富的功能和灵活的配置选项,最后通过实际案例展示如何在集群中部署和管理一个多容器的应用。无论你是云计算新手还是希望深化对云原生理解的开发者,这篇文章都将为你提供实用的知识和技能。
|
Kubernetes Cloud Native Go
Kubernetes实践:从入门到实践
Kubernetes实践:从入门到实践
151 0
|
存储 资源调度 Kubernetes
【云原生】Kubernetes编排工具精讲
【云原生】Kubernetes编排工具精讲
144 0
|
JSON Prometheus 运维
Kubernetes 应用管理领域总揽和入门实践|学习笔记(二)
快速学习 Kubernetes 应用管理领域总揽和入门实践
Kubernetes 应用管理领域总揽和入门实践|学习笔记(二)