开发 k8s 管理平台 - k8sailor 08. 获取并展示 Deployments 信息

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 开发 k8s 管理平台 - k8sailor 08. 获取并展示 Deployments 信息

开发 k8s 管理平台 - k8sailor 08. 获取并展示 Deployments 信息

原文地址: https://tangx.in/posts/books/k8sailor/chapter02/08-fetch-and-display-deployments/
tag: https://github.com/tangx/k8sailor/tree/feat/08-fetch-and-display-deployments

display-deployments.png

display-deployments-kube-system.png

使用 Axios 请求 Deployments 数据

安装 axios 客户端

# 安装 axios
yarn add axios

创建 /webapp/src/apis 目录, 用于存放所有针对 k8sailor 后端的数据请求

使用 axios config 模式初始化一个客户端

/webapp/src/apis/httpc.ts

axios config 模式可以创建一个 http 客户端,其中包含了各种各样的初始化参数, 使用这个模式就不用在每个请求中都写重复的内容了。

import axios from 'axios'

// 使用 config 模式
// https://github.com/axios/axios#config-defaults
let httpc = axios.create({
    baseURL:"http://127.0.0.1:8088/k8sailor/v0"
})

export default httpc

创建 deployments 的请求参数

/webapp/src/apis/deployment.ts

有了公共的 httpc 之后, 在不同的 组建 中就可以直接 import 使用了。

注意: 在 httpc.get() 的时候, 只写了 deployments 的接口相对地址。 在发送请求是, axsio 会自动进行补全。
import httpc from './httpc'

// 获取所有 deployment 信息
// namespace 默认值为 defualt
// 使用 async await 解析内容
async function getAllDeployments(namespace = "default"): Promise<Deployment>{
    const resp = await httpc.get(`/deployments?namespace=${namespace}`)
    // console.log(resp.data)
    return resp.data
}

server 端允许 cors 跨域

到这里会遇到 跨域 问题。 由于目前 前后端 是分离的,并且之前我们在 server 并没有相关代码允许跨域请求。 所有通过页面的请求 暂时 是无法拿到数据的。

跨域在 gin 中的实现其实就是 gin.HandlerFunc, 可以理解成一种中间件。

以下是跨域规则, 规则比较暴力, 极狐允许了全部请求, 在实际使用中, 可以进行按需调整。

func cors() gin.HandlerFunc {
    return func(c *gin.Context) {
        method := c.Request.Method
        if method != "" {
            c.Header("Access-Control-Allow-Origin", "*") // 可将将 * 替换为指定的域名
            c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, UPDATE")
            c.Header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization,X-Token")
            c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Cache-Control, Content-Language, Content-Type")
            c.Header("Access-Control-Allow-Credentials", "true")
        }
        if method == "OPTIONS" {
            c.AbortWithStatus(http.StatusNoContent)
        }
    }
}

接下来在 server 端应用规则, 允许跨域。

// RegisterRoute 注册
func (s *Server) RegisterRoute(registerFunc func(rg *gin.RouterGroup)) {

    // 注册以服务名为根的路由信息,方便在 k8s ingress 中做转发
    base := s.engine.Group(s.Appname)

    // 针对 appname 下的路由,允许跨域
    base.Use(cors())

    // 注册业务子路由
    registerFunc(base)
}

这里并没有在 根路由 下允许, 而是在 /:appname 下允许。

也就是说如下

# 允许跨域
/appname/deployments   
/appname/pods/:podname  

# 不允许跨域
/ping

vue3 展示数据

使用 reactive 定义一个 响应式 数据


<script setup lang='ts'>
import {reactive } from '@vue/reactivity'
import client,{ DeploymentItem } from '../apis/deployment'


let data = reactive({
  namespace:"default",
  error: "",
  items: [] as DeploymentItem[]
})

</script>

使用 onMounted 加载数据

onMounted 是 vue3 的生命周期钩子的其中一个, 在页面加载时执行。

https://v3.vuejs.org/guide/composition-api-lifecycle-hooks.html

<script setup lang='ts'>
import {reactive } from '@vue/reactivity'
import { onMounted } from '@vue/runtime-core'
// ...

onMounted(()=>{
  getAllByNamespace()
})
</script>

使用 v-for 显示数据

    <tr v-for="(item,id) in data.items" key=:id>
      <th scope="row">{{ id }}</th>
      <td>{{ item.name }}</td>
<!-- 省略 -->
    </tr>

使用 v-if 进行条件渲染

在返回的数据中, 有两种状况:

  1. 有错误, 没数据
  2. 没错误, 有数据

因此设置了两个容器(错误与表格), 使用 v-if 根据是否有错误消息决定是否展示这两部分容器

<!-- 当数据异常的时候显示 -->
<div class="error-container" v-if="data.error">
    <!-- 省略 -->
</div>


