前面文章已经演示过,将我们的示例微服务程序DaprTest1部署到k8s上并运行。当时用的k8s是Docker for desktop 自带的k8s,只要在Docker for desktop中启用就可以了。但是我发现,启用了k8s后,Docker for desktop会消耗大量的系统资源,导致系统变得很慢。据说windows 上的WSL 2 性能不错,这次我尝试在WSL Linux上安装K8s并部署我们的微服务,看看还会不会出现系统资源消耗过大的情况。

     关于网络:我用的是外企公司的VPN关于系统:我用的是Windows 11 1000.22000.168.0

1在WSL上安装k8s集群

1.1  从微软商店安装“Windows Terminal”

Windows Terminal用来连接管理WSL中的Linux Ubuntu。

1.2         在本地电脑安装“Lens”

Lens用来连接管理k8s集群,启动界面如下:

1.3         启用Windows功能“虚拟机平台”

启用虚拟机平台是安装WSL 2 的必要条件

1.4  从微软商店安装“Ubuntu”

安装WSL兼容的Linux Ubuntu

安装完成后,从开始菜单打开Ubuntu应用(命令窗口),提示用户输入用户和密码,设置好后,我们需要设置root用户的密码,命令为:

sudo passwd root

1.5安装Docker for desktop 并启用WSL集成

为了更好的性能和程序开发方便,微软不建议在 WSL Ubuntu 中直接安装Docker,而是通过Docker for desktop与WSL 互操作的方式在Ubuntu中使用Docker。安装地址:Docker Desktop for Mac and Windows | Docker

1.6 在Ubuntu 中安装Kind

通过Windows terminal 连接 Ubuntu

通过su命令切换到root用户,然后执行更新apt工具命令:

apt update && apt upgrade -y 

安装Kind最新版本,需要依次执行如下命令:

# 下载 KinD 二进制文件


curl -Lo ./kind https://github.com/kubernetes-sigs/kind/releases/download/v0.11.1/kind-$(uname)-amd64# 标记为可执行文件chmod +x ./kind# 移动到 PATH 目录下去mv ./kind /usr/local/bin/#查看kind版本kind version#输出:kind v0.11.1 go1.16.4 linux/amd64

1.7在Ubuntu 中安装 Kubectl 工具

本步骤可选,因为我们也可以从本地电脑kubectl工具或者lens来管理k8s集群.

安装步骤如下(和Kind的安装步骤类似):

curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"chmod +x ./kubectlsudo mv ./kubectl /usr/local/bin/kubectlkubectl version

1.8  在Ubuntu 中用Kind 创建K8s 集群

首先创建k8s集群创建配置文件(该集群包含一个控制面板节点和一个工作节点)

# 创建一个2节点集群的配置文件


cat << EOF > kind-3nodes.yamlapiVersion: kind.x-k8s.io/v1alpha4kind: Clusternodes:- role: control-planeextraPortMappings:- containerPort: 30000hostPort: 30000listenAddress: "0.0.0.0" # Optional, defaults to "0.0.0.0"protocol: tcp # Optional, defaults to tcp- role: workerEOF

注意文件中“extraPortMappings” 配置节,是用来将Ubuntu上的k8s容器30000端口暴漏给localhost(kind是通过容器来运行k8s 节点), 这样我们就可以通过localhost:30000访问k8s集群中的服务。

然后根据配置文件创建k8s集群

# 使用配置文件创建新的集群kind create cluster --name wslk8s --config ./kind-3nodes.yaml

创建完成后,我们可用命令kubectl cluster-info 查看集群信息(如果我们在Ubuntu上安装了Kubectl工具的话)。

1.9 用Lens和本地Kubectl 工具连接k8s集群

在Ubuntu中打开k8s连接配置文件,并拷贝文件内容。

cat $HOME/.kube/config

将文件内容拷贝到本地电脑的C:\Users\[用户名]/.kube/cofnig 文件。

然后就可以在本地电脑用kubectl cluster-info 查看集群信息,也可以打开Lens, 看到集群信息。

2 在k8s集群上部署微服务

2.1 在本地电脑用Dapr cli 安装 Dapr 到K8s 集群

因为我们的微服务示例程序是基于Dapr的,我们也能够从本地电脑连接到k8s集群,我们需要从本地电脑上通过Dapr Cli 安装Dapr 到 k8s集群。

Dapr init -k

2.2 在本地电脑从微服务项目生成镜像

和以前一样,我们从本地电脑的项目文件中生成镜像,运行

./build-docker-images.ps1

2.3 在Ubuntu 中用Kind将镜像加载到k8s集群

因为Kind 是把K8s的node放到容器中运行,导致k8s找不到我们自己生成的镜像(错误:ImagePullError),我们需要通过Kind把我们的镜像加载到k8s集群。

kind load docker-image dapr-test1/blazorweb:3.0 --name wslk8skind load docker-image dapr-test1/serviceapi1:3.0 --name wslk8s

2.4 在本地电脑用Kubectl工具部署微服务

在项目的Deploy 文件中运行 ./Deploy.ps1命令即可部署我们的微服务到K8s集群/

容器运行后,可通过http://localhost:30000访问我们的示例微服务。 

查看任务管理器,发现通过WSL运行k8s的系统资源消耗比以前用Docker for desktop少了,系统运行也流畅了。

3遗留待处理问题

3.1Kind 部署K8s的 Nodeport问题

因为Kind是将K8s节点放到容器中运行,需要通过对localhost暴漏端口的方式来访问微服务,微服务Nodeport配置的暴端口必须和k8s节点的暴漏端口一致才可以访问。但是,如果我们的集群上有多个微服务系统怎么访问呢?目前的想法是微服务通过Ingress的方式提供对外访问,为每个微服务系统配置不同的域名。参考kind – Ingress (k8s.io) 和Kubernetes ingress same path multiple ports - Stack Overflow

