日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
云原生初體驗(yàn):在K8s上部署Springboot應(yīng)用

云原生初體驗(yàn):在K8S上部署SpringBoot應(yīng)用

作者: dafei1288 2021-08-13 07:00:41
云計(jì)算
云原生 本文會(huì)在window環(huán)境下,構(gòu)建一套基于k8s的istio環(huán)境,并且通過(guò)skaffold完成鏡像的構(gòu)建和項(xiàng)目部署到集群環(huán)境。其實(shí)對(duì)于實(shí)驗(yàn)環(huán)境有限的朋友們,完全可以在某里云上,按量付費(fèi)搞3臺(tái)”突發(fā)性能實(shí)例“,玩一晚,也就是杯咖啡錢。

創(chuàng)新互聯(lián)建站是一家專業(yè)提供古浪企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、成都做網(wǎng)站、H5響應(yīng)式網(wǎng)站、小程序制作等業(yè)務(wù)。10年已為古浪眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。

你會(huì)不會(huì)對(duì)“云原生”很有興趣,卻不知道從何入手?

本文會(huì)在window環(huán)境下,構(gòu)建一套基于k8s的istio環(huán)境,并且通過(guò)skaffold完成鏡像的構(gòu)建和項(xiàng)目部署到集群環(huán)境。其實(shí)對(duì)于實(shí)驗(yàn)環(huán)境有限的朋友們,完全可以在某里云上,按量付費(fèi)搞3臺(tái)”突發(fā)性能實(shí)例“,玩一晚,也就是杯咖啡錢。

好吧,讓我開(kāi)始吧!

執(zhí)行流程

整體流程的話,如下圖所示,通過(guò) Skaffold+jib 將開(kāi)發(fā)的應(yīng)用打包成鏡像,提交到本地倉(cāng)庫(kù),并且將應(yīng)用部署到集群中。k8s中部署2個(gè)pod,模擬應(yīng)用不同的版本,并且配置訪問(wèn)權(quán)重20%:80%。

環(huán)境選擇

我之前有文章詳細(xì)介紹過(guò)minikube。本次實(shí)驗(yàn),開(kāi)始的時(shí)候,我就一直沉溺在使用kind的便捷上,而且直接可以在docker上部署集群,可以說(shuō)非常方便。但是由于我對(duì)K8S的理解并不足夠,導(dǎo)致后面遇到了很多問(wèn)題,所以,在這里建議新上手的小伙伴,還是使用minikube吧。k3s和RKE都需要多臺(tái)虛擬機(jī),礙于機(jī)器性能,這種方案暫時(shí)不考慮了。

下面表格,對(duì)比了minikube、kind、k3s 部署環(huán)境,以及支持情況,方便大家選擇。

  minikube kind k3s
runtime VM container native
supported architectures AMD64 AMD64 AMD64, ARMv7, ARM64
supported container runtimes Docker,CRI-O,containerd,gvisor Docker Docker, containerd
startup time initial/following 5:19 / 3:15 2:48 / 1:06 0:15 / 0:15
memory requirements 2GB 8GB (Windows, MacOS) 512 MB
requires root? no no yes (rootless is experimental)
multi-cluster support yes yes no (can be achieved using containers)
multi-node support no yes yes
project page https://minikube.sigs.k8s.io/ https://kind.sigs.k8s.io/

[1] 表格引用自:http://jiagoushi.pro/minikube-vs-kind-vs-k3s-what-should-i-use

docker desktop 沒(méi)有特殊要求。其他的自己用的順手就好,還是需要特別說(shuō)一下minikube,別用最新的coredns一直都拉不下來(lái),除非你的魔法,可以完全搞定,否則,還是用阿里編譯的minikube版本吧,別跟自己較勁,別問(wèn)我為什么...

我用的版本羅列在下面了:

  
 
 
 
  1.  ~ istioctl version 
  2. client version: 1.10.2 
  3. control plane version: 1.10.2 
  4. data plane version: 1.10.2 (10 proxies) 
  5.  
  6.  ~ minikube version 
  7. minikube version: v1.18.1 
  8. commit: 511aca80987826051cf1c6527c3da706925f7909 
  9.  
  10.  ~ skaffold version 
  11. v1.29.0 

環(huán)境搭建

使用minikube創(chuàng)建集群

使用 hyperv 作為引擎 , 內(nèi)存 8192M cup 4核,不能再少了,否則拉不起來(lái) istio。

  
 
 
 
  1.  ~ minikube start  --image-mirror-country='cn' --registry-mirror=https://hq0igpc0.mirror.aliyuncs.com --vm-driver="hyperv" --memory=8192 --cpus=4 --hyperv-virtual-switch="minikubeSwitch" --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers 

