58
58
git clone https://github.com/ahmetb/kubectx
59
59
cp kubectx/kube* /usr/local/bin
60
60
61
+ # Install kubectl aliases
62
+ cd $HOME
63
+ git clone https://github.com/ahmetb/kubectl-aliases.git
64
+ echo " [ -f ~/kubectl-aliases/.kubectl_aliases ] && source ~/kubectl-aliases/.kubectl_aliases" >> $HOME /.bashrc
65
+ source ~ /.bashrc
66
+
67
+
61
68
# Install kube ps1
62
69
cd $HOME
63
70
git clone https://github.com/jonmosco/kube-ps1.git
71
+ echo ' export KUBE_PS1_SYMBOL_ENABLE=false' >> ~ /.bashrc
64
72
echo ' source $HOME/kube-ps1/kube-ps1.sh' >> ~ /.bashrc
65
73
export VAR=" PS1='[\W \$ (kube_ps1)]\$ '"
66
74
echo $VAR >> ~ /.bashrc
67
75
source $HOME /.bashrc
68
76
77
+ # Create application frontend
78
+ git clone https://github.com/ameer00/advanced-kubernetes-bootcamp-1.git ~ /advanced-kubernetes-bootcamp # CHANGE THIS TO MASTER ONCE MERGED
79
+ cd $HOME /advanced-kubernetes-bootcamp/module-2/services/frontend
80
+ export PROJECT=$( gcloud info --format=' value(config.project)' )
81
+ gcloud builds submit -q --tag gcr.io/$PROJECT /frontend .
82
+ cd $HOME
83
+
84
+
85
+ # Create application backend
86
+ cd $HOME /advanced-kubernetes-bootcamp/module-2/services/backend
87
+ export PROJECT=$( gcloud info --format=' value(config.project)' )
88
+ gcloud builds submit -q --tag gcr.io/$PROJECT /backend .
89
+ cd $HOME
90
+
91
+
69
92
# Prometheus resources to install in the clusters
70
93
wget -O prom-rbac.yml https://storage.googleapis.com/stackdriver-prometheus-documentation/rbac-setup.yml
71
94
wget https://storage.googleapis.com/stackdriver-prometheus-documentation/prometheus-service.yml
@@ -86,10 +109,10 @@ for CLUSTER_INFO in ${WORKLOAD_CLUSTERS}; do
86
109
gcloud container clusters get-credentials ${CLUSTER_INFO_ARRAY[0]} --zone ${CLUSTER_INFO_ARRAY[1]}
87
110
export PROJECT=$( gcloud info --format=' value(config.project)' )
88
111
kubectx gke-${CLUSTER_INFO_ARRAY[1]: 3:- 3} =" gke_" $PROJECT " _" ${CLUSTER_INFO_ARRAY[1]} _${CLUSTER_INFO_ARRAY[0]}
89
- kubectl create clusterrolebinding client-cluster-admin-binding --clusterrole=cluster-admin --user=client
112
+ # kubectl create clusterrolebinding client-cluster-admin-binding --clusterrole=cluster-admin --user=client
90
113
# Needed for Spinnaker to be able to authenticate to the API
91
- export CLOUDSDK_CONTAINER_USE_CLIENT_CERTIFICATE=True
92
- gcloud container clusters get-credentials ${CLUSTER_INFO_ARRAY[0]} --zone ${CLUSTER_INFO_ARRAY[1]}
114
+ # export CLOUDSDK_CONTAINER_USE_CLIENT_CERTIFICATE=True
115
+ # gcloud container clusters get-credentials ${CLUSTER_INFO_ARRAY[0]} --zone ${CLUSTER_INFO_ARRAY[1]}
93
116
94
117
# Install Prometheus
95
118
export PROJECT=$( gcloud info --format=' value(config.project)' )
@@ -106,12 +129,21 @@ for CLUSTER_INFO in ${WORKLOAD_CLUSTERS}; do
106
129
until timeout 10 helm version; do sleep 10; done
107
130
108
131
# Install Istio
109
- export ISTIO_VERSION=0.8.0
132
+ export ISTIO_VERSION=1.0.2
110
133
curl -L https://git.io/getLatestIstio | sh -
111
134
pushd istio-${ISTIO_VERSION} /
112
- helm install -n istio --namespace=istio-system --set sidecar-injector.enabled=true install/kubernetes/helm/istio
135
+ kubectl apply -f install/kubernetes/helm/istio/templates/crds.yaml
136
+ helm install -n istio --namespace=istio-system install/kubernetes/helm/istio --set kiali.enabled=true --set tracing.enabled=true --set global.mtls.enabled=true --set grafana.enabled=true --set servicegraph.enabled=true
137
+ export PATH=$PATH :$HOME /istio-$ISTIO_VERSION /bin
113
138
popd
114
139
kubectl label namespace default istio-injection=enabled
140
+ kubectl apply -f $HOME /advanced-kubernetes-bootcamp/module-2/spinnaker/sa.yaml
141
+ kubectl config set-credentials ${CLUSTER_INFO_ARRAY[0]} -token-user --token $( kubectl get secret $( kubectl get serviceaccount spinnaker-service-account -n spinnaker -o jsonpath=' {.secrets[0].name}' ) -n spinnaker -o jsonpath=' {.data.token}' | base64 --decode)
142
+ kubectl config set-context gke-${CLUSTER_INFO_ARRAY[1]: 3:- 3} --user ${CLUSTER_INFO_ARRAY[0]} -token-user
143
+ kubectl apply -f $HOME /advanced-kubernetes-bootcamp/module-2/services/manifests/namespaces.yml
144
+ kubectl label namespace staging istio-injection=enabled
145
+ kubectl label namespace production istio-injection=enabled
146
+ sed -e s/PROJECT_ID/$PROJECT /g $HOME /advanced-kubernetes-bootcamp/module-2/services/manifests/seeding.yml | kubectl apply -f -
115
147
done
116
148
117
149
SOCKSHOP_FILTER=" resourceLabels.purpose=workloads AND resourceLabels.deployment=${DEPLOYMENT_NAME} AND resourceLabels.sock-shop=installed"
@@ -138,59 +170,103 @@ for CLUSTER_INFO in ${SPINNAKER_CLUSTERS}; do
138
170
# Wait for tiller to be running
139
171
until timeout 10 helm version; do sleep 10; done
140
172
141
- # Create Spinnaker service account and assign it storage.admin role.
173
+ # Create Spinnaker service account and assign it roles/owner role.
142
174
gcloud iam service-accounts create spinnaker-sa-${DEPLOYMENT_NAME} --display-name spinnaker-sa-${DEPLOYMENT_NAME}
143
175
export SPINNAKER_SA_EMAIL=$( gcloud iam service-accounts list \
144
176
--filter=" displayName:spinnaker-sa-${DEPLOYMENT_NAME} " \
145
177
--format=' value(email)' )
146
178
export PROJECT=$( gcloud info --format=' value(config.project)' )
147
179
148
180
# Move this to DM template
149
- gcloud projects add-iam-policy-binding ${PROJECT} --role roles/storage.admin --member serviceAccount:${SPINNAKER_SA_EMAIL}
181
+ gcloud projects add-iam-policy-binding ${PROJECT} --role roles/owner --member serviceAccount:${SPINNAKER_SA_EMAIL}
150
182
gcloud iam service-accounts keys create spinnaker-key.json --iam-account ${SPINNAKER_SA_EMAIL}
151
183
export BUCKET=${PROJECT} -${DEPLOYMENT_NAME}
184
+ export BUCKET_CONFIG=${PROJECT} -spinnaker
152
185
gsutil mb -c regional -l us-central1 gs://${BUCKET}
186
+ gsutil mb -c regional -l us-central1 gs://${BUCKET_CONFIG}
187
+
188
+ # Setup Spinnaker GCS bucket
189
+ export PROJECT=$( gcloud info --format=' value(config.project)' )
190
+ export JSON=$( cat $HOME /spinnaker-key.json)
191
+
192
+ # Store application manifests in GCS bucket
193
+ export PROJECT=$( gcloud info --format=' value(config.project)' )
194
+ sed -e s/PROJECT_ID/$PROJECT /g $HOME /advanced-kubernetes-bootcamp/module-2/services/manifests/frontend.yml | gsutil cp - gs://$PROJECT -spinnaker/manifests/frontend.yml
195
+ sed -e s/PROJECT_ID/$PROJECT /g $HOME /advanced-kubernetes-bootcamp/module-2/services/manifests/backend.yml | gsutil cp - gs://$PROJECT -spinnaker/manifests/backend.yml
153
196
154
- # Use upstream once this PR is merged: https://github.com/kubernetes/charts/pull/5456
155
- # git clone https://github.com/viglesiasce/charts -b mcs
156
- # pushd charts/stable/spinnaker
157
- # helm dep build
158
- # popd
159
197
160
- kubectl create secret generic --from-file=config=${HOME} /.kube/config my-kubeconfig
198
+ # Make GCR repo public for all users
199
+ export PROJECT=$( gcloud info --format=' value(config.project)' )
200
+ gsutil iam ch allUsers:objectViewer gs://artifacts.$PROJECT .appspot.com
201
+
202
+ # Create PubSub topic for GCR
203
+ export PROJECT=$( gcloud info --format=' value(config.project)' )
204
+ export GCR_SUB=my-gcr-sub
205
+ export GCR_TOPIC=" projects/${PROJECT} /topics/gcr"
206
+ # gcloud pubsub topics create projects/${PROJECT}/topics/gcr
207
+ gcloud beta pubsub subscriptions create $GCR_SUB --topic $GCR_TOPIC
161
208
162
- export SA_JSON=$( cat spinnaker-key.json)
163
- cat > spinnaker-config.yaml << EOF
164
- storageBucket: ${BUCKET}
165
- kubeConfig:
166
- enabled: true
167
- secretName: my-kubeconfig
168
- secretKey: config
169
- contexts:
170
- - gke_${PROJECT} _us-central1-f_${DEPLOYMENT_NAME} -central
171
- - gke_${PROJECT} _us-east4-c_${DEPLOYMENT_NAME} -east
172
- gcs:
173
- enabled: true
174
- project: ${PROJECT}
175
- jsonKey: '${SA_JSON} '
209
+ # Create PubSub topic for GCS
210
+ export PROJECT=$( gcloud info --format=' value(config.project)' )
211
+ export GCS_SUB=my-gcs-sub
212
+ export GCS_TOPIC=spin-gcs-topic
213
+ export BUCKET=$PROJECT -spinnaker
214
+ gcloud beta pubsub topics create $GCS_TOPIC
215
+ gcloud beta pubsub subscriptions create $GCS_SUB --topic $GCS_TOPIC
216
+ gsutil notification create -t $GCS_TOPIC -f json gs://${BUCKET}
176
217
177
- # Disable minio the default
218
+ cat > $HOME /spinconfig.yaml << EOF
178
219
minio:
179
220
enabled: false
180
-
181
- # Disable jenkins
182
- jenkins:
183
- enabled: false
184
-
185
- # Configure your Docker registries here
186
- accounts:
187
- - name: gcr
188
- address: https://gcr.io
189
- username: _json_key
190
- password: '${SA_JSON} '
191
- email: 1234@5678.com
221
+ gcs:
222
+ enabled: true
223
+ project: $PROJECT
224
+ bucket: "$BUCKET "
225
+ jsonKey: '$JSON '
192
226
EOF
193
- helm install -n adv-k8s stable/spinnaker -f spinnaker-config.yaml --timeout 600 --version 0.5.0
227
+
228
+ # Install Spinnaker
229
+ helm install -n adv-k8s stable/spinnaker -f $HOME /spinconfig.yaml --timeout 600
230
+
231
+ # Create SA token user for gke-sinnaker
232
+ kubectl apply -f $HOME /advanced-kubernetes-bootcamp/module-2/spinnaker/sa.yaml
233
+ kubectl config set-credentials ${CLUSTER_INFO_ARRAY[0]} -token-user --token $( kubectl get secret $( kubectl get serviceaccount spinnaker-service-account -n spinnaker -o jsonpath=' {.secrets[0].name}' ) -n spinnaker -o jsonpath=' {.data.token}' | base64 --decode)
234
+ kubectl config set-context gke-spinnaker --user ${CLUSTER_INFO_ARRAY[0]} -token-user
235
+
236
+ # Copy spinnaker service account key to Halyard
237
+ kubectl cp $HOME /spinnaker-key.json default/adv-k8s-spinnaker-halyard-0:/home/spinnaker/.
238
+ export PROJECT=$( gcloud info --format=' value(config.project)' )
239
+ echo $PROJECT > $HOME /project.txt
240
+ kubectl cp $HOME /project.txt default/adv-k8s-spinnaker-halyard-0:/home/spinnaker/.
241
+
242
+ # Copy kubeconfig to halyard with the token-user contexts for all three clusters
243
+ kubectl cp $HOME /.kube/config default/adv-k8s-spinnaker-halyard-0:/home/spinnaker/.kube/.
244
+
245
+ # Configure spinnaker via halyard
246
+ # # Set context to gke-spinnaker
247
+ kubectl exec adv-k8s-spinnaker-halyard-0 -- bash -c " kubectl config use-context gke-spinnaker"
248
+
249
+ # # Config gke clusters
250
+ kubectl exec adv-k8s-spinnaker-halyard-0 -- bash -c " hal config provider kubernetes account add gke-central --provider-version v2 --context gke-central"
251
+ kubectl exec adv-k8s-spinnaker-halyard-0 -- bash -c " hal config provider kubernetes account add gke-east --provider-version v2 --context gke-east"
252
+ kubectl exec adv-k8s-spinnaker-halyard-0 -- bash -c " hal config features edit --artifacts true"
253
+
254
+ # # Configure GCS
255
+ kubectl exec adv-k8s-spinnaker-halyard-0 -- bash -c " hal config artifact gcs account add spinnaker-service-account --json-path /home/spinnaker/spinnaker-key.json"
256
+ kubectl exec adv-k8s-spinnaker-halyard-0 -- bash -c " hal config artifact gcs enable"
257
+
258
+ # # Configure GCR.io
259
+ kubectl exec adv-k8s-spinnaker-halyard-0 -- bash -c " hal config provider docker-registry enable"
260
+ kubectl exec adv-k8s-spinnaker-halyard-0 -- bash -c " hal config provider docker-registry account add gcr-registry --address gcr.io --username _json_key --password-file /home/spinnaker/spinnaker-key.json"
261
+
262
+ # # Configure pubsub
263
+ kubectl exec adv-k8s-spinnaker-halyard-0 -- bash -c " hal config pubsub google enable"
264
+ kubectl exec adv-k8s-spinnaker-halyard-0 -- bash -c " hal config pubsub google subscription add gcr-google-pubsub --subscription-name my-gcr-sub --json-path /home/spinnaker/spinnaker-key.json --project $( cat ~ /project.txt) --message-format GCR"
265
+ kubectl exec adv-k8s-spinnaker-halyard-0 -- bash -c " hal config pubsub google subscription add gcs-google-pubsub --subscription-name my-gcs-sub --json-path /home/spinnaker/spinnaker-key.json --project $( cat ~ /project.txt) --message-format GCS"
266
+
267
+ # # Apply new config
268
+ kubectl exec adv-k8s-spinnaker-halyard-0 -- bash -c " hal deploy apply"
269
+
194
270
done
195
271
196
272
# Signal completion to waiter
0 commit comments