Skip to content

Commit 7494848

Browse files
authored
Merge pull request #41 from ucloud/v0.2.3
V0.2.3
2 parents a914a8e + 09dfb7e commit 7494848

File tree

24 files changed

+518
-85
lines changed

24 files changed

+518
-85
lines changed

deploy/cluster/cluster_role.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ rules:
1919
- ""
2020
resources:
2121
- configmaps
22+
- pods/exec
2223
- secrets
2324
- services
2425
- events

deploy/namespace/role.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ rules:
1919
- ""
2020
resources:
2121
- configmaps
22+
- pods/exec
2223
- secrets
2324
- services
2425
- events

go.sum

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDD
203203
github.com/docker/libnetwork v0.0.0-20180830151422-a9cd636e3789/go.mod h1:93m0aTqz6z+g32wla4l4WxTrdtvBRmVzYRkYvasA5Z8=
204204
github.com/docker/libtrust v0.0.0-20150526203908-9cbd2a1374f4/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE=
205205
github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
206+
github.com/docker/spdystream v0.0.0-20181023171402-6480d4af844c h1:ZfSZ3P3BedhKGUhzj7BQlPSU4OvT6tfOKe3DVHzOA7s=
206207
github.com/docker/spdystream v0.0.0-20181023171402-6480d4af844c/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
207208
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
208209
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
@@ -211,7 +212,9 @@ github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1
211212
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
212213
github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
213214
github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
215+
github.com/elazarl/goproxy v0.0.0-20190421051319-9d40249d3c2f h1:8GDPb0tCY8LQ+OJ3dbHb5sA6YZWXFORQYZx5sdsTlMs=
214216
github.com/elazarl/goproxy v0.0.0-20190421051319-9d40249d3c2f/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
217+
github.com/elazarl/goproxy/ext v0.0.0-20190421051319-9d40249d3c2f h1:AUj1VoZUfhPhOPHULCQQDnGhRelpFWHMLhQVWDsS0v4=
215218
github.com/elazarl/goproxy/ext v0.0.0-20190421051319-9d40249d3c2f/go.mod h1:gNh8nYJoAm43RfaxurUnxr+N1PwuFV3ZMl/efxlIlY8=
216219
github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
217220
github.com/emicklei/go-restful v2.9.3+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=

hack/e2e.sh

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ if [[ -z $TEST_TIMEOUT ]]; then
2424
fi
2525

2626
echo "run e2e tests..."
27-
echo "cd ${GOPATH}/src/${REPO_PATH} && ginkgo -v --skip=${GINKGO_SKIP} --timeout=${TEST_TIMEOUT} test/e2e/... -- --rename-command-path=${GOPATH}/src/${REPO_PATH}/test/e2e --rename-command-file=rename.conf"
28-
cd ${GOPATH}/src/${REPO_PATH} && ginkgo -v --skip=${GINKGO_SKIP} --timeout=${TEST_TIMEOUT} test/e2e/... -- --rename-command-path=${GOPATH}/src/${REPO_PATH}/test/e2e --rename-command-file=rename.conf
27+
e2ecmd="cd ${GOPATH}/src/${REPO_PATH} && ginkgo -v --mod=vendor --failFast --skip=${GINKGO_SKIP} --timeout=${TEST_TIMEOUT} test/e2e/... -- --rename-command-path=${GOPATH}/src/${REPO_PATH}/test/e2e --rename-command-file=rename.conf"
28+
echo "${e2ecmd}"
29+
eval "${e2ecmd}"
30+
2931

pkg/apis/redis/v1alpha1/constants.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ const (
4545
ClusterStatusRebalancing ClusterStatus = "Rebalancing"
4646
// ClusterStatusRollingUpdate ClusterStatus RollingUpdate
4747
ClusterStatusRollingUpdate ClusterStatus = "RollingUpdate"
48+
// ClusterStatusResetPassword ClusterStatus ResetPassword
49+
ClusterStatusResetPassword ClusterStatus = "ResetPassword"
4850
)
4951

5052
// NodesPlacementInfo Redis Nodes placement mode information

