混沌工具之ChaosMesh源码编译安装

x33g5p2x  于2021-11-09 转载在 其他  
字(9.6k)|赞(0)|评价(0)|浏览(408)

ChaosMesh 如果你想自己改点啥,加点功能,那就得从源码开始编译安装。
本篇就带你来看下如何实现编译安装。

环境要求:

  • 操作系统:macOS 11.1
  • golang 1.15.7

安装依赖:

  1. brew install golang nodejs yarn kind

安装 Docker 和 Docker Registry:

  1. brew install --cask docker
  2. docker run -d -p 5000:5000 --name registry registry:2.7.1

添加环境变量:

  1. echo 'export DOCKER_REGISTRY=localhost:5000' >> ~/.bash_profile
  2. echo 'export PATH=$(go env GOPATH)/bin:${PATH}' >> ~/.bash_profile
  3. source ~/.bash_profile

拉取源码:

  1. git clone https://github.com/chaos-mesh/chaos-mesh.git && cd chaos-mesh
  2. git clone -b v2.0.0-beta.2 https://github.com/chaos-mesh/chaos-mesh.git v2.0.0-b

Kubernetes API 开发框架下载 :

  1. make ensure-all
  1. ensuring kubectl
  2. ROOT=/Users/jinlong/projects/chaos-mesh && source ./hack/lib.sh && hack::ensure_kubectl
  3. % Total % Received % Xferd Average Speed Time Time Time Current
  4. Dload Upload Total Spent Left Speed
  5. 100 44.1M 100 44.1M 0 0 1608k 0 0:00:28 0:00:28 --:--:-- 2046k
  6. ensuring helm
  7. ROOT=/Users/jinlong/projects/chaos-mesh && source ./hack/lib.sh && hack::ensure_helm
  8. ensuring kind
  9. ROOT=/Users/jinlong/projects/chaos-mesh && source ./hack/lib.sh && hack::ensure_kind
  10. % Total % Received % Xferd Average Speed Time Time Time Current
  11. Dload Upload Total Spent Left Speed
  12. 100 625 100 625 0 0 729 0 --:--:-- --:--:-- --:--:-- 728
  13. 100 6630k 100 6630k 0 0 1487k 0 0:00:04 0:00:04 --:--:-- 2279k
  14. ensuring kubebuilder
  15. ROOT=/Users/jinlong/projects/chaos-mesh && source ./hack/lib.sh && hack::ensure_kubebuilder
  16. % Total % Received % Xferd Average Speed Time Time Time Current
  17. Dload Upload Total Spent Left Speed
  18. 100 69 100 69 0 0 36 0 0:00:01 0:00:01 --:--:-- 36
  19. 100 124 100 124 0 0 49 0 0:00:02 0:00:02 --:--:-- 49
  20. 100 645 100 645 0 0 196 0 0:00:03 0:00:03 --:--:-- 1135
  21. 100 62.8M 100 62.8M 0 0 607k 0 0:01:45 0:01:45 --:--:-- 531k
  22. ensuring kustomize
  23. ROOT=/Users/jinlong/projects/chaos-mesh && source ./hack/lib.sh && hack::ensure_kustomize
  24. % Total % Received % Xferd Average Speed Time Time Time Current
  25. Dload Upload Total Spent Left Speed
  26. 100 644 100 644 0 0 297 0 0:00:02 0:00:02 --:--:-- 297
  27. 100 19.4M 100 19.4M 0 0 506k 0 0:00:39 0:00:39 --:--:-- 560k
  28. ensuring kubetest2
  29. ROOT=/Users/jinlong/projects/chaos-mesh && source ./hack/lib.sh && hack::ensure_kubetest2
  30. info: downloading kubetest2 v0.1.0
  31. % Total % Received % Xferd Average Speed Time Time Time Current
  32. Dload Upload Total Spent Left Speed
  33. 100 633 100 633 0 0 591 0 0:00:01 0:00:01 --:--:-- 591
  34. 100 2682k 100 2682k 0 0 452k 0 0:00:05 0:00:05 --:--:-- 644k
  35. info: downloading kubetest2-kind v0.1.0
  36. % Total % Received % Xferd Average Speed Time Time Time Current
  37. Dload Upload Total Spent Left Speed
  38. 100 638 100 638 0 0 699 0 --:--:-- --:--:-- --:--:-- 698
  39. 100 2751k 100 2751k 0 0 540k 0 0:00:05 0:00:05 --:--:-- 832k

