前面文章已经演示过,将我们的示例微服务程序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 ./kubectl

sudo mv ./kubectl /usr/local/bin/kubectl

kubectl version

1.8         在Ubuntu 中用Kind 创建K8s 集群

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

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

cat << EOF > kind-3nodes.yaml

apiVersion: kind.x-k8s.io/v1alpha4

kind: Cluster

nodes:

- role: control-plane

  extraPortMappings:

  - containerPort: 30000

    hostPort: 30000

    listenAddress: "0.0.0.0" # Optional, defaults to "0.0.0.0"

    protocol: tcp # Optional, defaults to tcp

- role: worker

EOF

注意文件中“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 wslk8s

kind 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.1         Kind 部署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微服务之基于WSL安装K8s集群并部署微服务的更多相关文章

  1. 庐山真面目之十二微服务架构基于Docker搭建Consul集群、Ocelot网关集群和IdentityServer版本实现

    庐山真面目之十二微服务架构基于Docker搭建Consul集群.Ocelot网关集群和IdentityServer版本实现 一.简介      在第七篇文章<庐山真面目之七微服务架构Consul ...

  2. 基于docker安装pxc集群

    基于docker安装pxc集群 一.PXC 集群的安装 PXC集群比较特殊,需要安装在 linux 或 Docker 之上.这里使用 Docker进行安装! Docker的镜像仓库中包含了 PXC数据 ...

  3. 基于yum安装CDH集群

    一.环境准备 准备至少3台设备:CentOS7系统: 如果是在实验环境下,给虚拟机的内存至少4G,根建议1T,数据盘1T,由于是虚拟机,所以根分区和数据盘放心大胆的给:如果是在生产环境则多多益善:我这 ...

  4. K8S从入门到放弃系列-(15)Kubernetes集群Ingress部署

    Ingress是kubernetes集群对外提供服务的一种方式.ingress部署相对比较简单,官方把相关资源配置文件,都已经集合到一个yml文件中(mandatory.yaml),镜像地址也修改为q ...

  5. K8S从入门到放弃系列-(13)Kubernetes集群mertics-server部署

    集群部署好后,如果我们想知道集群中每个节点及节点上的pod资源使用情况,命令行下可以直接使用kubectl top node/pod来查看资源使用情况,默认此命令不能正常使用,需要我们部署对应api资 ...

  6. K8S从入门到放弃系列-(12)Kubernetes集群Coredns部署

    摘要: 集群其他组件全部完成后我们应当部署集群 DNS 使 service 等能够正常解析,1.11版本coredns已经取代kube-dns成为集群默认dns. 1)下载yaml配置清单 [root ...

  7. K8S从入门到放弃系列-(14)Kubernetes集群Dashboard部署

    Dashboard是k8s的web界面,用户可以用 Kubernetes Dashboard 部署容器化的应用.监控应用.并对集群本身进行管理,在 Kubernetes Dashboard 中可以查看 ...

  8. K8S从入门到放弃系列-(16)Kubernetes集群Prometheus-operator监控部署

    Prometheus Operator不同于Prometheus,Prometheus Operator是 CoreOS 开源的一套用于管理在 Kubernetes 集群上的 Prometheus 控 ...

  9. k8s 集群管理和微服务 适合做啥

    k8s 集群管理和微服务 适合做啥 都知道k8s是集群 适合微服务 有很多教程 但你可以先了解他能干啥 traefix 是负载均衡工具 k8s 适合部署无状态依赖的微服务 可以按需求开启多个微服务 管 ...

随机推荐

  1. java开源项目学习

    http://jeecg-boot.mydoc.io/ 在线文档已切换至新地址: http://doc.jeecg.com Jeecg-Boot 是一款基于SpringBoot+代码生成器的快速开发平 ...

  2. Python开发篇——如何在Flask下编写JWT登录

    首先,HTTP 是无状态的协议(对于事务处理没有记忆能力,每次客户端和服务端会话完成时,服务端不会保存任何会话信息)--每个请求都是完全独立的,服务端无法确认当前访问者的身份信息,无法分辨上一次的请求 ...

  3. C#曲线分析平台的制作(二,echarts前后台数据显示)

    在上一篇博客中,学习了使用javascript和jquery两种方法来进行前后台交互.本篇博客着重利用jquery+echarts来实现从后台取数,从前端echarts中展示. 1.html页面编写: ...

  4. Python实用案例,Python脚本,Python实现每日更换“必应图片”为“桌面壁纸”

    往期回顾 Python实现自动监测Github项目并打开网页 Python实现文件自动归类 Python实现帮你选择双色球号码 前言: 今天我们就利用python脚本实现每日更换"必应图片& ...

  5. 🔥 LeetCode 热题 HOT 100(61-70)

    207. 课程表 思路:根据题意可知:当课程之间不存在 环状 循环依赖时,便能完成所有课程的学习,反之则不能.因此可以将问题转换成: 判断有向图中是否存在环.使用 拓扑排序法 : 构建 入度表:记录每 ...

  6. 关于C语言中的unsigned

    在C语言中,对unsigned做出(unsigned int)i>=0 判断,将会得到一个永真值. int i; for(i=10;i-sizeof(int)>=0;i--){ print ...

  7. VS2019 +MySQL+EntityFramework 使用配置与坑点避免随记

    一.安装运行环境 首先我们到mysql的官方网站上下载 mysql-installer-community-8.0.26.0 ,或者其他特定版本,通过它我们可以先将 mysql-for-visuals ...

  8. 利用MySQL原数据信息批量转换指定库数据表生成Hive建表语句

    1.写出文件工具类 package ccc.utile; import java.io.*; /** * @author ccc * @version 1.0.0 * @ClassName Write ...

  9. Android开发失业六个月了,无限的焦虑

    最近到网上看到这样一个帖子: Android开发,坐标魔都:目前为止已经失业六个月,找工作期间,尤其是最近两天确实心态不好.要么没有面试,要么给的工资不符合预期( hr 压价太狠了,原先说的 19k, ...

  10. java环境的配置——实现win10下双击直接运行jar文件

    java环境的配置--实现win10下双击直接运行jar文件 在渗透测试的过程中很多工具的安装和使用需要java环境,下面我来介绍一下java环境配置的超详细步骤(包含怎样实现win10下双击直接运行 ...