Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

...

Introduction

   The The purpose of this test is intended to provide a text emotion analysis capability function test report, and provide the capability caller with reference basis such as use cases and test data after the capability is put on the stageto demonstrate two scheduling use cases of text sentiment analysis service:

Case 1. Scheduling computing force by cluster weight;

Case 2. Rescheduling computing force when a cluster resource is abnormal.

Akraino Test Group Information

Test Architecture

Image RemovedImage Added

Test Framework

Hardware:

      Control-panalpanel:   192.168.30.12,192.168.30.21

      Worker-Cluseter1: Cluster1: 192.168.30.5 、192.168.30.22、192.168.30.20

      Worker-Cluseter2: Cluster2: 192.168.30.2、192.168.30.16、192.168.30.25

Software:

     Karmada: V1.4.0, Open, Multi-Cloud, Multi-Cluster Kubernetes Orchestration

...

     sentiment: an text emotion analysis service

Test description

  • Propagate a deployment 

       In the following steps, we are going to propagate a deployment

 1、Create a deployment.yaml

...

languageyml
themeDJango
linenumberstrue

...

Case 1. Scheduling by weight

1.Create a deployment.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

  name: sentiment

  labels:

    app: sentiment

spec:

  replicas: 2

  selector:

    matchLabels:

      app: sentiment

  template:

    metadata:

      labels:

        app: sentiment

    spec:

      imagePullSecrets:

      - name: harborsecret

      containers:

      - name: sentiment

        image: 192.168.30.20:5000/migu/sentiment:latest

...

        imagePullPolicy:

...

 2、Create nginx deployment in Karmada.

create a deployment named sentiment。 Execute command

...

languagebash
themeDJango
linenumberstrue

...

IfNotPresent

        ports:

        - containerPort: 9600

          protocol: TCP

          name: http

        resources:

          limits:

            cpu: 2

            memory: 4G

          requests:

            cpu: 2

            memory: 4G

2.Create nginx deployment yaml file.

Create a deployment and name it sentiment. Execute commands as follow:

kubectl --kubeconfig /etc/karmada/karmada-apiserver.config

...

create

...

-f

...

deployment.yaml

...

 3、Create a 3. Create a distribution yaml file,  PropagationPolicy.yaml

...

languageyml
themeDJango
linenumberstrue

yaml:

apiVersion:

...

...

kind:

...

PropagationPolicy

...

metadata:

...

  name:

...

sentiment-propagation

...

spec:

...

  resourceSelectors:

...

    - apiVersion:

...

apps/v1

...

      kind:

...

Deployment

      name:

...

sentiment

...

  placement:

...

    clusterAffinity:

      clusterNames:

        - member1

        - member2

    replicaScheduling:

      replicaDivisionPreference: Weighted

      replicaSchedulingType: Divided

      weightPreference:

        staticWeightList:

          - targetCluster:

              clusterNames:

                - member1

            weight: 1

          - targetCluster:

              clusterNames:

                - member2

            weight: 1

4.Create PropagationPolicy that will distribute sentiment to worker cluster
 We need to create a policy to propagate distribute the deployment to our member worker cluster. Execute command

...

languagebash
themeDJango
linenumberstrue

...

commands as follow:

kubectl --kubeconfig

...

/etc/karmada/karmada-apiserver.config

...

create

...

-f

...

propagationpolicy.yaml

...

5、Check 5.Check the deployment status
You We can check deployment status, don't need to access member worker cluster.  Execute command

Image Removed

in our member cluseter,you can see commands as follow:

Image Added

In worker cluseter,we can see the result as follow:

Image RemovedImage Added

6、Next6.Next, We we will change deployment.yaml and propagationpolicy.yaml , then retry

...

languageyml
themeDJango
linenumberstrue

.

apiVersion:

...

apps/v1

...

kind:

...

Deployment

...

metadata:

...

  name:

...

sentiment

...

  labels:

...

    app:

...

sentiment

...

spec:

...

  replicas:

...

4

...

  selector:

...

    matchLabels:

      app: sentiment

  template:

    metadata:

      labels:

        app: sentiment

    spec:

      imagePullSecrets:

      - name: harborsecret

      containers:

      - name: sentiment

        image: 192.168.30.20:5000/migu/sentiment:latest

...

        imagePullPolicy:

...

Execute command

...

languagebash
themeDJango
linenumberstrue

...

IfNotPresent

        ports:

        - containerPort: 9600

          protocol: TCP

          name: http

        resources:

          limits:

            cpu: 2

            memory: 4G

          requests:

            cpu: 2

            memory: 4G

Execute command as follow:

kubectl --kubeconfig /etc/karmada/karmada-apiserver.config

...

apply

...

-f

...

deployment.yaml

...

vi propagationpolicy.yaml

...

...

apiVersion:

...

...

kind:

...

PropagationPolicy

...

metadata:

...

  name:

...

sentiment-propagation

...

spec:

