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

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
6月前
|
Kubernetes Cloud Native Go
Kubernetes实践:从入门到实践
Kubernetes实践:从入门到实践
89 0
|
4月前
|
Kubernetes 安全 Cloud Native
云原生|kubernetes|安全漏扫神器trivy的部署和使用
云原生|kubernetes|安全漏扫神器trivy的部署和使用
116 0
|
11月前
|
存储 资源调度 Kubernetes
【云原生】Kubernetes编排工具精讲
【云原生】Kubernetes编排工具精讲
104 0
|
JSON Prometheus 运维
Kubernetes 应用管理领域总揽和入门实践|学习笔记(二)
快速学习 Kubernetes 应用管理领域总揽和入门实践
132 0
Kubernetes 应用管理领域总揽和入门实践|学习笔记(二)
|
Web App开发 弹性计算 Kubernetes
云原生系列 【基于CCE Kubernetes编排实战】
## 基于CCE Kubernetes编排实战 #### 本实验用于指导学员基于CCE完成Kubernetes实验操作。主要包含Kubernetes控制器Deployment、DaemonSet编排操作。 操作前提:预置环境与登录华为云收起 ①预置环境 实验开始之前,为什么需要先预置实验环境? 注意:开始实验之前请点击手册上方"预置实验环境"按钮。 预置实验环境约等待【1分钟】后预置成功。环境预置成功会生成以分配的华为云账号命名的Vpc、安全组。 (2)登录华为云进入【实验操作桌面】,打开Chrome浏览器,首次可自动登录并进入华为云 控制台页面。 如后续关闭浏览器重新登陆或自动
241 1
|
运维 Kubernetes 安全
Serverless Kubernetes ASK 概述|学习笔记
快速学习 Serverless Kubernetes ASK 概述
752 0
Serverless Kubernetes ASK 概述|学习笔记
|
SQL JSON Prometheus
课时1:Kubernetes 应用管理领域总览和入门实践|学习笔记(二)
快速学习课时1:Kubernetes 应用管理领域总览和入门实践
117 0
课时1:Kubernetes 应用管理领域总览和入门实践|学习笔记(二)
|
运维 Kubernetes Cloud Native
课时1:Kubernetes 应用管理领域总览和入门实践|学习笔记(一)
快速学习课时1:Kubernetes 应用管理领域总览和入门实践
115 0
课时1:Kubernetes 应用管理领域总览和入门实践|学习笔记(一)
|
运维 Kubernetes 负载均衡
【云原生-Kubernetes篇】Kubernetes入门扫盲实战
【云原生-Kubernetes篇】Kubernetes入门扫盲实战
|
运维 Kubernetes Cloud Native
企业级运维之云原生与Kubernetes实战课程 - 第一章第6讲 Kubernetes网络
本小节主要内容为K8s容器网络介绍,包括:网络约束和目标、节点内的Pod通信、跨节点的Pod通信、Pod与Netns的关系、典型容器网络实现方案。
企业级运维之云原生与Kubernetes实战课程 - 第一章第6讲 Kubernetes网络

推荐镜像

更多