1.新建一个WebApi项目,并添加Dockerfile文件:
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
Copy . . RUN dotnet restore
RUN dotnet build -c Release -o /app FROM build as publish
RUN dotnet publish -c Releease -o /app FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "k8s-demo.dll"]
编译一下,然后通过Docker打包成镜像:docker build -t wei/k8s-demo .
完成后通过docker images查看下:
然后将其推送到Docker仓库中,所以你需要去Docker官网注册一个账户,注册完成后进行登录:docker login --username xxx
xxx是你的用户名,接着会让你输入密码,验证成功后会提示Login Succeeded
将镜像推送到仓库这个步骤是不能省略的,因为编写K8s部署文件的时候,需要从仓库拉取镜像,因为服务器在国外,所以会有点慢。
还有一个问题就是你的镜像名字需要用你的Docker用户名开头,比如xxx/k8s-demo 这种,xxx是你Docker的用户名,不然上传会提示没有权限:
镜像推送到仓库之后我们就需要编写k8s的部署文件了 :deploy.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
labels:
k8s-app: k8s-demo
name: k8s-demo
namespace: netcore
spec:
replicas:
selector:
matchLabels:
k8s-app: k8s-demo
template:
metadata:
labels:
k8s-app: k8s-demo
spec:
containers:
- name: k8s-demo
image: xxx/k8s-demo
ports:
- containerPort: ---
# ------------------- Service ------------------- # kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: k8s-demo
name: k8s-demo
namespace: netcore
spec:
type: NodePort
ports:
- port:
targetPort:
selector:
k8s-app: k8s-demo
需要说明两个问题,标红的image就是我们推送到仓库的镜像,namespace是资源空间名称,也就是我们当前这个pod要运行的资源空间,所以我们需要创建一下这个资源空间:
kubectl create namespace netcore
创建完成后可以通过以下命令进行查看:kubectl get namespace netcore
然后我们就可以运行我们的部署文件了:kubectl create -f deploy.yaml
正常情况下会有两个提示,分别是deployment.apps "k8s-demo" created 和 service "k8s-demo" created
我在这步遇到的问题是yaml的格式问题,因为缩进不符合要求,折腾了好久,这个对格式的要求很严格,完成之后我们可以通过以下命令查看:kubectl get svc -n netcore
我上面图中已经有了,结果显示我的这个pod运行在31080端口,此时我们可以通过浏览器测试:
或者我们也可以通过k8s控制台查看,如果没启动代理的通过kubectl proxy命令启动代理,然后访问以下地址:
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/overview?namespace=netcore
将命名空间选到我们的netcore即可看到我们已经运行的服务k8s-demo,到此大功告成!!!
补充一下,当我们关机下次启动会发现k8s处于stop状态,这个时候我们需要重启下Docker,并使用以下命令切换到对应的Kubernetes context :
kubectl config use-context docker-for-desktop