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

 前面文章已经演示过,将我们的示例微服务程序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上的容器暴漏端口。

相关文章:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298362.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记一次 .NET 某新能源汽车锂电池检测程序 UI挂死分析

一&#xff1a;背景 1. 讲故事这世间事说来也奇怪&#xff0c;近两个月有三位朋友找到我&#xff0c;让我帮忙分析下他的程序hangon现象&#xff0c;这三个dump分别涉及&#xff1a;医疗&#xff0c;新能源&#xff0c;POS系统。截图如下&#xff1a;那这篇为什么要拿其中的 新…

这个女生躲在衣柜等男友回家,结果竟是......

1 不要什么都怪爸爸我妈明明也是这样帮我脱的▼2 这就是现实版大女主反杀女二的故事啊▼3 我猜到了开头却没有猜到结尾▼4 &#xff1f;&#xff1f;&#xff1f;一定是我被饿出了幻觉▼5 小小的孩子在极短的时间内经历了人生的大戏和大悲▼6 这个令人羡慕的发量啊&#…

mysql savepoint作用_savepoint原理

保存点在MySQL中, 保存点SAVEPOINT属于事务控制处理部分。利用SAVEPOINT可以回滚指定部分事务&#xff0c;从而使事务处理更加灵活和精细。SAVEPOINT相关的SQL语句如下SAVEPOINT identifier设置SAVEPOINT。如果重复设置同名savepoint,新的会覆盖老的.RELEASE SAVEPOINT identif…

路由器笔记 CCNA

配置路由器应用性<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />1配置端口1&#xff09; 配置局域网端口&#xff1a;进入&#xff08;config-if&#xff09;#模式 配置ip地址和掩码 &#xff08;config-if&#xff09;#ip a…

图片裁剪和异步上传插件--一步到位(记录)

图片上传裁剪这功能随处可见&#xff0c;有的自己写&#xff0c;不过太耗费时间了&#xff0c;插件的话感觉好多&#xff0c;前段时间就想挑一款好的插件&#xff0c;以后就用那款&#xff0c;可是挑了几款插件用上去&#xff0c;效果很好&#xff0c;问题就出在合并了&#xf…

git checkout 单个文件_git 如何回退单个文件

1.进入到文件所在文件目录&#xff0c;或者能找到文件的路径查看文件的修改记录git log fileName结果&#xff1a;如果文件修改记录太多&#xff0c;则使用git log -number fileName结果&#xff1a;2.回退到指定版本git reset ** fileName1.git reset -mixed&#xff1a;此为默…

未来十年最吃香专业大盘点,有你的吗?

全世界只有3.14 % 的人关注了爆炸吧知识这个世界上理工科到底有多吃香&#xff1f;如果你是理工男/女&#xff0c;先恭喜一下你&#xff0c;不知道喜从何来&#xff1f;不妨先来看这几组数据&#xff1a;高薪职业平均薪资一览表薪资最高的专业前20名这并不只是中国的情况&#…

mysql挂载到iscsi_corosync+pacemaker+iscsi磁盘实现mysql高可用

实验用主机&#xff1a;提供iscsi磁盘:172.16.103.1,提供iscsi磁盘高可用主机:172.16.103.2&#xff0c;172.16.103.3实验拓扑&#xff1a;实验步骤&#xff1a;一、配置172.16.103.1&#xff0c;输出iscsi磁盘&#xff0c;创建的磁盘分区为/dev/sda3&#xff0c;在实际的使用环…

一种在未来互联网中的面向用户的云操作系统体系

本文描述了一个欲将整个网络当做计算机使用&#xff0c;可以极大增强云计算应用能力和提高用户体验的一个类操作系统体系结构。望有识之士能做下去。 价值1&#xff09;用户的痛苦在哪里&#xff1f;对于终端用户&#xff0c;他们的痛苦在于使用Web应用不方便&#xff0c;可以使…

提高「搜商」,挣大钱

大家好&#xff0c;我是Z哥。在之前的一篇讲述数据分析的文章《这个时代最重要的技能之一》中提到了这周要和大家聊聊「搜商」的事情。搜商这个词诞生于互联网时代&#xff0c;体现的是一个人利用搜索引擎查找自己所需信息的能力。我觉得在当下这个时代&#xff0c;搜商的重要性…

