入门Kubernetes - .Net Core 运行
前言:
之前文章 对Kubernetes 的一些基础概念及在windows下的环境搭建,接下来把.Net Core 运行到Kubernetes 中,在实际的操作中,对Kubernetes 的进一步学习了解。
一、程序准备
1、创建.net core 项目,修改Index页面显示当前ip和机器名:
public class IndexModel : PageModel
{
public string HostName { get; set; } public string HostIP { get; set; }
/// <summary>
/// 获取机器名和IP地址
/// </summary>
public void OnGet()
{
HostName = Dns.GetHostName();
HostIP = Dns.GetHostEntry(HostName).AddressList.FirstOrDefault(x => x.AddressFamily == AddressFamily.InterNetwork).ToString();
}
}
2、运行效果如下:

3、创建创建镜像并推送到docker hub中:

接下来,就开始将该镜像部署到k8s中
二、部署到Kubernetes
1、在部署前先介绍个重要概念:Pod
Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。
Pod 是一组(一个或多个)容器; 这些容器共享存储、网络、以及怎样运行这些容器的声明。 Pod 中的内容总是并置(colocated)的并且一同调度,在共享的上下文中运行。 Pod 所建模的是特定于应用的“逻辑主机”,其中包含一个或多个应用容器, 这些容器是相对紧密的耦合在一起的。 在非云环境中,在相同的物理机或虚拟机上运行的应用类似于 在同一逻辑主机上运行的云应用。
除了应用容器,Pod 还可以包含在 Pod 启动期间运行的 Init 容器。 你也可以在集群中支持临时性容器 的情况下,为调试的目的注入临时性容器。
Pod 的共享上下文包括一组 Linux 名字空间、控制组(cgroup)和可能一些其他的隔离 方面,即用来隔离 Docker 容器的技术。 在 Pod 的上下文中,每个独立的应用可能会进一步实施隔离。
就 Docker 概念的术语而言,Pod 类似于共享名字空间和文件系统卷的一组 Docker 容器。
a)创建Pod,运行镜像:k8sdemoweb Pod定义文件:k8sdeomweb-pod.yaml
apiVersion: v1
kind: Pod # 定义Kubernetes资源的类型为Pod
metadata:
name: k8sdemoweb # 定义资源的名称
labels: # 为Pod贴上标签(用于Services选择)
app: k8sdemoweb
spec: # 定义资源的状态,对于Pod来说,最重要属性就是containers
containers: # containers一个数组类型,如果你希望部署多个容器,可以添加多项
- name: web # 定义本Pod中该容器的名称
image: cwsheng/k8sdemoweb # 定义Pod启动的容器镜像地址
ports:
- containerPort: 80 # 定义容器监听的端口(与Dockerfile中的EXPOSE类似,只是为了提供文档信息)
b)创建Pod,进入命令行执行:
kubectl create -f k8sdeomweb-pod.yaml # 输出
# pod/k8sdeomweb created
c)查看Pod列表:
kubectl get pods # 输出
# NAME READY STATUS RESTARTS AGE
# k8sdemoweb 1/1 Running 0 40s
d)本地访问:端口转发(端口转发的方式只能在本机访问,为了从外部访问应用程序,我们需要创建Kubernetes中的另外一种资源:Service。)
kubectl port-forward k8sdemoweb 8180:80 # 输出
# Forwarding from 127.0.0.1:8180 -> 80

