背景:
网上看了许多教程,都有坑,用官方的办法部署也不行,官方只说了用最新的helm,但是最新的helm已经不支持它了,没辙,自己研究了下kube-batch底层原理后总结了一套部署方法;
注意: 官方的一些yaml文件接口已经过期了(低版本k8s可以用,高版本接口没法用),helm也不能用了,所以不要用官方的yaml文件部署,直接用以下我提供的即可;
部署条件:
笔者使用的是kubernetes 1.18 + kube-batch 0.5
kubernetes 1.13以下版本可以用官方的方式或yaml文件部署(部署步骤和我下文所述一致,仅接口不同)
步骤:
一、下载
git clone -b release-0.5 https://github.com/kubernetes-sigs/kube-batch
二、创建CRD
cd kube-batch
# 先安装crds
cd config/crds
kubectl apply -f . -n kube-system
cd ..
# 安装默认的quue
cd config/queue
kubectl apply -f . -n kube-system
三、分配权限
保存以下内容为rbac.yaml
,执行kubectl apply -f rbac.yaml -n kube-system
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: default-sa-admin
subjects:
- kind: ServiceAccount
name: default
namespace: kube-system
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
四、创建配置文件
保存以下内容为config.yaml
,执行kubectl apply -f config.yaml -n kube-system
apiVersion: v1
data:
kube-batch-conf.yaml: |-
actions: "allocate, backfill"
tiers:
- plugins:
- name: gang
- name: priority
- plugins:
- name: drf
- name: predicates
- name: proportion
- name: nodeorder
kind: ConfigMap
metadata:
name: kube-batch-config
namespace: kube-system
五、启动kube-batch
保存以下内容为deploy.yaml
,执行kubectl apply -f deploy.yaml -n kube-system
apiVersion: app/v1
kind: Deployment
metadata:
labels:
app: kube-batch
name: kube-batch
namespace: kube-system
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: kube-batch
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: kube-batch
spec:
containers:
- args:
- --logtostderr
- --v
- "3"
- --scheduler-conf=/etc/kube-batch/kube-batch-conf.yaml
image: kube-batch/kube-batch:v0.5
imagePullPolicy: IfNotPresent
name: kube-batch
ports:
- containerPort: 8080
name: http
protocol: TCP
resources:
limits:
cpu: "2"
memory: 2Gi
requests:
cpu: "2"
memory: 2Gi
securityContext:
capabilities: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /etc/kube-batch/kube-batch-conf.yaml
name: config
subPath: kube-batch-conf.yaml
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- configMap:
defaultMode: 256
name: kube-batch-config
optional: false
name: config
---
apiVersion: v1
kind: Service
metadata:
labels:
app: kube-batch
name: kube-batch
namespace: kube-system
spec:
clusterIP: None
ports:
- name: http
port: 8080
protocol: TCP
targetPort: 8080
selector:
app: kube-batch
sessionAffinity: None
type: ClusterIP
六、测试
保存以下内容为job.yaml
,执行kubectl apply -f job.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: qj-1
spec:
backoffLimit: 6
completions: 6
parallelism: 6
template:
metadata:
annotations:
scheduling.k8s.io/group-name: qj-1
spec:
containers:
- image: busybox
imagePullPolicy: IfNotPresent
name: busybox
resources:
requests:
cpu: "1"
restartPolicy: Never
schedulerName: kube-batch
---
apiVersion: scheduling.incubator.k8s.io/v1alpha1
kind: PodGroup
metadata:
name: qj-1
spec:
minMember: 6
执行kubectl get pods
查看完成状态
参考文献:
https://izsk.me/2021/03/17/Kubernetes-kubebatch-install/
https://www.cnblogs.com/shix0909/p/13280261.html
https://github.com/kubernetes-sigs/kube-batch/tree/release-0.5/deployment/kube-batch/templates