Skip to content

Commit 961ad89

Browse files
authored
Merge pull request #48 from ameer00/master
Updated Istio to 1.0.2, Clusters to 10.10.7, Spinnaker to latest using v2 provider
2 parents 8f481f5 + c18acc4 commit 961ad89

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+5260
-664
lines changed

dm-setup/iam.jinja

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ resources:
5656
- role: roles/owner
5757
members:
5858
- serviceAccount:$(ref.sa-{{ env['project_number'] }}-vm.email)
59+
- role: roles/pubsub.admin
60+
members:
61+
- serviceAccount:$(ref.sa-{{ env['project_number'] }}-vm.email)
5962
- role: roles/storage.objectViewer
6063
members:
6164
- serviceAccount:$(ref.sa-{{ env['project_number'] }}-cluster.email)

dm-setup/qwiklabs.jinja

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ resources:
6666
subnetwork: $(ref.{{ env['deployment'] }}-us-central1.name)
6767
purpose: workloads
6868
apiVersion: v1beta1
69-
kubernetesVersion: "1.10.4"
69+
kubernetesVersion: "1.10"
7070
monitoringService: monitoring.googleapis.com/kubernetes
7171
loggingService: logging.googleapis.com/kubernetes
7272
sockShop: "installed"
@@ -81,7 +81,7 @@ resources:
8181
subnetwork: $(ref.{{ env['deployment'] }}-us-east4.name)
8282
purpose: workloads
8383
apiVersion: v1beta1
84-
kubernetesVersion: "1.10.4"
84+
kubernetesVersion: "1.10"
8585
monitoringService: monitoring.googleapis.com/kubernetes
8686
loggingService: logging.googleapis.com/kubernetes
8787
metadata:
@@ -94,7 +94,7 @@ resources:
9494
subnetwork: $(ref.{{ env['deployment'] }}-us-central1.name)
9595
zone: us-central1-f
9696
purpose: spinnaker
97-
kubernetesVersion: "1.10.4"
97+
kubernetesVersion: "1.10"
9898
metadata:
9999
dependsOn:
100100
- {{ env['deployment'] }}-us-central1
@@ -126,7 +126,7 @@ resources:
126126
- name: student-vm-waiter
127127
type: waiter.jinja
128128
properties:
129-
timeout: 600s
129+
timeout: 1200s
130130
metadata:
131131
dependsOn:
132132
- student-vm

dm-setup/student-vm-startup.sh

Lines changed: 117 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,37 @@ EOF
5858
git clone https://github.com/ahmetb/kubectx
5959
cp kubectx/kube* /usr/local/bin
6060

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+
6168
# Install kube ps1
6269
cd $HOME
6370
git clone https://github.com/jonmosco/kube-ps1.git
71+
echo 'export KUBE_PS1_SYMBOL_ENABLE=false' >> ~/.bashrc
6472
echo 'source $HOME/kube-ps1/kube-ps1.sh' >> ~/.bashrc
6573
export VAR="PS1='[\W \$(kube_ps1)]\$ '"
6674
echo $VAR >> ~/.bashrc
6775
source $HOME/.bashrc
6876

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+
6992
# Prometheus resources to install in the clusters
7093
wget -O prom-rbac.yml https://storage.googleapis.com/stackdriver-prometheus-documentation/rbac-setup.yml
7194
wget https://storage.googleapis.com/stackdriver-prometheus-documentation/prometheus-service.yml
@@ -86,10 +109,10 @@ for CLUSTER_INFO in ${WORKLOAD_CLUSTERS}; do
86109
gcloud container clusters get-credentials ${CLUSTER_INFO_ARRAY[0]} --zone ${CLUSTER_INFO_ARRAY[1]}
87110
export PROJECT=$(gcloud info --format='value(config.project)')
88111
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
90113
# 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]}
93116

94117
# Install Prometheus
95118
export PROJECT=$(gcloud info --format='value(config.project)')
@@ -106,12 +129,21 @@ for CLUSTER_INFO in ${WORKLOAD_CLUSTERS}; do
106129
until timeout 10 helm version; do sleep 10; done
107130

108131
# Install Istio
109-
export ISTIO_VERSION=0.8.0
132+
export ISTIO_VERSION=1.0.2
110133
curl -L https://git.io/getLatestIstio | sh -
111134
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
113138
popd
114139
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 -
115147
done
116148

117149
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
138170
# Wait for tiller to be running
139171
until timeout 10 helm version; do sleep 10; done
140172

141-
# Create Spinnaker service account and assign it storage.admin role.
173+
# Create Spinnaker service account and assign it roles/owner role.
142174
gcloud iam service-accounts create spinnaker-sa-${DEPLOYMENT_NAME} --display-name spinnaker-sa-${DEPLOYMENT_NAME}
143175
export SPINNAKER_SA_EMAIL=$(gcloud iam service-accounts list \
144176
--filter="displayName:spinnaker-sa-${DEPLOYMENT_NAME}" \
145177
--format='value(email)')
146178
export PROJECT=$(gcloud info --format='value(config.project)')
147179

148180
# 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}
150182
gcloud iam service-accounts keys create spinnaker-key.json --iam-account ${SPINNAKER_SA_EMAIL}
151183
export BUCKET=${PROJECT}-${DEPLOYMENT_NAME}
184+
export BUCKET_CONFIG=${PROJECT}-spinnaker
152185
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
153196

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
159197

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
161208

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}
176217

177-
# Disable minio the default
218+
cat > $HOME/spinconfig.yaml <<EOF
178219
minio:
179220
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'
192226
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+
194270
done
195271

196272
# Signal completion to waiter

module-2/busyboxplus/Dockerfile

Lines changed: 0 additions & 1 deletion
This file was deleted.

module-2/gke-central/gke-central-ingress.yaml

Lines changed: 0 additions & 12 deletions
This file was deleted.

module-2/gke-central/gke-central-lb.yaml

Lines changed: 0 additions & 16 deletions
This file was deleted.

module-2/gke-east/gke-east-ingress.yaml

Lines changed: 0 additions & 12 deletions
This file was deleted.

module-2/gke-east/gke-east-lb.yaml

Lines changed: 0 additions & 16 deletions
This file was deleted.

0 commit comments

Comments
 (0)