# krm_backend **Repository Path**: martingpf/krm_backend ## Basic Information - **Project Name**: krm_backend - **Description**: k8s管理平台开发 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-10-17 - **Last Updated**: 2024-12-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 用来描述项目的一些信息 ```` 这是一个脚手架项目,可以根据这个项目去生成一个基础的框架 ```` ## Go语言服务部署 ### 一、如何部署 1. 拿到我们的代码 2. 编译成一个二进制包 3. ./二进制包 --> 镜像 4. 镜像推送到镜像仓库 5. docker run 6. yaml文件 ### 1.1 使用Docker部署 #### Docker安装 ```` 关闭防火墙: systemctl disable --now firewalld systemctl disable --now dnsmasq setenforce 0 sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config 关闭swap分区,fstab注释swap: swapoff -a && sysctl -w vm.swappiness=0 sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo yum install -y lrzsz yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo 配置内核参数: cat < /etc/sysctl.d/docker.conf net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF sysctl --system 安装Docker: yum install docker-ce-20.10.* docker-ce-cli-20.10.* containerd.io -y 启动Docker: systemctl enable --now docker ```` #### 代码编译 ```` cmd SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go build -o demo main.go SET CGO_ENABLED=1 SET GOOS=windows SET GOARCH=amd64 上传二进制包至服务器 chmod +x demo ```` #### 制作镜像 ```` # cat Dockerfile FROM registry.cn-beijing.aliyuncs.com/dotbalo/alpine:3.9-tomcat COPY demo ./ ENTRYPOINT ./demo # docker build -t registry.cn-beijing.aliyuncs.com/dotbalo/demo:v1 . 启动测试 docker run -ti --rm -p 8080:8080 registry.cn-beijing.aliyuncs.com/dotbalo/demo:v1 ```` #### 部署启动 ```` docker run -tid -p 8080:8080 -e LOG_LEVEL=info -e USERNAME=34C7357D6D1C641D4CA1E369E7244F61 -e PASSWORD=A1884CD37D07E3CC64AE2299CCD4F597 -e GIN_MODE=release registry.cn-beijing.aliyuncs.com/dotbalo/demo:v1 查看日志 docker logs -f xxx 使用postman测试 ```` #### 推送镜像 ```` docker push registry.cn-beijing.aliyuncs.com/dotbalo/demo:v1 ```` ### 1.2 使用K8s部署 ```` vim deploy-svc.yaml --- apiVersion: v1 kind: Service metadata: labels: app: demo name: demo spec: ports: - name: http port: 8080 protocol: TCP targetPort: 8080 selector: app: demo sessionAffinity: None type: NodePort --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: demo name: demo spec: replicas: 1 selector: matchLabels: app: demo strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 0 type: RollingUpdate template: metadata: labels: app: demo spec: containers: - env: - name: TZ value: Asia/Shanghai - name: LANG value: C.UTF-8 - name: GIN_MODE value: release - name: LOG_LEVEL value: info - name: USERNAME value: 34C7357D6D1C641D4CA1E369E7244F61 - name: PASSWORD value: A1884CD37D07E3CC64AE2299CCD4F597 image: registry.cn-beijing.aliyuncs.com/dotbalo/demo:v2 lifecycle: {} livenessProbe: failureThreshold: 2 initialDelaySeconds: 10 periodSeconds: 10 successThreshold: 1 tcpSocket: port: 8080 timeoutSeconds: 2 name: demo ports: - containerPort: 8080 name: web protocol: TCP readinessProbe: failureThreshold: 2 initialDelaySeconds: 10 periodSeconds: 10 successThreshold: 1 tcpSocket: port: 8080 timeoutSeconds: 2 resources: limits: cpu: 1 memory: 1024Mi requests: cpu: 200m memory: 256Mi restartPolicy: Always kubectl apply -f deploy-svc.yaml ```` ### 二、集群接口测试 #### 2.1、用户登陆 + "http://localhost:8384/api/auth/login" ![](images/用户登陆.png) #### 2.2、添加 + 携带token添加集群 + 实现添加集群接口/api/cluster/add ![](images/添加集群接口测试.png) #### 2.3、删除 + 携带token删除集群 + 实现删除集群接口/api/cluster/delete ![删除集群接口测试](images/删除集群接口测试.png) #### 2.4、获取列表 + 携带token获取集群列表 + 实现获取集群列表接口/api/cluster/list ![查看集群列表接口测试](images/查看集群列表接口测试.png) + 查询列表优化数据结构 ![查看集群列表接口优化数据返回](images/查看集群列表接口优化数据返回.png) #### 2.5、更新 + 携带token更新集群信息 + 实现更新接口/api/cluster/update ![更新集群接口测试](images/更新集群接口测试.png) #### 2.6、获取详情 + 携带token获取集群详情 + 实现详情接口/api/cluster/get ![实现查看集群详情接口](images/实现查看集群详情接口.png) ### 三、命名空间接口测试 #### 3.1、创建 + 携带登陆token + 接口:api/namespace/create ![创建命名空间](images/创建命名空间.png) #### 3.2、删除 + 携带登陆token + 接口:api/namespace/delete ![实现删除命名空间功能](images/实现删除命名空间功能.png) #### 3.3、获取列表 + 携带登陆token + 接口:api/namespace/list ![实现查看命名空间列表](images/实现查看命名空间列表.png) #### 3.4、获取详情 + 携带登陆token + 接口:api/namespace/get ![实现查看命名空间详情](images/实现查看命名空间详情.png) #### 3.5、更新 + 携带登陆token + 接口:api/namespace/update ![实现更新命名空间属性](images/实现更新命名空间属性.png) ### 四、Pods管理 #### 4.1、创建pod + 携带token登陆 + 接口:[/api/pods/create](http://localhost:8384/api/pods/create) ![实现创建pod逻辑](images/实现创建pod逻辑.png) #### 4.2、批量删除pod + 携带token登陆 + POST 接口:[/api/pods/delete]() ![实现批量删除pod业务逻辑](images/实现批量删除pod业务逻辑.png) #### 4.3、获取pod列表 + 携带token登陆 + GET 接口:[/api/pods/list](http://localhost:8384/api/pods/list?namespace=default&clusterId=cluster-1) ![实现查询pods列表](images/实现查询pods列表.png) #### 4.4、获取pod详情 + 携带token登陆 + GET 接口:[/api/pods/list] http://localhost:8384/api/pods/get?clusterId=cluster-1&namespace=kube-system&name=kube-proxy-xfvv7 ![实现获取pod详情](images/实现获取pod详情.png) #### 4.5、实现pod接口优化 ### 五、实现deployment相关接口 #### 5.1、创建deployment + 携带token登陆 + POST 接口:[/api/deployments/create](http://localhost:8384/api/deployments/create) ![创建deployment](images/创建deployment.png) #### 5.2、查看deployment详情 + 携带token登陆 + GET 接口:[/api/deployments/list](http://localhost:8384/api/deployments/get?clusterId=cluster-1&namespace=default) ![查看deployment详情](images/查看deployment详情.png) #### 5.3、查看deployment列表 + 携带token登陆 + GET 接口:[/api/deployments/get](http://localhost:8384/api/deployments/list?clusterId=cluster-1&namespace=default&name=nginx) ![查看deployment列表](images/查看deployment列表.png) #### 5.4、更新deplyment + 携带token登陆 + POST 接口:[/api/deployments/update](http://localhost:8384/api/deployments/update) ![deployment更新](images/deployment更新.png) #### 5.5、删除deployment + 携带token登陆 + POST 接口:[/api/deployments/delete](http://localhost:8384/api/deployments/delete) ![deployment删除](images/deployment删除.png) #### 5.6、删除deployment列表 + 携带token登陆 + + POST 接口:[/api/deployments/deleteList](http://localhost:8384/api/deployments/deleteList) ![deployment删除列表](images/deployment删除列表.png) ### 六、实现StatefulSet接口 #### 6.1、创建StatefulSet + 携带token登陆 + POST 接口:[/api/statefulsets/create](http://localhost:8384/api/statefulsets/create) ![statefulset创建](images/statefulset创建.png) + json数据`json { "clusterId":"cluster-1", "namespace":"prod-2", "item": { "apiVersion": "apps/v1", "kind": "StatefulSet", "metadata": { "labels": { "app": "web" }, "name": "web" }, "spec": { "replicas": 2, "selector": { "matchLabels": { "app": "nginx" } }, "serviceName": "nginx", "template": { "metadata": { "labels": { "app": "nginx" } }, "spec": { "containers": [ { "image": "nginx", "imagePullPolicy": "Always", "name": "nginx", "ports": [ { "containerPort": 80, "name": "web", "protocol": "TCP" } ], "volumeMounts": [ { "mountPath": "/usr/share/nginx/html", "name": "www" } ] } ] } }, "volumeClaimTemplates": [ { "apiVersion": "v1", "kind": "PersistentVolumeClaim", "metadata": { "name": "www" }, "spec": { "accessModes": [ "ReadWriteOnce" ], "resources": { "requests": { "storage": "500Mi" } }, "storageClassName": "nfs", "volumeMode": "Filesystem" } } ] } } }` #### 6.2、更新StatefulSet + 携带token登陆 + POST 接口:[/api/statefulsets/update](http://localhost:8384/api/statefulsets/update) + json` { "clusterId":"cluster-1", "namespace":"prod-2", "item":{ "apiVersion": "apps/v1", "kind": "StatefulSet", "metadata": { "labels": { "app": "web" }, "name": "web" }, "spec": { "replicas": 3, "selector": { "matchLabels": { "app": "nginx" } }, "serviceName": "nginx", "template": { "metadata": { "labels": { "app": "nginx" } }, "spec": { "containers": [ { "image": "nginx", "imagePullPolicy": "Always", "name": "nginx", "ports": [ { "containerPort": 80, "name": "web", "protocol": "TCP" } ], "volumeMounts": [ { "mountPath": "/usr/share/nginx/html", "name": "www" } ] } ] } }, "volumeClaimTemplates": [ { "apiVersion": "v1", "kind": "PersistentVolumeClaim", "metadata": { "name": "www" }, "spec": { "accessModes": [ "ReadWriteOnce" ], "resources": { "requests": { "storage": "500Mi" } }, "storageClassName": "nfs", "volumeMode": "Filesystem" } } ] } } } ` ![statefulset更新](images/statefulset更新.png) #### 6.3、查询StatefulSet详情 + 携带token登陆 + GET 接口:[/api/statefulsets/detail](http://localhost:8384/api/statefulsets/detail) ![statefulset查询详情](images/statefulset查询详情.png) #### 6.4、查询StatefulSet列表 + 携带token登陆 + GET 接口:[/api/statefulsets/list](http://localhost:8384/api/statefulsets/list) ![statefulset列表](images/statefulset列表.png) #### 6.5、删除StatefulSet + 携带token登陆 + DELETE 接口:[/api/statefulsets/delete](http://localhost:8384/api/statefulsets/delete) ![statefulset删除](images/statefulset删除.png) #### 6.6、删除StatefulSet列表 + 携带token登陆 + DELETE 接口:[/api/statefulsets/deleteList](http://localhost:8384/api/statefulsets/deleteList) ![statefulset删除列表](images/statefulset删除列表.png) ### 7、实现DaemonSet接口 #### 7.1、创建DaemonSet + 携带token登陆 + POST 接口:[/api/daemonsets/create](http://localhost:8384/api/daemonsets/create) ![daemonset创建](images/daemonset创建.png) #### 7.2、更新DaemonSet + 携带token登陆 + POST 接口:[/api/daemonsets/update](http://localhost:8384/api/daemonsets/update) ![daemonset更新](images/daemonset更新.png) #### 7.3、查询DaemonSet详情 + 携带token登陆 + GET 接口:[/api/daemonsets/get](http://localhost:8384/api/daemonsets/get) ![daemonset查询详情](images/daemonset查询详情.png) #### 7.4、查询DaemonSet列表 + 携带token登陆 + GET 接口:[/api/daemonsets/list](http://localhost:8384/api/daemonsets/list) ![daemonset查询列表](images/daemonset查询列表.png) #### 7.5、删除DaemonSet + 携带token登陆 + DELETE 接口:[/api/daemonsets/delete](http://localhost:8384/api/daemonsets/delete) ![daemonset删除](images/daemonset删除.png) #### 7.6、删除DaemonSet列表 + 携带token登陆 + DELETE 接口:[/api/daemonsets/deleteList](http://localhost:8384/api/daemonsets/deleteList) ![daemonset删除列表](images/daemonset删除列表.png) ### 8、实现CronJob接口 #### 8.1、创建CronJob + 携带token登陆 + POST 接口:[/api/cronjob/create](http://localhost:8384/api/cronjob/create) + `json { "clusterId":"cluster-1", "namespace":"prod-2", "item": { "kind": "CronJob", "apiVersion": "batch/v1", "metadata": { "name": "cronjob-test", "creationTimestamp": null }, "spec": { "schedule": "0/5 * * * ?", "jobTemplate": { "metadata": { "name": "cronjob-test", "creationTimestamp": null }, "spec": { "template": { "metadata": { "creationTimestamp": null }, "spec": { "containers": [ { "name": "cronjob-test", "image": "busybox", "resources": {} } ], "restartPolicy": "OnFailure" } } } } }, "status": {} } }` ![CronJob创建](images/CronJob创建.png) #### 8.2、更新CronJob + 携带token登陆 + POST 接口:[/api/cronjob/update](http://localhost:8384/api/cronjob/update) ![CronJob更新](images/CronJob更新.png) #### 8.3、查询CronJob列表 + 携带token登陆 + GET 接口:[/api/cronjob/list](http://localhost:8384/api/cronjob/list) ![CronJob列表](images/CronJob列表.png) #### 8.4、查询CronJob详情 + 携带token登陆 + GET 接口:[/api/cronjob/get](http://localhost:8384/api/cronjob/get) ![CronJob详情](images/CronJob详情.png) #### 8.5、删除CronJob列表 + 携带token登陆 + DELETE 接口:[/api/cronjob/deleteList](http://localhost:8384/api/cronjob/deleteList) ![CronJob删除列表](images/CronJob删除列表.png) #### 8.6、删除CronJob + 携带token登陆 + DELETE 接口:[/api/cronjob/delete](http://localhost:8384/api/cronjob/delete) ![CronJob删除](images/CronJob删除.png)