前面文章已经演示过,将我们的示例微服务程序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. Django中ORM是啥?

    ORM是啥是许多Django新手的苦恼. ORM中的"O"就是object,也就是我们说的对象:R指的是relations关系:M指的是mapping也就是映射.所以ORM是对象- ...

  2. tomcat与springmvc 结合 之---第19篇 springmvc 加载.xml文件的bean 过程

    writedby 张艳涛,看springmvc 的源码太难了,怎么办, 这篇文章主要分析了看透springmvc的第9章结尾的 如何解析xml 命名空间标签 <?xml version=&quo ...

  3. 【阅读笔记】Java核心技术卷一 #1.Chapter3

    3 Java的基本程序设计结构 3.1 一个简单的 Java 应用程序(略) 3.2 注释(略) 3.3 数据类型 8种基本类型 byte,short,int,long float,double ch ...

  4. Bootstrap 树形列表与右键菜单

    Bootstrap 树形列表与右键菜单 介绍两个Bootstrap的扩展 Bootstrap Tree View 树形列表 jQuery contextMenu 右键菜单 Demo采用CDN分发,直接 ...

  5. time() 在thinkphp 3.2.3 模板格式化输出

    {$ltime|date="Y-m-d",###}

  6. AHKManager.ahk AHK管理器 2019年12月15日

    AHKManager.ahk  AHK管理器  2019年12月15日 快捷键   {Alt} + {F1} ///////////////////////////////////////////// ...

  7. CYPEESS USB3.0程序解读之---GPIO

    CPRESS 官方给出的SDK1.1中(目前最新的SDK),提供了大量的例程供我们开发软件的时候作参考,就像STM32的开发一样提供了库一样,但是又不是库,仅仅是参考例程. 首先看一个简单一点的GPI ...

  8. miniFTP项目实战一

    项目简介: 在Linux环境下用C语言开发的Vsftpd的简化版本,拥有部分Vsftpd功能和相同的FTP协议,系统的主要架构采用多进程模型,每当有一个新的客户连接到达,主进程就会派生出一个ftp服务 ...

  9. selenium处理:您的连接不是私密连接的网站(https ssl 证书)

    当前我们遇到这样的问题,就要通过代码的层面去解决 requests的话verify参数设置为False selenium的话添加参数:--ignore-certificate-errors 测试代码: ...

  10. SQL 练习37

    检索至少选修两门课程的学生学号 SELECT Student.SId,Student.Sname,选课数 from Student, (SELECT sid,COUNT(cid) 选课数 from s ...