En kubernetes, el scheduler es el encargado de colocar los pods en los nodos, según la cpu y memoria de que dispongan los nodos, entre otras cosas. Para poder crear el scheduler debemos seguir los siguientes pasos.
Si usamos como sistema operativo ubuntu18, debemos instalar go y las build essentials:
wget https://dl.google.com/go/go1.13.6.linux-amd64.tar.gz sudo tar -C /usr/local -xvzf go1.13.6.linux-amd64.tar.gz sudo apt-get install build-essential
Después, clonamos el proyecto de kubernetes y lo empaquetamos:
git clone https://github.com/kubernetes/kubernetes.git cd kubernetes make
Una vez tenemos el paso anterior, debemos crear una imagen de docker. Para ello, creamos un dockerfile dentro de la carpeta kubernetes con el siguiente contenido:
FROM busybox ADD ./_output/local/bin/linux/amd64/kube-scheduler /usr/local/bin/kube-scheduler
Ahora creamos la imagen y la subimos a nuestro repositorio:
docker build -t my-project/my-kube-scheduler:1.0 . docker push my-project/my-kube-scheduler:1.0
Seguidamente creamos un service account, un cluster rol binding y un deployment para el schedule. Creamos el fichero my-scheduler.yaml con el siguiente contenido:
apiVersion: v1 kind: ServiceAccount metadata: name: my-scheduler namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: my-scheduler-as-kube-scheduler subjects: - kind: ServiceAccount name: my-scheduler namespace: kube-system roleRef: kind: ClusterRole name: system:kube-scheduler apiGroup: rbac.authorization.k8s.io --- apiVersion: apps/v1 kind: Deployment metadata: labels: component: scheduler tier: control-plane name: my-scheduler namespace: kube-system spec: selector: matchLabels: component: scheduler tier: control-plane replicas: 1 template: metadata: labels: component: scheduler tier: control-plane version: second spec: serviceAccountName: my-scheduler containers: - command: - /usr/local/bin/kube-scheduler - --address=0.0.0.0 - --leader-elect=false - --scheduler-name=my-scheduler image: my-project/my-kube-scheduler:1.0 livenessProbe: httpGet: path: /healthz port: 10251 initialDelaySeconds: 15 name: kube-second-scheduler readinessProbe: httpGet: path: /healthz port: 10251 resources: requests: cpu: '0.1' securityContext: privileged: false volumeMounts: [] hostNetwork: false hostPID: false volumes: []
Aplicamos la configuración del fichero:
kubectl apply -f my-scheduler.yaml
Podemos ver si se ha creado correctamente viendo los pods del namespace kube-system:
kubectl get pods -n kube-system
Para comprobarlo, podemos crear un pod, indicando el nombre del scheduler creado. Creamos el fichero pod.yaml con el siguiente contenido:
apiVersion: v1 kind: Pod metadata: name: annotation-second-scheduler labels: name: multischeduler-example spec: schedulerName: my-scheduler containers: - name: pod-with-second-annotation-container image: k8s.gcr.io/pause:2.0
Creamos el pod anterior ejecutando:
kubectl apply -f pod.yaml
Te recordamos que en Occentus Network somos Kubernetes Certified Service Provider (KCSP) y que gracias a esta certificación ofrecemos servicio de seguridad de Kubernetes, así como consultoría y formación a empresas que eligen Kubernetes.