←←←←←←←←←←←← 快!点关注
如果单纯使用kubernetes的pod部署Spring微服务,K8s的负载平衡以及代理设置和你微服务应用之间不是非常的智能衔接,。无论如何,部署新的应用程序版本pod需要更加软化的方法。以下是典型的需求:
- 智能调拨流量,在部署新的应用程序版本容器时,您经常需要以某种比例(即金丝雀Canary测试)分割新容器和当前生产之间的流量
- 蓝绿部署,在部署新的应用程序版本pod时,假设您需要蓝色/绿色部署
- 在部署新的应用程序版本pod时,让我们说只有HTTP cookie识别的一些用户可以测试新版本
所有这些问题都可以通过名为istio的神奇工具来解决。
Istio安装
首先是在Istio安装之前,需要以至少4GB的内存启动 Minikube ,否则将无法启动pilot ,阅读stackoverflow讨论;第二个重要的是始终使用Istio Custom Resources Definitions开始安装:
$ kubectl apply -f <ISTIO_INSTALL_HOME> /install/kubernetes/helm/istio/templates/crds.yaml
这是安装后所需的输出:
kubernetes tomask79$ kubectl get pods -n istio-system
NAME READY STATUS RESTARTS AGE
grafana-59b8896965-6jcb8 1/1 Running 4 7d
istio-citadel-856f994c58-jwdp2 1/1 Running 4 7d
istio-cleanup-secrets-glmrz 0/1 Completed 0 7d
istio-egressgateway-5649fcf57-5b885 1/1 Running 4 7d
istio-galley-7665f65c9c-89wsz 1/1 Running 13 7d
istio-grafana-post-install-z9v7z 0/1 Completed 0 7d
istio-ingressgateway-6755b9bbf6-qrvq8 1/1 Running 4 7d
istio-pilot-698959c67b-xpqnj 2/2 Running 11 7d
istio-policy-6fcb6d655f-8mkf4 2/2 Running 18 7d
istio-security-post-install-jn4sr 0/1 Completed 0 7d
istio-sidecar-injector-768c79f7bf-p8xqr 1/1 Running 4 7d
istio-telemetry-664d896cf5-zc8sr 2/2 Running 17 7d
istio-tracing-6b994895fd-wpc2c 1/1 Running 7 7d
prometheus-76b7745b64-hqnrq 1/1 Running 4 7d
servicegraph-5c4485945b-jql54 1/1 Running 12 7d
演示示例
在向您展示Istio流量管理魔术之前,我们将介绍第一个非常简单的Spring Boot MVC应用程序,我们将在两个版本中部署到kubernetes。
版本1:
@RestController
public class ControllerV1 {
@GetMapping(path = "/service")
public String getResult() {
return "Hello I'm V1!";
}
}
下面是这个版本的k8s的部署,标记mvc-service开始部分:
(mvc-1/istio/kubernetes-deploy/v1-deploy.yaml)
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: mvc-service
spec:
replicas: 1
template:
metadata:
labels:
app: mvc-service
version: v1
spec:
containers:
- name: mvc-service
image: service-v1:0.0.1-SNAPSHOT
i