window环境下使用k8s部署.net core项目

news/2024/5/19 21:44:50 标签: kubernetes, .netcore, 容器, 云原生, docker

前提:已经部署镜像到Docker

在项目发布目录下新建.yaml文件,内容如下(以下仅举例出两种方式内容,可按需自由配置)
 --方式一(创建deployment 、服务、指定命名空间)

# ------------------- 注意层级结构,层级不对构建会报错 ------------------- #
apiVersion: apps/v1
kind: Deployment
metadata:
  name: k8s-api-demo
  namespace: k8s-api
  labels:
    k8s-app: k8s-api-demo
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: k8s-api-demo
  template:
    metadata:
      labels:
        k8s-app: k8s-api-demo
    spec:
      containers:
      - name: k8s-api-demo
        image: demoapifordocker # 定义Pod启动的容器镜像地址
        imagePullPolicy: IfNotPresent # k8s默认值为Always,总是从远端拉取镜像,通过设置IfNotPresent或Never来使用本地镜像
        ports:
        - containerPort: 80
---
# ------------------- Service ------------------- #
kind: Service
apiVersion: v1
metadata:
   labels:
     k8s-app: k8s-api-demo
   name:k8s-api-demo
   namespace: k8s-api
spec:
   type: NodePort
   ports:
     - port: 80
       targetPort: 80
   selector:
     k8s-app: k8s-api-demo

在发布目录按住shift+加右键打开powerShell,按顺序执行以下命令

--创建yaml文件中的命名空间

kubectl create namespace k8s-api

--根据yaml配置文件构建
kubectl create -f 文件名.yaml


到这一步如果没有报错信息,那就已经完成部署

--查看端口,http://localhost:端口号

kubectl get svc -n k8s-api

--查看容器运行状态

kubectl get pod -n k8s-api

 映射到本机端口访问(port-forward 对应pod名称)

kubectl port-forward k8s-api-68bbbbc657-cqzjn -n k8s-api 8091:80

但对于外部依旧无法访问,如果需要暴露供外部直接访问,则需要创建 service

kubectl expose pod k8s-api-pod --name k8s-api-service --type=NodePort

获取服务

kubectl get service

服务会有一个CLUSTER-IP,可以在集群内使用CLUSTER-IP:80来访问该服务,如果是在集群外部,可以使用NodeIP:端口(节点所在服务器IP)来访问。


--方式二

 直接构建pod

apiVersion: v1
kind: Pod # 定义Kubernetes资源的类型为Pod
metadata:
  name: k8s-api-pod # 定义资源的名称
  labels: # 为Pod贴上标签,后面会介绍其用处
    app: k8s-api-pod
spec: # 定义资源的状态,对于Pod来说,最重要属性就是containers
  containers: # containers一个数组类型,如果你希望部署多个容器,可以添加多项
    - name: coreapi # 定义本Pod中该容器的名称
      image: demofordocker # 定义Pod启动的容器镜像地址
      imagePullPolicy: IfNotPresent # k8s默认值为Always,总是从远端拉取镜像,通过设置IfNotPresent或Never来使用本地镜像
      ports:
        - containerPort: 80 # 定义容器监听的端口(与Dockerfile中的EXPOSE类似,只是为了提供文档信息)
      livenessProbe: # 存活探针定义
        httpGet:
          path: /swagger/index.html # 存活探针请求路径
          port: 80 #存活探针请求端口

在发布目录按住shift+加右键打开powerShell,按顺序执行以下命令

kubectl create -f 文件名.yaml

(构建在默认命名空间(default)下)

kubectl get pod

映射到本机端口访问(port-forward 对应pod名称)

kubectl port-forward k8s-api-68bbbbc657-cqzjn -n k8s-api 8091:80

但对于外部依旧无法访问,如果需要暴露供外部直接访问,则需要创建 service

kubectl expose pod k8s-api-pod --name k8s-api-service --type=NodePort