...

  resourceSelectors:

...

    - apiVersion:

...

apps/v1

...

      kind:

...

Deployment

      name:

...

sentiment

...

  placement:

...

Execute command

...

languagebash
themeDJango
linenumberstrue

...

    clusterAffinity:

      clusterNames:

        - member1

        - member2

    replicaScheduling:

      replicaDivisionPreference: Weighted

      replicaSchedulingType: Divided

      weightPreference:

        staticWeightList:

          - targetCluster:

              clusterNames:

                - member1

            weight: 1

          - targetCluster:

              clusterNames:

                - member2

            weight: 3

Execute commands as follow:

kubectl --kubeconfig /etc/karmada/karmada-apiserver.config

...

apply

...

-f

...

propagationpolicy.yaml

...

7、Retry7.Retry, Check the deployment status
You We can check deployment status, don't need to access member cluster.  Execute command

Image Removed

in our member cluseter,you can see commands as follow:

Image Added

In worker cluseter,we can see the result as follow:Image Removed

Image Added

...

Image Added

Case 2. Rescheduling

...

       Users could divide their replicas of a workload into different clusters in terms of available resources of member clusters. However, the scheduler's decisions are influenced by its view of Karmada at that point of time when a new ResourceBinding appears for scheduling. As Karmada multi-clusters are very dynamic and their state changes over time, there may be desire to move already running replicas to some other clusters due to lack of resources for the cluster. This may happen when some nodes of a cluster failed and the cluster does not have enough resource to accommodate their pods or the estimators have some estimation deviation, which is inevitable.

Member cluster component is ready

Ensure that all member clusters have joined Karmada and their corresponding karmada-scheduler-estimator is installed into karmada-host.

Check member clusters using the following command:

Image Removed

Descheduler has been installed

Ensure that the karmada-descheduler has been installed .

Image Removed

Create a Deployments

1.First we create a deployment with 2 replicas and divide them into 2

...

worker clusters.

...

...

apiVersion:

...

...

kind:

...

PropagationPolicy

...

metadata:

...

  name:

...

sentiment-propagation

...

spec:

...

  resourceSelectors:

...

    - apiVersion:

...

apps/v1

...

      kind:

...

Deployment

      name:

...

sentiment

...

  placement:

...

    clusterAffinity:

      clusterNames:

        - member1

        - member2

    replicaScheduling:

      replicaDivisionPreference: Weighted

      replicaSchedulingType: Divided

      weightPreference:

        dynamicWeight: AvailableReplicas

---

apiVersion: apps/v1

kind: Deployment

metadata:

  name: sentiment

  labels:

    app: sentiment

  namespace: migu

spec:

  replicas: 2

  selector:

    matchLabels:

      app: sentiment

  template:

    metadata:

      labels:

        app: sentiment

    spec:

      imagePullSecrets:

      - name: harborsecret

      containers:

      - name: sentiment

        image: 192.168.30.20:5000/migu/sentiment:latest

...

        imagePullPolicy:

...

IfNotPresent

        ports:

        - containerPort: 9600

          protocol: TCP

          name: http

        resources:

          limits:

            cpu: 2

            memory: 4G

          requests:

            cpu: 2

            memory: 4G


It is possible for these 2 replicas to be evenly divided into 2

...

worker clusters, that is, one replica in each cluster.

2.Now we taint all nodes in

...

worker1 and evict the replica.

...

...

$

...

kubectl

...

--context

...

worker1 cordon control-plane

...

#

...

delete

...

the

...

pod

...

in

...

cluster

...

worker1

$

...

kubectl

...

--context

...

worker1 delete

...

pod

...

-l

...

app=sentiment

...


A new pod will be created and cannot be scheduled

...

by kube-scheduler due to lack of resources.

...

...

#

...

the

...

state

...

of

...

pod

...

in

...

cluster

...

worker1 is

...

pending

...

$

...

kubectl

...

--context

...

worker1 get

...

pod

NAME                          READY   STATUS    RESTARTS   AGE

sentiment-6fd4c7867c-

...

jkcqn   

...

1/1     Pending   0          80s


3.After about 5 to 7 minutes, the pod in

...

worker1 will be evicted and scheduled to other available clusters.

...

...

#

...

get

...

the

...

pod

...

in

...

cluster

...

worker1

$

...

kubectl

...

--context

...

worker1 get

...

pod

...

No

...

resources

...

found

...

in

...

default

...

namespace.

...

#

...

get

...

a

...

list

...

of

...

pods

...

in

...

cluster

...

worker2

$

...

kubectl

...

--context

...

worker2 get

...

pod

NAME                         READY   STATUS    RESTARTS   AGE

sentiment-6fd4c7867c-hvzfd

...

 

...

1/1     Running   0          6m3s

sentiment-6fd4c7867c-vrmnm

...

 

...

1/1     Running   0          4s




Test Dashboards

N/A


Additional Testing

N/A

Bottlenecks/Errata

...