3.2 公共服务的访问问题。

我们每个微服务系统都会用到redis,RabbitMQ和zipkin等,没有必要每个微服务系统都配置这些基础服务容器来运行,计划把这些基础服务以通过Docker容器(暴漏localhost 端口)的方式运行,其它微服务系统通过定义Serivice 和Endpoints的方式来访问这些基础服务。参考mongodb - How to access host's localhost from inside kubernetes cluster - Stack Overflow ,需要测试用域名kubernetes.docker.internal 是否可以从k8s集群内部访问localhost上的容器暴漏端口。

相关文章:

  • Blazor+Dapr+K8s微服务之服务调用

  • Blazor+Dapr+K8s微服务之开发环境调试

  • Blazor+Dapr+K8s微服务之状态管理

  • Blazor+Dapr+K8s微服务之事件发布订阅

  • 浅析 Dapr 里的云计算设计模式

  • Dapr——云原生开发的新思路

  • 一起学Dapr云原生开发

Blazor+Dapr+K8s微服务之基于WSL安装K8s集群并部署微服务相关推荐

  1. k8s和harbor的集成_在Kubernetes集群上部署高可用Harbor镜像仓库

    在Kubernetes集群上部署高可用Harbor镜像仓库 一.Kubernetes上的高可用Harbor方案 首先,我可以肯定给出一个回答:Harbor支持在Kubernetes部署.只不过Harb ...

  2. 基于Hadoop安装spark集群

    基于Hadoop的spark环境搭建 已有环境情况 Hadoop HA Java 软件版本 Hadoop 2.7.2 Java 1.8.0_301 Scala 2.11.8 Spark 2.1.0 下 ...

  3. 基于Gitlab Jenkins Docker集群 微服务搭建自动化部署平台

    随着公司应用系统的不断增多,原有手工部署流程越来越不满足上线的需求.为了各个系统能快速迭代与测试,减少上线流程时间和人为出错,迫切需要一套自动化部署系统. 转载原文:https://luoji.liv ...

  4. 集群,分布式,微服务的区别

    参考文献: 集群,分布式,微服务概念和区别理解 谢谢作者分享!

  5. 26thCSIG云上微表情:基于面部动作单元(AU)的微表情分析

    26thCSIG云上微表情:基于面部动作单元(AU)的微表情分析 1.报告一 2.报告二 3.学习链接 1.报告一 微表情的分类是模糊的,增加了微表情识别的难度. 2.报告二 3.学习链接 26thC ...

  6. SpringCloud微服务搭建(四 搭建EurekaServer集群)

    在上一章的基础上 在EurekasServer里面添加三个yml: bootstrap-server1.yml: server:port: 8794eureka:instance:hostname: ...

  7. Java SaaS高可用集群架构与微服务架构分析

    可能大部分读者都在想,为什么在这以 dubbo.spring cloud 为代表的微服务时代,我要还要整理这种已经 "过时" 高可用集群架构? 本人工作上大部分团队都是 7-15 ...

  8. 现阶段Java高可用集群架构与微服务架构的简单分析

    一.如何选择 1.高可用集群 适用于中小型创业公司项目架构,小型技术团队快速迭代版本发布部署需求,前期低成本运行,爆发时可通过投入适量成本横向扩容服务器抗压. 特点: 前期技术开发成本低 一定的服务器 ...

  9. 使用ingress暴露kubernetes集群内部的pod服务

    微信公众号搜索 DevOps和k8s全栈技术 ,关注之后,在后台回复 ingress,就可获取Ingress相关视频和文档,也可扫描文章最后的二维码关注公众号. 回顾 Kubernetes暴露服务的方 ...

最新文章

  1. C# 简单软件有效期注册的实现【原】
  2. 灰鸽子木马的原理和清除方法
  3. 自动化运维平台中的统一认证接入与单点登录实现
  4. Django开发微信公众平台
  5. Spring Boot 导出Excel表格
  6. 宝新金融首席经济学家:区块链应用主要方向开始转向实体经济领域的商业场景
  7. 论文笔记_S2D.11-2018-ECCV_用于语义分割和深度估计的联合任务递归学习
  8. 仿微信,qq在短时间内接受多条消息只响一声
  9. 代数结构在计算机科学中的应用,代数结构
  10. 深圳租房你必须知道的问题有哪些?
  11. HTML的背景颜色和背景图片
  12. 卷积神经网络中卷积的作用与原理
  13. vue滚动屏幕使其菜单栏隐藏和显示
  14. 将优狐智能插座接入 Domoticz
  15. V3D中神经元SWC颜色对照图及色彩搭配
  16. 如何用PDF编辑器修改PDF文件的字体颜色
  17. 每年服务30万家庭 APFM如何成为北美最大养老“中介”企业
  18. 几个比较好的找工作的网站(zz)
  19. 如何使用Vue开发Electron桌面程序
  20. 关闭云鲸拖地机器人风干_评测云鲸拖地机器人:看它拖地后怎么自己洗抹布的?|未来科技范...

热门文章

  1. C# js调用winform方法,C# JS与winform通信
  2. [翻译]asp.net ajax xml-script教程(二)
  3. C# Global.asax.cs 定时任务
  4. @hdu - 6372@ sacul
  5. UIViewController 小结
  6. 查看linux版本的三种常用方法
  7. matlab练习程序(PCASVD)
  8. rabbitmq学习:
  9. SQL Azure Reporting CTP
  10. 深入浅出Google Android这本书怎么样