开发 k8s 管理平台 - k8sailor 07. (前端) 使用 vite 初始化 vue 项目 原文地址: https://tangx.in/posts/books/k8sailor/chapter02/07-initial-vue3-vite2/ 安装 1 2 3 4 5 6 7 8 9 10 11 12 13 14 # 初始化项目 yarn create vite webapp --template vue-ts cd webapp ## 安装依赖 yarn ## 启动查看 vue3 是否正常 yarn dev ## 安装 less 支持, 以后写样式用 yarn add less 清理环境 删除 /webapp/src/components 下的 HelloWorld.vue。 并新建一个 Deployment.vue。 这里使……
阅读全文
开发 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 使用 Axios 请求 Deployments 数据 安装 axios 客户端 1 2 # 安装 axios yarn add axios 创建 /webapp/src/apis 目录, 用于存放所有针对 k8sailor 后端的数据请求 使用 axios config 模式初始化一个客户端 /webapp/src/apis/httpc.ts axios config 模式可以创建一个 http 客户端,其中包含了各种各样的初始化参数, 使用这个模式就不用在每个请求中都写重复的内容了……
阅读全文
开发 k8s 管理平台 - k8sailor 09. 通过 deployment label 获取 pod 信息 原文地址: https://tangx.in/posts/books/k8sailor/chapter02/09-get-pods-by-deployment-label/ tag: https://github.com/tangx/k8sailor/tree/feat/09-get-pods-by-deployment-label 有了之前结构铺垫, 获取 Pod 还是很简单简单的。 其中需要注意的是 ListOptions 中的 LabelSelector 是一个字符串, 多组 key=value 之间使用 逗号 , 进行连接。 1 labelSelector := `key1=value1,key2=value2,...` 而通过 client-go API 获取的 Deployment, Pod 等信息中的 MatchLabel 字段是一个 map[string]string 的 map。 因此, 在使用 k8s client 查询的时候, 需要对进行一些传参转换。 1……
阅读全文
开发 k8s 管理平台 - k8sailor 10. (前端) 使用 vue-router 进行路由管理 原文地址: https://tangx.in/posts/books/k8sailor/chapter02/10-vue-router-and-less/ tag: https://github.com/tangx/k8sailor/tree/feat/10-vue-router-and-less 使用 vue-router 路由管理 安装 vue-router 支持参考 https://tangx.in/2021/09/28/vue3-vue-router/ 将默认的 /webapp/src/App.vue 作为最基本的入口, 除了引入 Index.vue 文件模块,不进行其他操作, 保持整洁。 其行为类似 golang 中的 main.go。 创建 /webapp/src/components/Index.vue 模块作为 index 入口文件, 也是主要的布局页面。 路由信息(router-link) 将……
阅读全文
开发 k8s 管理平台 - k8sailor 11. 展示 deployment 详情页 原文地址: https://tangx.in/posts/books/k8sailor/chapter02/11-display-deployment-detail/ tag: https://github.com/tangx/k8sailor/tree/feat/11-display-deployment-detail 之前在后端已经将详情页的展示接口拆成了 2个 其一是根据 name 获取 单个 deployment /deployments/:name 其二是根据 deployment name 获取 关联 的 pods 信息 /deployments/:name/pod 页面展示就是两个接口请求与数据展示的简单操作, 和之前 deployment 页面一样, 没什么好说的。 typescript 的 interface 衍生 不过, 在遇到第二个、第三个接口出现的时候, 发现……
阅读全文
开发 k8s 管理平台 - k8sailor 12. 设置 deployment 副本数量 与 参数的有效性验证 原文地址: https://tangx.in/posts/books/k8sailor/chapter02/12-deployment-scale-and-params-validate/ tag: https://github.com/tangx/k8sailor/tree/feat/12-deployment-scale-and-params-validate deployment scale 1 kubectl scale deployment my-nginx-1 --replicas 1 在 client-go sdk 中, scale 参数是一个对象, 因此不能直接传入 一个数字。 需要通过 GetScale() 方法获取到 *autoscalingv1.Scale 对象。 修改 Scale 对象中的 Replicas 数值。 使用 UpdateScale() 方法更新设置。 SetDeploymentReplicas params validtor 参数验证在任何情况下都不能放松警惕, 尤其是 边界验证 和 0值混淆 。 对……
阅读全文
开发 k8s 管理平台 - k8sailor 13. 使用 k8s informer 订阅集群事件 原文地址: https://tangx.in/posts/books/k8sailor/chapter02/13-k8s-informer/ tag: https://github.com/tangx/k8sailor/tree/feat/13-k8s-informer 从应用层面来说, 创建 informer 并启动之后就与 k8s cluster 创建了一个长链接并订阅了 某个资源 Resource 的变化。 至于订阅后得到的数据要怎么用完全取决于订阅者的业务设计。 Shared Informer Factory 共享机制 Informer 又称为 Shared Informer,表明是可以共享使用的,在使用 client-go 写代码时,若同……
阅读全文
开发 k8s 管理平台 - k8sailor 14. 一些前后端代码优化 原文地址: https://tangx.in/posts/books/k8sailor/chapter02/14-some-optimize/ tag: https://github.com/tangx/k8sailor/tree/feat/14-some-optimize 将 LabelSelector 转换为 Selector client-go 提供了一个方法, 可以将 Resource 中的 LabelSelector 转换为 Selector, 并且 Selector 结构提供了一些常用的方法。 如 String 1 2 3 4 5 6 7 8 9 import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) func() { selector, _ := metav1.LabelSelectorAsSelector(dep.Spec.Selector) x := selector.String() fmt.Println(x) }() 因此在使用 GetXXXByLabels 时, api 层 可以考虑 接收 map[string]string 类型的参数。 而在 biz 层应该将 不同类型 的参数 统一 转换为格式……
阅读全文
开发 k8s 管理平台 - k8sailor 15. 根据名字删除 deployment 和 pod 原文地址: https://tangx.in/posts/books/k8sailor/chapter02/15-delete-deployment-and-pod-by-name/ tag: https://github.com/tangx/k8sailor/tree/feat/15-delete-deployment-and-pod-by-name 调用 k8s api 没什么好说的。 k8sdao 1 2 3 4 5 func DeleteDeploymentByName(ctx context.Context, namespace string, name string) error { opts := metav1.DeleteOptions{} return clientset.AppsV1().Deployments(namespace).Delete(ctx, name, opts) } biz 1 2 3 4 5 6 7 8 9 10 11 12 13 14 type DeleteDeploymentByNameInput struct { Name string `uri:"name"` Namespace string `query:"namespace"` } // DeleteDeploymentByName 根据名字删除 deployment func DeleteDeploymentByName(ctx context.Context, input DeleteDeploymentByNameInput) error { err := k8sdao.DeleteDeploymentByName(ctx, input.Namespace, input.Name) if err != nil { return fmt.Errorf("k8s internal error: %w", err) } return nil } api 1 2 3 4 5 6 7 8 9 10 11 12 13 14 func handlerDeleteDeploymentByName(c……
阅读全文
开发 k8s 管理平台 - k8sailor 16. 创建 Deployment 原文地址: https://tangx.in/posts/books/k8sailor/chapter02/16-create-deployment/ tag: https://github.com/tangx/k8sailor/tree/feat/16-create-deployment 使用 kubectl 命令创建如下 1 kubectl create deployment my-nginx-5 --image=nginx:alpine --replicas=3 --port=80 创建成功后查看结果, 大部分参数为默认参数。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 # kgd -o yaml my-nginx-5 apiVersion: apps/v1 kind: Deployment metadata: labels: app: my-nginx-5 # 根据 deployment 自动匹配名字自动生成 name: my-nginx-5 # 用户指定 namespace: default # 用户选择,默认为当前 namespace spec: progressDeadlineSeconds: 600 # 默认……
阅读全文