Is there a possibility to deploy a kubernetes Pod using golang code instead of command line Linux with kubectl ?
2 Answers
Yes. Definitely you can. Kubernetes is written in golang. It has official client for go. You can create,delete,patch,list, control almost any Kubernetes resources with this go client.
Here is the official client repository: kubernetes/client-go
I have create a sample repository here to show how to create a pod using client-go.
You have to do following things to create a pod with this client. We are going to create a simple busybox pod.
- Create
configurationusing your kube-config file. Generally the configuration file is$HOME/.kube/configfile. See example here. - Create a
clientsetusing thisconfiguration. See example here. - Now, generate a pod definition that we want to deploy. See example here.
- Finally, create the pod in kubernetes cluster using the
clientset. See example here.
Comments
You can write a function and give the cell image yaml file as a parameter.
func cellDeploy(pathToFileName string) error {
cmd := exec.Command("kubectl", "apply", "-f", pathToFileName)
stdoutReader, _ := cmd.StdoutPipe()
stdoutScanner := bufio.NewScanner(stdoutReader)
go func() {
for stdoutScanner.Scan() {
fmt.Println(stdoutScanner.Text())
}
}()
stderrReader, _ := cmd.StderrPipe()
stderrScanner := bufio.NewScanner(stderrReader)
go func() {
for stderrScanner.Scan() {
fmt.Println(stderrScanner.Text())
}
}()
err := cmd.Start()
if err != nil {
fmt.Printf("Error : %v \n", err)
os.Exit(1)
}
err = cmd.Wait()
if err != nil {
fmt.Printf("Error: %v \n", err)
os.Exit(1)
}
return nil
}
1 Comment
RexFuzzle
This is still just simply using golang to call kubectl.