pkg/apis/redis/v1alpha1/distributedrediscluster_types.go

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,25 @@ type DistributedRedisClusterSpec struct {
1515
// INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
1616
// Important: Run "operator-sdk generate k8s" to regenerate code after modifying this file
1717
// Add custom validation using kubebuilder tags: https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html
18-
Image string `json:"image,omitempty"`
19-
Command []string `json:"command,omitempty"`
20-
MasterSize int32 `json:"masterSize,omitempty"`
21-
ClusterReplicas int32 `json:"clusterReplicas,omitempty"`
22-
ServiceName string `json:"serviceName,omitempty"`
23-
Config map[string]string `json:"config,omitempty"`
24-
Affinity *corev1.Affinity `json:"affinity,omitempty"`
25-
NodeSelector map[string]string `json:"nodeSelector,omitempty"`
26-
ToleRations []corev1.Toleration `json:"toleRations,omitempty"`
27-
SecurityContext *corev1.PodSecurityContext `json:"securityContext,omitempty"`
28-
Annotations map[string]string `json:"annotations,omitempty"`
29-
Storage *RedisStorage `json:"storage,omitempty"`
30-
Resources *corev1.ResourceRequirements `json:"resources,omitempty"`
31-
PasswordSecret *corev1.LocalObjectReference `json:"passwordSecret,omitempty"`
32-
Monitor *AgentSpec `json:"monitor,omitempty"`
33-
Init *InitSpec `json:"init,omitempty"`
18+
Image string `json:"image,omitempty"`
19+
ImagePullPolicy corev1.PullPolicy `json:"imagePullPolicy,omitempty"`
20+
ImagePullSecrets []corev1.LocalObjectReference `json:"imagePullSecrets,omitempty"`
21+
Command []string `json:"command,omitempty"`
22+
Env []corev1.EnvVar `json:"env,omitempty"`
23+
MasterSize int32 `json:"masterSize,omitempty"`
24+
ClusterReplicas int32 `json:"clusterReplicas,omitempty"`
25+
ServiceName string `json:"serviceName,omitempty"`
26+
Config map[string]string `json:"config,omitempty"`
27+
Affinity *corev1.Affinity `json:"affinity,omitempty"`
28+
NodeSelector map[string]string `json:"nodeSelector,omitempty"`
29+
ToleRations []corev1.Toleration `json:"toleRations,omitempty"`
30+
SecurityContext *corev1.PodSecurityContext `json:"securityContext,omitempty"`
31+
Annotations map[string]string `json:"annotations,omitempty"`
32+
Storage *RedisStorage `json:"storage,omitempty"`
33+
Resources *corev1.ResourceRequirements `json:"resources,omitempty"`
34+
PasswordSecret *corev1.LocalObjectReference `json:"passwordSecret,omitempty"`
35+
Monitor *AgentSpec `json:"monitor,omitempty"`
36+
Init *InitSpec `json:"init,omitempty"`
3437
}
3538

