MISE_hw4_体系结构作业

本文用以记载在完成MISE体系结构作业时遇到的一些踩坑和困难。

  • 操作系统:macOS(m1芯片)

使用到的部分网址:

Spring Boot 实现单体架构

单体架构比较简单,在运行过程中未遇到困难,按照文档进行配置即可。

Kubernetes 为基础设施的微服务架构

由于文档中以Windows操作系统为例,部分操作不适用于macOS。

下载Docker Desktop

  • 官网有mac版本,下载正确版本安装即可

  • 更换国内镜像

安装kubernetes

  • mac 新版本的 docker 自带 Kubernetes,Enable 后就会自动开启下载

  • 在Settings中选中Kubernetes并apply,docker中k8s图标变绿即启动成功

安装skaffold

curl安装

参考https://skaffold.dev/docs/install/

运行以下命令:

1
2
3
# For macOS on ARMv8 (arm64)
curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-darwin-arm64 && \
sudo install skaffold /usr/local/bin/

homebrew安装

运行以下命令

1
brew install skaffold

运行配置

  • 下载源码后,运行./mvnw package可能会出现报错,需要运行以下命令

    1
    chmod +x ./mvnw
  • mac用户需要修改dockerfile中的内容,修改为

    1
    FROM arm64v8/openjdk:11-oracle
  • 如果使用java9以上编译,需要在pom文件中增加代码

    1
    <argLine>--add-opens=java.base/java.net=ALL-UNNAMED</argLine>  
  • 最后按照文档运行即可

    1
    2
    3
    4
    # 编译打包
    ./mvnw package
    # 启动Skaffold# 此时将会自动打包Docker镜像,并部署到Kubernetes中
    skaffold dev

Istio 为基础设施的服务网格架构

由于文档中以Windows操作系统为例,部分操作不适用于macOS。

安装Docker Desktop

同上

安装kubectl

参考https://kubernetes.io/zh-cn/docs/tasks/tools/install-kubectl-macos/#install-kubectl-binary-with-curl-on-macos

用curl安装

注意intel芯片还是m1芯片,本人为m1芯片

  • 运行以下命令下载最新的发行版

1
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl"
  • 验证可执行文件

    下载 kubectl 的校验和文件

    1
    curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl.sha256"

    根据校验和文件,验证 kubectl

    1
    echo "$(cat kubectl.sha256)  kubectl" | shasum -a 256 --check
  • 将 kubectl 置为可执行文件

    1
    chmod +x ./kubectl
  • 将可执行文件 kubectl 移动到系统可寻址路径 PATH 内的一个位置

    1
    2
    sudo mv ./kubectl /usr/local/bin/kubectl
    sudo chown root: /usr/local/bin/kubectl
  • 测试一下

    1
    kubectl version

用homebrew安装

运行以下命令

1
brew install kubectl

可以用同样的方法测试

在Docker Desktop中启用Kubernetes

同上

安装Istio

下载安装包

运行以下命令

1
curl -L https://istio.io/downloadIstio | sh -

把bin目录下的istioctl添加到PATH

1
2
export ISTIO_HOME=/Users/larry/Software/istio/istio-1.10.3
export PATH=$PATH:$ISTIO_HOME/bin

检测是否可以执行安装

运行以下命令

1
istioctl x precheck

如果可以安装会得到✔ No issues found when checking the cluster. Istio is safe to install or upgrade!

安装

1
istioctl install

简单的检查

运行以下命令

1
2
3
4
# 检查istio-system命令空间下的Pod
$ kubectl get pod -n istio-system
# 检查资源
$ kubectl api-resources | grep istio

以demo方式安装

1
istioctl manifest apply --set profile=demo

安装skaffold

同上

运行配置

  • 下载源码后,运行./mvnw package可能会出现报错,需要运行以下命令

    1
    chmod +x ./mvnw
  • mac用户需要修改dockerfile中的内容,修改为

    1
    FROM arm64v8/openjdk:11-oracle
  • 如果使用java9以上编译,需要在pom文件中增加代码

    1
    <argLine>--add-opens=java.base/java.net=ALL-UNNAMED</argLine>  
  • 如果运行./mvnw package遇到payment部分false,可以根据报错修改pom.xml

    例如,这是我修改后的pom.xml文件的部分内容

    1
    2
    3
    4
    5
    <argLine>-Dfile.encoding=UTF-8</argLine>
    <argLine>
    --add-opens=java.base/java.net=ALL-UNNAMED
    --add-opens=java.base/java.lang.invoke=ALL-UNNAMED
    </argLine>
  • 最后按照文档运行即可

    1
    2
    3
    4
    # 编译打包
    ./mvnw package
    # 启动Skaffold# 此时将会自动打包Docker镜像,并部署到Kubernetes中
    skaffold dev