Chaos Monkey Demo搭建

Demo 搭建

环境准备

一台 Ubuntu 16.04 或者更高版本的虚机(性能基本没要求),用于部署 halyard;haryard 如果是云服务器,建议所在地北美或者能翻墙的国外节点,有能访问 Google 的镜像资源的的代理也行;一个或多个 kubernetes 集群;halyard 服务器的网络上能与 kubernetes 的集群互通;

配置部署 Spinnaker

安装 halyard

Halyard 是一种命令行管理工具,可管理 Spinnaker 部署的生命周期,包括编写和验证部署的配置,部署 Spinnaker 的每个微服务以及更新部署。

Spinnaker 的所有具有生产能力的部署都需要 Halyard 才能安装,配置和更新 Spinnaker。

有两种安装 Halyard 的方法:一是在 Debian / Ubuntu 或 macOS 上本地,它可以在台式机或便携式计算机上,也可以在 VM 上。二是在 Docker 上。

首先下载 curl,并下载 InstallHalyard.sh,然后新建一个用户 spinnaker,根据提示输入非 root 用户 spinnaker;执行脚本 InstallHalyard.sh, 执行 hal -v ,如果能正常显示 halyard 版本,则说明安装完成。

  • sudo apt install curl

curl -O https://cdn.jsdelivr.net/gh/spinnaker/halyard@master/install/debian/InstallHalyard.sh
  • sudo bash ./InstallHalyard.sh 运行 sh 文件
  • hal -v
  • sudo update-halyard

halyard 默认安装路径是/opt/下,可在其 config/halyard.yml 配置文件中,配置镜像仓库,以及服务端口(默认 8064);spinnaker 的配置文件在/home/spinnaker/.hal/下;刚安装完成,该文件夹下只有卸载脚本,后续的配置过程中会自动生成.

在 Spinnaker 中,提供程序是将应用程序部署到的云平台的集成。在本部分中,将为 Cloud 平台注册凭据。 这些凭据在 Spinnaker 中称为“帐户”,Spinnaker 通过这些帐户部署应用程序。我们选择 Kubernetes V2 作为云提供商。

配置 kubernetes 环境

Spinnaker Kubernetes V2 提供程序完全支持基于清单的部署,并且是推荐使用 Spinnaker 部署到 Kubernetes 的提供程序。 Kubernetes 提供程序 V1 处于维护模式。对于 Kubernetes V2,Spinnaker 帐户映射到可以针对你的 Kubernetes 集群进行身份验证的凭据。与 V1 提供程序不同,在 V2 中,该帐户不需要任何 Docker Registry Accounts。Kubernetes 提供者有两个要求:

kubeconfig 文件

kubeconfig 文件允许 Spinnaker 对你的集群进行身份验证,并具有对你希望其管理的任何资源的读/写访问权限。你可以将其视为私钥文件,以使 Spinnaker 连接到你的集群。你可以向 Kubernetes 集群管理员请求此操作。

kubectl CLI 工具

Spinnaker 依靠 kubectl 来管理所有 API 访问。它与 Spinnaker 一起安装。Spinnaker 还依靠 kubectl 来访问你的 Kubernetes 集群。只有 kubectl 完全支持 Kubernetes API 的许多方面,例如,在 kubectl apply 上进行三路合并,以及 API 发现。尽管这会产生对二进制文件的依赖,但好消息是 Spinnaker 也支持 kubectl 支持的任何身份验证方法或 API 资源。这是对 Spinnaker 中原始 Kubernetes 提供程序的改进。

将 kubernetes 集群 master01 的/usr/bin/kubectl 到该虚机的/usr/bin/下,赋予可执行权限;将 master01 的/root/.kube/ 文件夹复制到该虚机的相同路径下;在该虚机新建/etc/kubernetes/文件夹,将 master01 的/etc/kubernetes/admin.cnf 复制到该虚机的相同路径下;输入 kubectl get nodes,验证 kubectl 是否正常;获取 kubectl 配置文件中的 current-connext 的值

  • hal config provider kubernetes enable

CONTEXT=\$(kubectl config current-context)
hal config provider kubernetes account add my-k8s-v2-account \
    --provider-version v2 \
    --context \$CONTEXT
  • hal config features edit --artifacts true
选择一个存储服务

Spinnaker 需要外部存储提供商来保留你的应用程序设置和已配置的管道。 由于这些数据很敏感,丢失起来的代价很高,因此我们建议你使用自己有信心的托管存储解决方案。Spinnaker 支持下列存储提供商。 你选择的任何选项都不会影响你对 Cloud Provider 的选择。 也就是说,你可以将 Google Cloud Storage 用作存储源,但仍可以部署到 Microsoft Azure。我们选择 minio 作为存储服务。

