文章目录
- 项目地址
- 一、微服务
-
- [1.1 分析User的Domian Verb和Nouns](#1.1 分析User的Domian Verb和Nouns)
- 二、运行docker和k8s
-
- [2.1 Docker](#2.1 Docker)
-
- [1. 编写dockerfile](#1. 编写dockerfile)
- [2. 创建docker image](#2. 创建docker image)
- [3. 运行docker使用指定端口](#3. 运行docker使用指定端口)
- [4. 查看当前运行的镜像](#4. 查看当前运行的镜像)
- [5. 停止当前所有运行的docker](#5. 停止当前所有运行的docker)
- [6. 删除不用的docker images](#6. 删除不用的docker images)
- [7. 将本地的image上传到hub里](#7. 将本地的image上传到hub里)
- [2.2 K8S](#2.2 K8S)
-
- [1. 创建k8s的部署](#1. 创建k8s的部署)
- [2. 创建node服务](#2. 创建node服务)
- [3. 运行当前的环境](#3. 运行当前的环境)
- [4. 查看运行状态](#4. 查看运行状态)
- [5. 删除部署](#5. 删除部署)
项目地址
- 教程作者:
- 教程地址:
- 代码仓库地址:
-
所用到的框架和插件:
dbt
airflow
一、微服务
1.1 分析User的Domian Verb和Nouns
-
根据用户行为分析用户需要的实体和查询条件
-
列出所有的实体
Customer
Order
Order Details
Product
Shopping Cart
Shopping Cart ltems
Supplier
User
Address
Brand
Category -
根据动词设计关系图
二、运行docker和k8s
2.1 Docker
1. 编写dockerfile
-
编写好.net的dockerfile
See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
使用官方的 .NET 5 ASP.NET 基础镜像作为构建环境(base-env
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build-env
#设置容器中的工作目录为 /app。后续的所有命令都将在这个目录下运行。
WORKDIR /app#将当前目录下的所有 .csproj 文件(通常是项目文件)复制到容器的工作目录中。
COPY *.csproj ./#恢复项目的依赖项
RUN dotnet restore#将整个项目的代码复制到容器中。
COPY . ./#编译和打包应用程序代码,生成可以运行的 .NET 程序。输出的构建文件存储在 /app/out 目录中。
RUN dotnet publish -c Release -o out#使用官方的 .NET 5 ASP.NET 基础运行时镜像作为生产环境(最终运行的容器)
FROM mcr.microsoft.com/dotnet/aspnet:5.0
#再次设置容器的工作目录为 /app。
WORKDIR /app
#从前面定义的 base-env 阶段复制 /app/out 文件夹的内容到当前工作目录。
COPY --from=build-env /app/out .#设置容器的入口点为 dotnet 命令,启动 PlatformService.dll 程序。
ENTRYPOINT ["dotnet", "PlatformService.dll"]
2. 创建docker image
-
pjj521/platformservice 是镜像名称
docker build -t pjj521/platformservice .
3. 运行docker使用指定端口
-
后面是镜像名称
docker run -p 8080:80 -d pjj521/platformservice
4. 查看当前运行的镜像
docker ps
5. 停止当前所有运行的docker
docker stop $(docker ps -q)
6. 删除不用的docker images
-
查看
docker images
-
删除
docker -rmi -f 镜像ID
7. 将本地的image上传到hub里
docker push pjj521/platformservice1
2.2 K8S
1. 创建k8s的部署
-
创建部署的文件
platform-depl.yaml
apiVersion: apps/v1 # 自定义apps/v1 代表使用 Deployment 资源
kind: Deployment # 自定义资源类型,表示这是一个 Deployment 对象
metadata:
name: platform-deployment # Deployment 的名称,这个名称在 Kubernetes 中唯一
spec:
replicas: 1 # 副本数,表示部署一个 Pod 副本,Kubernetes 会确保有一个 Pod 在运行
selector: #选择器,用于查找属于这个 Deployment 的 Pods
matchLabels:
app: platformservice1 # 选择标签为 app=platformservice1 的 Pods,Kubernetes 使用这个标签来选择受此 Deployment 管理的 Pods
template: # Pod 模板,描述 Pods 应该如何创建
metadata:
labels:
app: platformservice1 # Pod 的标签,用于与 selector 配合选择该 Pod
spec: # Pod 的规格定义
containers: #容器定义,说明该 Pod 中将运行的容器
- name: platformservice1 # 容器的名称
image: pjj521/platformservice1 # 容器使用的镜像,这里是一个本地镜像 "pjj521/platformservice1"
ports:
- containerPort: 80 #容器暴露的端口,这里表示容器会监听 80 端口
2. 创建node服务
-
platform-np-srv.yaml
apiVersion: v1
kind: Service
metadata:
name: platformservice1-service
spec:
type: NodePort # 使用 NodePort 类型来暴露服务
selector:
app: platformservice1 # 匹配 platform-depl里的标签
ports:
- name: platformservice1 # 给端口命名(可选,便于理解)
protocol: TCP
port: 80 # 对外暴露的端口
targetPort: 80 # 容器内的端口
nodePort: 30001 # 可以指定 NodePort 的端口范围(可选,如果没有指定,Kubernetes 会自动分配一个在 30000-32767 之间的端口)
3. 运行当前的环境
-
先启动环境
kubectl apply -f .\platform-depl.yaml
-
在部署Node
kubectl apply -f .\platform-np-srv.yaml
4. 查看运行状态
-
查看部署的状态
kubectl get deployments
-
查看pods的状态
kubectl get pods
-
查看服务状态
kubectl get services
-
查看 Kubernetes 事件
kubectl get events --sort-by='.lastTimestamp'
5. 删除部署
-
查看当前部署的集群
kubectl get deployments
-
删除
kubectl delete deployment platforms-depl