Skip to content

Commit

Permalink
Merge branch 'master' into aylei/support-dir
Browse files Browse the repository at this point in the history
  • Loading branch information
cofyc authored Feb 6, 2020
2 parents 3e71437 + 0329716 commit 0df4933
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 75 deletions.
28 changes: 16 additions & 12 deletions ci/pingcap_tidb_operator_build_kind.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,19 @@ spec:
image: gcr.io/k8s-testimages/kubekins-e2e:v20191108-9467d02-master
command:
- runner.sh
- sleep
- 99d
# Clean containers on TERM signal in root process to avoid cgroup leaking.
# https://github.com/pingcap/tidb-operator/issues/1603#issuecomment-582402196
- exec
- bash
- -c
- |
function clean() {
echo "info: clean all containers to avoid cgroup leaking"
docker kill $(docker ps -q) || true
docker system prune -af || true
}
trap clean TERM
sleep 1d & wait
# we need privileged mode in order to do docker in docker
securityContext:
privileged: true
Expand Down Expand Up @@ -60,21 +71,14 @@ spec:
emptyDir: {}
- name: docker-graph
emptyDir: {}
# we limit nodes to run to avoid some issues we found in our cluster, e.g.
# https://github.com/pingcap/tidb-operator/issues/1603
affinity:
# worker nodes only
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- 172.16.5.64
- 172.16.5.65
- 172.16.5.67
- 172.16.5.68
- 172.16.5.70
- key: node-role.kubernetes.io/master
operator: DoesNotExist
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
Expand Down
11 changes: 10 additions & 1 deletion tests/actions.go
Original file line number Diff line number Diff line change
Expand Up @@ -814,6 +814,11 @@ func (oa *operatorActions) CleanTidbCluster(info *TidbClusterConfig) error {
return fmt.Errorf("failed to delete dir pod %v", err)
}

err = oa.kubeCli.CoreV1().Pods(info.Namespace).Delete(blockWriterPodName(info), nil)
if err != nil && !errors.IsNotFound(err) {
return fmt.Errorf("failed to delete blockwriter pod %v", err)
}

