混沌工具之ChaosMesh源码编译安装
Posted zuozewei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了混沌工具之ChaosMesh源码编译安装相关的知识,希望对你有一定的参考价值。
ChaosMesh 如果你想自己改点啥,加点功能,那就得从源码开始编译安装。
本篇就带你来看下如何实现编译安装。
环境要求:
- 操作系统:macOS 11.1
- golang 1.15.7
安装依赖:
brew install golang nodejs yarn kind
安装 Docker 和 Docker Registry:
brew install --cask docker
docker run -d -p 5000:5000 --name registry registry:2.7.1
添加环境变量:
echo 'export DOCKER_REGISTRY=localhost:5000' >> ~/.bash_profile
echo 'export PATH=$(go env GOPATH)/bin:${PATH}' >> ~/.bash_profile
source ~/.bash_profile
拉取源码:
git clone https://github.com/chaos-mesh/chaos-mesh.git && cd chaos-mesh
git clone -b v2.0.0-beta.2 https://github.com/chaos-mesh/chaos-mesh.git v2.0.0-b
Kubernetes API 开发框架下载 :
make ensure-all
ensuring kubectl
ROOT=/Users/jinlong/projects/chaos-mesh && source ./hack/lib.sh && hack::ensure_kubectl
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 44.1M 100 44.1M 0 0 1608k 0 0:00:28 0:00:28 --:--:-- 2046k
ensuring helm
ROOT=/Users/jinlong/projects/chaos-mesh && source ./hack/lib.sh && hack::ensure_helm
ensuring kind
ROOT=/Users/jinlong/projects/chaos-mesh && source ./hack/lib.sh && hack::ensure_kind
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 625 100 625 0 0 729 0 --:--:-- --:--:-- --:--:-- 728
100 6630k 100 6630k 0 0 1487k 0 0:00:04 0:00:04 --:--:-- 2279k
ensuring kubebuilder
ROOT=/Users/jinlong/projects/chaos-mesh && source ./hack/lib.sh && hack::ensure_kubebuilder
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 69 100 69 0 0 36 0 0:00:01 0:00:01 --:--:-- 36
100 124 100 124 0 0 49 0 0:00:02 0:00:02 --:--:-- 49
100 645 100 645 0 0 196 0 0:00:03 0:00:03 --:--:-- 1135
100 62.8M 100 62.8M 0 0 607k 0 0:01:45 0:01:45 --:--:-- 531k
ensuring kustomize
ROOT=/Users/jinlong/projects/chaos-mesh && source ./hack/lib.sh && hack::ensure_kustomize
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 644 100 644 0 0 297 0 0:00:02 0:00:02 --:--:-- 297
100 19.4M 100 19.4M 0 0 506k 0 0:00:39 0:00:39 --:--:-- 560k
ensuring kubetest2
ROOT=/Users/jinlong/projects/chaos-mesh && source ./hack/lib.sh && hack::ensure_kubetest2
info: downloading kubetest2 v0.1.0
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 633 100 633 0 0 591 0 0:00:01 0:00:01 --:--:-- 591
100 2682k 100 2682k 0 0 452k 0 0:00:05 0:00:05 --:--:-- 644k
info: downloading kubetest2-kind v0.1.0
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 638 100 638 0 0 699 0 --:--:-- --:--:-- --:--:-- 698
100 2751k 100 2751k 0 0 540k 0 0:00:05 0:00:05 --:--:-- 832k
测试工具链:
make
GO15VENDOREXPERIMENT="1" CGO_ENABLED=0 GOOS="" GOARCH="" go get sigs.k8s.io/controller-tools/cmd/controller-gen@v0.4.1
go: downloading sigs.k8s.io/controller-tools v0.4.1
go: found sigs.k8s.io/controller-tools/cmd/controller-gen in sigs.k8s.io/controller-tools v0.4.1
.........................
go: downloading github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe
b1f488f95040d683c2643a52dfb06d261b49317570f287d3c0fa73546b2ea154
DOCKER_BUILDKIT=1 docker build -t localhost:5000/pingcap/chaos-dashboard:latest --build-arg HTTP_PROXY= --build-arg HTTPS_PROXY= --build-arg UI= --build-arg SWAGGER= --build-arg LDFLAGS="-s -w -X 'github.com/chaos-mesh/chaos-mesh/pkg/version.buildDate=2021-07-02T03:39:50Z' -X 'github.com/chaos-mesh/chaos-mesh/pkg/version.gitCommit=8c584e01bfa384a71bc5cbc9487746a7aaee4103' -X 'github.com/chaos-mesh/chaos-mesh/pkg/version.gitVersion=master-g8c584e01bfa384'" --build-arg CRATES_MIRROR="" images/chaos-dashboard
[+] Building 29.9s (8/8) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 348B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/debian:buster-slim 15.4s
=> CACHED [1/3] FROM docker.io/library/debian:buster-slim@sha256:c6e92d5b7730fdfc2753c4cce68 0.0s
=> [internal] load build context 0.9s
=> => transferring context: 38.98MB 0.8s
=> [2/3] RUN apt-get update && apt-get install tzdata -y && rm -rf /var/lib/apt/lists/* 13.7s
=> [3/3] COPY bin/chaos-dashboard /usr/local/bin/chaos-dashboard 0.3s
=> exporting to image 0.3s
=> => exporting layers 0.3s
=> => writing image sha256:b5a025ae1d84a19524dc13f92cc734af07ff1887e41d93b9fc8c416c8301664f 0.0s
=> => naming to localhost:5000/pingcap/chaos-dashboard:latest 0.0s
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
touch images/chaos-dashboard/.dockerbuilt
- Kind 新建 Kubernetes 集群
修改 hack/kind-cluster-build.sh
添加一个端口映射方便 chaos-dashboard 访问
extraPortMappings:
- containerPort: 30001
hostPort: 808${i}
listenAddress: "0.0.0.0"
protocol: tcp
hack/kind-cluster-build.sh
clusterName: kind
nodeNum: 3
k8sVersion: v1.20.2
volumeNum: 5
registryName: registry
registryPort: 5000
ensuring kind
ensuring kubectl
############# start create cluster:[kind] #############
clean data dir: /Users/jinlong/kind/kind/data
start to create k8s cluster
Creating cluster "kind" ...
✓ Ensuring node image (kindest/node:v1.20.2) 🖼 ^[[B^[[B
✓ Preparing nodes 📦 📦 📦 📦
✓ Writing configuration 📜
✓ Starting control-plane 🕹️
✓ Installing CNI 🔌
✓ Installing StorageClass 💾
✓ Joining worker nodes 🚜
Set kubectl context to "kind-kind"
You can now use your cluster with:
kubectl cluster-info --context kind-kind
Not sure what to do next? 😅 Check out https://kind.sigs.k8s.io/docs/user/quick-start/
connect the local docker registry to the cluster network
storageclass.storage.k8s.io/local-storage created
configmap/local-provisioner-config created
daemonset.apps/local-volume-provisioner created
serviceaccount/local-storage-admin created
clusterrolebinding.rbac.authorization.k8s.io/local-storage-provisioner-pv-binding created
clusterrole.rbac.authorization.k8s.io/local-storage-provisioner-node-clusterrole created
clusterrolebinding.rbac.authorization.k8s.io/local-storage-provisioner-node-binding created
namespace/chaos-testing created
############# success create cluster:[kind] #############
To start using your cluster, run:
export KUBECONFIG=/Users/jinlong/kind/kind/config
检查构建:
# docker ps
构建新镜像
# 只使用 make 不构建 chaos-dashboard
make
# 同时构建 chaos-dashboard
UI=1 make
# make docker-push # 推送到镜像仓库,目前本机操作不用。如果用阿里云镜像服务,可以修改Makefile。
cd ./api/v1alpha1 ;\\
/Users/jinlong/go/bin/controller-gen "crd:trivialVersions=true,preserveUnknownFields=false,crdVersions=v1" rbac:roleName=manager-role paths="./..." output:crd:artifacts:config=../../config/crd/bases ;\\
/Users/jinlong/go/bin/controller-gen "crd:trivialVersions=true,preserveUnknownFields=false,crdVersions=v1" rbac:roleName=manager-role paths="./..." output:crd:artifacts:config=../../helm/chaos-mesh/crds ;
ensuring kustomize
ROOT=/Users/jinlong/projects/chaos-mesh/v2.0.0-beta.2 && source ./hack/lib.sh && hack::ensure_kustomize
/Users/jinlong/projects/chaos-mesh/v2.0.0-beta.2/output/bin/kustomize build config/default > manifests/crd.yaml
rm -rf output/config-v1beta1
cp -r ./config ./output/config-v1beta1
..........................
Done in 354.05s.
hack/embed_ui_assets.sh
+ Preflight check
+ Embed UI assets
go: downloading github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd
go: downloading github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749
writing assets_vfsdata.go
- Assets handler written to pkg/uiserver/embedded_assets_handler.go
GO15VENDOREXPERIMENT="1" CGO_ENABLED=1 GOOS="" GOARCH="" go build -ldflags "-s -w -X 'github.com/chaos-mesh/chaos-mesh/pkg/version.buildDate=2021-07-03T02:25:13Z' -X 'github.com/chaos-mesh/chaos-mesh/pkg/version.gitCommit=20733ac694d0578fe817a878f42246b295bfd56f' -X 'github.com/chaos-mesh/chaos-mesh/pkg/version.gitVersion=chart-2.0.0-beta.2'" -tags " ui_server" -o images/chaos-dashboard/bin/chaos-dashboard ./cmd/chaos-dashboard/main.go
49c9c07e001012fa3626bd4bc2e53b2573fc5ee22465cfb2719f0d02f62b9734
DOCKER_BUILDKIT=1 docker build -t "localhost:5000"/pingcap/chaos-dashboard:latest --build-arg HTTP_PROXY= --build-arg HTTPS_PROXY= --build-arg UI=1 --build-arg SWAGGER= --build-arg LDFLAGS="-s -w -X 'github.com/chaos-mesh/chaos-mesh/pkg/version.buildDate=2021-07-03T02:25:13Z' -X 'github.com/chaos-mesh/chaos-mesh/pkg/version.gitCommit=20733ac694d0578fe817a878f42246b295bfd56f' -X 'github.com/chaos-mesh/chaos-mesh/pkg/version.gitVersion=chart-2.0.0-beta.2'" --build-arg CRATES_MIRROR="" images/chaos-dashboard
[+] Building 31.9s (8/8) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 37B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/debian:buster-slim 15.5s
=> [internal] load build context 5.2s
=> => transferring context: 42.35MB 5.2s
=> CACHED [1/3] FROM docker.io/library/debian:buster-slim@sha256:c6e92d5b7730fdfc2753c4cce68c90d6c86a6a3391955549f9fe8ad6ce619ce0 0.0s
=> [2/3] RUN apt-get update && apt-get install tzdata -y && rm -rf /var/lib/apt/lists/* 15.3s
=> [3/3] COPY bin/chaos-dashboard /usr/local/bin/chaos-dashboard 0.3s
=> exporting to image 0.3s
=> => exporting layers 0.2s
=> => writing image sha256:74561dabbe07fb06dd3ee66450fbd1504672a27336c52e5995bd9ec4eb2b89d0 0.0s
=> => naming to localhost:5000/pingcap/chaos-dashboard:latest 0.0s
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
touch images/chaos-dashboard/.dockerbuilt
如果不构建UI,则访问界面会提示:
加载镜像到 kind
kind load docker-image localhost:5000/pingcap/chaos-mesh:latest
kind load docker-image localhost:5000/pingcap/chaos-daemon:latest
kind load docker-image localhost:5000/pingcap/chaos-dashboard:latest
修改 helm/chaos-mesh/values.yaml
替换 chaos-mesh,chaos-daemon,chaos-dashboard 镜像
修改 chaos-dashboard 端口:
helm 部署
helm install chaos-mesh helm/chaos-mesh --namespace=chaos-testing --set chaosDaemon.runtime=containerd --set chaosDaemon.socketPath=/run/containerd/containerd.sock
检查:
kubectl get pod,svc -n chaos-testing
更新:
helm upgrade chaos-mesh helm/chaos-mesh --namespace=chaos-testing
以上是关于混沌工具之ChaosMesh源码编译安装的主要内容,如果未能解决你的问题,请参考以下文章