Skip to content

Commit 79fd209

Browse files
committed
Add multiple flag to configure the sidecar inject
- Improve documentation
1 parent 2c9f90d commit 79fd209

File tree

4 files changed

+84
-21
lines changed

4 files changed

+84
-21
lines changed

.gitignore

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
1-
cloudsql-proxy-inject-linux-amd64
2-
cloudsql-proxy-inject-darwin-amd64
1+
cloudsql-proxy-inject*

Makefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ BINARY=cloudsql-proxy-inject
22

33
.PHONY: build-linux build-darwin
44

5+
${BINARY}:
6+
@CGO_ENABLED=0 go build -o ${BINARY} -a -ldflags '-s' -installsuffix cgo main.go
7+
58
build-linux:
69
@CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o ${BINARY}-linux-amd64 -a -ldflags '-s' -installsuffix cgo main.go
710

README.md

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,30 @@
1-
# cloudsql-proxy-inject
1+
# CloudSQL Proxy Inject (cloudsql-proxy-inject)
2+
3+
Inject a [CloudSQL Proxy](https://github.com/GoogleCloudPlatform/cloudsql-proxy/blob/master/Kubernetes.md) sidecar into a [Kubernetes deployment](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/) manifest.
4+
5+
## Build
6+
### Linux
7+
```sh
8+
$ make build-linux
9+
```
10+
### macos
11+
```
12+
$ make build-darwin
13+
```
14+
15+
## Usage
16+
```
17+
usage: cloudsql-proxy-inject --path=PATH --instance=INSTANCE --region=REGION --project=PROJECT [<flags>]
18+
19+
Flags:
20+
--help Show context-sensitive help (also try --help-long and --help-man).
21+
--path=PATH Deployment file path where to inject clousql proxy (eg. ./my-deploy-manifest.yaml)
22+
--instance=INSTANCE CloudSQL instance (eg. my-clousql-instance=tcp:5432)
23+
--region=REGION GCP region (eg. europe-west1)
24+
--project=PROJECT GCP project ID (eg. ricardo)
25+
--cpu-request="5m" CPU request of the sidecar container
26+
--memory-request="8Mi" Memory request of the sidecar container
27+
--cpu-limit="100m" CPU limit of the sidecar container
28+
--memory-limit="128Mi" Memory limit of the sidecar container
29+
--proxy-version="1.11" CloudSQL proxy version
30+
```

main.go

Lines changed: 50 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ package main
22

33
import (
44
"encoding/json"
5+
"fmt"
56
"os"
67

78
"github.com/go-yaml/yaml"
8-
"gopkg.in/alecthomas/kingpin.v2"
9+
kingpin "gopkg.in/alecthomas/kingpin.v2"
910
"k8s.io/api/apps/v1beta1"
1011
v1 "k8s.io/api/core/v1"
1112
"k8s.io/apimachinery/pkg/api/resource"
@@ -14,26 +15,23 @@ import (
1415
)
1516

1617
var (
17-
path = kingpin.Arg("path", "Deployment file path").Required().String()
18+
path = kingpin.Flag("path", "Deployment file path where to inject clousql proxy (eg. ./my-deploy-manifest.yaml)").Required().String()
19+
instance = kingpin.Flag("instance", "CloudSQL instance (eg. my-clousql-instance=tcp:5432)").Required().String()
20+
region = kingpin.Flag("region", "GCP region (eg. europe-west1)").Required().String()
21+
project = kingpin.Flag("project", "GCP project ID (eg. ricardo)").Required().String()
22+
cpuRequest = kingpin.Flag("cpu-request", "CPU request of the sidecar container").Default("5m").String()
23+
memoryRequest = kingpin.Flag("memory-request", "Memory request of the sidecar container").Default("8Mi").String()
24+
cpuLimit = kingpin.Flag("cpu-limit", "CPU limit of the sidecar container").Default("100m").String()
25+
memoryLimit = kingpin.Flag("memory-limit", "Memory limit of the sidecar container").Default("128Mi").String()
26+
proxyVersion = kingpin.Flag("proxy-version", "CloudSQL proxy version").Default("1.11").String()
1827
)
1928

2029
func main() {
2130
kingpin.Parse()
2231

2332
var cloudSQLProxyContainer v1.Container
2433
{
25-
limitCPUQt := resource.NewMilliQuantity(100, resource.BinarySI)
26-
limitMemoryQt := resource.NewQuantity(128*1024e3, resource.BinarySI)
27-
limits := v1.ResourceList{
28-
v1.ResourceCPU: *limitCPUQt,
29-
v1.ResourceMemory: *limitMemoryQt,
30-
}
31-
requestCPUQt := resource.NewMilliQuantity(5, resource.BinarySI)
32-
requestMemoryQt := resource.NewMilliQuantity(8, resource.BinarySI)
33-
requests := v1.ResourceList{
34-
v1.ResourceCPU: *requestCPUQt,
35-
v1.ResourceMemory: *requestMemoryQt,
36-
}
34+
requestResources, limitResources := setResources(*cpuRequest, *memoryRequest, *cpuLimit, *memoryLimit)
3735

3836
var runAsUser int64 = 2
3937
var allowPrivilegeEscalation = false
@@ -51,9 +49,9 @@ func main() {
5149

5250
cloudSQLProxyContainer = v1.Container{}
5351
cloudSQLProxyContainer.Name = "cloudsql-proxy"
54-
cloudSQLProxyContainer.Image = "gcr.io/cloudsql-docker/gce-proxy:1.11"
55-
cloudSQLProxyContainer.Command = []string{"/cloud_sql_proxy", "-instances=ricardo-dev-ch:europe-west1:ricardo-dev-postgres=tcp:5432", "-credential_file=/secrets/cloudsql/credentials.json"}
56-
cloudSQLProxyContainer.Resources = v1.ResourceRequirements{Limits: limits, Requests: requests}
52+
cloudSQLProxyContainer.Image = fmt.Sprintf("gcr.io/cloudsql-docker/gce-proxy:%s", *proxyVersion)
53+
cloudSQLProxyContainer.Command = []string{"/cloud_sql_proxy", fmt.Sprintf("-instances=%s:%s:%s", *project, *region, *instance), "-credential_file=/secrets/cloudsql/credentials.json"}
54+
cloudSQLProxyContainer.Resources = v1.ResourceRequirements{Requests: requestResources, Limits: limitResources}
5755
cloudSQLProxyContainer.SecurityContext = &securityContext
5856
cloudSQLProxyContainer.VolumeMounts = []v1.VolumeMount{volumeMount}
5957
}
@@ -68,7 +66,10 @@ func main() {
6866
}
6967
defer f.Close()
7068

71-
b, _ = json.Marshal(&cloudSQLProxyContainer)
69+
b, err = json.Marshal(&cloudSQLProxyContainer)
70+
if err != nil {
71+
panic(err)
72+
}
7273

7374
deploy := &v1beta1.Deployment{}
7475
err = json.Unmarshal(b, &deploy)
@@ -90,3 +91,34 @@ func main() {
9091
serializer := k8sjson.NewYAMLSerializer(k8sjson.DefaultMetaFactory, nil, nil)
9192
serializer.Encode(deploy, os.Stdout)
9293
}
94+
95+
func setResources(cpuRequest, memoryRequest, cpuLimit, memoryLimit string) (request v1.ResourceList, limit v1.ResourceList) {
96+
requestCPU, err := resource.ParseQuantity(cpuRequest)
97+
if err != nil {
98+
panic(err)
99+
}
100+
requestMemory, err := resource.ParseQuantity(memoryRequest)
101+
if err != nil {
102+
panic(err)
103+
}
104+
request = v1.ResourceList{
105+
v1.ResourceCPU: requestCPU,
106+
v1.ResourceMemory: requestMemory,
107+
}
108+
109+
limitCPU, err := resource.ParseQuantity(cpuLimit)
110+
if err != nil {
111+
panic(err)
112+
}
113+
limitMemory, err := resource.ParseQuantity(memoryLimit)
114+
if err != nil {
115+
panic(err)
116+
}
117+
118+
limit = v1.ResourceList{
119+
v1.ResourceCPU: limitCPU,
120+
v1.ResourceMemory: limitMemory,
121+
}
122+
123+
return request, limit
124+
}

0 commit comments

Comments
 (0)