ASP.NET Core 借助 K8S 玩转容器编排

ASP.NET Core 借助 K8S 玩转容器编排

Production-Grade Container Orchestration - Automated container deployment, scaling, and management.
生产级别的容器编排系统——自动化的容器部署、扩展和管理。

1. 引言

由于最近在学习微服务,所以就基于之前docker的基础上把玩一下k8s(Kubernetes),以了解基本概念和核心功能。

2. What's k8s?

k8s涉及到很多基本概念,可以看十分钟带你理解Kubernetes核心概念快速了解。
下面这张图包含了k8s了核心组成模块:

K8S cluster

这里就简单罗列以下:

k8s Master:k8s主节点,主要包括:

API Server:提供可以用来和集群交互的REST端点。

Replication Controller:用来创建和复制Pod。

Node:k8s节点,可以是虚拟机或物理机。其又包含以下组件:

Kubelet:是主节点代理。

Kube-proxy:Service使用其将链接路由到Pod,如上文所述。

Docker或Rocket:Kubernetes使用的容器技术来创建容器。

Pod:用来托管应用程序实例,包含:

Container:运行的容器

Volume:共享存储 (卷)

IP Address:IP 地址

Labels:标签,用于给pod打标签

Service:服务,由一组相同Label的Pod组成,其用来控制访问Pods的策略

3. 环境准备

梳理完基本概念,我们来动手玩一玩吧。有三种玩法:一种就是跟随k8s官方的在线实验室进行实操;第二种就是基于Docker For Windows 中集成的k8s进行玩耍;第三种就是安装MiniKube捣鼓。这里选择第二种进行讲解。

PS:很多初学者在环境准备阶段遭遇挫折的后就直接放弃了,笔者为了搭建这个k8s环境也耗费了不少时日,其中包含一次重装系统,汗!希望下面的步骤助你k8s之行有个好的开端。

3.1. 在Docker for Windows中启用Kubernetes

首先确保你已安装Docker for Windows。
因为那道墙,在Docker For Windows Client中启用Kubernetes,并没有想象的那么顺利。最后参照这篇文章成功启用:为中国用户在 Docker for Mac/Windows 中开启 Kubernetes
如果安装了最新版本的docker for windows 客户端(v2.0.0.3),可参考以下步骤:

为 Docker daemon 配置 Docker Hub 的中国官方镜像加速 https://registry.docker-cn.com

git clone https://github.com/AliyunContainerService/k8s-for-docker-desktop.git

cd k8s-for-docker-desktop

git checkout v2.0.0.2 (这一步很重要!!!)

Powell shell执行./load_images.ps1

Enable Kubernetes

执行kubectl cluster-info,输出以下,表示正常启动。

Kubernetes master is running at https://localhost:6445 KubeDNS is running at https://localhost:6445/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

环境搭建成功,你就成功了一半,请再接再厉动手完成以下实验!

4. 运行第一个Pod 4.1. 创建初始镜像

1:首先我们执行dotnet new mvc -n K8s.NET.Demo 创建一个ASP.NET Core Mvc应用K8s.NET.Demo
修改HomeController如下所示:

public class HomeController : Controller { public IActionResult Index () { var hostname = Dns.GetHostName (); ViewBag.HostName = hostname; ViewBag.HostIp = Dns.GetHostAddresses (hostname).FirstOrDefault (ip => ip.AddressFamily == AddressFamily.InterNetwork); return View (); } public IActionResult Privacy () { return View (); } public IActionResult CheckHealth () { if (new Random ().Next (100) > 50) { return Ok ("OK"); } else { return BadRequest (); } } [ResponseCache (Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] public IActionResult Error () { return View (new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); } }

修改Index.cshtml如下:

@{ ViewData["Title"] = "Home Page"; } <div> <h1>Welcome</h1> <h1>Host Name:@ViewBag.HostName</h1> <h1>Host IP:@ViewBag.HostIp</h1> <p>Learn about <a href="http://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p> </div>

2:然后添加Dockerfile:

FROM microsoft/dotnet:sdk AS build-env WORKDIR /app # Copy csproj and restore as distinct layers COPY *.csproj ./ RUN dotnet restore # Copy everything else and build COPY . ./ RUN dotnet publish -c Release -o out # Build runtime image FROM microsoft/dotnet:aspnetcore-runtime WORKDIR /app COPY --from=build-env /app/out . ENTRYPOINT ["dotnet", "K8s.NET.Demo.dll"]

3:然后执行docker build -t k8s.net.demo .构造镜像,构造成功后执行docker images即可查看到名为k8s.net.demo的镜像。

4.2. 创建 pod 描述文件

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyfydg.html