idea 配置jdk版本_JDK 11 安装过程(同时已安装了JDK 8)以及Intellij IDEA 配置

电脑上已经安装过 JDK 8 版本(C:Javajdk1.8.0_111)。安装好 JDK 11 版本(C:Program FilesJavajdk-11.0.2)之后&#xff0c;目录如下&#xff0c;分别有&#xff1a;安装过程&#xff1a;1. 开始安装 JDK 11&#xff1b;2. 完成安装JDK 11&#xff1b;配置过程&#xff1a;1. 将…

老师,你和我的文具撞衫了!

全世界只有3.14 % 的人关注了爆炸吧知识来看越南学生拍摄的一组图&#xff0c;主题是老师和文具“撞衫”&#xff01;老师你和我的胶水撞了&#xff01;老师你和我的笔袋撞了&#xff01;老师你和我的手机壳撞了&#xff01;这个铅笔和老师好像啊书皮和老师很像老师今天穿得像面…

中小企业SaaS型软件BI的发展前景

2019独角兽企业重金招聘Python工程师标准>>> 传统企业在实施信息化的过程中&#xff0c;往往遵循着先用ERP把物料管起来&#xff0c;然后再CRM把客户关系管理起来&#xff0c;之后是财务系统&#xff0c;最后才会在数据的压力之下&#xff0c;实 施BI。那么&#xf…

穿透Session 0 隔离(一)

服务&#xff08;Service&#xff09;对于大家来说一定不会陌生&#xff0c;它是Windows 操作系统重要的组成部分。我们可以把服务想像成一种特殊的应用程序&#xff0c;它随系统的“开启&#xff5e;关闭”而“开始&#xff5e;停止”其工作内容&#xff0c;在这期间无需任何用…

navicat循环执行上下两行相减sql语句_SQL语句的优化分析

一、开门见山&#xff0c;问题所在sql语句性能达不到你的要求&#xff0c;执行效率让你忍无可忍&#xff0c;一般会时下面几种情况。网速不给力&#xff0c;不稳定。服务器内存不够&#xff0c;或者SQL 被分配的内存不够。sql语句设计不合理没有相应的索引&#xff0c;索引不合…

想不到,那些让我半夜偷偷收藏的沙雕表情包,竟是出自AI之手

全世界只有3.14 % 的人关注了爆炸吧知识转自&#xff1a;机器之心参与&#xff1a;蛋酱要是收藏夹里没几个独家沙雕表情包&#xff0c;当代网民都无法在朋友圈立足。但有一些「妙不可言」的图片&#xff0c;也许是 AI 生成的结果。一般人很难读出「meme」这个词&#xff0c;它通…

JavaScript中的arguments,callee,caller

2019独角兽企业重金招聘Python工程师标准>>> arguments: arguments 该对象代表正在执行的函数和调用它的函数的参数。 [function.]arguments[n]参数 function&#xff1a;选项。当前正在执行的 Function 对象的名字。 n &#xff1a;选项。要传递给 Function 对象的…

python总结函数图像_PIL使用小结(crop和paste函数)

PIL(Python Imaging Library)是python语言中对图像处理方面的一个开源库&#xff0c;其主要功能模块为Image&#xff0c;对于Image模块&#xff0c;可以使用from PIL import Image或者import Image由于使用了试用版的chartdir库&#xff0c;在生成图片的时候下面会出现一行提示…

js中apply和join

join 分隔符分隔指定数组中的数据,不仅可以分割&#xff0c;还可以考虑用join("")合并&#xff0c;可以将一个array对象数据进行合并 1 <script>2 vark["2","3",4,5];3 alert(k.join(""));4 vars["s",":",,…

12333新农合网上查询_新农合医保查询缴费平台|新农村医疗保险网上缴费平台

这个智慧新农合新农合患者就诊从挂号到缴费&#xff0c;不用再拿着各种票据在报销处和收费处之间奔走&#xff0c;也不用担心票据不完整造成无法正常报销的情况&#xff0c;只需携带本人有效身份证和农合本&#xff0c;凭身份证号码或新农合号码即可实时报销所有费用&#xff0…