kind搭建k8s集群中部署AspNetCore应用
2022/7/11 1:20:21
本文主要是介绍kind搭建k8s集群中部署AspNetCore应用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前面使用kind快速搭建本地k8s集群 介绍了使用kind搭建k8s集群,这节介绍使用kind搭建的k8s集群中部署.net core 的api应用程序。
1. 准备AspNetCore WebApi项目
项目结构如下:
添加一个Controller,返回当前其中一个IP:
namespace WebApiK8S.Test.Controllers { [Route("api/[controller]")] [ApiController] public class TestController : ControllerBase { public string Get() { var hostName = Dns.GetHostName(); var hostIP = Dns.GetHostEntry(hostName).AddressList; return hostIP[0].ToString(); } } }
编写Dockerfile:
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base WORKDIR /app EXPOSE 80 COPY . . ENTRYPOINT ["dotnet", "WebApiK8S.Test.dll"]
#指定基础镜像 FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base #配置工作目录 相当于cd WORKDIR /app #暴露容器端口,此端口与程序运行路径一致,可 EXPOSE 5000 #复制文件到工作目录 COPY . . #ENV :配置系统环境变量,比如程序环境环境等在这里配置(开发、预发、线上环境) #这里是配置程序运行端口,如果程序不使用默认的80端口这里一定要设置(程序运行端口) ENV ASPNETCORE_URLS http://+:5000 #设置时间为中国上海,默认为UTC时间 ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone #启动程序 ENTRYPOINT ["dotnet", "AspNetCoreDeployInK8S.dll"]折叠
2、制作镜像
项目编译后拖到Centos系统中
制作镜像
cd /home/website/WebApiK8S.Test/ docker build -t webapik8stest .
3、编写发布应用的demoDeployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: k8s-demo-deployment labels: k8s-app: k8s-demo-web spec: replicas: 2 selector: matchLabels: k8s-app: k8s-demo-web template: metadata: labels: k8s-app: k8s-demo-web spec: containers: - name: k8s-demo image: webapik8stest imagePullPolicy: IfNotPresent ports: - containerPort: 80 --- kind: Service apiVersion: v1 metadata: labels: k8s-app: k8s-demo-web name: k8s-demo-service spec: type: NodePort ports: - port: 80 targetPort: 80 name: http nodePort: 30000 selector: k8s-app: k8s-demo-web
4. 新建K8s集群,暴露80、443、30000端口
用kind创建K8s时,是相当在本地运行了一个容器,而K8s Cluster就运行在这个容器中。
所以,如果想从外部访问kind K8s的话,就需要把这个容器的端口(K8s的端口)暴露出来。
为了下一步测试,我们重新创建一个新的K8s cluster并且把80、443、30000端口暴露出来。
运行下列命令删除现在的k8s cluster
kind delete cluster --name tsk8s
运行下列命令创建新的k8s cluster
cat <<EOF | kind create cluster --name tsk8s --config=- kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane kubeadmConfigPatches: - | kind: InitConfiguration nodeRegistration: kubeletExtraArgs: node-labels: "ingress-ready=true" extraPortMappings: - containerPort: 80 hostPort: 80 protocol: TCP - containerPort: 443 hostPort: 443 protocol: TCP - containerPort: 30000 hostPort: 30000 protocol: TCP EOF
说明:
- extraPortMappings:把K8s容器(相当于K8s所在的服务器)端口暴露出来,这里暴露了80、443、30000
- node-labels:只允许Ingress controller运行在有"ingress-ready=true"标签的node上
运行结果
这时可以看到80、443、30000端口已经暴露出来了
注意:如果是在公司代理环境下,我们要在K8s容器中设置代理,才可以正常进行下面的测试,设置代理请参考上一篇文章《代理环境下在WSL2中用Kind创建Kubernetes集群》”
5. 添加镜像
不能直接使用主机上的镜像,需要导入到kind的节点(容器中)
kind load docker-image webapik8stest --name tsk8s
说明:
- webapik8stest:创建的镜像名
- tsk8s:创建的集群名
6. 创建deployment
将demoDeployment.yaml文件拖到Centos系统中
创建deployment并查看pod,svc状态:
kubectl create -f demoDeployment.yaml kubectl get svc,pod -o wide
从上图可以看到对外暴露pod的端口为30000,且该api运行了两个副本。
7、在浏览器访问api
http://192.168.192.140:332/api/test
http://192.168.192.140:30000/WeatherForecast
curl http://192.168.192.140:30000/WeatherForecast
访问成功,证明我们的aspnetcore应用成功部署在K8S上!
鸣谢:
https://blog.csdn.net/weixin_42758299/article/details/120908185
https://www.cnblogs.com/roluodev/p/13824191.html
这篇关于kind搭建k8s集群中部署AspNetCore应用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#