還要在 hyperv里創(chuàng)建一個(gè)虛擬路由,這里我構(gòu)建了一個(gè)內(nèi)部網(wǎng)絡(luò),這樣可以通過(guò)設(shè)置網(wǎng)卡的ip,將內(nèi)部網(wǎng)絡(luò)的網(wǎng)段固定下來(lái),否則,每次重啟都會(huì)變化ip。

配置讓內(nèi)部網(wǎng)絡(luò),共享訪問(wèn)互聯(lián)網(wǎng)。

啟動(dòng)成功:

  
 
 
 
  1.  istio-1.10.2 minikube start 
  2.  Microsoft Windows 10 Pro 10.0.19042 Build 19042 上的 minikube v1.18.1 
  3.  minikube 1.20.0 is available! Download it: https://github.com/kubernetes/minikube/releases/tag/v1.20.0 
  4.  
  5.  根據(jù)現(xiàn)有的配置文件使用 hyperv 驅(qū)動(dòng)程序 
  6.  Starting control plane node minikube in cluster minikube 
  7.  Restarting existing hyperv VM for "minikube" ... 
  8.  正在 Docker 20.10.3 中準(zhǔn)備 Kubernetes v1.20.2… 
  9.  Verifying Kubernetes components... 
  10.   ? Using image registry.cn-hangzhou.aliyuncs.com/google_containers/storage-provisioner:v4 (global image repository) 
  11.   ? Using image registry.hub.docker.com/kubernetesui/dashboard:v2.1.0 
  12.   ? Using image registry.hub.docker.com/kubernetesui/metrics-scraper:v1.0.4 
  13.   ? Using image registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.2.1 (global image repository) 
  14.  Enabled addons: metrics-server, storage-provisioner, dashboard, default-storageclass 
  15.  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default 

部署 istio

創(chuàng)建 istio-system 的命名空間

kubectl create namespace istio-system

安裝 istio

istioctl manifest apply --set profile=demo

安裝完成后,執(zhí)行命令 kubectl get svc -n istio-system

  
 
 
 
  1.  ~ kubectl get svc -n istio-system 
  2. NAME                   TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                                                                     AGE 
  3. istio-egressgateway   ClusterIP      10.105.31.73             80/TCP,443/TCP                                                               8d 
  4. istio-ingressgateway   LoadBalancer   10.103.61.73          15021:31031/TCP,80:31769/TCP,443:30373/TCP,31400:31833/TCP,15443:32411/TCP   8d 
  5. istiod                 ClusterIP      10.110.109.205           15010/TCP,15012/TCP,443/TCP,15014/TCP                                       8d 

部署 bookinfo

部署 bookinfo demo 驗(yàn)證環(huán)境

執(zhí)行命令

  
 
 
 
  1. kubectl label namespace default istio-injection=enabled 
  2.  
  3. kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml 

等待pod都啟動(dòng)起來(lái)以后,添加bookinfo網(wǎng)絡(luò)配置,用于訪問(wèn) kubectl apply -f .\samples\bookinfo\networking\bookinfo-gateway.yaml

  
 
 
 
  1.  istio-1.10.2 kubectl apply -f .\samples\bookinfo\networking\bookinfo-gateway.yaml 
  2.  
  3. gateway.networking.istio.io/bookinfo-gateway created 
  4.  
  5. virtualservice.networking.istio.io/bookinfo created 

使用命令查看service : kubectl get services

  
 
 
 
  1.  ~ kubectl get services 
  2. NAME             TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE 
  3. callme-service   NodePort    10.106.26.24             8080:30101/TCP   8d 
  4. details         ClusterIP   10.110.253.19           9080/TCP         8d 
  5. kubernetes       ClusterIP   10.96.0.1               443/TCP         8d 
  6. productpage     ClusterIP   10.96.246.175           9080/TCP         8d 
  7. ratings         ClusterIP   10.99.234.109           9080/TCP         8d 
  8. reviews         ClusterIP   10.103.177.123           9080/TCP         8d 

查看pods狀態(tài) kubectl get pods

  
 
 
 
  1.  ~ kubectl get pods 
  2. NAME                                 READY   STATUS   RESTARTS   AGE 
  3. callme-service-v1-76dd76ddcc-znb62   2/2     Running   0         4h59m 
  4. callme-service-v2-679db76bbc-m4svm   2/2     Running   0         4h59m 
  5. details-v1-79f774bdb9-qk9q8          2/2     Running   8         8d 
  6. productpage-v1-6b746f74dc-p4xcb      2/2     Running   8         8d 
  7. ratings-v1-b6994bb9-dlvjm            2/2     Running   8         8d 
  8. reviews-v1-545db77b95-sgdzq          2/2     Running   8         8d 
  9. reviews-v2-7bf8c9648f-t6s8z          2/2     Running   8         8d 
  10. reviews-v3-84779c7bbc-4p8hv          2/2     Running   8         8d 

