





如果蓝绿两种Pod同时存在(滚动更新策略的情况),那么在为版本化资源提供服务时会出现问题。在新的部署中与index.html对应的资源可能不存在于运行在旧的部署中的容器中。下图可以很直观的解释这种情况。
我们还有一个和前端服务一起运行的小型Node.js API服务。所以基本上这是我们网站运行的整体情况。现在假设我们在Node服务上增加一个新的API端点(Endpoint)。对于滚动更新部署,运行在新的部署上面的前端代码中的路由不存在于运行在旧的部署上面的后端服务上。


---
apiVersion: apps/v1
kind: Deployment
metadata:
name: w3g-xxxxxxx
labels:
app: w3g
version: "xxxxxxx"
apiVersion: v1
kind: Service
spec:
type: LoadBalancer
selector:
app: w3g
version: "xxxxxxx"
kube_swap_blue_green:
$(eval BlueVersion=$(shell kubectl get service ${KUBE_APP_NAME} -o=jsonpath='{.spec.selector.version}' -n ${ENV_KUBE_NAMESPACE}))
$(eval GreenVersion=${LATEST_GIT_COMMIT_ID})
kubectl get deployment ${KUBE_APP_NAME}-${BlueVersion} -o=yaml -n ${ENV_KUBE_NAMESPACE} | sed -e "s/${BlueVersion}/${GreenVersion}/g" | kubectl apply -f - -n ${ENV_KUBE_NAMESPACE}
kubectl rollout status deployment/${KUBE_APP_NAME}-${GreenVersion} -n ${ENV_KUBE_NAMESPACE}
kubectl get service ${KUBE_APP_NAME} -o=yaml -n ${ENV_KUBE_NAMESPACE} | sed -e "s/${BlueVersion}/${GreenVersion}/g" | kubectl apply -f - -n ${ENV_KUBE_NAMESPACE}
kubectl delete deployment ${KUBE_APP_NAME}-${BlueVersion} -n ${ENV_KUBE_NAMESPACE}
$(eval BlueVersion=$(shell kubectl get service ${KUBE_APP_NAME} -o=jsonpath='{.spec.selector.version}' -n ${ENV_KUBE_NAMESPACE}))
$(eval GreenVersion=${LATEST_GIT_COMMIT_ID})
kubectl get deployment ${KUBE_APP_NAME}-${BlueVersion} -o=yaml -n ${ENV_KUBE_NAMESPACE} | sed -e "s/${BlueVersion}/${GreenVersion}/g" | kubectl apply -f - -n ${ENV_KUBE_NAMESPACE}
kubectl rollout status deployment/${KUBE_APP_NAME}-${GreenVersion} -n ${ENV_KUBE_NAMESPACE}
kubectl get service ${KUBE_APP_NAME} -o=yaml -n ${ENV_KUBE_NAMESPACE} | sed -e "s/${BlueVersion}/${GreenVersion}/g" | kubectl apply -f - -n ${ENV_KUBE_NAMESPACE}
kubectl delete deployment ${KUBE_APP_NAME}-${BlueVersion} -n ${ENV_KUBE_NAMESPACE}

https://dev.to/adipolak/kubernetes-and-virtual-kubelet-in-a-nutshell-gn4






