-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathredeployAndUpdate.sh
More file actions
196 lines (179 loc) · 4.53 KB
/
redeployAndUpdate.sh
File metadata and controls
196 lines (179 loc) · 4.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
#!/bin/bash
# Parameters
# 需完整输入待操作的deployment名字,否则会出错
OLD_DEPLOYMENT_NAME=ivankafinfo
SERVICE_NAME=ivankafinfo
NAMESPACE=ivanka
REPLICA=1
IMAGE_NAME=finfo
IMAGE_VERSION=istio-sit
CONFIG_ETCDS=http://10.0.2.148:2379
CONFIGOR_ENV=ivktest
# 一般情况下不用动的变量
SERVICE_PORT=10088
REQUEST_CPU=1000m
REQUEST_MEM=1Gi
READY_SECONDS=60
TIMESTAMP=`date +%s`
if [ ! -n "$OLD_DEPLOYMENT_NAME" \
-o ! -n "$SERVICE_NAME" \
-o ! -n "$IMAGE_VERSION" \
-o ! -n "$NAMESPACE" \
-o ! -n "$REPLICA" \
-o ! -n "$CONFIG_ETCDS" \
-o ! -n "$CONFIGOR_ENV" \
-o "$REPLICA" -eq 0 ];then
echo "Parameters cannot be null"
exit
fi
# 确保指定namespace存在
kubectl get namespace $NAMESPACE
if [ $? -ne 0 ];
then
echo "Namespace $NAMESPACE is nonexistent"
exit;
fi
# 确保老deployment存在
kubectl get deployment $OLD_DEPLOYMENT_NAME -n $NAMESPACE
if [ $? -ne 0 ];
then
echo "Deployment $OLD_DEPLOYMENT_NAME is nonexistent"
exit;
fi
# 确保指定service存在
kubectl get service $SERVICE_NAME -n $NAMESPACE
if [ $? -ne 0 ];
then
echo "Service $SERVICE_NAME is nonexistent"
exit;
fi
# Detect if old virtual service exists
kubectl get virtualservice $SERVICE_NAME -n $NAMESPACE
if [ $? -eq 0 ];
then
echo 'Virtual service already exist!!!';
echo 'We should verify virtual service first!!!';
exit;
fi
kubectl get destinationrule $SERVICE_NAME -n $NAMESPACE
if [ $? -eq 0 ];
then
echo 'Destination rule already exist!!!';
echo 'We should verify destination rule first!!!';
exit;
fi
# Create kubernetes deployment
echo "Start to create kubernetes deployment with version $IMAGE_VERSION";
cat << EOF | kubectl create -f -
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
description: $SERVICE_NAME
labels:
app: $SERVICE_NAME
qcloud-app: $SERVICE_NAME
name: $SERVICE_NAME-$IMAGE_VERSION-$TIMESTAMP
namespace: $NAMESPACE
spec:
minReadySeconds: 10
progressDeadlineSeconds: 600
replicas: $REPLICA
revisionHistoryLimit: 5
selector:
matchLabels:
app: $SERVICE_NAME
version: $IMAGE_VERSION-$TIMESTAMP
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
labels:
app: $SERVICE_NAME
qcloud-app: $SERVICE_NAME
version: $IMAGE_VERSION-$TIMESTAMP
spec:
containers:
- env:
- name: PATH
value: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- name: CONFIGOR_ENV
value: $CONFIGOR_ENV
- name: CONFIG_ETCDS
value: $CONFIG_ETCDS
- name: CLOUD_PROVIDER
value: istio
image: ccr.ccs.tencentyun.com/dhub.wallstcn.com/$IMAGE_NAME:istio-$IMAGE_VERSION
imagePullPolicy: Always
name: $SERVICE_NAME
ports:
- containerPort: 10088
resources:
limits:
cpu: "3"
memory: 2Gi
requests:
cpu: $REQUEST_CPU
memory: $REQUEST_MEM
securityContext:
privileged: false
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /opt/log
name: log
dnsPolicy: ClusterFirst
imagePullSecrets:
- name: hub-k358vimh
- name: qcloudregistrykey
- name: tencenthubkey
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- hostPath:
path: /opt/log
name: log
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: $SERVICE_NAME
namespace: $NAMESPACE
spec:
host: $SERVICE_NAME
subsets:
- name: v1
labels:
version: $IMAGE_VERSION-$TIMESTAMP
EOF
echo "Sleep $READY_SECONDS seconds for deployment ready...";
sleep $READY_SECONDS;
# Switch to the new service
cat << EOF | kubectl create -f -
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: $SERVICE_NAME
namespace: $NAMESPACE
spec:
hosts:
- $SERVICE_NAME
http:
- route:
- destination:
host: $SERVICE_NAME.$NAMESPACE.svc.cluster.local
subset: v1
EOF
echo "Sleep $READY_SECONDS seconds for virtual service taking effect...";
sleep $READY_SECONDS;
echo 'Close old deployment';
# Close old deployment
kubectl delete deployment $OLD_DEPLOYMENT_NAME -n $NAMESPACE
# CleanUp My friend!!!
kubectl delete virtualservice $SERVICE_NAME -n $NAMESPACE
kubectl delete destinationrule $SERVICE_NAME -n $NAMESPACE