mirror of
				https://github.com/kata-containers/kata-containers.git
				synced 2025-10-31 09:26:52 +00:00 
			
		
		
		
	metrics: Add FIO runner k8s
Add program to execute FIO workloads using k8s. Signed-off-by: Gabriela Cervantes <gabriela.cervantes.tellez@intel.com>
This commit is contained in:
		
							
								
								
									
										8
									
								
								tests/metrics/storage/fio-k8s/pkg/k8s/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								tests/metrics/storage/fio-k8s/pkg/k8s/Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| # | ||||
| # Copyright (c) 2021 Intel Corporation | ||||
| # | ||||
| # SPDX-License-Identifier: Apache-2.0 | ||||
| # | ||||
| gomod: | ||||
| 	 GO111MODULE=on go mod edit -replace=github.com/kata-containers/tests/metrics/exec=../exec | ||||
| 	 GO111MODULE=on go mod tidy | ||||
							
								
								
									
										35
									
								
								tests/metrics/storage/fio-k8s/pkg/k8s/exec.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								tests/metrics/storage/fio-k8s/pkg/k8s/exec.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | ||||
| // Copyright (c) 2021 Intel Corporation | ||||
| // | ||||
| // SPDX-License-Identifier: Apache-2.0 | ||||
| // | ||||
| package k8s | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
|  | ||||
| 	exec "github.com/kata-containers/tests/metrics/exec" | ||||
| ) | ||||
|  | ||||
| type execOpt struct { | ||||
| 	showInStdOut bool | ||||
| } | ||||
|  | ||||
| type ExecOption func(e *execOpt) | ||||
|  | ||||
| func ExecOptShowStdOut() ExecOption { | ||||
| 	return func(e *execOpt) { | ||||
| 		e.showInStdOut = true | ||||
| 	} | ||||
|  | ||||
| } | ||||
|  | ||||
| func (p *Pod) Exec(cmd string, opts ...ExecOption) (output string, err error) { | ||||
| 	log.Debugf("Exec %q in %s", cmd, p.YamlPath) | ||||
| 	o := &execOpt{showInStdOut: false} | ||||
| 	for _, opt := range opts { | ||||
| 		opt(o) | ||||
|  | ||||
| 	} | ||||
| 	execCmd := fmt.Sprintf("kubectl exec -f  %s -- /bin/bash -c %q", p.YamlPath, cmd) | ||||
| 	return exec.ExecCmd(execCmd, Debug || o.showInStdOut) | ||||
| } | ||||
							
								
								
									
										69
									
								
								tests/metrics/storage/fio-k8s/pkg/k8s/k8s.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								tests/metrics/storage/fio-k8s/pkg/k8s/k8s.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,69 @@ | ||||
| // Copyright (c) 2021 Intel Corporation | ||||
| // | ||||
| // SPDX-License-Identifier: Apache-2.0 | ||||
| // | ||||
| package k8s | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
|  | ||||
| 	exec "github.com/kata-containers/tests/metrics/exec" | ||||
| 	"github.com/pkg/errors" | ||||
| ) | ||||
|  | ||||
| //logger interface for pkg | ||||
| var log logger | ||||
| var Debug bool = false | ||||
|  | ||||
| type logger interface { | ||||
| 	Infof(string, ...interface{}) | ||||
| 	Debugf(string, ...interface{}) | ||||
| 	Errorf(string, ...interface{}) | ||||
| } | ||||
|  | ||||
| func SetLogger(l logger) { | ||||
| 	log = l | ||||
| } | ||||
|  | ||||
| type Pod struct { | ||||
| 	YamlPath string | ||||
| } | ||||
|  | ||||
| func (p *Pod) waitForReady() (err error) { | ||||
| 	log.Debugf("Wait for pod %s", p.YamlPath) | ||||
| 	_, err = exec.ExecCmd("kubectl wait --for=condition=ready -f "+p.YamlPath, Debug) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| func (p *Pod) Run() (err error) { | ||||
|  | ||||
| 	log.Debugf("Creating K8s Pod %s", p.YamlPath) | ||||
| 	_, err = exec.ExecCmd("kubectl apply -f "+p.YamlPath, Debug) | ||||
| 	if err != nil { | ||||
| 		return errors.Wrapf(err, "Failed to run pod %s", p.YamlPath) | ||||
| 	} | ||||
|  | ||||
| 	err = p.waitForReady() | ||||
| 	if err != nil { | ||||
| 		return errors.Wrapf(err, "Failed to wait for pod  %s", p.YamlPath) | ||||
| 	} | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| func (p *Pod) Delete() (err error) { | ||||
| 	log.Debugf("Delete pod %s", p.YamlPath) | ||||
| 	_, err = exec.ExecCmd("kubectl delete --ignore-not-found -f "+p.YamlPath, Debug) | ||||
| 	return errors.Wrapf(err, "Failed to delete pod %s", p.YamlPath) | ||||
| } | ||||
|  | ||||
| func (p *Pod) CopyFromHost(src, dst string) (err error) { | ||||
| 	podName, err := exec.ExecCmd("kubectl get -f "+p.YamlPath+" -o jsonpath={.metadata.name}", Debug) | ||||
| 	if err != nil { | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	log.Debugf("Copy from host %q->%q in pod %s", src, dst, p.YamlPath) | ||||
| 	execCmd := fmt.Sprintf("kubectl cp %s %s:%s", src, podName, dst) | ||||
| 	_, err = exec.ExecCmd(execCmd, Debug) | ||||
| 	return err | ||||
| } | ||||
		Reference in New Issue
	
	Block a user