查看集群ip 以及 端口

  
 
 
 
  1.  ~ kubectl get po -l istio=ingressgateway -n istio-system -o 'jsonpath={.items[0].status.hostIP}' 
  2. 192.168.137.115 
  3.  
  4.  
  5.  
  6.  istio-1.10.2 kubectl get svc istio-ingressgateway -n istio-system 
  7.  
  8. NAME         TYPE     CLUSTER-IP   EXTERNAL-IP PORT(S)                                   AGE 
  9.  
  10. istio-ingressgateway LoadBalancer  10.110.228.32    15021:32343/TCP,80:30088/TCP,443:31869/TCP,31400:32308/TCP,15443:32213/TCP 3m17s 

于是訪問(wèn)地址: http://192.168.137.115:31769/productpage

我們 bookinfo 就部署成功了。接下來(lái)我們創(chuàng)建應(yīng)用。

構(gòu)建應(yīng)用

構(gòu)建一個(gè)普通的springboot工程,添加編譯插件,這里我們使用了本地的docker倉(cāng)庫(kù)存儲(chǔ)鏡像。

  
 
 
 
  1.  
  2.        
  3.            
  4.               org.springframework.boot 
  5.               spring-boot-maven-plugin 
  6.                
  7.                    
  8.                        
  9.                           build-info 
  10.                           repackage 
  11.                        
  12.                    
  13.                
  14.            
  15.            
  16.               com.google.cloud.tools 
  17.               jib-maven-plugin 
  18.               3.1.1 
  19.                
  20.                    
  21.                       127.0.0.1:9001/${project.artifactId}:${project.version} 
  22.                        
  23.                            
  24.                               xxx 
  25.                            
  26.                            
  27.                               xxx 
  28.                            
  29.                        
  30.                    
  31.                   true 
  32.                
  33.            
  34.        
  35.    

 構(gòu)建一個(gè)簡(jiǎn)單的rest,現(xiàn)實(shí)一個(gè)構(gòu)建名稱,以及配置的一個(gè)版本號(hào)。

  
 
 
 
  1. @Autowired 
  2. BuildProperties buildProperties; 
  3. @Value("${VERSION}") 
  4. private String version; 
  5.  
  6. @GetMapping("/ping") 
  7. public String ping() { 
  8.    LOGGER.info("Ping: name={}, version={}", buildProperties.getName(), version); 
  9.    return "I'm callme-service " + version; 

創(chuàng)建 skaffold.xml 用于給 skafflod 編譯鏡像,提交集群使用。

  
 
 
 
  1. kind: Config 
  2. build: 
  3. artifacts: 
  4.   - image: 127.0.0.1:9001/callme-service 
  5.     jib: {} 
  6. tagPolicy: 
  7.   gitCommit: {} 

創(chuàng)建k8s的部署描述k8s/deployment.yml,以及service用于訪問(wèn)。

  
 
 
 
  1. apiVersion: apps/v1 
  2. kind: Deployment 
  3. metadata: 
  4. name: callme-service-v1 
  5. spec: 
  6. replicas: 1 
  7. selector: 
  8.   matchLabels: 
  9.     app: callme-service 
  10.     version: v1 
  11. template: 
  12.   metadata: 
  13.     labels: 
  14.       app: callme-service 
  15.       version: v1 
  16.   spec: 
  17.     containers: 
  18.       - name: callme-service 
  19.         image: 127.0.0.1:9001/callme-service 
  20.         imagePullPolicy: IfNotPresent 
  21.         ports: 
  22.           - containerPort: 8080 
  23.         env: 
  24.           - name: VERSION 
  25.             value: "v1" 
  26. --- 
  27. apiVersion: apps/v1 
  28. kind: Deployment 
  29. metadata: 
  30. name: callme-service-v2 
  31. spec: 
  32. replicas: 1 
  33. selector: 
  34.   matchLabels: 
  35.     app: callme-service 
  36.     version: v2 
  37. template: 
  38.   metadata: 
  39.     labels: 
  40.       app: callme-service 
  41.       version: v2 
  42.   spec: 
  43.     containers: 
  44.       - name: callme-service 
  45.         image: 127.0.0.1:9001/callme-service 
  46.         imagePullPolicy: IfNotPresent 
  47.         ports: 
  48.           - containerPort: 8080 
  49.         env: 
  50.           - name: VERSION 
  51.             value: "v2" 
  52. --- 
  53. apiVersion: v1 
  54. kind: Service 
  55. metadata: 
  56. name: callme-service 
  57. labels: 
  58.   app: callme-service 
  59. spec: 
  60. type: NodePort 
  61. ports: 
  62. - port: 8080 
  63.   name: http 
  64.   nodePort: 30101 
  65. selector: 
  66.   app: callme-service 

創(chuàng)建 istio描述文件 k8s\istio-rules.yaml:

  
 
 
 
  1. apiVersion: networking.istio.io/v1beta1 
  2. kind: DestinationRule 
  3. metadata: 
  4. name: callme-service-destination 
  5. spec: 
  6. host: callme-service 
  7. subsets: 
  8.   - name: v1 
  9.     labels: 
  10.       version: v1 
  11.   - name: v2 
  12.     labels: 
  13.       version: v2 
  14. # trafficPolicy: # --- enable for adding circuit breaker into DestinationRule 
  15. #   connectionPool: 
  16. #     http: 
  17. #       http1MaxPendingRequests: 1 
  18. #       maxRequestsPerConnection: 1 
  19. #       maxRetries: 0 
  20. #   outlierDetection: 
  21. #     consecutive5xxErrors: 3 
  22. #     interval: 30s 
  23. #     baseEjectionTime: 1m 
  24. #     maxEjectionPercent: 100 
  25. --- 
  26. apiVersion: networking.istio.io/v1beta1 
  27. kind: VirtualService 
  28. metadata: 
  29. name: callme-service-route 
  30. spec: 
  31. hosts: 
  32.   - callme-service 
  33. http: 
  34.   - route: 
  35.     - destination: 
  36.         host: callme-service 
  37.         subset: v2 
  38.       weight: 80 
  39.     - destination: 
  40.         host: callme-service 
  41.         subset: v1 
  42.       weight: 20 
  43.     retries: 
  44.       attempts: 3 
  45.       retryOn: gateway-error,connect-failure,refused-stream 
  46.     timeout: 0.5s 
  47. #     fault: # --- enable for inject fault into the route 
  48. #       delay: 
  49. #         percentage: 
  50. #           value: 33 
  51. #         fixedDelay: 3s 

運(yùn)行 skaffold 進(jìn)行編譯,提交鏡像,并部署應(yīng)用 skaffold run --tail。

  
 
 
 
  1.  callme-service git:(master)  skaffold run --tail 
  2. Generating tags... 
  3.  
  4. - 127.0.0.1:9001/callme-service -> 127.0.0.1:9001/callme-service:e9c731f-dirty 
  5.   Checking cache... 
  6. - 127.0.0.1:9001/callme-service: Found Locally 
  7.   Starting test... 
  8.   Tags used in deployment: 
  9. - 127.0.0.1:9001/callme-service -> 127.0.0.1:9001/callme-service:60f1bf39367673fd0d30ec1305d8a02cb5a1ed43cf6603e767a98dc0523c65f3 
  10.   Starting deploy... 
  11. - deployment.apps/callme-service-v1 configured 
  12. - deployment.apps/callme-service-v2 configured 
  13. - service/callme-service configured 
  14. - destinationrule.networking.istio.io/callme-service-destination configured 
  15. - virtualservice.networking.istio.io/callme-service-route configured 
  16.   Waiting for deployments to stabilize... 
  17. - deployment/callme-service-v1: waiting for init container istio-init to start 
  18.   - pod/callme-service-v1-76dd76ddcc-znb62: waiting for init container istio-init to start 
  19. - deployment/callme-service-v2: waiting for init container istio-init to start 
  20.   - pod/callme-service-v2-679db76bbc-m4svm: waiting for init container istio-init to start 
  21. - deployment/callme-service-v2 is ready. [1/2 deployment(s) still pending] 
  22. - deployment/callme-service-v1 is ready. 
  23.   Deployments stabilized in 45.671 seconds 

訪問(wèn)查看結(jié)果:

致此,我們初級(jí)的環(huán)境搭建基本完成了,對(duì)應(yīng)云原生,感覺(jué)懂了一點(diǎn),好像又沒(méi)有懂,需要理解的東西還有很多,這個(gè)系列也會(huì)持續(xù)下去,希望大家和我交流,也歡迎關(guān)注,轉(zhuǎn)發(fā)。

參考鏈接;

Local Java Development on Kubernetes

https://pklinker.medium.com/integrating-a-spring-boot-application-into-an-istio-service-mesh-a55948666fd

https://blog.csdn.net/xixingzhe2/article/details/88537038

https://blog.csdn.net/chenleiking/article/details/86716049

本文轉(zhuǎn)載自微信公眾號(hào)「麒思妙想」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系麒思妙想公眾號(hào)。


網(wǎng)站題目:云原生初體驗(yàn):在K8s上部署Springboot應(yīng)用
URL地址:http://www.5511xx.com/article/djshddo.html