Kubernetes[1] 是目前非常主流的容器编排工具,在应用创建、应用部署、应用扩容、应用更新等方面都非常的方便,而且在应用故障时,也可以快速自愈。所以基于微服务架构下的产品,了解 Kubernetes 的使用是非常必要的,我猜测很多人都曾经多次打算自己搭建 Kubernetes 环境,部署个服务试试效果,但却因为很多原因一次次从入门到放弃,这里应该有部分原因是因  Kubernetes 的入门成本相对较高,概念较多,搭建略复杂,所以往往一开始就死在了环境搭建上,导致很多预定的目标都没能实现。

关于 Kubernetes 概念上的内容这里不再赘述,但概念的部分又是在使用中必须优先掌握的知识,所以建议先通过查看资料对整体架构和使用方式有一定了解后再动手实际操作。

集群搭建

这里将搭建 Kubernetes 集群环境来进行测试,3 台 Linux 服务器(1个Master,2个Node)。网上有很多 Kubernetes 集群搭建的文章,找了很多最终发现还是李振良的基于 kubeadm 30分钟部署一个Kubernetes集群[2] 视频教程对初学者来说较为靠谱,虽然有些操作命令在实际生产环境需要调整,但作为学习来说问题不大,更多细节的优化还是交给更专业的运维人员吧。

为了省去操作系统的安装我直接在腾讯云购买了 3台 2C4G 的机器,选择按量计费模式大半天也就几块钱(不是广告,只是人懒)。基于云服务器搭建需提前在控制台的安全组设置好以下几点:

  1. 3台服务器内网互通;

  2. 允许服务器访问外网,需要下载相关依赖内容;

  3. 允许客户端机器通过服务器外网IP访问;

具体安装操作步骤完全参考视频教程即可,但我能肯定有些人还是可能会出各种奇葩问题,只能祝你好运了,以下几点这里备注一下:

  • kubeadm init 和 pod 网络插件只需要在 Master 节点操作;

  • kubeadm init 中的 --apiserver-advertise-address 设置为内网地址;

  • 通过 hostname k8s-master 可修改 hostname 名称;

最终通过命令 kubectl get nodes 查看集群中各节点是否已全部 Ready。

构建 .NET Core 服务镜像

接下来将直接在 Windows  环境(镜像构建基于 Windows 还是 Linux 理论上是没有区别的)下构建 .NET Core 服务的 Docker 镜像,所以首先需要安装 Docker for Windows[3],安装成功后启动 Docker。

创建一个 API 类型 ASP.NET Core  Web 应用程序,启用 Docker 支持,会在项目下自动生成 Dockerfile 文件,命令主要涉及 dotnet restoredotnet publish

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["K8SDemo/K8SDemo.csproj", "K8SDemo/"]
RUN dotnet restore "K8SDemo/K8SDemo.csproj"
COPY . .
WORKDIR "/src/K8SDemo"
RUN dotnet build "K8SDemo.csproj" -c Release -o /app/buildFROM build AS publish
RUN dotnet publish "K8SDemo.csproj" -c Release -o /app/publishFROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "K8SDemo.dll"]

在 Dockerfile 文件右键菜单点击生成 Docker 镜像,这与直接在 sln 解决方案文件所在的目录下执行 docker build -f .\K8SDemo\Dockerfile . 本质是一样的,只是 VS 已内置好了,执行成功后在 cmd 窗口中通过 docker images 查看当前存在的 Docker 镜像。

为了能在 Kubernetes 集群中能获取到这个镜像,现将 k8sdemo 镜像推送到个人 docker hub 公开仓库(实际开发中应该是公司的私有镜像仓库)。

  1. 如果还没有 docker hub 账号,需要先 注册[4]

  2. cmd 窗口通过命令 docker login -u 用户名 -p 密码 登录;

  3. 设置 Tag docker tag k8sdemo:latest 用户名/k8sdemo:1.0.0,因为推送目标只能是当前用户下;

  4. 推送到 docker hub 仓库 docker push 用户名/k8sdemo:1.0.0

部署

以下操作在 Master 节点进行

  1. 创建服务配置文件 k8sdemo.yaml,配置暂且不详细介绍,后续再针对性说明,先简单理解为通过镜像 beckjin/k8sdemo:1.0.0 创建了服务,并将容器内 80 端口映射到服务器某个端口上(NodePort 方式映射的端口会在 30000~32767 范围内随机一个):

    apiVersion: apps/v1
    kind: Deployment
    metadata:name: k8sdemo
    spec:replicas: 1selector:matchLabels:name: k8sdemotemplate:metadata:labels:name: k8sdemospec:containers:- name: k8sdemoimage: beckjin/k8sdemo:1.0.0ports:- containerPort: 80imagePullPolicy: IfNotPresent
    ---
    kind: Service
    apiVersion: v1
    metadata:name: k8sdemo
    spec:type: NodePortports:- port: 80targetPort: 80selector:name: k8sdemo
    
  2. 通过命令 kubectl apply -f k8sdemo.yaml 创建服务

    配置中指定了当依赖的镜像不存在时会自动拉取,但如果拉取资源的速度较慢,启动完成的时间可能会比较久,可通过命令 kubectl get podskubectl describe pod 名称 查看具体 pod 详细描述。

  3. 通过命令 kubectl get pod,svc 查看服务运行的端口

    接着就可以通过 http://${外网IP}:31741/WeatherForecast 调用 API 接口查看效果。

  4. 如果需要扩容或缩容,调整配置文件中的  replicas 节点值,重新 kubectl apply -f k8sdemo.yaml 即可;

  5. 通过命令 kubectl delete -f k8sdemo.yaml 可删除服务;