3639
type AgentSpec struct {

pkg/apis/redis/v1alpha1/redisclusterbackup_types.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,12 @@ const (
1616
// RedisClusterBackupSpec defines the desired state of RedisClusterBackup
1717
// +k8s:openapi-gen=true
1818
type RedisClusterBackupSpec struct {
19-
Image string `json:"image,omitempty"`
20-
RedisClusterName string `json:"redisClusterName"`
21-
Storage *RedisStorage `json:"storage,omitempty"`
22-
store.Backend `json:",inline"`
23-
PodSpec *PodSpec `json:"podSpec,omitempty"`
19+
Image string `json:"image,omitempty"`
20+
RedisClusterName string `json:"redisClusterName"`
21+
Storage *RedisStorage `json:"storage,omitempty"`
22+
store.Backend `json:",inline"`
23+
PodSpec *PodSpec `json:"podSpec,omitempty"`
24+
ActiveDeadlineSeconds *int64 `json:"activeDeadlineSeconds,omitempty"`
2425
}
2526

2627
type PodSpec struct {

pkg/controller/distributedrediscluster/distributedrediscluster_controller.go

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@ import (
88
"github.com/spf13/pflag"
99
"k8s.io/apimachinery/pkg/api/errors"
1010
"k8s.io/apimachinery/pkg/runtime"
11+
runtimeschema "k8s.io/apimachinery/pkg/runtime/schema"
12+
"k8s.io/apimachinery/pkg/runtime/serializer"
13+
"k8s.io/client-go/kubernetes/scheme"
1114
"sigs.k8s.io/controller-runtime/pkg/client"
15+
"sigs.k8s.io/controller-runtime/pkg/client/apiutil"
1216
"sigs.k8s.io/controller-runtime/pkg/controller"
1317
"sigs.k8s.io/controller-runtime/pkg/event"
1418
"sigs.k8s.io/controller-runtime/pkg/handler"
@@ -22,8 +26,10 @@ import (
2226
"github.com/ucloud/redis-cluster-operator/pkg/config"
2327
"github.com/ucloud/redis-cluster-operator/pkg/controller/heal"
2428
clustermanger "github.com/ucloud/redis-cluster-operator/pkg/controller/manager"
29+
"github.com/ucloud/redis-cluster-operator/pkg/exec"
2530
"github.com/ucloud/redis-cluster-operator/pkg/k8sutil"
2631
"github.com/ucloud/redis-cluster-operator/pkg/redisutil"
32+
"github.com/ucloud/redis-cluster-operator/pkg/resources/statefulsets"
2733
"github.com/ucloud/redis-cluster-operator/pkg/utils"
2834
)
2935

@@ -55,11 +61,22 @@ func FlagSet() *pflag.FlagSet {
5561
// Add creates a new DistributedRedisCluster Controller and adds it to the Manager. The Manager will set fields on the Controller
5662
// and Start it when the Manager is Started.
5763
func Add(mgr manager.Manager) error {
58-
return add(mgr, newReconciler(mgr))
64+
gvk := runtimeschema.GroupVersionKind{
65+
Group: "",
66+
Version: "v1",
67+
Kind: "Pod",
68+
}
69+
restClient, err := apiutil.RESTClientForGVK(gvk, mgr.GetConfig(), serializer.NewCodecFactory(scheme.Scheme))
70+
if err != nil {
71+
return err
72+
}
73+
execer := exec.NewRemoteExec(restClient, mgr.GetConfig(), log)
74+
75+
return add(mgr, newReconciler(mgr, execer))
5976
}
6077

6178
// newReconciler returns a new reconcile.Reconciler
62-
func newReconciler(mgr manager.Manager) reconcile.Reconciler {
79+
func newReconciler(mgr manager.Manager, execer exec.IExec) reconcile.Reconciler {
6380
reconiler := &ReconcileDistributedRedisCluster{client: mgr.GetClient(), scheme: mgr.GetScheme()}
6481
reconiler.statefulSetController = k8sutil.NewStatefulSetController(reconiler.client)
6582
reconiler.serviceController = k8sutil.NewServiceController(reconiler.client)
@@ -68,6 +85,7 @@ func newReconciler(mgr manager.Manager) reconcile.Reconciler {
6885
reconiler.crController = k8sutil.NewCRControl(reconiler.client)
6986
reconiler.ensurer = clustermanger.NewEnsureResource(reconiler.client, log)
7087
reconiler.checker = clustermanger.NewCheck(reconiler.client)
88+
reconiler.execer = execer
7189
return reconiler
7290
}
7391

@@ -136,6 +154,7 @@ type ReconcileDistributedRedisCluster struct {
136154
scheme *runtime.Scheme
137155
ensurer clustermanger.IEnsureResource
138156
checker clustermanger.ICheck
157+
execer exec.IExec
139158
statefulSetController k8sutil.IStatefulSetControl
140159
serviceController k8sutil.IServiceControl
141160
pdbController k8sutil.IPodDisruptionBudgetControl
@@ -208,7 +227,7 @@ func (r *ReconcileDistributedRedisCluster) Reconcile(request reconcile.Request)
208227
return reconcile.Result{RequeueAfter: requeueAfter}, nil
209228
}
210229

211-
password, err := getClusterPassword(r.client, instance)
230+
password, err := statefulsets.GetClusterPassword(r.client, instance)
212231
if err != nil {
213232
return reconcile.Result{}, Kubernetes.Wrap(err, "getClusterPassword")
214233
}

pkg/controller/distributedrediscluster/helper.go

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
11
package distributedrediscluster
22

33
import (
4-
"context"
54
"fmt"
65
"net"
76
"time"
87

98
"github.com/go-logr/logr"
109
corev1 "k8s.io/api/core/v1"
11-
"k8s.io/apimachinery/pkg/types"
12-
"sigs.k8s.io/controller-runtime/pkg/client"
1310

1411
redisv1alpha1 "github.com/ucloud/redis-cluster-operator/pkg/apis/redis/v1alpha1"
1512
"github.com/ucloud/redis-cluster-operator/pkg/config"
@@ -24,30 +21,13 @@ var (
2421
}
2522
)
2623

27-
const passwordKey = "password"
28-
2924
func getLabels(cluster *redisv1alpha1.DistributedRedisCluster) map[string]string {
3025
dynLabels := map[string]string{
3126
redisv1alpha1.LabelClusterName: cluster.Name,
3227
}
3328
return utils.MergeLabels(defaultLabels, dynLabels, cluster.Labels)
3429
}
3530

36-
func getClusterPassword(client client.Client, cluster *redisv1alpha1.DistributedRedisCluster) (string, error) {
37-
if cluster.Spec.PasswordSecret == nil {
38-
return "", nil
39-
}
40-
secret := &corev1.Secret{}
41-
err := client.Get(context.TODO(), types.NamespacedName{
42-
Name: cluster.Spec.PasswordSecret.Name,
43-
Namespace: cluster.Namespace,
44-
}, secret)
45-
if err != nil {
46-
return "", err
47-
}
48-
return string(secret.Data[passwordKey]), nil
49-
}
50-
5131
// newRedisAdmin builds and returns new redis.Admin from the list of pods
5232
func newRedisAdmin(pods []*corev1.Pod, password string, cfg *config.Redis, reqLogger logr.Logger) (redisutil.IAdmin, error) {
5333
nodesAddrs := []string{}

pkg/controller/distributedrediscluster/status.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ func SetClusterUpdating(status *redisv1alpha1.DistributedRedisClusterStatus, rea
3838
status.Reason = reason
3939
}
4040

41+
func SetClusterResetPassword(status *redisv1alpha1.DistributedRedisClusterStatus, reason string) {
42+
status.Status = redisv1alpha1.ClusterStatusResetPassword
43+
status.Reason = reason
44+
}
45+
4146
func buildClusterStatus(clusterInfos *redisutil.ClusterInfos, pods []*corev1.Pod,
4247
cluster *redisv1alpha1.DistributedRedisCluster, reqLogger logr.Logger) *redisv1alpha1.DistributedRedisClusterStatus {
4348
oldStatus := cluster.Status

0 commit comments

Comments
 (0)