连接k8s
首先要获取一个连接k8s的*kubernetes.Clientset
对象,具体连接方法参考:创建连接Kubernetes集群的客户端
创建一个简单的Job
创建Job的代码:
import (
"fmt"
v1 "k8s.io/api/batch/v1"
corev1 "k8s.io/api/core/v1"
"time"
)
func CreateSimpleJob () {
targetJob := &v1.Job{}
targetJob.Namespace = "demo" // 所属的namespace,如果没有,需要先创建该namespace
targetJob.Name = fmt.Sprintf("j-" + time.Now().Format("2006-01-02-15-04-05") + "-w") // job的名字,取一个合法的名字即可
container := corev1.Container{Name:"perl-01"}
container.Image = "perl" // 指定容器镜像
container.Command = []string{"perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"} // 指定启动命令
targetJob.Spec.Template.Spec.Containers = []corev1.Container{container}
// k8s pod默认的restartPolicy是"Always",job不支持"Always",必须改成"Never"或"OnFailure"
targetJob.Spec.Template.Spec.RestartPolicy = corev1.RestartPolicyNever
// GetClientSet()返回一个*kubernetes.Clientset类型的k8s客户端对象
targetJob,err := GetClientSet().BatchV1().Jobs(targetJob.Namespace).Create(targetJob)
if err != nil {
fmt.Printf("%v\n", err)
}
}
在k8s集群上查看创建出来的Job:
kubectl -n demo get jobs
NAME COMPLETIONS DURATION AGE
j-2020-07-24-15-54-47-w 1/1 19s 20m
查询Job的信息
查询刚刚提交的Job的信息:
jobInfo, err := GetClientSet().BatchV1().Jobs(targetJob.Namespace).Get(targetJob.Name, metav1.GetOptions{})
得到的jobInfo即包含了该Job的相关信息。
设置容器资源限制
可以为运行的容器设置资源限制,如下,为上述例子的container增加资源限制:
container.Resources.Requests = map[corev1.ResourceName]resource.Quantity{
corev1.ResourceCPU : resource.MustParse("1"),
corev1.ResourceMemory : resource.MustParse("100Mi"),
}
container.Resources.Limits = map[corev1.ResourceName]resource.Quantity{
corev1.ResourceCPU : resource.MustParse("2"),
corev1.ResourceMemory : resource.MustParse("200Mi"),
}
创建Job后查看相应的Pod信息:
kubectl -n demo get pods j-2020-07-24-16-40-52-w-qkvw6 -o yaml | grep resources -A 5
resources:
limits:
cpu: "2"
memory: 200Mi
requests:
cpu: "1"
可以看到成功为容器增加了资源限制。