2、支持外部访问应用,Service 实现
将运行在一组 Pods 上的应用程序公开为网络服务的抽象方法。
使用 Kubernetes,你无需修改应用程序即可使用不熟悉的服务发现机制。 Kubernetes 为 Pods 提供自己的 IP 地址,并为一组 Pod 提供相同的 DNS 名, 并且可以在它们之间进行负载均衡。
a)定义Service:为k8sdemoweb pod创建Service
apiVersion: v1
kind: Service # 定义Kubernetes资源的类型为Service
metadata:
name: k8sdemoweb-service # 定义资源的名称
spec:
selector: # 指定对应的Pod
app: k8sdemoweb # 指定Pod的标签为k8sdemoweb
ports:
- protocol: TCP # 协议类型
port: 80 # 指定Service访问的端口
targetPort: 80 # 指定Service转发请求的端口
nodePort: 31000
type: NodePort # 指定Service的类型,在这里使用NodePort来对外访问
b)执行命令:
kubectl create -f k8sdemoweb-service.yaml #输出:
#service/k8sdemoweb-service created
3、Pod自动创建实现:Deployment
Deployment表示用户对Kubernetes集群的一次更新操作。可以是创建一个新的服务或是更新一个新的服务,也可以是滚动升级一个服务。
Deployment可以帮助每一个应用程序的生命都保持相同的一点:那就是变化。此外,只有挂掉的应用程序才会一尘不变,否则,新的需求会源源不断地涌现,更多代码会被开发出来、打包以及部署,这个过程中的每一步都有可能出错。
Deployment可以自动化应用程序从一版本升迁到另一版本的过程,并保证服务不间断,如果有意外发生,它可以让我们迅速回滚到前一个版本。
a)创建:Deployment。添加文件:k8sdemoweb-deployment.yaml
apiVersion: apps/v1
kind: Deployment # 定义Kubernetes资源的类型为Deployment
metadata:
name: k8sdemoweb-deployment # 定义资源的名称
labels:
app: k8sdemoweb-deployment
spec: # 定义资源的状态。
replicas: 2 # 定义我们想运行多少个Pod,在这里我们希望运行2个
selector:
matchLabels: # 定义该部署匹配哪些Pod
app: k8sdemoweb
minReadySeconds: 5 # 可选,指定Pod可以变成可用状态的最小秒数,默认是0
strategy: # 指定更新版本时,部署使用的策略
type: RollingUpdate # 策略类型,使用RollingUpdate可以保证部署期间服务不间断
rollingUpdate:
maxUnavailable: 1 # 部署时最大允许停止的Pod数量(与replicas相比)
maxSurge: 1 # 部署时最大允许创建的Pod数量(与replicas相比)
template: # 用来指定Pod的模板,与Pod的定义类似
metadata:
labels: # 根据模板创建的Pod会被贴上该标签,与上面的matchLabels对应
app: k8sdemoweb
spec:
containers:
- name: web
image: cwsheng/k8sdemoweb
imagePullPolicy: Always # 默认是IfNotPresent,如果设置成Always,则每一次部署都会重新拉取容器映像(否则,如果本地存在指定的镜像版本,就不会再去拉取)
ports:
- containerPort: 80
b)执行命令:
kubectl create -f k8sdemoweb-deployment.yaml
c)查看Pod列表:
PS F:\coding\project\k8s.demo\k8s> kubectl get pod
NAME READY STATUS RESTARTS AGE
k8sdemoweb 1/1 Running 0 98m
k8sdemoweb-deployment-8678f7975c-cq2cq 1/1 Running 0 34s
k8sdemoweb-deployment-8678f7975c-jwnlf 1/1 Running 0 34s
总结:
以上简单的使用了k8s中:Pod、Service、Deployment实现了.net core 部署到k8s中。本次使用也是相对简单的,但k8s还有很多有用的功能等着解锁。如:不停机升级部署、服务间调用。
入门Kubernetes - .Net Core 运行的更多相关文章
- .NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了
作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/9985451.html 本来这篇只是想简单介绍下ASP.NET Core MVC项目的(毕竟要照顾到很多新 ...
- 基于 Vue.js 之 iView UI 框架非工程化实践记要 使用 Newtonsoft.Json 操作 JSON 字符串 基于.net core实现项目自动编译、并生成nuget包 webpack + vue 在dev和production模式下的小小区别 这样入门asp.net core 之 静态文件 这样入门asp.net core,如何
基于 Vue.js 之 iView UI 框架非工程化实践记要 像我们平日里做惯了 Java 或者 .NET 这种后端程序员,对于前端的认识还常常停留在 jQuery 时代,包括其插件在需要时就引 ...
- [转帖]新手必读,16个概念入门 Kubernetes
新手必读,16个概念入门 Kubernetes https://www.kubernetes.org.cn/5906.html 2019-09-29 22:13 中文社区 分类:Kubernetes教 ...
- net core体系-web应用程序-4asp.net core2.0 项目实战(CMS)-第二章 入门篇-快速入门ASP.NET Core看这篇就够了
.NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了 原文链接:https://www.cnblogs.com/yilezhu/p/9985451.ht ...
- 实例演示:如何在Kubernetes上大规模运行CI/CD
本周四晚上8:30,第二期k3s在线培训如约开播!本期课程将介绍k3s的核心架构,如高可用架构以及containerd.一起来进阶探索k3s吧! 报名及观看链接:http://z-mz.cn/PmwZ ...
- ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件)
ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件) Startup Class 1.Startup Constructor(构造函数) 2.Configure ...
- ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行
ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行 核心框架 ASP.NET Core APP 创建与运行 总结 之前两篇文章简析.NET Core 以及与 .NET Framew ...
- ASP.NET Core 运行原理解剖[1]:Hosting
ASP.NET Core 是新一代的 ASP.NET,第一次出现时代号为 ASP.NET vNext,后来命名为ASP.NET 5,随着它的完善与成熟,最终命名为 ASP.NET Core,表明它不是 ...
- ASP.NET Core 运行原理解剖[2]:Hosting补充之配置介绍
在上一章中,我们介绍了 ASP.NET Core 的启动过程,主要是对 WebHost 源码的探索.而本文则是对上文的一个补充,更加偏向于实战,详细的介绍一下我们在实际开发中需要对 Hosting 做 ...
随机推荐
- ES6学习-0 前言
本菜鸟做了二十来年的程序开发了,前后台都写过,队伍也带过.大约是2000年左右,是用dephi 写后台CGI,所有的html,js,css基本都是混在CGI里输出到前台的,那时也没有明确的前后台的概念 ...
- ruby基础(四)
ruby基础知识 模块 模块是ruby的特色功能之一.如果说类是事物的实体以及行为,那么模块表现的 就是事物的行为部分,模块和类有以下两点不同: 模块不能拥有实例 模块不能被继承 模块的使用方法 mo ...
- [Java] HOW2J(Java初级)
变量 基本类型:整型(byte.short.int.long).字符型(char).浮点型(float.double).布尔型(boolean) 给基本类型赋值的方式叫字面值 字符的字面值放在单引号中 ...
- Ubuntu相关系统配置问题
1.Ubuntu 16.04下安装VMware Tools 由于下载的是ubuntu-16.04.3-desktop-amd64,需要安装vmware tools,原来提取提取文件再解压的方式比较麻烦 ...
- Ubuntu 20.04 版本安装
Ubuntu 20.04 版本安装 安装步骤 首先创建好Ubuntu 20.04虚拟机 等待系统检查完整性 选择语言 选择不更新,回车确定 键盘语言默认即可 网卡IP配置 设置代理服务器 设置源 自定 ...
- Docker存储(4)
一.docker存储资源类型 用户在使用 Docker 的过程中,势必需要查看容器内应用产生的数据,或者需要将容器内数据进行备份,甚至多个容器之间进行数据共享,这必然会涉及到容器的数据管理 (1)Da ...
- IT菜鸟之BIOS和VT
一.虚拟化:VT(Virtualization Technology) 二.BIOS (basic input output system基本输入输出系统) 主板优先启动--bios启动--bios开 ...
- 面试官问:ZooKeeper 有几种节点类型?别再说 4 种啦!
本文作者:HelloGitHub-老荀 好久没更新 ZK 的文章了,我想死你们啦.之前发布的 HelloZooKeeper 系列文章完结后,项目收获了将近 600 个 star.这远远超过了我自己的预 ...
- 微信小程序使用同声传译实现语音识别功能
我使用同声传译语音识别功能是为了实现微信小程序首页的语音搜索功能,如果你也是那么恭喜你,你可以ctrl+c.ctrl+v再改一改,如果你不是那么你也不要着急的走可以看完我的文章会对你有所帮助! 首先是 ...
- Docker学习(14) Docker容器的数据管理
Docker容器的数据管理 Docker容器的数据卷 重要: Docker的数据卷容器 Docker数据卷的备份和还原