上一篇《Mac中搭建Kubernetes》介绍了怎样在Mac中搭建单节点的Kubernetes
,本文将编写一个dotNetCore
的示例程序,并发布到Kubernetes
中。
创建dotnetCore
示例项目;
本地搭建私有registry
,或者使用DockerHub
,本文采用搭建私有仓库的方式;
将dotnetCore
示例项目发布到私有仓库中;
发布私有仓库镜像到Kubernetes
1、在命令行执行命令创建一个名为k8s-netcore-demo
的项目
dotnet new webApp -o k8s-netcore-demo --no-httpsno-https
2、将示例程序运行起来
cd k8s-netcore-demodotnet run
dotnet run
运行正常的话,访问http://localhost:5000
会出现下图界面
docker pull registrydocker run -d -p 8888:5000 --restart=always registry
docker run -d -p 8888:5000 --restart=always registry
1、发布netcore
程序
dotnet publish
2、在publish
目录中创建Dockfile
文件,文件内容如下:
FROM microsoft/dotnet:2.1-aspnetcore-runtimeCOPY . /appWORKDIR /appEXPOSE 80/tcpENTRYPOINT ["dotnet", "k8s-netcore-demo.dll"]2.1-aspnetcore-runtime
COPY . /app
WORKDIR /app
EXPOSE 80/tcp
ENTRYPOINT ["dotnet", "k8s-netcore-demo.dll"]
3、将netcore程序编译成Docker镜像
docker build -t k8s-netcore-demo .
4、将镜像发布到私有仓库
docker tag k8s-netcore-demo localhost:8888/k8s-netcore-demodocker push localhost:8888/k8s-netcore-demo8888/k8s-netcore-demo
docker push localhost:8888/k8s-netcore-demo
默认情况下,你执行docker push
时会出现下面错误
在Mac
中的Docker
中做如下设置即可解决
设置好重启Docker
之后,再次执行docker push
,可以正常将镜像推送到私有仓库中。
推送完成后,浏览器中访问http://localhost:8888/v2/_catalog
,如果如下图所示,说明推送成功了。
1、创建Kubernetes
的部署文件deploy.yaml
,部署文件为yaml
文件格式。文件内容如下:
apiVersion: apps/v1kind: Deploymentmetadata: name: k8s-netcore-demo namespace: k8s-netcore labels: k8s-app: k8s-netcore-demospec: replicas: 2 selector: matchLabels: k8s-app: k8s-netcore-demo template: metadata: labels: k8s-app: k8s-netcore-demo spec: containers: - name: k8s-netcore-demo image: localhost:8888/k8s-netcore-demo ports: - containerPort: 80 ---# ------------------- Service ------------------- #kind: ServiceapiVersion: v1metadata: labels: k8s-app: k8s-netcore-demo name: k8s-netcore-demo namespace: k8s-netcorespec: type: NodePort ports: - port: 80 targetPort: 80 selector: k8s-app: k8s-netcore-demo
kind: Deployment
metadata:
name: k8s-netcore-demo
namespace: k8s-netcore
labels:
k8s-app: k8s-netcore-demo
spec:
replicas: 2
selector:
matchLabels:
k8s-app: k8s-netcore-demo
template:
metadata:
labels:
k8s-app: k8s-netcore-demo
spec:
containers:
- name: k8s-netcore-demo
image: localhost:8888/k8s-netcore-demo
ports:
- containerPort: 80
---
# ------------------- Service ------------------- #
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: k8s-netcore-demo
name: k8s-netcore-demo
namespace: k8s-netcore
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
selector:
k8s-app: k8s-netcore-demo
上面配置文件中属性的含义不用先去弄清楚,保证程序能够正常跑起来是关键。
2、因为在deploy.yaml
文件中指定了namespace
,所以先创建一个名为k8s-netcore的namespace
kubectl create namespace k8s-netcore
3、执行deploy.yaml
文件
kubectl create -f deploy.yaml --validate#加上 --validate 参数,当yaml文件有错误时,会给出提示--validate
#加上 --validate 参数,当yaml文件有错误时,会给出提示
4、使用kubectl get
命令查看创建情况
kubectl get deploy -n k8s-netcore
5、查看资源情况
kubectl get svc -n k8s-netcore
上图中可以看出,暴露出来的端口为32527
,浏览器中访问http://localhost:32527
,如下图:
6、启动代理,在Dashboard
中查看运行情况
kubectl proxy
怎样访问Dashboard
,可以查看《Mac中搭建Kubernetes》中相关介绍。
#创建dotNetCore项目dotnet new webApp -o k8s-netcore-demo --no-https#将dotNetCore程序构建为镜像docker build -t k8s-netcore-demo .#创建namespacekubectl create namespace k8s-netcore#部署Kuberneteskubectl create -f deploy.yaml --validate#查看指定命名空间的部署情况kubectl get deploy -n k8s-netcore#查看指定命名空间的资源情况kubectl get svc -n k8s-netcore
dotnet new webApp -o k8s-netcore-demo --no-https
#将dotNetCore程序构建为镜像
docker build -t k8s-netcore-demo .
#创建namespace
kubectl create namespace k8s-netcore
#部署Kubernetes
kubectl create -f deploy.yaml --validate
#查看指定命名空间的部署情况
kubectl get deploy -n k8s-netcore
#查看指定命名空间的资源情况
kubectl get svc -n k8s-netcore
命令不用刻意去记,练习多了自然就记住了;
部署程序Kubernetes
中,先需要将镜像发布到仓库中,自己部署的私有仓库和公有云仓库都可以;
通过本文的操作步骤,可以将程序发布到Kubernetes
中运行起来,这样可以对Kubernetes
有一个主观的认识,接下来就可以循序渐进的对Kubernetes
进行深入的学习。