现在我们已经启用了一个或多个 Cloud Provider,选择了一个 Deployment Environment,并配置了 Persistent Storage,现在可以选择 Spinnaker 的一个版本,进行部署并连接到它了。

  • hal version list
  • hal config version edit --version \$VERSION
  • hal deploy apply

创建 MySQL 数据库

创建数据库

Chaos Monkey 使用 MySQL 数据库作为后端,以记录每日终止计划并强制终止之间的最短时间。(默认情况下,Chaos Monkey 每组每天最多不会终止一个实例)。登录到你的 MySQL 部署并创建一个名为的数据库 chaosmonkey:

mysql> CREATE DATABASE chaosmonkey;

创建数据库架构

创建 chaosmonkey 数据库并使用数据库凭据填充配置文件后,请执行以下操作将表添加到数据库中:

chaosmonkey migrate

编写配置文件(chaosmonkey.toml)

编辑配置文件

Chaos Monkey 将在以下位置查找名为 chaosmonkey.toml 的文件:

  • . (current directory)
  • /apps/chaosmonkey
  • /etc
  • /etc/chaosmonkey

下面为配置环境举例子:

[chaosmonkey]

enabled = true

schedule_enabled = true

leashed = false

accounts = ["production", "test"]

[database]

host = "dbhost.example.com"

name = "chaosmonkey"

user = "chaosmonkey"

encrypted_password = "securepasswordgoeshere"

[spinnaker]

endpoint = "http://spinnaker.example.com:8084"

验证混沌猴子配置正确

Chaos Monkey 支持许多命令行参数,这些命令行参数可用于验证事情是否正常运行。可以通过获取应用程序的 Chaos Monkey 配置来验证 Chaos Monkey 是否达到 Spinnaker。

chaosmonkey config <appname>

可以通过尝试检索当天的终止时间表来验证 Chaos Monkey 是否可以访问数据库。

chaosmonkey fetch-schedule

生成终止时间表

可以手动调用 Chaos Monkey 来生成计划文件。测试时,可能需要指定–no-record-schedule 以免将日程表写入数据库。如果有很多应用程序,而又不想在 Chaos Monkey 生成完整时间表时坐在那里,则可以使用来限制应用程序的数量 --max-apps=<number>。例如:

_chaosmonkey_ _schedule_ --_no_-_record_-_schedule_ --_max_-_apps=10_

设置一个运行 Chaos Monkey 每日时间表的 cron 作业

配置 cron 作业

为其他文档创建 /apps/chaosmonkey/chaosmonkey-schedule.sh,假设你已将 chaosmonkey 二进制文件复制到 /apps/chaosmonkey,并且还将在此处创建下面描述的脚本。 但是,Chaos Monkey 没有对这些文件的位置进行任何明确的假设。

创建一个名为 chaosmonkey-schedule.sh 的文件,该文件调用 chaosmonkey 计划并将输出写入日志文件。请注意,由于这将从 cron 调用,因此 PATH 可能不包含 chaosmonkey 二进制文件的位置,因此请确保明确指定它。

/apps/chaosmonkey/chaosmonkey-schedule.sh:

#!/bin/bash
/apps/chaosmonkey/chaosmonkey schedule >> /var/log/chaosmonkey-schedule.log 2>&1

创建 /etc/cron.d/chaosmonkey-schedule

有了该脚本后,创建一个 cron 作业,每天调用一次。 Chaos Monkey 在 chaosmonkey.time_zone 中的 chaosmonkey.start_hour 开始终止,因此最好在当天早些时候选择时间。

下面的示例在每个工作日的系统时间 12:00(我们假定使用 UTC)生成终止时间表。

/etc/cron.d/chaosmonkey-schedule:

# Run the Chaos Monkey scheduler at 5AM PDT (4AM PST) every weekday
# This corresponds to: 12:00 UTC
# Because system clock runs UTC, time change affects when job runs
# The scheduler must run as root because it needs root permissions to write
# to the file /etc/cron.d/chaosmonkey-daily-terminations
# min hour dom month day user command

0 12 \* \* 1-5 root /apps/chaosmonkey/chaosmonkey-schedule.sh

创建 /apps/chaosmonkey/chaosmonkey-terminate.sh

当 Chaos Monkey 安排终止时,它将创建 cron 作业,该作业调用 chaosmonkey.term_path 指定的路径,该路径默认为 /apps/chaosmonkey/chaosmonkey-terminate.sh

/apps/chaosmonkey/chaosmonkey-terminate.sh:

#!/bin/bash

/apps/chaosmonkey/chaosmonkey terminate "\$@" >> /var/log/chaosmonkey-terminate.log 2>&1
-------------本文结束 感谢您的阅读-------------