diff --git a/.github/workflows/build_openyurt.yml b/.github/workflows/build_openyurt.yml new file mode 100644 index 000000000..1ccfc6fb9 --- /dev/null +++ b/.github/workflows/build_openyurt.yml @@ -0,0 +1,80 @@ +name: Build and Test OpenYurt Deployer + +on: + push: + branches: [ main, legacy-firecracker-v0.24.0-with-upf-support ] + paths-ignore: + - 'docs/**' + - '**.md' + pull_request: + branches: [ main, legacy-firecracker-v0.24.0-with-upf-support, openyurt ] + paths-ignore: + - 'docs/**' + - '**.md' + workflow_dispatch: + +env: + GOOS: linux + GO111MODULE: on + +jobs: + build_openyurt: + runs-on: ubuntu-latest + + steps: + - name: Set up Go 1.19 + uses: actions/setup-go@v4 + with: + go-version: '1.19' + + - name: Check out the code + uses: actions/checkout@v4 + + - name: modify JSON conf + uses: restackio/update-json-file-action@v2.0 + with: + file: scripts/openyurt-deployer/conf.json + fields: "{\"master\": \"runner@127.0.0.1\", \"workers\": {\"cloud\": [], \"edge\": [] }}" + + - name: Build scripts + run: + pushd scripts/openyurt-deployer && go build -o oy_deploy && popd + + - name: Show scripts help info + run: + ./scripts/openyurt-deployer/oy_deploy help + + - name: Allow root login + run: | + echo "PermitRootLogin=yes" | sudo tee -a /etc/ssh/sshd_config + + - name: Set up SSH and run deploy + run: | + echo $USER + + sudo apt-get update + sudo apt-get install -y openssh-server + sudo service ssh start + eval "$(ssh-agent -s)" + + ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N "" + cat > ~/.ssh/config < ~/.ssh/authorized_keys + + sudo service ssh restart + service ssh status + + ssh-add ~/.ssh/id_rsa + + cat ~/.ssh/authorized_keys + chmod og-rw ~/.ssh + + cd scripts/openyurt-deployer + ./oy_deploy kube + ./oy_deploy knative diff --git a/go.work.sum b/go.work.sum new file mode 100644 index 000000000..17e90435b --- /dev/null +++ b/go.work.sum @@ -0,0 +1,3 @@ +golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww= diff --git a/scripts/go.mod b/scripts/go.mod index 5c258b89b..36eb487d7 100644 --- a/scripts/go.mod +++ b/scripts/go.mod @@ -1,3 +1,13 @@ module github.com/vhive-serverless/vHive/scripts go 1.19 + +require github.com/sfreiberg/simplessh v0.0.0-20220719182921-185eafd40485 + +require ( + github.com/davidmz/go-pageant v1.0.2 // indirect + github.com/kr/fs v0.1.0 // indirect + github.com/pkg/sftp v1.13.4 // indirect + golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect + golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 // indirect +) diff --git a/scripts/go.sum b/scripts/go.sum new file mode 100644 index 000000000..60528275d --- /dev/null +++ b/scripts/go.sum @@ -0,0 +1,26 @@ +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davidmz/go-pageant v1.0.2 h1:bPblRCh5jGU+Uptpz6LgMZGD5hJoOt7otgT454WvHn0= +github.com/davidmz/go-pageant v1.0.2/go.mod h1:P2EDDnMqIwG5Rrp05dTRITj9z2zpGcD9efWSkTNKLIE= +github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/pkg/sftp v1.13.4 h1:Lb0RYJCmgUcBgZosfoi9Y9sbl6+LJgOIgk/2Y4YjMFg= +github.com/pkg/sftp v1.13.4/go.mod h1:LzqnAvaD5TWeNBsZpfKxSYn1MbjWwOsCIAFFJbpIsK8= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/sfreiberg/simplessh v0.0.0-20220719182921-185eafd40485 h1:ZMBZ2DKX1sScUSo9ZUwGI7jCMukslPNQNfZaw9vVyfY= +github.com/sfreiberg/simplessh v0.0.0-20220719182921-185eafd40485/go.mod h1:9qeq2P58+4+LyuncL3waJDG+giOfXgowfrRZZF9XdWk= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= +golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA= +golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 h1:SrN+KX8Art/Sf4HNj6Zcz06G7VEz+7w9tdXTPOZ7+l4= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/scripts/openyurt-deployer/configs/go.mod b/scripts/openyurt-deployer/configs/go.mod index e19ce9147..204901abc 100644 --- a/scripts/openyurt-deployer/configs/go.mod +++ b/scripts/openyurt-deployer/configs/go.mod @@ -1,3 +1,7 @@ module github.com/vhive-serverless/vhive/scripts/openyurt_deployer/configs -go 1.20 \ No newline at end of file +go 1.20 + +require github.com/vhive-serverless/vHive/scripts/utils v0.0.0-20231018022901-6a0c478d2c9f + +require github.com/vhive-serverless/vHive/scripts/configs v0.0.0-20231018022901-6a0c478d2c9f // indirect diff --git a/scripts/openyurt-deployer/configs/go.sum b/scripts/openyurt-deployer/configs/go.sum new file mode 100644 index 000000000..d0b9097d9 --- /dev/null +++ b/scripts/openyurt-deployer/configs/go.sum @@ -0,0 +1,2 @@ +github.com/vhive-serverless/vHive/scripts/configs v0.0.0-20231018022901-6a0c478d2c9f h1:2Cyd5RJaZ0Pdyk7Az338/PKeofj7RLZjD5rSAO+wqvk= +github.com/vhive-serverless/vHive/scripts/utils v0.0.0-20231018022901-6a0c478d2c9f h1:3KArl/h4PpkhAhlpPAMarh9hrj6AWYfnhkoXZCS2AWw= diff --git a/scripts/openyurt-deployer/go.mod b/scripts/openyurt-deployer/go.mod index 88687a0ae..98c98ce02 100644 --- a/scripts/openyurt-deployer/go.mod +++ b/scripts/openyurt-deployer/go.mod @@ -2,14 +2,17 @@ module github.com/vhive-serverless/vhive/scripts/openyurt_deployer go 1.20 +require ( + github.com/sfreiberg/simplessh v0.0.0-20220719182921-185eafd40485 + github.com/sirupsen/logrus v1.9.3 + github.com/vhive-serverless/vHive/scripts/utils v0.0.0-20231018022901-6a0c478d2c9f +) + require ( github.com/davidmz/go-pageant v1.0.2 // indirect github.com/kr/fs v0.1.0 // indirect github.com/pkg/sftp v1.13.4 // indirect - github.com/sfreiberg/simplessh v0.0.0-20220719182921-185eafd40485 // indirect - github.com/sirupsen/logrus v1.9.3 // indirect github.com/vhive-serverless/vHive/scripts/configs v0.0.0-20231018022901-6a0c478d2c9f // indirect - github.com/vhive-serverless/vHive/scripts/utils v0.0.0-20231018022901-6a0c478d2c9f // indirect golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect ) diff --git a/scripts/openyurt-deployer/go.sum b/scripts/openyurt-deployer/go.sum index 9f7752abe..233a3ca7e 100644 --- a/scripts/openyurt-deployer/go.sum +++ b/scripts/openyurt-deployer/go.sum @@ -1,4 +1,5 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davidmz/go-pageant v1.0.2 h1:bPblRCh5jGU+Uptpz6LgMZGD5hJoOt7otgT454WvHn0= github.com/davidmz/go-pageant v1.0.2/go.mod h1:P2EDDnMqIwG5Rrp05dTRITj9z2zpGcD9efWSkTNKLIE= @@ -6,12 +7,14 @@ github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/pkg/sftp v1.13.4 h1:Lb0RYJCmgUcBgZosfoi9Y9sbl6+LJgOIgk/2Y4YjMFg= github.com/pkg/sftp v1.13.4/go.mod h1:LzqnAvaD5TWeNBsZpfKxSYn1MbjWwOsCIAFFJbpIsK8= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/sfreiberg/simplessh v0.0.0-20220719182921-185eafd40485 h1:ZMBZ2DKX1sScUSo9ZUwGI7jCMukslPNQNfZaw9vVyfY= github.com/sfreiberg/simplessh v0.0.0-20220719182921-185eafd40485/go.mod h1:9qeq2P58+4+LyuncL3waJDG+giOfXgowfrRZZF9XdWk= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/vhive-serverless/vHive/scripts/configs v0.0.0-20231018022901-6a0c478d2c9f h1:2Cyd5RJaZ0Pdyk7Az338/PKeofj7RLZjD5rSAO+wqvk= github.com/vhive-serverless/vHive/scripts/configs v0.0.0-20231018022901-6a0c478d2c9f/go.mod h1:nJSon4Eng7PdZ4HJX9dnZ7H4qxVm/r5zseFPfom7Jto= @@ -24,12 +27,12 @@ golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 h1:SrN+KX8Art/Sf4HNj6Zcz06G7VEz+7w9tdXTPOZ7+l4= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/scripts/openyurt-deployer/go.work b/scripts/openyurt-deployer/go.work index 8c0d69e84..1fdcb2bae 100644 --- a/scripts/openyurt-deployer/go.work +++ b/scripts/openyurt-deployer/go.work @@ -1,8 +1,9 @@ -go 1.19 +go 1.20 -use( -. -./configs -./node -./template -) \ No newline at end of file +use ( + . + ./configs + ./helper + ./node + ./template +) diff --git a/scripts/openyurt-deployer/helper/go.mod b/scripts/openyurt-deployer/helper/go.mod new file mode 100644 index 000000000..6aaea94e2 --- /dev/null +++ b/scripts/openyurt-deployer/helper/go.mod @@ -0,0 +1,7 @@ +module github.com/vhive-serverless/vhive/scripts/openyurt_deployer/helper + +go 1.20 + +require github.com/vhive-serverless/vHive/scripts/utils v0.0.0-20231018022901-6a0c478d2c9f + +require github.com/vhive-serverless/vHive/scripts/configs v0.0.0-20231018022901-6a0c478d2c9f // indirect diff --git a/scripts/openyurt-deployer/helper/go.sum b/scripts/openyurt-deployer/helper/go.sum new file mode 100644 index 000000000..d0b9097d9 --- /dev/null +++ b/scripts/openyurt-deployer/helper/go.sum @@ -0,0 +1,2 @@ +github.com/vhive-serverless/vHive/scripts/configs v0.0.0-20231018022901-6a0c478d2c9f h1:2Cyd5RJaZ0Pdyk7Az338/PKeofj7RLZjD5rSAO+wqvk= +github.com/vhive-serverless/vHive/scripts/utils v0.0.0-20231018022901-6a0c478d2c9f h1:3KArl/h4PpkhAhlpPAMarh9hrj6AWYfnhkoXZCS2AWw= diff --git a/scripts/openyurt-deployer/utils.go b/scripts/openyurt-deployer/helper/helper.go similarity index 77% rename from scripts/openyurt-deployer/utils.go rename to scripts/openyurt-deployer/helper/helper.go index 986a43b3e..854873000 100644 --- a/scripts/openyurt-deployer/utils.go +++ b/scripts/openyurt-deployer/helper/helper.go @@ -1,23 +1,20 @@ -package main +package helper import ( "fmt" + "os" "strings" "github.com/sfreiberg/simplessh" "github.com/vhive-serverless/vHive/scripts/utils" ) -func SetupSSHConn(nodeName string) *simplessh.Client { - utils.InfoPrintf("Connecting to %s\n", nodeName) - splits := strings.Split(nodeName, "@") - username := splits[0] - host := splits[1] - client, err := simplessh.ConnectWithAgent(host, username) +func CheckErrorExit(err error, format string, pars ...any) { if err != nil { - utils.FatalPrintf("Failed to connect to: %s:%s\n", nodeName, err) + utils.ErrorPrintf("%v\n", err) + utils.FatalPrintf(format, pars...) + os.Exit(1) } - return client } type ShellError struct { @@ -28,3 +25,15 @@ type ShellError struct { func (err *ShellError) Error() string { return fmt.Sprintf("[exit %d] -> %s", err.exitCode, err.msg) } + +func SetupSSHConn(nodeName string) *simplessh.Client { + utils.InfoPrintf("Connecting to %s\n", nodeName) + splits := strings.Split(nodeName, "@") + username := splits[0] + host := splits[1] + client, err := simplessh.ConnectWithAgent(host, username) + if err != nil { + utils.FatalPrintf("Failed to connect to: %s:%s\n", nodeName, err) + } + return client +} diff --git a/scripts/openyurt-deployer/main.go b/scripts/openyurt-deployer/main.go index 61347a7d2..fc75ebf59 100644 --- a/scripts/openyurt-deployer/main.go +++ b/scripts/openyurt-deployer/main.go @@ -10,6 +10,7 @@ import ( log "github.com/sirupsen/logrus" "github.com/vhive-serverless/vhive/scripts/openyurt_deployer/configs" + helper "github.com/vhive-serverless/vhive/scripts/openyurt_deployer/helper" "github.com/vhive-serverless/vhive/scripts/openyurt_deployer/node" ) @@ -59,8 +60,10 @@ func main() { } operation := os.Args[1] switch operation { - case "deploy": + case "kube": deployNodes(*deployerConf) + case "knative": + deployKnative(*deployerConf) // case "clean": // cleanNodes(*deployerConf) // case "demo-e": @@ -73,6 +76,8 @@ func main() { // printDemo(*deployerConf) case "deploy-yurt": deployOpenYurt(*deployerConf) + case "help": + utils.InfoPrintf("Usage: %s [Parameters...]\n", os.Args[0]) default: utils.InfoPrintf("Usage: %s [Parameters...]\n", os.Args[0]) os.Exit(-1) @@ -107,7 +112,7 @@ func parseNodeInfo(nodesInfo NodesInfo) []node.Node { configs.Knative.LoadConfig() configs.Kube.LoadConfig() - masterNode := node.Node{Name: masterName, Client: SetupSSHConn(masterName), NodeRole: "master", Configs: &node.NodeConfig{ + masterNode := node.Node{Name: masterName, Client: helper.SetupSSHConn(masterName), NodeRole: "master", Configs: &node.NodeConfig{ System: configs.System, Kube: configs.Kube, Knative: configs.Knative, @@ -115,7 +120,7 @@ func parseNodeInfo(nodesInfo NodesInfo) []node.Node { Demo: configs.Demo}} nodeList = append(nodeList, masterNode) for _, name := range cloudNames { - nodeList = append(nodeList, node.Node{Name: name, Client: SetupSSHConn(name), NodeRole: "cloud", Configs: &node.NodeConfig{ + nodeList = append(nodeList, node.Node{Name: name, Client: helper.SetupSSHConn(name), NodeRole: "cloud", Configs: &node.NodeConfig{ System: configs.System, Kube: configs.Kube, Knative: configs.Knative, @@ -124,7 +129,7 @@ func parseNodeInfo(nodesInfo NodesInfo) []node.Node { } for _, name := range edgeNames { - nodeList = append(nodeList, node.Node{Name: name, Client: SetupSSHConn(name), NodeRole: "edge", Configs: &node.NodeConfig{ + nodeList = append(nodeList, node.Node{Name: name, Client: helper.SetupSSHConn(name), NodeRole: "edge", Configs: &node.NodeConfig{ System: configs.System, Kube: configs.Kube, Knative: configs.Knative, @@ -154,7 +159,7 @@ func initializeNodes(nodesInfo NodesInfo) []node.Node { func deployNodes(deployerConfFile string) { nodesInfo, err := readAndUnMarshall(deployerConfFile) - utils.CheckErrorWithMsg(err, "Failed to read and unmarshal deployer configuration JSON") + helper.CheckErrorExit(err, "Failed to read and unmarshal deployer configuration JSON") nodeList := initializeNodes(nodesInfo) masterNode := nodeList[0] workerNodes := nodeList[1:] @@ -174,21 +179,26 @@ func deployNodes(deployerConfFile string) { utils.InfoPrintf(name) } utils.InfoPrintf("]\n") +} + +func deployKnative(deployerConfFile string) { + + nodesInfo, err := readAndUnMarshall(deployerConfFile) + helper.CheckErrorExit(err, "Failed to read and unmarshal deployer configuration JSON") + nodeList := parseNodeInfo(nodesInfo) + masterNode := nodeList[0] // init knative utils.SuccessPrintf("Start to init knative\n") masterNode.InstallKnativeServing() masterNode.InstallKnativeEventing() utils.SuccessPrintf("Knative has been installed!\n") - - // init demo environment - masterNode.BuildDemo(workerNodes) } func deployOpenYurt(deployerConfFile string) { nodesInfo, err := readAndUnMarshall(deployerConfFile) - utils.CheckErrorWithMsg(err, "Failed to read and unmarshal deployer configuration JSON") + helper.CheckErrorExit(err, "Failed to read and unmarshal deployer configuration JSON") nodeList := initializeNodes(nodesInfo) masterNode := nodeList[0] workerNodes := nodeList[1:] @@ -199,7 +209,7 @@ func deployOpenYurt(deployerConfFile string) { utils.WaitPrintf("Extracting master node information from logs") output, err := masterNode.ExecShellCmd("sed -n '1p;2p;3p;4p' %s/masterNodeValues", masterNode.Configs.System.TmpDir) - utils.CheckErrorWithMsg(err, "Failed to extract master node information from logs!\n") + helper.CheckErrorExit(err, "Failed to extract master node information from logs!\n") // Process the content and assign it to variables lines := strings.Split(strings.TrimSpace(output), "\n") diff --git a/scripts/openyurt-deployer/node/go.mod b/scripts/openyurt-deployer/node/go.mod index 0102c784d..547132563 100644 --- a/scripts/openyurt-deployer/node/go.mod +++ b/scripts/openyurt-deployer/node/go.mod @@ -1,3 +1,18 @@ module github.com/vhive-serverless/vhive/scripts/openyurt_deployer/node go 1.20 + +require ( + github.com/sfreiberg/simplessh v0.0.0-20220719182921-185eafd40485 + github.com/vhive-serverless/vHive/scripts/utils v0.0.0-20231018022901-6a0c478d2c9f +) + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/davidmz/go-pageant v1.0.2 // indirect + github.com/kr/fs v0.1.0 // indirect + github.com/pkg/sftp v1.13.4 // indirect + github.com/vhive-serverless/vHive/scripts/configs v0.0.0-20231018022901-6a0c478d2c9f // indirect + golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect + golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect +) diff --git a/scripts/openyurt-deployer/node/go.sum b/scripts/openyurt-deployer/node/go.sum new file mode 100644 index 000000000..f0d51e920 --- /dev/null +++ b/scripts/openyurt-deployer/node/go.sum @@ -0,0 +1,13 @@ +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davidmz/go-pageant v1.0.2 h1:bPblRCh5jGU+Uptpz6LgMZGD5hJoOt7otgT454WvHn0= +github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= +github.com/pkg/sftp v1.13.4 h1:Lb0RYJCmgUcBgZosfoi9Y9sbl6+LJgOIgk/2Y4YjMFg= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/sfreiberg/simplessh v0.0.0-20220719182921-185eafd40485 h1:ZMBZ2DKX1sScUSo9ZUwGI7jCMukslPNQNfZaw9vVyfY= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/vhive-serverless/vHive/scripts/configs v0.0.0-20231018022901-6a0c478d2c9f h1:2Cyd5RJaZ0Pdyk7Az338/PKeofj7RLZjD5rSAO+wqvk= +github.com/vhive-serverless/vHive/scripts/utils v0.0.0-20231018022901-6a0c478d2c9f h1:3KArl/h4PpkhAhlpPAMarh9hrj6AWYfnhkoXZCS2AWw= +golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= diff --git a/scripts/openyurt-deployer/node/knative.go b/scripts/openyurt-deployer/node/knative.go index ccbfaa38a..70079d2ba 100644 --- a/scripts/openyurt-deployer/node/knative.go +++ b/scripts/openyurt-deployer/node/knative.go @@ -4,6 +4,7 @@ import ( "fmt" "github.com/vhive-serverless/vHive/scripts/utils" + helper "github.com/vhive-serverless/vhive/scripts/openyurt_deployer/helper" ) // Install Knative Serving @@ -16,14 +17,14 @@ func (node *Node) InstallKnativeServing() { // Install and configure MetalLB utils.WaitPrintf("Installing and configuring MetalLB") _, err = node.ExecShellCmd(`kubectl get configmap kube-proxy -n kube-system -o yaml | sed -e "s/strictARP: false/strictARP: true/" | kubectl apply -f - -n kube-system`) - utils.CheckErrorWithMsg(err, "Failed to install and configure MetalLB!") + helper.CheckErrorExit(err, "Failed to apply config map MetalLB!") _, err = node.ExecShellCmd("kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v%s/config/manifests/metallb-native.yaml", node.Configs.Knative.MetalLBVersion) - utils.CheckErrorWithMsg(err, "Failed to install and configure MetalLB!") - _, err = node.ExecShellCmd("kubectl -n metallb-system wait deploy controller --timeout=90s --for=condition=Available") - utils.CheckErrorWithMsg(err, "Failed to install and configure MetalLB!") + helper.CheckErrorExit(err, "Failed to install and configure MetalLB!") + _, err = node.ExecShellCmd("kubectl -n metallb-system wait deploy controller --timeout=900s --for=condition=Available") + helper.CheckErrorExit(err, "Failed to wait for deployment MetalLB!") for _, value := range node.Configs.Knative.MetalLBConfigURLArray { _, err = node.ExecShellCmd("kubectl apply -f %s", value) - utils.CheckErrorWithMsg(err, "Failed to install and configure MetalLB!") + helper.CheckErrorExit(err, "Failed to install and configure MetalLB array list!") } utils.SuccessPrintf("\n") @@ -31,52 +32,52 @@ func (node *Node) InstallKnativeServing() { // Download istio utils.WaitPrintf("Downloading istio") istioFilePath, err := node.DownloadToTmpDir(node.GetIstioDownloadUrl()) - utils.CheckErrorWithTagAndMsg(err, "Failed to download istio!") + helper.CheckErrorExit(err, "Failed to download istio!") // Extract istio utils.WaitPrintf("Extracting istio") err = node.ExtractToDir(istioFilePath, "/usr/local", true) - utils.CheckErrorWithTagAndMsg(err, "Failed to extract istio!") + helper.CheckErrorExit(err, "Failed to extract istio!") // Update PATH err = node.AppendDirToPath("/usr/local/istio-%s/bin", node.Configs.Knative.IstioVersion) - utils.CheckErrorWithMsg(err, "Failed to update PATH!") + helper.CheckErrorExit(err, "Failed to update PATH!") // Deploy istio operator utils.WaitPrintf("Deploying istio operator") operatorConfigPath, err := node.DownloadToTmpDir(node.Configs.Knative.IstioOperatorConfigUrl) - utils.CheckErrorWithMsg(err, "Failed to deploy istio operator!") + helper.CheckErrorExit(err, "Failed to deploy istio operator!") _, err = node.ExecShellCmd("/usr/local/istio-%s/bin/istioctl install -y -f %s", node.Configs.Knative.IstioVersion, operatorConfigPath) - utils.CheckErrorWithTagAndMsg(err, "Failed to deploy istio operator!") + helper.CheckErrorExit(err, "Failed to deploy istio operator!") // Install Knative Serving component utils.WaitPrintf("Installing Knative Serving component") _, err = node.ExecShellCmd("kubectl apply -f https://github.com/knative/serving/releases/download/knative-v%s/serving-crds.yaml", node.Configs.Knative.KnativeVersion) - utils.CheckErrorWithMsg(err, "Failed to install Knative Serving component!") + helper.CheckErrorExit(err, "Failed to install Knative Serving component!") _, err = node.ExecShellCmd("kubectl apply -f https://github.com/knative/serving/releases/download/knative-v%s/serving-core.yaml", node.Configs.Knative.KnativeVersion) - utils.CheckErrorWithTagAndMsg(err, "Failed to install Knative Serving component!") + helper.CheckErrorExit(err, "Failed to install Knative Serving component!") // Install local cluster registry utils.WaitPrintf("Installing local cluster registry") _, err = node.ExecShellCmd("kubectl create namespace registry") - utils.CheckErrorWithMsg(err, "Failed to install local cluster registry!") + helper.CheckErrorExit(err, "Failed to install local cluster registry!") configFilePath, err := node.DownloadToTmpDir("%s", node.Configs.Knative.LocalRegistryVolumeConfigUrl) - utils.CheckErrorWithMsg(err, "Failed to install local cluster registry!") + helper.CheckErrorExit(err, "Failed to install local cluster registry!") _, err = node.ExecShellCmd("REPO_VOL_SIZE=%s envsubst < %s | kubectl create --filename -", node.Configs.Knative.LocalRegistryRepoVolumeSize, configFilePath) - utils.CheckErrorWithMsg(err, "Failed to install local cluster registry!") + helper.CheckErrorExit(err, "Failed to install local cluster registry!") _, err = node.ExecShellCmd("kubectl create -f %s && kubectl apply -f %s", node.Configs.Knative.LocalRegistryDockerRegistryConfigUrl, node.Configs.Knative.LocalRegistryHostUpdateConfigUrl) - utils.CheckErrorWithTagAndMsg(err, "Failed to install local cluster registry!") + helper.CheckErrorExit(err, "Failed to install local cluster registry!") // Configure Magic DNS utils.WaitPrintf("Configuring Magic DNS") _, err = node.ExecShellCmd("kubectl apply -f %s", node.Configs.Knative.MagicDNSConfigUrl) - utils.CheckErrorWithTagAndMsg(err, "Failed to configure Magic DNS!") + helper.CheckErrorExit(err, "Failed to configure Magic DNS!") // Install networking layer utils.WaitPrintf("Installing networking layer") _, err = node.ExecShellCmd("kubectl apply -f https://github.com/knative/net-istio/releases/download/knative-v%s/net-istio.yaml", node.Configs.Knative.KnativeVersion) - utils.CheckErrorWithTagAndMsg(err, "Failed to install networking layer!") + helper.CheckErrorExit(err, "Failed to install networking layer!") // Logs for verification _, err = node.ExecShellCmd("kubectl get pods -n knative-serving") - utils.CheckErrorWithMsg(err, "Verification Failed!") + helper.CheckErrorExit(err, "Verification Failed!") // // Configure DNS // logs.WaitPrintf("Configuring DNS") @@ -89,7 +90,7 @@ func (node *Node) InstallKnativeServing() { --type merge \ -p '{"data":{"kubernetes.podspec-nodeselector":"enabled"}}' `) - utils.CheckErrorWithTagAndMsg(err, "Failed to enable node selector in knative serving") + helper.CheckErrorExit(err, "Failed to enable node selector in knative serving") // node.enableNodeSelect() } @@ -98,27 +99,27 @@ func (node *Node) InstallKnativeEventing() { // Install Knative Eventing component utils.WaitPrintf("Installing Knative Eventing component") _, err := node.ExecShellCmd("kubectl apply -f https://github.com/knative/eventing/releases/download/knative-v%s/eventing-crds.yaml", node.Configs.Knative.KnativeVersion) - utils.CheckErrorWithMsg(err, "Failed to install Knative Eventing component!") + helper.CheckErrorExit(err, "Failed to install Knative Eventing component!") _, err = node.ExecShellCmd("kubectl apply -f https://github.com/knative/eventing/releases/download/knative-v%s/eventing-core.yaml", node.Configs.Knative.KnativeVersion) - utils.CheckErrorWithTagAndMsg(err, "Failed to install Knative Eventing component!") + helper.CheckErrorExit(err, "Failed to install Knative Eventing component!") // Logs for verification _, err = node.ExecShellCmd("kubectl get pods -n knative-eventing") - utils.CheckErrorWithMsg(err, "Verification Failed!") + helper.CheckErrorExit(err, "Verification Failed!") // Install a default Channel (messaging) layer utils.WaitPrintf("Installing a default Channel (messaging) layer") _, err = node.ExecShellCmd("kubectl apply -f https://github.com/knative/eventing/releases/download/knative-v%s/in-memory-channel.yaml", node.Configs.Knative.KnativeVersion) - utils.CheckErrorWithTagAndMsg(err, "Failed to install a default Channel (messaging) layer!") + helper.CheckErrorExit(err, "Failed to install a default Channel (messaging) layer!") // Install a Broker layer utils.WaitPrintf("Installing a Broker layer") _, err = node.ExecShellCmd("kubectl apply -f https://github.com/knative/eventing/releases/download/knative-v%s/mt-channel-broker.yaml", node.Configs.Knative.KnativeVersion) - utils.CheckErrorWithTagAndMsg(err, "Failed to install a Broker layer!") + helper.CheckErrorExit(err, "Failed to install a Broker layer!") // Logs for verification _, err = node.ExecShellCmd("kubectl --namespace istio-system get service istio-ingressgateway") - utils.CheckErrorWithMsg(err, "Verification Failed!") + helper.CheckErrorExit(err, "Verification Failed!") } // get istio download URL diff --git a/scripts/openyurt-deployer/node/kube.go b/scripts/openyurt-deployer/node/kube.go index 5c468802d..40b6d54f4 100644 --- a/scripts/openyurt-deployer/node/kube.go +++ b/scripts/openyurt-deployer/node/kube.go @@ -5,6 +5,7 @@ import ( "strings" "github.com/vhive-serverless/vHive/scripts/utils" + helper "github.com/vhive-serverless/vhive/scripts/openyurt_deployer/helper" ) // Initialize the master node of Kubernetes cluster @@ -22,7 +23,7 @@ func (node *Node) KubeMasterInit() (string, string, string, string) { shellCmd = fmt.Sprintf(shellCmd+"--image-repository %s ", node.Configs.Kube.AlternativeImageRepo) } _, err = node.ExecShellCmd(shellCmd) - utils.CheckErrorWithTagAndMsg(err, "Failed to pre-pull required images!\n") + helper.CheckErrorExit(err, "Failed to pre-pull required images!\n") // Deploy Kubernetes utils.WaitPrintf("Deploying Kubernetes(version %s)", node.Configs.Kube.K8sVersion) @@ -35,7 +36,7 @@ func (node *Node) KubeMasterInit() (string, string, string, string) { } shellCmd = fmt.Sprintf(shellCmd+"| tee %s/masterNodeInfo", node.Configs.System.TmpDir) _, err = node.ExecShellCmd(shellCmd) - utils.CheckErrorWithTagAndMsg(err, "Failed to deploy Kubernetes(version %s)!\n", node.Configs.Kube.K8sVersion) + helper.CheckErrorExit(err, "Failed to deploy Kubernetes(version %s)!\n", node.Configs.Kube.K8sVersion) // Make kubectl work for non-root user utils.WaitPrintf("Making kubectl work for non-root user") @@ -43,30 +44,30 @@ func (node *Node) KubeMasterInit() (string, string, string, string) { node.Configs.System.UserHomeDir, node.Configs.System.UserHomeDir, node.Configs.System.UserHomeDir) - utils.CheckErrorWithTagAndMsg(err, "Failed to make kubectl work for non-root user!\n") + helper.CheckErrorExit(err, "Failed to make kubectl work for non-root user!\n") // Install Calico network add-on utils.WaitPrintf("Installing pod network") _, err = node.ExecShellCmd("kubectl apply -f %s", node.Configs.Kube.PodNetworkAddonConfigURL) - utils.CheckErrorWithTagAndMsg(err, "Failed to install pod network!\n") + helper.CheckErrorExit(err, "Failed to install pod network!\n") // Extract master node information from logs utils.WaitPrintf("Extracting master node information from logs") shellOut, err := node.ExecShellCmd("sed -n '/.*kubeadm join.*/p' < %s/masterNodeInfo | sed -n 's/.*join \\(.*\\):\\(\\S*\\) --token \\(\\S*\\).*/\\1 \\2 \\3/p'", node.Configs.System.TmpDir) utils.InfoPrintf("shellOut 2: %s\n", shellOut) //DEBUG - utils.CheckErrorWithMsg(err, "Failed to extract master node information from logs!\n") + helper.CheckErrorExit(err, "Failed to extract master node information from logs!\n") splittedOut := strings.Split(shellOut, " ") utils.InfoPrintf("spiltOut 3: %s\n", splittedOut) //DEBUG node.Configs.Kube.ApiserverAdvertiseAddress = splittedOut[0] node.Configs.Kube.ApiserverPort = splittedOut[1] node.Configs.Kube.ApiserverToken = splittedOut[2] shellOut, err = node.ExecShellCmd("sed -n '/.*sha256:.*/p' < %s/masterNodeInfo | sed -n 's/.*\\(sha256:\\S*\\).*/\\1/p'", node.Configs.System.TmpDir) - utils.CheckErrorWithTagAndMsg(err, "Failed to extract master node information from logs!\n") + helper.CheckErrorExit(err, "Failed to extract master node information from logs!\n") node.Configs.Kube.ApiserverTokenHash = shellOut shellData := fmt.Sprintf("echo '%s\n%s\n%s\n%s' > %s/masterNodeValues", node.Configs.Kube.ApiserverAdvertiseAddress, node.Configs.Kube.ApiserverPort, node.Configs.Kube.ApiserverToken, node.Configs.Kube.ApiserverTokenHash, node.Configs.System.TmpDir) _, err = node.ExecShellCmd(shellData) - utils.CheckErrorWithTagAndMsg(err, "Failed to write master node information to file!\n") + helper.CheckErrorExit(err, "Failed to write master node information to file!\n") return node.Configs.Kube.ApiserverAdvertiseAddress, node.Configs.Kube.ApiserverPort, @@ -92,7 +93,7 @@ func (node *Node) KubeClean() { utils.WaitPrintf("Reseting kube cluster") _, err = node.ExecShellCmd("sudo kubeadm reset -f && rm -rf /etc/cni/net.d") } - utils.CheckErrorWithTagAndMsg(err, "Failed to clean kube cluster!\n") + helper.CheckErrorExit(err, "Failed to clean kube cluster!\n") } @@ -105,7 +106,7 @@ func (node *Node) KubeWorkerJoin(apiServerAddr string, apiServerPort string, api // Join Kubernetes cluster utils.WaitPrintf("Joining Kubernetes cluster") _, err = node.ExecShellCmd("sudo kubeadm join %s:%s --token %s --discovery-token-ca-cert-hash %s", apiServerAddr, apiServerPort, apiServerToken, apiServerTokenHash) - utils.CheckErrorWithTagAndMsg(err, "Failed to join Kubernetes cluster!\n") + helper.CheckErrorExit(err, "Failed to join Kubernetes cluster!\n") } func (node *Node) check_kube_environment() { @@ -119,7 +120,7 @@ func (node *Node) GetAllNodes() []string { return []string{} } out, err := node.ExecShellCmd("kubectl get nodes | awk 'NR>1 {print $1}'") - utils.CheckErrorWithMsg(err, "Failed to get nodes from cluster!\n") + helper.CheckErrorExit(err, "Failed to get nodes from cluster!\n") nodeNames := strings.Split(out, "\n") return nodeNames } diff --git a/scripts/openyurt-deployer/node/system.go b/scripts/openyurt-deployer/node/system.go index 493df1054..b0a4327f0 100644 --- a/scripts/openyurt-deployer/node/system.go +++ b/scripts/openyurt-deployer/node/system.go @@ -6,6 +6,7 @@ import ( "strings" "github.com/vhive-serverless/vHive/scripts/utils" + helper "github.com/vhive-serverless/vhive/scripts/openyurt_deployer/helper" ) type ShellError struct { @@ -21,7 +22,7 @@ func (err *ShellError) Error() string { func (node *Node) DetectArch() { utils.WaitPrintf("Detetcting current arch") out, err := node.ExecShellCmd("dpkg --print-architecture") - utils.CheckErrorWithMsg(err, "Failed to get current arch!\n") + helper.CheckErrorExit(err, "Failed to get current arch!\n") node.Configs.System.CurrentArch = out switch node.Configs.System.CurrentArch { default: @@ -38,7 +39,7 @@ func (node *Node) DetectOS() { var err error node.Configs.System.CurrentOS, err = node.ExecShellCmd("sed -n 's/^NAME=\"\\(.*\\)\"/\\1/p' < /etc/os-release | head -1 | tr '[:upper:]' '[:lower:]'") utils.InfoPrintf("Detected OS: %s\n", node.Configs.System.CurrentOS) - utils.CheckErrorWithMsg(err, "Failed to get Linux distribution info!\n") + helper.CheckErrorExit(err, "Failed to get Linux distribution info!\n") switch node.Configs.System.CurrentOS { case "ubuntu": default: @@ -52,21 +53,21 @@ func (node *Node) DetectOS() { func (node *Node) GetCurrentDir() { var err error node.Configs.System.CurrentDir, err = node.ExecShellCmd("pwd") - utils.CheckErrorWithMsg(err, "Failed to get get current directory!\n") + helper.CheckErrorExit(err, "Failed to get get current directory!\n") } // Get current home directory func (node *Node) GetUserHomeDir() { var err error node.Configs.System.UserHomeDir, err = node.ExecShellCmd("echo $HOME") - utils.CheckErrorWithMsg(err, "Failed to get current home directory!\n") + helper.CheckErrorExit(err, "Failed to get current home directory!\n") } // Get current node's hostname func (node *Node) GetNodeHostName() { var err error node.Configs.System.NodeHostName, err = node.ExecShellCmd("echo $HOSTNAME") - utils.CheckErrorWithMsg(err, "Failed to get current node hostname!\n") + helper.CheckErrorExit(err, "Failed to get current node hostname!\n") } // Create temporary directory @@ -76,14 +77,14 @@ func (node *Node) CreateTmpDir() { tmpDir := "~/yurt_tmp" _, err = node.ExecShellCmd("mkdir -p %s", tmpDir) node.Configs.System.TmpDir = tmpDir - utils.CheckErrorWithTagAndMsg(err, "Failed to create temporary directory!\n") + helper.CheckErrorExit(err, "Failed to create temporary directory!\n") } // Clean up temporary directory func (node *Node) CleanUpTmpDir() { utils.InfoPrintf("Cleaning up temporary directory") _, err := node.ExecShellCmd("rm -rf %s/*", node.Configs.System.TmpDir) - utils.CheckErrorWithTagAndMsg(err, "Failed to create temporary directory!\n") + helper.CheckErrorExit(err, "Failed to create temporary directory!\n") } // Extract arhive file to specific directory(currently support .tar.gz file only) @@ -235,46 +236,46 @@ func (node *Node) SystemInit() { // node.ReadSystemInfo() // technically, this is not necessary node.CreateTmpDir() - defer node.CleanUpTmpDir() + // defer node.CleanUpTmpDir() // Turn off unattended-upgrades on ubuntu utils.InfoPrintf("Turning off automatic upgrade") _, err = node.TurnOffAutomaticUpgrade() - utils.CheckErrorWithTagAndMsg(err, "Failed to turn off automatic upgrade!\n") + helper.CheckErrorExit(err, "Failed to turn off automatic upgrade!\n") // Disable swap utils.InfoPrintf("Disabling swap") _, err = node.ExecShellCmd("sudo swapoff -a && sudo cp /etc/fstab /etc/fstab.old") // Turn off Swap && Backup fstab file - utils.CheckErrorWithTagAndMsg(err, "Failed to disable swap!\n") + helper.CheckErrorExit(err, "Failed to disable swap!\n") utils.InfoPrintf("Modifying fstab") // Modify fstab to disable swap permanently _, err = node.ExecShellCmd("sudo sed -i 's/#\\s*\\(.*swap.*\\)/\\1/g' /etc/fstab && sudo sed -i 's/.*swap.*/# &/g' /etc/fstab") - utils.CheckErrorWithTagAndMsg(err, "Failed to dodify fstab!\n") + helper.CheckErrorExit(err, "Failed to dodify fstab!\n") // Install dependencies utils.InfoPrintf("Installing dependencies") err = node.InstallPackages(node.Configs.System.Dependencies) - utils.CheckErrorWithTagAndMsg(err, "Failed to install dependencies!\n") + helper.CheckErrorExit(err, "Failed to install dependencies!\n") // Install Golang if !node.Configs.System.GoInstalled { // Download & Extract Golang utils.InfoPrintf("Downloading Golang(ver %s)", node.Configs.System.GoVersion) filePathName, err := node.DownloadToTmpDir(node.Configs.System.GoDownloadUrlTemplate, node.Configs.System.GoVersion, node.Configs.System.CurrentArch) - utils.CheckErrorWithTagAndMsg(err, "Failed to download Golang(ver %s)!\n", node.Configs.System.GoVersion) + helper.CheckErrorExit(err, "Failed to download Golang(ver %s)!\n", node.Configs.System.GoVersion) utils.InfoPrintf("Extracting Golang") _, err = node.ExecShellCmd("sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf %s", filePathName) - utils.CheckErrorWithTagAndMsg(err, "Failed to extract Golang!\n") + helper.CheckErrorExit(err, "Failed to extract Golang!\n") // For bash _, err = node.ExecShellCmd("echo 'export PATH=$PATH:/usr/local/go/bin' >> %s/.bashrc", node.Configs.System.UserHomeDir) - utils.CheckErrorWithMsg(err, "Failed to update PATH!\n") + helper.CheckErrorExit(err, "Failed to update PATH!\n") // For zsh _, err = node.LookPath("zsh") if err != nil { _, err = node.ExecShellCmd("echo 'export PATH=$PATH:/usr/local/go/bin' >> %s/.zshrc", node.Configs.System.UserHomeDir) - utils.CheckErrorWithMsg(err, "Failed to update PATH!\n") + helper.CheckErrorExit(err, "Failed to update PATH!\n") } } @@ -287,18 +288,18 @@ func (node *Node) SystemInit() { node.Configs.System.ContainerdVersion, node.Configs.System.ContainerdVersion, node.Configs.System.CurrentArch) - utils.CheckErrorWithTagAndMsg(err, "Failed to Download containerd(ver %s)\n", node.Configs.System.ContainerdVersion) + helper.CheckErrorExit(err, "Failed to Download containerd(ver %s)\n", node.Configs.System.ContainerdVersion) // Extract containerd utils.InfoPrintf("Extracting containerd") _, err = node.ExecShellCmd("sudo tar Cxzvf /usr/local %s", filePathName) - utils.CheckErrorWithTagAndMsg(err, "Failed to extract containerd!\n") + helper.CheckErrorExit(err, "Failed to extract containerd!\n") // Start containerd via systemd utils.InfoPrintf("Downloading systemd profile for containerd") filePathName, err = node.DownloadToTmpDir(node.Configs.System.ContainerdSystemdProfileDownloadUrl) - utils.CheckErrorWithTagAndMsg(err, "Failed to download systemd profile for containerd!\n") + helper.CheckErrorExit(err, "Failed to download systemd profile for containerd!\n") utils.InfoPrintf("Starting containerd via systemd") _, err = node.ExecShellCmd("sudo cp %s /lib/systemd/system/ && sudo systemctl daemon-reload && sudo systemctl enable --now containerd", filePathName) - utils.CheckErrorWithTagAndMsg(err, "Failed to start containerd via systemd!\n") + helper.CheckErrorExit(err, "Failed to start containerd via systemd!\n") } // Install runc @@ -309,11 +310,11 @@ func (node *Node) SystemInit() { node.Configs.System.RuncDownloadUrlTemplate, node.Configs.System.RuncVersion, node.Configs.System.CurrentArch) - utils.CheckErrorWithTagAndMsg(err, "Failed to download runc(ver %s)!\n", node.Configs.System.RuncVersion) + helper.CheckErrorExit(err, "Failed to download runc(ver %s)!\n", node.Configs.System.RuncVersion) // Install runc utils.InfoPrintf("Installing runc") _, err = node.ExecShellCmd("sudo install -m 755 %s /usr/local/sbin/runc", filePathName) - utils.CheckErrorWithTagAndMsg(err, "Failed to install runc!\n") + helper.CheckErrorExit(err, "Failed to install runc!\n") } // Install CNI plugins @@ -324,10 +325,10 @@ func (node *Node) SystemInit() { node.Configs.System.CniPluginsVersion, node.Configs.System.CurrentArch, node.Configs.System.CniPluginsVersion) - utils.CheckErrorWithTagAndMsg(err, "Failed to download CNI plugins(ver %s)!\n", node.Configs.System.CniPluginsVersion) + helper.CheckErrorExit(err, "Failed to download CNI plugins(ver %s)!\n", node.Configs.System.CniPluginsVersion) utils.InfoPrintf("Extracting CNI plugins") _, err = node.ExecShellCmd("sudo mkdir -p /opt/cni/bin && sudo tar Cxzvf /opt/cni/bin %s", filePathName) - utils.CheckErrorWithTagAndMsg(err, "Failed to extract CNI plugins!\n") + helper.CheckErrorExit(err, "Failed to extract CNI plugins!\n") } // Configure the systemd cgroup driver @@ -336,16 +337,16 @@ func (node *Node) SystemInit() { "containerd config default > %s && sudo mkdir -p /etc/containerd && sudo cp %s /etc/containerd/config.toml && sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml && sudo systemctl restart containerd", node.Configs.System.TmpDir+"/config.toml", node.Configs.System.TmpDir+"/config.toml") - utils.CheckErrorWithTagAndMsg(err, "Failed to configure the systemd cgroup driver!\n") + helper.CheckErrorExit(err, "Failed to configure the systemd cgroup driver!\n") // Enable IP forwading & br_netfilter utils.InfoPrintf("Enabling IP forwading & br_netfilter") _, err = node.ExecShellCmd("sudo modprobe br_netfilter && sudo modprobe overlay && sudo sysctl -w net.ipv4.ip_forward=1 && sudo sysctl -w net.ipv4.conf.all.forwarding=1 && sudo sysctl -w net.bridge.bridge-nf-call-iptables=1 && sudo sysctl -w net.bridge.bridge-nf-call-ip6tables=1") - utils.CheckErrorWithTagAndMsg(err, "Failed to enable IP forwading & br_netfilter!\n") + helper.CheckErrorExit(err, "Failed to enable IP forwading & br_netfilter!\n") // Ensure Boot-Resistant utils.InfoPrintf("Ensuring Boot-Resistant") _, err = node.ExecShellCmd("echo 'br_netfilter' | sudo tee /etc/modules-load.d/netfilter.conf && echo 'overlay' | sudo tee -a /etc/modules-load.d/netfilter.conf && sudo sed -i 's/# *net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf && sudo sed -i 's/net.ipv4.ip_forward=0/net.ipv4.ip_forward=1/g' /etc/sysctl.conf && echo 'net.bridge.bridge-nf-call-iptables=1\nnet.bridge.bridge-nf-call-ip6tables=1\nnet.ipv4.conf.all.forwarding=1' | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf") - utils.CheckErrorWithTagAndMsg(err, "Failed to ensure Boot-Resistant!\n") + helper.CheckErrorExit(err, "Failed to ensure Boot-Resistant!\n") // Install kubeadm, kubelet, kubectl switch node.Configs.System.CurrentOS { @@ -353,15 +354,15 @@ func (node *Node) SystemInit() { // Download Google Cloud public signing key and Add the Kubernetes apt repository utils.InfoPrintf("Adding the Kubernetes apt repository") _, err = node.ExecShellCmd("sudo mkdir -p /etc/apt/keyrings && sudo curl -fsSLo /etc/apt/keyrings/kubernetes-archive-keyring.gpg https://dl.k8s.io/apt/doc/apt-key.gpg && echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main' | sudo tee /etc/apt/sources.list.d/kubernetes.list") - utils.CheckErrorWithTagAndMsg(err, "Failed to add the Kubernetes apt repository!\n") + helper.CheckErrorExit(err, "Failed to add the Kubernetes apt repository!\n") // Install kubeadm, kubelet, kubectl via apt utils.InfoPrintf("Installing kubeadm, kubelet, kubectl") err = node.InstallPackages("kubeadm=%s kubelet=%s kubectl=%s", node.Configs.System.KubeVersion, node.Configs.System.KubeVersion, node.Configs.System.KubeVersion) - utils.CheckErrorWithTagAndMsg(err, "Failed to install kubeadm, kubelet, kubectl!\n") + helper.CheckErrorExit(err, "Failed to install kubeadm, kubelet, kubectl!\n") // Lock kubeadm, kubelet, kubectl version utils.InfoPrintf("Locking kubeadm, kubelet, kubectl version") _, err = node.ExecShellCmd("sudo apt-mark hold kubelet kubeadm kubectl") - utils.CheckErrorWithTagAndMsg(err, "Failed to lock kubeadm, kubelet, kubectl version!\n") + helper.CheckErrorExit(err, "Failed to lock kubeadm, kubelet, kubectl version!\n") default: utils.FatalPrintf("Unsupported Linux distribution: %s\n", node.Configs.System.CurrentOS) } diff --git a/scripts/openyurt-deployer/node/yurt.go b/scripts/openyurt-deployer/node/yurt.go index 537ac0148..9bad1510c 100644 --- a/scripts/openyurt-deployer/node/yurt.go +++ b/scripts/openyurt-deployer/node/yurt.go @@ -6,6 +6,7 @@ import ( "time" "github.com/vhive-serverless/vHive/scripts/utils" + helper "github.com/vhive-serverless/vhive/scripts/openyurt_deployer/helper" "github.com/vhive-serverless/vhive/scripts/openyurt_deployer/template" ) @@ -60,7 +61,7 @@ func (node *Node) YurtMasterInit() { // Install dependencies utils.WaitPrintf("Installing dependencies") err = node.InstallPackages(node.Configs.Yurt.Dependencies) - utils.CheckErrorWithTagAndMsg(err, "Failed to install dependencies!\n") + helper.CheckErrorExit(err, "Failed to install dependencies!\n") // Treat master as cloud node if node.Configs.Yurt.MasterAsCloud { @@ -77,16 +78,16 @@ func (node *Node) YurtMasterInit() { utils.WaitPrintf("Downloading public signing key && Add the Helm apt repository") // Download public signing key filePathName, err := node.DownloadToTmpDir(node.Configs.Yurt.HelmPublicSigningKeyDownloadUrl) - utils.CheckErrorWithMsg(err, "Failed to download public signing key && add the Helm apt repository!\n") + helper.CheckErrorExit(err, "Failed to download public signing key && add the Helm apt repository!\n") _, err = node.ExecShellCmd("sudo mkdir -p /usr/share/keyrings && cat %s | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null", filePathName) - utils.CheckErrorWithMsg(err, "Failed to download public signing key && add the Helm apt repository!\n") + helper.CheckErrorExit(err, "Failed to download public signing key && add the Helm apt repository!\n") // Add the Helm apt repository _, err = node.ExecShellCmd(`echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list`) - utils.CheckErrorWithTagAndMsg(err, "Failed to download public signing key && add the Helm apt repository!\n") + helper.CheckErrorExit(err, "Failed to download public signing key && add the Helm apt repository!\n") // Install helm utils.WaitPrintf("Installing Helm") err = node.InstallPackages("helm") - utils.CheckErrorWithTagAndMsg(err, "Failed to install helm!\n") + helper.CheckErrorExit(err, "Failed to install helm!\n") default: utils.FatalPrintf("Unsupported Linux distribution: %s\n", node.Configs.System.CurrentOS) } @@ -97,32 +98,32 @@ func (node *Node) YurtMasterInit() { // Download kustomize helper script utils.WaitPrintf("Downloading kustomize") filePathName, err := node.DownloadToTmpDir(node.Configs.Yurt.KustomizeScriptDownloadUrl) - utils.CheckErrorWithMsg(err, "Failed to download kustomize!\n") + helper.CheckErrorExit(err, "Failed to download kustomize!\n") // Download kustomize _, err = node.ExecShellCmd("chmod u+x %s && %s %s", filePathName, filePathName, node.Configs.System.TmpDir) - utils.CheckErrorWithTagAndMsg(err, "Failed to download kustomize!\n") + helper.CheckErrorExit(err, "Failed to download kustomize!\n") // Install kustomize utils.WaitPrintf("Installing kustomize") _, err = node.ExecShellCmd("sudo cp %s /usr/local/bin", node.Configs.System.TmpDir+"/kustomize") - utils.CheckErrorWithTagAndMsg(err, "Failed to Install kustomize!\n") + helper.CheckErrorExit(err, "Failed to Install kustomize!\n") } // Add OpenYurt repo with helm utils.WaitPrintf("Adding OpenYurt repo(version %s) with helm", node.Configs.Yurt.YurtVersion) _, err = node.ExecShellCmd("git clone --quiet https://github.com/openyurtio/openyurt-helm.git %s/openyurt-helm && pushd %s/openyurt-helm && git checkout openyurt-%s && popd", node.Configs.System.TmpDir, node.Configs.System.TmpDir, node.Configs.Yurt.YurtVersion) - utils.CheckErrorWithTagAndMsg(err, "Failed to add OpenYurt repo with helm!\n") + helper.CheckErrorExit(err, "Failed to add OpenYurt repo with helm!\n") // Deploy yurt-app-manager utils.WaitPrintf("Deploying yurt-app-manager") _, err = node.ExecShellCmd("helm install yurt-app-manager -n kube-system %s/openyurt-helm/charts/yurt-app-manager", node.Configs.System.TmpDir) - utils.CheckErrorWithTagAndMsg(err, "Failed to deploy yurt-app-manager!\n") + helper.CheckErrorExit(err, "Failed to deploy yurt-app-manager!\n") // Wait for yurt-app-manager to be ready utils.WaitPrintf("Waiting for yurt-app-manager to be ready") waitCount := 1 for { yurtAppManagerStatus, err := node.ExecShellCmd(`kubectl get pod -n kube-system | grep yurt-app-manager | sed -n "s/\s*\(\S*\)\s*\(\S*\)\s*\(\S*\).*/\2 \3/p"`) - utils.CheckErrorWithMsg(err, "Failed to wait for yurt-app-manager to be ready!\n") + helper.CheckErrorExit(err, "Failed to wait for yurt-app-manager to be ready!\n") if yurtAppManagerStatus == "1/1 Running" { utils.SuccessPrintf("\n") break @@ -136,27 +137,27 @@ func (node *Node) YurtMasterInit() { // Deploy yurt-controller-manager utils.WaitPrintf("Deploying yurt-controller-manager") _, err = node.ExecShellCmd("helm install openyurt %s/openyurt-helm/charts/openyurt -n kube-system", node.Configs.System.TmpDir) - utils.CheckErrorWithTagAndMsg(err, "Failed to deploy yurt-controller-manager!\n") + helper.CheckErrorExit(err, "Failed to deploy yurt-controller-manager!\n") // Setup raven-controller-manager Component // Clone repository utils.WaitPrintf("Cloning repo: raven-controller-manager") _, err = node.ExecShellCmd("git clone --quiet https://github.com/openyurtio/raven-controller-manager.git %s/raven-controller-manager", node.Configs.System.TmpDir) - utils.CheckErrorWithTagAndMsg(err, "Failed to clone repo: raven-controller-manager!\n") + helper.CheckErrorExit(err, "Failed to clone repo: raven-controller-manager!\n") // Deploy raven-controller-manager utils.WaitPrintf("Deploying raven-controller-manager") _, err = node.ExecShellCmd("pushd %s/raven-controller-manager && git checkout v0.3.0 && make generate-deploy-yaml && kubectl apply -f _output/yamls/raven-controller-manager.yaml && popd", node.Configs.System.TmpDir) - utils.CheckErrorWithTagAndMsg(err, "Failed to deploy raven-controller-manager!\n") + helper.CheckErrorExit(err, "Failed to deploy raven-controller-manager!\n") // Setup raven-agent Component // Clone repository utils.WaitPrintf("Cloning repo: raven-agent") _, err = node.ExecShellCmd("git clone --quiet https://github.com/openyurtio/raven.git %s/raven-agent", node.Configs.System.TmpDir) - utils.CheckErrorWithTagAndMsg(err, "Failed to clone repo: raven-agent!\n") + helper.CheckErrorExit(err, "Failed to clone repo: raven-agent!\n") // Deploy raven-agent utils.WaitPrintf("Deploying raven-agent") _, err = node.ExecShellCmd("pushd %s/raven-agent && git checkout v0.3.0 && FORWARD_NODE_IP=true make deploy && popd", node.Configs.System.TmpDir) - utils.CheckErrorWithTagAndMsg(err, "Failed to deploy raven-agent!\n") + helper.CheckErrorExit(err, "Failed to deploy raven-agent!\n") } // Expand Openyurt to worker node @@ -176,19 +177,19 @@ func (node *Node) YurtMasterExpand(worker *Node) { utils.FatalPrintf("worker's role must be edge or cloud, but this node's role is %s", worker.NodeRole) } _, err = node.ExecShellCmd("kubectl label node %s openyurt.io/is-edge-worker=%s --overwrite", worker.Configs.System.NodeHostName, workerAsEdge) - utils.CheckErrorWithTagAndMsg(err, "Failed to label worker node!\n") + helper.CheckErrorExit(err, "Failed to label worker node!\n") // Activate the node autonomous mode utils.WaitPrintf("Activating the node autonomous mode") _, err = node.ExecShellCmd("kubectl annotate node %s node.beta.openyurt.io/autonomy=true --overwrite", worker.Configs.System.NodeHostName) - utils.CheckErrorWithTagAndMsg(err, "Failed to activate the node autonomous mode!\n") + helper.CheckErrorExit(err, "Failed to activate the node autonomous mode!\n") // Wait for worker node to be Ready utils.WaitPrintf("Waiting for worker node to be ready") waitCount := 1 for { workerNodeStatus, err := node.ExecShellCmd(`kubectl get nodes | sed -n "/.*%s.*/p" | sed -n "s/\s*\(\S*\)\s*\(\S*\).*/\2/p"`, worker.Configs.System.NodeHostName) - utils.CheckErrorWithMsg(err, "Failed to wait for worker node to be ready!\n") + helper.CheckErrorExit(err, "Failed to wait for worker node to be ready!\n") if workerNodeStatus == "Ready" { utils.SuccessPrintf("\n") break @@ -202,13 +203,13 @@ func (node *Node) YurtMasterExpand(worker *Node) { // Restart pods in the worker node utils.WaitPrintf("Restarting pods in the worker node") shellOutput, err := node.ExecShellCmd(template.GetRestartPodsShell(), worker.Configs.System.NodeHostName) - utils.CheckErrorWithMsg(err, "Failed to restart pods in the worker node!\n") + helper.CheckErrorExit(err, "Failed to restart pods in the worker node!\n") podsToBeRestarted := strings.Split(shellOutput, "\n") for _, pods := range podsToBeRestarted { podsInfo := strings.Split(pods, " ") utils.WaitPrintf("Restarting pod: %s => %s", podsInfo[0], podsInfo[1]) _, err = node.ExecShellCmd("kubectl -n %s delete pod %s", podsInfo[0], podsInfo[1]) - utils.CheckErrorWithTagAndMsg(err, "Failed to restart pods in the worker node!\n") + helper.CheckErrorExit(err, "Failed to restart pods in the worker node!\n") } } @@ -226,16 +227,16 @@ func (node *Node) YurtWorkerJoin(addr string, port string, token string) { addr, port, token) - utils.CheckErrorWithTagAndMsg(err, "Failed to set up Yurthub!\n") + helper.CheckErrorExit(err, "Failed to set up Yurthub!\n") // Configure Kubelet utils.WaitPrintf("Configuring kubelet") node.ExecShellCmd("sudo mkdir -p /var/lib/openyurt && echo '%s' | sudo tee /var/lib/openyurt/kubelet.conf", template.GetKubeletConfig()) - utils.CheckErrorWithMsg(err, "Failed to configure kubelet!\n") + helper.CheckErrorExit(err, "Failed to configure kubelet!\n") node.ExecShellCmd(`sudo sed -i "s|KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=\/etc\/kubernetes\/bootstrap-kubelet.conf\ --kubeconfig=\/etc\/kubernetes\/kubelet.conf|KUBELET_KUBECONFIG_ARGS=--kubeconfig=\/var\/lib\/openyurt\/kubelet.conf|g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf`) - utils.CheckErrorWithMsg(err, "Failed to configure kubelet!\n") + helper.CheckErrorExit(err, "Failed to configure kubelet!\n") node.ExecShellCmd("sudo systemctl daemon-reload && sudo systemctl restart kubelet") - utils.CheckErrorWithTagAndMsg(err, "Failed to configure kubelet!\n") + helper.CheckErrorExit(err, "Failed to configure kubelet!\n") } func (node *Node) YurtWorkerClean() { @@ -245,5 +246,5 @@ func (node *Node) YurtWorkerClean() { _, err = node.ExecShellCmd("sudo rm -rf /var/lib/openyurt") _, err = node.ExecShellCmd("sudo rm /etc/kubernetes/pki/ca.crt") _, err = node.ExecShellCmd(`sudo sed -i "s|KUBELET_KUBECONFIG_ARGS=--kubeconfig=\/var\/lib\/openyurt\/kubelet.conf|KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=\/etc\/kubernetes\/bootstrap-kubelet.conf\ --kubeconfig=\/etc\/kubernetes\/kubelet.conf|g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf`) - utils.CheckErrorWithMsg(err, "Failed to clean kubelet on node: %s", node.Name) + helper.CheckErrorExit(err, "Failed to clean kubelet on node: %s", node.Name) } diff --git a/scripts/openyurt-deployer/openyurt_deployer b/scripts/openyurt-deployer/openyurt_deployer index 930cd30e2..6253415b4 100755 Binary files a/scripts/openyurt-deployer/openyurt_deployer and b/scripts/openyurt-deployer/openyurt_deployer differ