<!-- 当数据正常的时候显示 -->
<table class="table" v-if="!data.error">
    <!-- 省略 -->
</table>

使用 v-model 绑定数据

v-model 数据的双向绑定。
v-model="data.source" 是将 data.source 的值绑定到 控件value 属性上。

  <input type="text" placeholder="default" v-model="data.namespace">

使用 v-on 绑定事件

@v-on 的语法糖, 因此@click 完全写法就是 v-on=click。 意思就是 点击按钮 触发 getAllByNamespace 方法。

  <button @click="getAllByNamespace(data.namespace)">更新数据</button>

问题遗留

301 重定向遇到跨域问题。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
数据库 存储 监控
什么是 SAP HANA 内存数据库 的 Delta Storage
什么是 SAP HANA 内存数据库 的 Delta Storage
什么是 SAP HANA 内存数据库 的 Delta Storage
|
2月前
|
Kubernetes 开发工具 Docker
微服务实践k8s与dapr开发部署实验(2)状态管理
微服务实践k8s与dapr开发部署实验(2)状态管理
75 3
微服务实践k8s与dapr开发部署实验(2)状态管理
|
2月前
|
存储 Kubernetes API
使用Kubernetes管理容器化应用的深度解析
【5月更文挑战第20天】本文深度解析Kubernetes在管理容器化应用中的作用。Kubernetes是一个开源平台,用于自动化部署、扩展和管理容器,提供API对象描述应用资源并维持其期望状态。核心组件包括负责集群控制的Master节点(含API Server、Scheduler、Controller Manager和Etcd)和运行Pod的工作节点Node(含Kubelet、Kube-Proxy和容器运行时环境)。
|
11天前
|
存储 弹性计算 运维
阿里云容器服务Kubernetes版(ACK)部署与管理体验评测
阿里云容器服务Kubernetes版(ACK)是一个功能全面的托管Kubernetes服务,它为企业提供了快速、灵活的云上应用管理能力。
74 2
|
23天前
|
Kubernetes 算法 API
K8S 集群认证管理
【6月更文挑战第22天】Kubernetes API Server通过REST API管理集群资源,关键在于客户端身份认证和授权。
|
1月前
|
Kubernetes 容器 Perl
k8s部署seata 报错 没有提供足够的身份验证信息 [ http-nio-7091-exec-2] [ty.JwtAuthenticationEntryPoint] [ commence] [] : Responding with unauthorized error. Message - Full authentication is required to access this resource
Kubernetes pod 在16:12时出现两次错误,错误信息显示需要完整认证才能访问资源。尽管有此错误,但页面可正常访问。附有yaml配置文件的图片。
72 2
|
2月前
|
弹性计算 Kubernetes 监控
【阿里云弹性计算】阿里云 ECS 与 Kubernetes 集成:轻松管理容器化应用
【5月更文挑战第28天】阿里云ECS与Kubernetes集成,打造强大容器管理平台,简化应用部署,实现弹性扩展和高效资源管理。通过Kubernetes声明式配置在ECS上快速部署,适用于微服务和大规模Web应用。结合监控服务确保安全与性能,未来将深化集成,满足更多业务需求,引领容器化应用管理新趋势。
218 2
|
2月前
|
Kubernetes Cloud Native Go
Golang深入浅出之-Go语言中的云原生开发:Kubernetes与Docker
【5月更文挑战第5天】本文探讨了Go语言在云原生开发中的应用,特别是在Kubernetes和Docker中的使用。Docker利用Go语言的性能和跨平台能力编写Dockerfile和构建镜像。Kubernetes,主要由Go语言编写,提供了方便的客户端库与集群交互。文章列举了Dockerfile编写、Kubernetes资源定义和服务发现的常见问题及解决方案,并给出了Go语言构建Docker镜像和与Kubernetes交互的代码示例。通过掌握这些技巧,开发者能更高效地进行云原生应用开发。
92 1
|
2月前
|
Kubernetes Docker 微服务
微服务实践k8s&dapr开发部署实验(3)订阅发布
微服务实践k8s&dapr开发部署实验(3)订阅发布
53 0
|
2月前
|
Kubernetes 监控 调度
Kubernetes(K8s)与虚拟GPU(vGPU)协同:实现GPU资源的高效管理与利用
本文探讨了如何使用Kubernetes和虚拟GPU(vGPU)实现异构GPU的协同调度。Kubernetes是一个容器编排平台,通过设备插件、资源规格、调度器扩展和节点标签实现GPU资源管理。vGPU技术允许物理GPU资源在多个虚拟机或容器中共享。文章详细介绍了vGPU的部署配置步骤,并提出了GPU资源调度、负载均衡和监控调优的方法。强调虚拟GPU的性能取决于硬件和驱动支持,合理配置能提供高性能计算环境。参考文献包括Kubernetes和NVIDIA官方文档及相关研究论文。

推荐镜像

更多