总结

其实很长一段时间都在尝试自己把玩一下 Kubernetes,说实话阻力确实不少,特别是看到很多基于二进制文件的搭建介绍,简直了。所以好的指导教程确实可以给我们带来事半功倍的效果,作为入门学习我们并不需要多么强大和安全的测试环境,基本套路都是先玩起来,再深入研究。

参考资料

[1]

Kubernetes: https://kubernetes.io/

[2]

30分钟部署一个Kubernetes集群: https://edu.51cto.com/course/17256.html

[3]

Docker for Windows: https://docs.docker.com/docker-for-windows/

[4]

注册: https://hub.docker.com/signup

.NET Core + Kubernetes:快速体验相关推荐

  1. .NET Core + Kubernetes:Deployment

    在上篇文章 .NET Core + Kubernetes:Pod 中,主要介绍了 Pod 的相关内容, 基于 Pod 为单位能更加合理进行容器编排,然而 Pod 只是个启动了一个或一组容器的资源类型, ...

  2. .NET Core + Kubernetes:Pod

    在 .NET Core + Kubernetes:快速体验 文章中,已经实现将一个 .NET Core API 服务部署在 Kubernetes 集群中,接下来将逐步了解 Kubernetes 中各核 ...

  3. 增加service_.NET Core + Kubernetes:Service

    通过 .NET Core + Kubernetes:Deployment 文章的介绍,我们可以通过 Deployment 控制器快速创建一组 Pod 来提供服务,每个 Pod 都会被分配一个集群内可见 ...

  4. .NET Core + Kubernetes:Service

    通过 .NET Core + Kubernetes:Deployment 文章的介绍,我们可以通过 Deployment 控制器快速创建一组 Pod 来提供服务,每个 Pod 都会被分配一个集群内可见 ...

  5. Hello Kubernetes快速交互实验手册

    " K8S在线实验室提供了一个交互实验环境,现将这部分文章精简并翻译为中文,希望对那些不了解K8S的童鞋有帮助,能够快速玩起来有个感性认识..." 原文:https://kuber ...

  6. Jest 学习01 - Jest 介绍、快速体验、vscode 智能提示、配置、监视模式、Babel 配置

    起步 测试到底测什么 提到测试的时候,即使是最简单的一个代码块可能都让初学者不知所措.最常问的问题的是"我怎么知道要测试什么?".如果你正在写一个 Web 应用,那么依次测试每个页 ...

  7. 单机快速体验k8s集群的测试环境

    快速指南 以下为快速体验k8s集群的测试.开发环境–单节点部署(aio),国内环境下比官方的minikube方便.简单很多. 1.基础系统配置 准备一台虚机配置内存2G/硬盘30G以上 最小化安装Ub ...

  8. 在 Fedora Core 5 上体验 Aiglx 和 Xgl Compiz(转)

    在 Fedora Core 5 上体验 Aiglx 和 Xgl & Compiz(转) 摘要: Aiglx是一个旨在为标准桌面启用GL加速功能的项目,目的在于通过小幅度修改X server.使 ...

  9. 【rnnoise快速体验】rnnoise从编译到训练

    运行环境为Ubuntu18.04 C部分 下载源码 从github上下载源码,目前只有master分支,就拿master分支下来. 准备编译环境 干净的linux环境可能会没有安装gcc等编译工具 所 ...

  10. 基于android os 5.1,Android 5.1.1版氢OS快速体验

    本文约5304字,需9分钟阅读(全文浏览) [更新2015.07.15]作为一加氢OS的内测成员,小编在今天收到了氢OS最新的测试包.然而这个测试包有些不一样,它不再是基于Android 5.0.2系 ...

最新文章

  1. 源码安装nginx开启SSL功能
  2. 镗孔指令g76格式_11种孔加工固定循环指令+1个案例=完美解决孔加工问题
  3. 我在51CTO微职位学软考——网络工程师
  4. 像我这种背景的人跑到微软来干什么?
  5. keil obj 文件 结构_OBJ文件格式详解
  6. 降低能耗 企业级闪存进入数据中心领域
  7. 【算法竞赛学习】数字中国创新大赛智慧海洋建设-Task5模型融合
  8. Socket编程:之双机通信
  9. apache php 500,apache出现500错误的原因是什么
  10. 201506110248 ---实验报告
  11. Javascript:获取点击的li标签内部文字
  12. Flutter实战之Image和FadeInImage
  13. 网站服务器 发包,如何实现CentOS不停向外发包_网站服务器运行维护,CentOS
  14. mysql索引的常识
  15. mac怎么禁止某个应用联网?
  16. iPhone之手势切换图片
  17. 想要降低gradle版本时遇到“Minimum supported Gradle version is XXX. Current version is XXX.”
  18. 【题解】模拟赛11.22 T4 星际战争
  19. Python学习日志--摆动吧!钟摆!
  20. kirin710f是什么处理器_kirin710什么处理器

热门文章

  1. 【转】学会这13个原则写UI界面文案,用户才能秒懂
  2. 深入浅出Mybatis系列(一)---Mybatis入门[转]
  3. RFileWriteStream 写入汉字
  4. ORACLE备份中的压缩
  5. 柳传志与马云绸缪宏观经济“冬天影子”
  6. Teams App设备的地理位置能力
  7. 用SmarterFox替换Internet Explorer的“加速器”
  8. keep-alive使用_如何使用Google Keep进行无忧笔记
  9. google hdr+_更好的隐私权控制使Google+死了
  10. 给Web开发人员的以太坊入坑指南