获取服务

kubectl get service

服务会有一个CLUSTER-IP,可以在集群内使用CLUSTER-IP:80来访问该服务,如果是在集群外部,可以使用NodeIP:端口(节点所在服务器IP)来访问。

部署遇到的一些问题

--get deploymentment获取不到

后面加 -n kube-system

--命名空间查询: kubectl get namespace

--部署后运行失败,pod状态显示 ImagePullBackOff或者ErrPullOff

 这种情况是因为yaml文件中未配置从本地镜像获取,导致去线上拿;需要删除后重新开始

可通过执行以下命令查看pod Events中记录的错误记录,默认命名空间下可省略 -n 命名空间名

kubectl describe pod pod名称 -n 命名空间名


--删除pod

kubectl delete pod pod名 -n 命名空间名
 直接执行删除pod指令,会发现删除之后还是又会产生一个新的,实际上删除对应deployment即可

查询deployment

kubectl get deployment -n 命名空间名

删除deployment

kubectl delete deployment deployment名 -n 命名空间名

此时再查询命名空间下pod,可以看到已经没有了

参考以下文章:

.NET Core + K8S 玩转容器编排 - 「圣杰」 - 博客园 (cnblogs.com)

(二)搭建dotNetCore项目发布到k8s - 一滴雨、₯㎕ - 博客园 (cnblogs.com)
k8s中正确删除一个pod - effortsing - 博客园 (cnblogs.com)
k8s 创建删除命名空间--namespace_k8s create --names-CSDN博客


http://www.niftyadmin.cn/n/5411294.html

相关文章

Day37 socket、TCP、UDP

socket类型 流式套接字(SOCK_STREAM) TCP 提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。 数据报套接字(SOCK_DGRAM) UD…

risc-v编译pytorch

准备 su进入root,避免遇到权限不足情况 python3 -m venv -xxx (创建的就是一个python环境和pytorch无关,可以安装任意环境的pytorch) source进入虚拟环境 sudo apt-get install libopenblas-dev libblas-dev m4 cmake cython3 ccache 修改…

探索云原生世界:Serverless 技术的崛起与应用

在云原生架构的浪潮中,Serverless 技术正逐渐崭露头角,成为开发者们极具吸引力的选择。Serverless 的出现颠覆了传统的服务器管理模式,为应用开发带来了全新的可能性。 Serverless 架构是一种无需管理服务器的新型架构,它允许开发…

【操作系统原理】第一章课后习题

前言 课本: 操作系统原理(第五版)[费翔林,骆斌编著]习题: 主要习题内容是第一章到第六章,具体内容如下表 章节内容链接第一章思考题1,3,7、应用题7,12(1)~(4)null第二章…

商城|商城小程序|基于微信小程序的智慧商城系统设计与实现(源码+数据库+文档)

商城小程序目录 目录 基于微信小程序的智慧商城系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、用户信息管理 2、 商品信息管理 3、公告信息管理 4、论坛信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 …

SpringBoot集成ElasticSearch(ES)

ElasticSearch环境搭建 采用docker-compose搭建,具体配置如下: version: 3# 网桥es -> 方便相互通讯 networks:es:services:elasticsearch:image: registry.cn-hangzhou.aliyuncs.com/zhengqing/elasticsearch:7.14.1 # 原镜像elasticsearch:7.…

vue2源码分析-vue入口文件global-api分析

文章背景 vue项目开发过程中,首先会有一个初始化的流程,以及我们会使用到很多全局的api,如 this.$set this.$delete this.$nextTick,以及初始化方法extend,initUse, initMixin , initExtend, initAssetRegisters 等等那它们是怎么实现,让我们一起来探究下吧 源码目录 global-…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:PanGesture)

拖动手势事件,当滑动的最小距离超过设定的最小值时触发拖动手势事件。 说明: 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 接口 PanGesture(value?: { fingers?: number; direction?: PanDir…