测试工具链:

  1. make
  1. GO15VENDOREXPERIMENT="1" CGO_ENABLED=0 GOOS="" GOARCH="" go get sigs.k8s.io/controller-tools/cmd/controller-gen@v0.4.1
  2. go: downloading sigs.k8s.io/controller-tools v0.4.1
  3. go: found sigs.k8s.io/controller-tools/cmd/controller-gen in sigs.k8s.io/controller-tools v0.4.1
  4. .........................
  5. go: downloading github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe
  6. b1f488f95040d683c2643a52dfb06d261b49317570f287d3c0fa73546b2ea154
  7. 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
  8. [+] Building 29.9s (8/8) FINISHED
  9. => [internal] load build definition from Dockerfile 0.0s
  10. => => transferring dockerfile: 348B 0.0s
  11. => [internal] load .dockerignore 0.0s
  12. => => transferring context: 2B 0.0s
  13. => [internal] load metadata for docker.io/library/debian:buster-slim 15.4s
  14. => CACHED [1/3] FROM docker.io/library/debian:buster-slim@sha256:c6e92d5b7730fdfc2753c4cce68 0.0s
  15. => [internal] load build context 0.9s
  16. => => transferring context: 38.98MB 0.8s
  17. => [2/3] RUN apt-get update && apt-get install tzdata -y && rm -rf /var/lib/apt/lists/* 13.7s
  18. => [3/3] COPY bin/chaos-dashboard /usr/local/bin/chaos-dashboard 0.3s
  19. => exporting to image 0.3s
  20. => => exporting layers 0.3s
  21. => => writing image sha256:b5a025ae1d84a19524dc13f92cc734af07ff1887e41d93b9fc8c416c8301664f 0.0s
  22. => => naming to localhost:5000/pingcap/chaos-dashboard:latest 0.0s
  23. Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
  24. touch images/chaos-dashboard/.dockerbuilt
  • Kind 新建 Kubernetes 集群

修改 hack/kind-cluster-build.sh 添加一个端口映射方便 chaos-dashboard 访问

  1. extraPortMappings:
  2. - containerPort: 30001
  3. hostPort: 808${i}
  4. listenAddress: "0.0.0.0"
  5. protocol: tcp

hack/kind-cluster-build.sh

  1. clusterName: kind
  2. nodeNum: 3
  3. k8sVersion: v1.20.2
  4. volumeNum: 5
  5. registryName: registry
  6. registryPort: 5000
  7. ensuring kind
  8. ensuring kubectl
  9. ############# start create cluster:[kind] #############
  10. clean data dir: /Users/jinlong/kind/kind/data
  11. start to create k8s cluster
  12. Creating cluster "kind" ...
  13. Ensuring node image (kindest/node:v1.20.2) 🖼 ^[[B^[[B
  14. Preparing nodes 📦 📦 📦 📦
  15. Writing configuration 📜
  16. Starting control-plane 🕹️
  17. Installing CNI 🔌
  18. Installing StorageClass 💾
  19. Joining worker nodes 🚜
  20. Set kubectl context to "kind-kind"
  21. You can now use your cluster with:
  22. kubectl cluster-info --context kind-kind
  23. Not sure what to do next? 😅 Check out https://kind.sigs.k8s.io/docs/user/quick-start/
  24. connect the local docker registry to the cluster network
  25. storageclass.storage.k8s.io/local-storage created
  26. configmap/local-provisioner-config created
  27. daemonset.apps/local-volume-provisioner created
  28. serviceaccount/local-storage-admin created
  29. clusterrolebinding.rbac.authorization.k8s.io/local-storage-provisioner-pv-binding created
  30. clusterrole.rbac.authorization.k8s.io/local-storage-provisioner-node-clusterrole created
  31. clusterrolebinding.rbac.authorization.k8s.io/local-storage-provisioner-node-binding created
  32. namespace/chaos-testing created
  33. ############# success create cluster:[kind] #############
  34. To start using your cluster, run:
  35. export KUBECONFIG=/Users/jinlong/kind/kind/config

检查构建:

  1. # docker ps

构建新镜像

  1. # 只使用 make 不构建 chaos-dashboard
  2. make
  3. # 同时构建 chaos-dashboard
  4. UI=1 make
  5. # make docker-push # 推送到镜像仓库,目前本机操作不用。如果用阿里云镜像服务,可以修改Makefile。
  1. cd ./api/v1alpha1 ;\
  2. /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 ;\
  3. /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 ;
  4. ensuring kustomize
  5. ROOT=/Users/jinlong/projects/chaos-mesh/v2.0.0-beta.2 && source ./hack/lib.sh && hack::ensure_kustomize
  6. /Users/jinlong/projects/chaos-mesh/v2.0.0-beta.2/output/bin/kustomize build config/default > manifests/crd.yaml
  7. rm -rf output/config-v1beta1
  8. cp -r ./config ./output/config-v1beta1
  9. ..........................
  10. Done in 354.05s.
  11. hack/embed_ui_assets.sh
  12. + Preflight check
  13. + Embed UI assets
  14. go: downloading github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd
  15. go: downloading github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749
  16. writing assets_vfsdata.go
  17. - Assets handler written to pkg/uiserver/embedded_assets_handler.go
  18. 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
  19. 49c9c07e001012fa3626bd4bc2e53b2573fc5ee22465cfb2719f0d02f62b9734
  20. 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
  21. [+] Building 31.9s (8/8) FINISHED
  22. => [internal] load build definition from Dockerfile 0.0s
  23. => => transferring dockerfile: 37B 0.0s
  24. => [internal] load .dockerignore 0.0s
  25. => => transferring context: 2B 0.0s
  26. => [internal] load metadata for docker.io/library/debian:buster-slim 15.5s
  27. => [internal] load build context 5.2s
  28. => => transferring context: 42.35MB 5.2s
  29. => CACHED [1/3] FROM docker.io/library/debian:buster-slim@sha256:c6e92d5b7730fdfc2753c4cce68c90d6c86a6a3391955549f9fe8ad6ce619ce0 0.0s
  30. => [2/3] RUN apt-get update && apt-get install tzdata -y && rm -rf /var/lib/apt/lists/* 15.3s
  31. => [3/3] COPY bin/chaos-dashboard /usr/local/bin/chaos-dashboard 0.3s
  32. => exporting to image 0.3s
  33. => => exporting layers 0.2s
  34. => => writing image sha256:74561dabbe07fb06dd3ee66450fbd1504672a27336c52e5995bd9ec4eb2b89d0 0.0s
  35. => => naming to localhost:5000/pingcap/chaos-dashboard:latest 0.0s
  36. Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
  37. touch images/chaos-dashboard/.dockerbuilt

如果不构建UI,则访问界面会提示:

加载镜像到 kind

  1. kind load docker-image localhost:5000/pingcap/chaos-mesh:latest
  2. kind load docker-image localhost:5000/pingcap/chaos-daemon:latest
  3. kind load docker-image localhost:5000/pingcap/chaos-dashboard:latest

修改 helm/chaos-mesh/values.yaml
替换 chaos-mesh,chaos-daemon,chaos-dashboard 镜像

修改 chaos-dashboard 端口:

helm 部署

  1. helm install chaos-mesh helm/chaos-mesh --namespace=chaos-testing --set chaosDaemon.runtime=containerd --set chaosDaemon.socketPath=/run/containerd/containerd.sock

检查:

  1. kubectl get pod,svc -n chaos-testing

更新:

  1. helm upgrade chaos-mesh helm/chaos-mesh --namespace=chaos-testing

相关文章