err = oa.kubeCli.CoreV1().Secrets(info.Namespace).Delete(info.InitSecretName, &metav1.DeleteOptions{})
if err != nil && !errors.IsNotFound(err) {
return fmt.Errorf("failed to delete secret: %s, %v", info.InitSecretName, err)
Expand Down Expand Up @@ -1034,7 +1039,7 @@ func (oa *operatorActions) getBlockWriterPod(info *TidbClusterConfig, database s
return &corev1.Pod{
ObjectMeta: metav1.ObjectMeta{
Namespace: info.Namespace,
Name: "blockwriter",
Name: blockWriterPodName(info),
Labels: map[string]string{
"app": "blockwriter",
},
Expand Down Expand Up @@ -3471,3 +3476,7 @@ func StartValidatingAdmissionWebhookServerOrDie(context *apimachinery.CertContex
panic(fmt.Sprintf("failed to start webhook server %v", err))
}
}

func blockWriterPodName(info *TidbClusterConfig) string {
return fmt.Sprintf("%s-blockwriter", info.ClusterName)
}
1 change: 1 addition & 0 deletions tests/cmd/stability/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -418,6 +418,7 @@ func newTidbClusterConfig(ns, clusterName string) *tests.TidbClusterConfig {
PDImage: fmt.Sprintf("pingcap/pd:%s", tidbVersion),
TiKVImage: fmt.Sprintf("pingcap/tikv:%s", tidbVersion),
TiDBImage: fmt.Sprintf("pingcap/tidb:%s", tidbVersion),
PumpImage: fmt.Sprintf("pingcap/tidb-binlog:%s", tidbVersion),
StorageClassName: "local-storage",
UserName: "root",
Password: "admin",
Expand Down
121 changes: 59 additions & 62 deletions tests/e2e/tidbcluster/tidbcluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -348,27 +348,23 @@ var _ = ginkgo.Describe("[tidb-operator] TiDBCluster", func() {
})
framework.ExpectNoError(err)

ginkgo.By(fmt.Sprintf("Sync TiDB service properties"))
ginkgo.By("Sync TiDB service properties")

ginkgo.By("Updating TiDB service")
svcType := corev1.ServiceTypeNodePort
trafficPolicy := corev1.ServiceExternalTrafficPolicyTypeLocal

err = wait.PollImmediate(5*time.Second, 5*time.Minute, func() (bool, error) {
tc, err := cli.PingcapV1alpha1().TidbClusters(ns).Get(tcName, metav1.GetOptions{})
framework.ExpectNoError(err, "Expected get TiDB cluster")
err = controller.GuaranteedUpdate(genericCli, tc, func() error {
tc.Spec.TiDB.Service.Type = svcType
tc.Spec.TiDB.Service.ExternalTrafficPolicy = &trafficPolicy
tc.Spec.TiDB.Service.Annotations = map[string]string{
"test": "test",
}
_, err = cli.PingcapV1alpha1().TidbClusters(ns).Update(tc)
if err != nil && !errors.IsConflict(err) {
return false, err
}
if errors.IsConflict(err) {
e2elog.Logf("conflicts when updating tidbcluster, retry...")
return false, nil
}
return nil
})
framework.ExpectNoError(err)

ginkgo.By("Waiting for the TiDB service to be synced")
err = wait.PollImmediate(5*time.Second, 5*time.Minute, func() (bool, error) {
svc, err := c.CoreV1().Services(ns).Get(controller.TiDBMemberName(tcName), metav1.GetOptions{})
if err != nil {
if errors.IsNotFound(err) {
Expand Down Expand Up @@ -414,51 +410,6 @@ var _ = ginkgo.Describe("[tidb-operator] TiDBCluster", func() {
tc, err := cli.PingcapV1alpha1().TidbClusters(cluster.Namespace).Get(cluster.ClusterName, metav1.GetOptions{})
framework.ExpectNoError(err, "Expected get tidbcluster")

pullPolicy := corev1.PullIfNotPresent
tc.Spec.Pump = &v1alpha1.PumpSpec{
BaseImage: "pingcap/tidb-binlog",
ComponentSpec: v1alpha1.ComponentSpec{
Version: &cluster.ClusterVersion,
ImagePullPolicy: &pullPolicy,
Affinity: &corev1.Affinity{
PodAntiAffinity: &corev1.PodAntiAffinity{
PreferredDuringSchedulingIgnoredDuringExecution: []corev1.WeightedPodAffinityTerm{
{
PodAffinityTerm: corev1.PodAffinityTerm{
Namespaces: []string{cluster.Namespace},
TopologyKey: "rack",
},
Weight: 50,
},
},
},
},
Tolerations: []corev1.Toleration{
{
Effect: corev1.TaintEffectNoSchedule,
Key: "node-role",
Operator: corev1.TolerationOpEqual,
Value: "tidb",
},
},
SchedulerName: pointer.StringPtr("default-scheduler"),
ConfigUpdateStrategy: &updateStrategy,
},
Replicas: 1,
StorageClassName: pointer.StringPtr("local-storage"),
ResourceRequirements: corev1.ResourceRequirements{
Requests: corev1.ResourceList{
corev1.ResourceStorage: resource.MustParse("10Gi"),
},
},
GenericConfig: tcconfig.New(map[string]interface{}{
"addr": "0.0.0.0:8250",
"gc": 7,
"data-dir": "/data",
"heartbeat-interval": 2,
}),
}

// If using advanced statefulset, we must upgrade all Kubernetes statefulsets to advanced statefulsets first.
if ocfg.Enabled(features.AdvancedStatefulSet) {
stsList, err := c.AppsV1().StatefulSets(ns).List(metav1.ListOptions{})
Expand All @@ -475,7 +426,53 @@ var _ = ginkgo.Describe("[tidb-operator] TiDBCluster", func() {
oldRev := oldPumpSet.Status.CurrentRevision
framework.ExpectEqual(oldPumpSet.Status.UpdateRevision, oldRev, "Expected pump is not upgrading")

tcUpdated, err := cli.PingcapV1alpha1().TidbClusters(tc.Namespace).Update(tc)
err = controller.GuaranteedUpdate(genericCli, tc, func() error {
pullPolicy := corev1.PullIfNotPresent
tc.Spec.Pump = &v1alpha1.PumpSpec{
BaseImage: "pingcap/tidb-binlog",
ComponentSpec: v1alpha1.ComponentSpec{
Version: &cluster.ClusterVersion,
ImagePullPolicy: &pullPolicy,
Affinity: &corev1.Affinity{
PodAntiAffinity: &corev1.PodAntiAffinity{
PreferredDuringSchedulingIgnoredDuringExecution: []corev1.WeightedPodAffinityTerm{
{
PodAffinityTerm: corev1.PodAffinityTerm{
Namespaces: []string{cluster.Namespace},
TopologyKey: "rack",
},
Weight: 50,
},
},
},
},
Tolerations: []corev1.Toleration{
{
Effect: corev1.TaintEffectNoSchedule,
Key: "node-role",
Operator: corev1.TolerationOpEqual,
Value: "tidb",
},
},
SchedulerName: pointer.StringPtr("default-scheduler"),
ConfigUpdateStrategy: &updateStrategy,
},
Replicas: 1,
StorageClassName: pointer.StringPtr("local-storage"),
ResourceRequirements: corev1.ResourceRequirements{
Requests: corev1.ResourceList{
corev1.ResourceStorage: resource.MustParse("10Gi"),
},
},
GenericConfig: tcconfig.New(map[string]interface{}{
"addr": "0.0.0.0:8250",
"gc": 7,
"data-dir": "/data",
"heartbeat-interval": 2,
}),
}
return nil
})
framework.ExpectNoError(err, "Expected update tc")

err = wait.PollImmediate(5*time.Second, 5*time.Minute, func() (bool, error) {
Expand All @@ -487,7 +484,7 @@ var _ = ginkgo.Describe("[tidb-operator] TiDBCluster", func() {
e2elog.Logf("error get pump statefulset: %v", err)
return false, nil
}
if !metav1.IsControlledBy(pumpSet, tcUpdated) {
if !metav1.IsControlledBy(pumpSet, tc) {
e2elog.Logf("expect pump staetfulset adopted by tidbcluster, still waiting...")
return false, nil
}
Expand All @@ -509,7 +506,7 @@ var _ = ginkgo.Describe("[tidb-operator] TiDBCluster", func() {
e2elog.Logf("error get pump configmap: %v", err)
return false, nil
}
if !metav1.IsControlledBy(pumpConfigMap, tcUpdated) {
if !metav1.IsControlledBy(pumpConfigMap, tc) {
e2elog.Logf("expect pump configmap adopted by tidbcluster, still waiting...")
return false, nil
}
Expand All @@ -522,7 +519,7 @@ var _ = ginkgo.Describe("[tidb-operator] TiDBCluster", func() {
e2elog.Logf("error get pump peer service: %v", err)
return false, nil
}
if !metav1.IsControlledBy(pumpPeerSvc, tcUpdated) {
if !metav1.IsControlledBy(pumpPeerSvc, tc) {
e2elog.Logf("expect pump peer service adopted by tidbcluster, still waiting...")
return false, nil
}
Expand Down

0 comments on commit 0df4933

Please sign in to comment.