Service Mesh之Istio部署bookinfo

给istio部署插件

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

root@k8s-master01:/usr/local# cd istio

root@k8s-master01:/usr/local/istio# ls samples/addons/

extras  grafana.yaml  jaeger.yaml  kiali.yaml  prometheus.yaml  README.md

root@k8s-master01:/usr/local/istio# kubectl apply -f samples/addons/

serviceaccount/grafana created

configmap/grafana created

service/grafana created

deployment.apps/grafana created

configmap/istio-grafana-dashboards created

configmap/istio-services-grafana-dashboards created

deployment.apps/jaeger created

service/tracing created

service/zipkin created

service/jaeger-collector created

serviceaccount/kiali created

configmap/kiali created

clusterrole.rbac.authorization.k8s.io/kiali-viewer created

clusterrole.rbac.authorization.k8s.io/kiali created

clusterrolebinding.rbac.authorization.k8s.io/kiali created

role.rbac.authorization.k8s.io/kiali-controlplane created

rolebinding.rbac.authorization.k8s.io/kiali-controlplane created

service/kiali created

deployment.apps/kiali created

serviceaccount/prometheus created

configmap/prometheus created

clusterrole.rbac.authorization.k8s.io/prometheus created

clusterrolebinding.rbac.authorization.k8s.io/prometheus created

service/prometheus created

deployment.apps/prometheus created

root@k8s-master01:/usr/local/istio#

  提示:istio插件的部署清单在istio/samples/addons/目录下,该目录下有grafana、jaeger、kiali、prometheus的部署清单;其中jaeger是负责链路追踪,kiali是istio的一个web客户端工具,我们可以在web页面来管控istio,prometheus是负责指标数据采集,grafana负责指标数据的展示工具;应用该目录下的所有部署清单后,对应istio-system名称空间下会跑相应的pod和相应的svc资源;

  验证:在istio-system名称空间下,查看对应pod是否正常跑起来了?对应svc资源是否创建?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

root@k8s-master01:/usr/local/istio# kubectl get pods -n istio-system

NAME                                   READY   STATUS    RESTARTS       AGE

grafana-69f9b6bfdc-cm966               1/1     Running   0              12m

istio-egressgateway-774d6846df-fv97t   1/1     Running   3 (144m ago)   22h

istio-ingressgateway-69499dc-pdgld     1/1     Running   3 (144m ago)   22h

istiod-65dcb8497-9skn9                 1/1     Running   3 (145m ago)   22h

jaeger-cc4688b98-wzfph                 1/1     Running   0              12m

kiali-594965b98c-kbllg                 1/1     Running   0              64s

prometheus-5f84bbfcfd-62nwc            2/2     Running   0              12m

root@k8s-master01:/usr/local/istio# kubectl get svc -n istio-system

NAME                   TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                                                                      AGE

grafana                ClusterIP      10.107.10.186              3000/TCP                                                                     12m

istio-egressgateway    ClusterIP      10.106.179.126             80/TCP,443/TCP                                                               22h

istio-ingressgateway   LoadBalancer   10.102.211.120   192.168.0.252   15021:32639/TCP,80:31338/TCP,443:30597/TCP,31400:31714/TCP,15443:32154/TCP   22h

istiod                 ClusterIP      10.96.6.69                 15010/TCP,15012/TCP,443/TCP,15014/TCP                                        22h

jaeger-collector       ClusterIP      10.100.138.187             14268/TCP,14250/TCP,9411/TCP                                                 12m

kiali                  ClusterIP      10.99.88.50                20001/TCP,9090/TCP                                                           12m

prometheus             ClusterIP      10.108.131.84              9090/TCP                                                                     12m

tracing                ClusterIP      10.100.53.36               80/TCP,16685/TCP                                                             12m

zipkin                 ClusterIP      10.110.231.233             9411/TCP                                                                     12m

root@k8s-master01:/usr/local/istio#

  提示:可以看到对应pod都在正常runing并处于ready状态;对应svc资源也都正常创建;我们要想访问对应服务,可以在集群内部访问对应的clusterIP来访问;也可以修改svc对应资源类型为nodeport或者loadbalancer类型;当然除了上述修改svc资源类型的方式实现集群外部访问之外,我们也可以通过istio的入口网关来访问;不过这种方式需要我们先通过配置文件告诉给istiod,让其把对应的服务通过ingressgate的外部IP地址暴露出来;

  这里说一下通过ingressgateway暴露服务的原理;我们在安装istio以后,对应会在k8s上创建一些crd资源,这些crd资源就是用来定义如何管控流量的;即我们通过定义这些crd类型的资源来告诉istiod,对应服务该如何暴露;只要我们在k8s集群上创建这些crd类型的资源以后,对应istiod就会将其收集起来,把对应资源转换为envoy的配置文件格式,再统一下发给通过istio注入的sidecar,以实现配置envoy的目的(envoy就是istio注入到应用pod中的sidecar);

  查看crd 

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

root@k8s-master01:~# kubectl get crds

NAME                                                  CREATED AT

authorizationpolicies.security.istio.io               2023-04-02T16:28:24Z

bgpconfigurations.crd.projectcalico.org               2023-04-02T02:26:34Z

bgppeers.crd.projectcalico.org                        2023-04-02T02:26:34Z

blockaffinities.crd.projectcalico.org                 2023-04-02T02:26:34Z

caliconodestatuses.crd.projectcalico.org              2023-04-02T02:26:34Z

clusterinformations.crd.projectcalico.org             2023-04-02T02:26:34Z

destinationrules.networking.istio.io                  2023-04-02T16:28:24Z

envoyfilters.networking.istio.io                      2023-04-02T16:28:24Z

felixconfigurations.crd.projectcalico.org             2023-04-02T02:26:34Z

gateways.networking.istio.io                          2023-04-02T16:28:24Z

globalnetworkpolicies.crd.projectcalico.org           2023-04-02T02:26:34Z

globalnetworksets.crd.projectcalico.org               2023-04-02T02:26:34Z

hostendpoints.crd.projectcalico.org                   2023-04-02T02:26:34Z

ipamblocks.crd.projectcalico.org                      2023-04-02T02:26:34Z

ipamconfigs.crd.projectcalico.org                     2023-04-02T02:26:34Z

ipamhandles.crd.projectcalico.org                     2023-04-02T02:26:34Z

ippools.crd.projectcalico.org                         2023-04-02T02:26:34Z

ipreservations.crd.projectcalico.org                  2023-04-02T02:26:34Z

istiooperators.install.istio.io                       2023-04-02T16:28:24Z

kubecontrollersconfigurations.crd.projectcalico.org   2023-04-02T02:26:34Z

networkpolicies.crd.projectcalico.org                 2023-04-02T02:26:34Z

networksets.crd.projectcalico.org                     2023-04-02T02:26:34Z

peerauthentications.security.istio.io                 2023-04-02T16:28:24Z

proxyconfigs.networking.istio.io                      2023-04-02T16:28:24Z

requestauthentications.security.istio.io              2023-04-02T16:28:24Z

serviceentries.networking.istio.io                    2023-04-02T16:28:24Z

sidecars.networking.istio.io                          2023-04-02T16:28:24Z

telemetries.telemetry.istio.io                        2023-04-02T16:28:24Z

virtualservices.networking.istio.io                   2023-04-02T16:28:24Z

wasmplugins.extensions.istio.io                       2023-04-02T16:28:24Z

workloadentries.networking.istio.io                   2023-04-02T16:28:24Z

workloadgroups.networking.istio.io                    2023-04-02T16:28:24Z

root@k8s-master01:~# kubectl api-resources --api-group=networking.istio.io

NAME               SHORTNAMES   APIVERSION                     NAMESPACED   KIND

destinationrules   dr           networking.istio.io/v1beta1    true         DestinationRule

envoyfilters                    networking.istio.io/v1alpha3   true         EnvoyFilter

gateways           gw           networking.istio.io/v1beta1    true         Gateway

proxyconfigs                    networking.istio.io/v1beta1    true         ProxyConfig

serviceentries     se           networking.istio.io/v1beta1    true         ServiceEntry

sidecars                        networking.istio.io/v1beta1    true         Sidecar

virtualservices    vs           networking.istio.io/v1beta1    true         VirtualService

workloadentries    we           networking.istio.io/v1beta1    true         WorkloadEntry

workloadgroups     wg           networking.istio.io/v1beta1    true         WorkloadGroup

root@k8s-master01:~#

  提示:可以看到在networking.istio.io这个群组里面有很多crd资源类型;其中gateway就是来定义如何接入外部流量的;virtualservice就是来定义虚拟主机的(类似apache中的虚拟主机),destinationrules用于定义外部流量通过gateway进来以后,结合virtualservice路由,对应目标该如何承接对应流量的;我们在k8s集群上创建这些类型的crd资源以后,都会被istiod收集并由它负责将其转换为envoy识别的格式配置统一下发给整个网格内所有的envoy sidecar或istio-system名称空间下所有envoy pod;

  通过istio ingressgateway暴露kiali服务

  定义 kiali-gateway资源实现流量匹配

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

# cat kiali-gateway.yaml

apiVersion: networking.istio.io/v1beta1

kind: Gateway

metadata:

  name: kiali-gateway

  namespace: istio-system

spec:

  selector:

    app: istio-ingressgateway

  servers:

  - port:

      number: 80

      name: http-kiali

      protocol: HTTP

    hosts:

    "kiali.ik8s.cc"

  提示:该资源定义了通过istio-ingresstateway进来的流量,匹配主机头为kiali.ik8s.cc,协议为http,端口为80的流量;

  定义virtualservice资源实现路由

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

# cat kiali-virtualservice.yaml

apiVersion: networking.istio.io/v1beta1

kind: VirtualService

metadata:

  name: kiali-virtualservice

  namespace: istio-system

spec:

  hosts:

  "kiali.ik8s.cc"

  gateways:

  - kiali-gateway

  http:

  - match:

    - uri:

        prefix: /

    route:

    - destination:

        host: kiali

        port:

          number: 20001

  提示:该资源定义了gateway进来的流量匹配主机头为kiali.ik8s.cc,uri匹配“/”;就把对应流量路由至对应服务名为kiali的服务的20001端口进行响应;

  定义destinationrule实现如何承接对应流量

1

2

3

4

5

6

7

8

9

10

11

# cat kiali-destinationrule.yaml

apiVersion: networking.istio.io/v1beta1

kind: DestinationRule

metadata:

  name: kiali

  namespace: istio-system

spec:

  host: kiali

  trafficPolicy:

    tls:

      mode: DISABLE

  提示:该资源定义了对应承接非tls的流量;即关闭kiali服务的tls功能;

  应用上述配置清单

1

2

3

4

5

6

7

8

9

10

11

12

13

14

root@k8s-master01:~/istio-in-practise/Traffic-Management-Basics/kiali-port-80# kubectl apply -f .

destinationrule.networking.istio.io/kiali created

gateway.networking.istio.io/kiali-gateway created

virtualservice.networking.istio.io/kiali-virtualservice created

root@k8s-master01:~/istio-in-practise/Traffic-Management-Basics/kiali-port-80# kubectl get gw -n istio-system

NAME            AGE

kiali-gateway   27s

root@k8s-master01:~/istio-in-practise/Traffic-Management-Basics/kiali-port-80# kubectl get vs -n istio-system 

NAME                   GATEWAYS            HOSTS               AGE

kiali-virtualservice   ["kiali-gateway"]   ["kiali.ik8s.cc"]   33s

root@k8s-master01:~/istio-in-practise/Traffic-Management-Basics/kiali-port-80# kubectl get dr -n istio-system 

NAME    HOST    AGE

kiali   kiali   38s

root@k8s-master01:~/istio-in-practise/Traffic-Management-Basics/kiali-port-80#

  通过集群外部客户端的hosts文件将kiali.ik8s.cc解析至istio-ingressgateway外部地址

Service Mesh之Istio部署bookinfo_第1张图片

  提示:我这里是一台win11的客户端,修改C:\Windows\System32\drivers\etc\hosts文件来实现解析;

  测试,用浏览器访问kiali.ik8s.cc看看对应是否能够访问到kiali服务呢?

Service Mesh之Istio部署bookinfo_第2张图片

  提示:可以看到我们现在就把集群内部kiali服务通过gateway、virtualservice、destinationrule这三种资源的创建将其暴露给ingresgateway的外部地址上;对于其他服务我们也可以采用类似的逻辑将其暴露出来;这里建议kiali不要直接暴露给集群外部客户端访问,因为kiali没有认证,但它又具有管理istio的功能;

  部署bookinfo

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

root@k8s-master01:/usr/local/istio# kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml 

service/details created

serviceaccount/bookinfo-details created

deployment.apps/details-v1 created

service/ratings created

serviceaccount/bookinfo-ratings created

deployment.apps/ratings-v1 created

service/reviews created

serviceaccount/bookinfo-reviews created

deployment.apps/reviews-v1 created

deployment.apps/reviews-v2 created

deployment.apps/reviews-v3 created

service/productpage created

serviceaccount/bookinfo-productpage created

deployment.apps/productpage-v1 created

root@k8s-master01:/usr/local/istio#

  提示:我们安装istio以后,bookinfo的部署清单就在istio/samples/bookinfo/platform/kube/目录下;该部署清单会在default名称空间将bookinfo需要的pod运行起来,并创建相应的svc资源;

  验证:查看default名称空间下的pod和svc资源,看看对应pod和svc是否正常创建?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

root@k8s-master01:/usr/local/istio# kubectl get pods

NAME                             READY   STATUS    RESTARTS   AGE

details-v1-6997d94bb9-4jssp      2/2     Running   0          2m56s

productpage-v1-d4f8dfd97-z2pcz   2/2     Running   0          2m55s

ratings-v1-b8f8fcf49-j8l44       2/2     Running   0          2m56s

reviews-v1-5896f547f5-v2h92      2/2     Running   0          2m56s

reviews-v2-5d99885bc9-dhjdk      2/2     Running   0          2m55s

reviews-v3-589cb4d56c-rw6rw      2/2     Running   0          2m55s

root@k8s-master01:/usr/local/istio# kubectl get svc

NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE

details       ClusterIP   10.109.96.34            9080/TCP   3m2s

kubernetes    ClusterIP   10.96.0.1               443/TCP    38h

productpage   ClusterIP   10.101.76.112           9080/TCP   3m1s

ratings       ClusterIP   10.97.209.163           9080/TCP   3m2s

reviews       ClusterIP   10.108.1.117            9080/TCP   3m2s

root@k8s-master01:/usr/local/istio#

  提示:可以看到default名称空间下跑了几个pod,每个pod内部都有两个容器,其中一个是bookinfo程序的主容器,一个是istio注入的sidecar;bookinfo的访问入口是productpage;

  验证:查看istiod是否将配置下发给我们刚才部署的bookinfo中注入的sidecar配置?

1

2

3

4

5

6

7

8

9

10

11

root@k8s-master01:/usr/local/istio# istioctl ps

NAME                                                  CLUSTER        CDS        LDS        EDS        RDS          ECDS         ISTIOD                     VERSION

details-v1-6997d94bb9-4jssp.default                   Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-65dcb8497-9skn9     1.17.1

istio-egressgateway-774d6846df-fv97t.istio-system     Kubernetes     SYNCED     SYNCED     SYNCED     NOT SENT     NOT SENT     istiod-65dcb8497-9skn9     1.17.1

istio-ingressgateway-69499dc-pdgld.istio-system       Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-65dcb8497-9skn9     1.17.1

productpage-v1-d4f8dfd97-z2pcz.default                Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-65dcb8497-9skn9     1.17.1

ratings-v1-b8f8fcf49-j8l44.default                    Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-65dcb8497-9skn9     1.17.1

reviews-v1-5896f547f5-v2h92.default                   Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-65dcb8497-9skn9     1.17.1

reviews-v2-5d99885bc9-dhjdk.default                   Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-65dcb8497-9skn9     1.17.1

reviews-v3-589cb4d56c-rw6rw.default                   Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-65dcb8497-9skn9     1.17.1

root@k8s-master01:/usr/local/istio#

  提示:这里我们只需要关心cds、lds、eds、rds即可;显示synced表示对应配置已经下发;配置下发完成以后,对应服务就可以在集群内部访问了;

  验证:在集群内部部署一个客户端pod,访问productpage:9080看看对应bookinfo是否被访问到?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

root@k8s-master01:/usr/local/istio# kubectl apply -f samples/sleep/sleep.yaml

serviceaccount/sleep created

service/sleep created

deployment.apps/sleep created

root@k8s-master01:/usr/local/istio# kubectl get pods

NAME                             READY   STATUS    RESTARTS   AGE

details-v1-6997d94bb9-4jssp      2/2     Running   0          12m

productpage-v1-d4f8dfd97-z2pcz   2/2     Running   0          12m

ratings-v1-b8f8fcf49-j8l44       2/2     Running   0          12m

reviews-v1-5896f547f5-v2h92      2/2     Running   0          12m

reviews-v2-5d99885bc9-dhjdk      2/2     Running   0          12m

reviews-v3-589cb4d56c-rw6rw      2/2     Running   0          12m

sleep-bc9998558-vjc48            2/2     Running   0          50s

root@k8s-master01:/usr/local/istio#

  进入sleep pod,访问productpage:9080看看是否能访问?

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

root@k8s-master01:/usr/local/istio# kubectl exec -it sleep-bc9998558-vjc48 -- /bin/sh

/ $ cd

~ $ curl productpage:9080

  <head>

    Simple Bookstore App<</code><code>/title</code><code>></code></p> <p><code><meta charset=</code><code>"utf-8"</code><code>></code></p> <p><code><meta http-equiv=</code><code>"X-UA-Compatible"</code> <code>content=</code><code>"IE=edge"</code><code>></code></p> <p><code><meta name=</code><code>"viewport"</code> <code>content=</code><code>"width=device-width, initial-scale=1"</code><code>></code></p> <p></p> <p><code><!-- Latest compiled and minified CSS --></code></p> <p><code><link rel=</code><code>"stylesheet"</code> <code>href=</code><code>"static/bootstrap/css/bootstrap.min.css"</code><code>></code></p> <p></p> <p><code><!-- Optional theme --></code></p> <p><code><link rel=</code><code>"stylesheet"</code> <code>href=</code><code>"static/bootstrap/css/bootstrap-theme.min.css"</code><code>></code></p> <p></p> <p><code>  </code><code><</code><code>/head</code><code>></code></p> <p><code>  </code><code><body></code></p> <p><code>    </code> </p> <p><code>    </code> </p> <p><code><p></code></p> <p><code>    </code><code><h3>Hello! This is a simple bookstore application consisting of three services as shown below<</code><code>/h3</code><code>></code></p> <p><code><</code><code>/p</code><code>></code></p> <p></p> <p><code><table class=</code><code>"table table-condensed table-bordered table-hover"</code><code>><</code><code>tr</code><code>><th>name<</code><code>/th</code><code>><td>http:</code><code>//details</code><code>:9080<</code><code>/td</code><code>><</code><code>/tr</code><code>><</code><code>tr</code><code>><th>endpoint<</code><code>/th</code><code>><td>details<</code><code>/td</code><code>><</code><code>/tr</code><code>><</code><code>tr</code><code>><th>children<</code><code>/th</code><code>><td><table class=</code><code>"table table-condensed table-bordered table-hover"</code><code>><</code><code>tr</code><code>><th>name<</code><code>/th</code><code>><th>endpoint<</code><code>/th</code><code>><th>children<</code><code>/th</code><code>><</code><code>/tr</code><code>><</code><code>tr</code><code>><td>http:</code><code>//details</code><code>:9080<</code><code>/td</code><code>><td>details<</code><code>/td</code><code>><td><</code><code>/td</code><code>><</code><code>/tr</code><code>><</code><code>tr</code><code>><td>http:</code><code>//reviews</code><code>:9080<</code><code>/td</code><code>><td>reviews<</code><code>/td</code><code>><td><table class=</code><code>"table table-condensed table-bordered table-hover"</code><code>><</code><code>tr</code><code>><th>name<</code><code>/th</code><code>><th>endpoint<</code><code>/th</code><code>><th>children<</code><code>/th</code><code>><</code><code>/tr</code><code>><</code><code>tr</code><code>><td>http:</code><code>//ratings</code><code>:9080<</code><code>/td</code><code>><td>ratings<</code><code>/td</code><code>><td><</code><code>/td</code><code>><</code><code>/tr</code><code>><</code><code>/table</code><code>><</code><code>/td</code><code>><</code><code>/tr</code><code>><</code><code>/table</code><code>><</code><code>/td</code><code>><</code><code>/tr</code><code>><</code><code>/table</code><code>></code></p> <p></p> <p><code><p></code></p> <p><code>    </code><code><h4>Click on one of the links below to auto generate a request to the backend as a real user or a tester</code></p> <p><code>    </code><code><</code><code>/h4</code><code>></code></p> <p><code><</code><code>/p</code><code>></code></p> <p><code><p><a href=</code><code>"/productpage?u=normal"</code><code>>Normal user<</code><code>/a</code><code>><</code><code>/p</code><code>></code></p> <p><code><p><a href=</code><code>"/productpage?u=test"</code><code>>Test user<</code><code>/a</code><code>><</code><code>/p</code><code>></code></p> <p></p> <p></p> <p><code>    </code> </p> <p><code><!-- Latest compiled and minified JavaScript --></code></p> <p><code><script src=</code><code>"static/jquery.min.js"</code><code>><</code><code>/script</code><code>></code></p> <p></p> <p><code><!-- Latest compiled and minified JavaScript --></code></p> <p><code><script src=</code><code>"static/bootstrap/js/bootstrap.min.js"</code><code>><</code><code>/script</code><code>></code></p> <p></p> <p><code>  </code><code><</code><code>/body</code><code>></code></p> <p><code><</code><code>/html</code><code>></code></p> <p><code>~ $</code></p> </td> </tr> </tbody> </table> <p>  提示:可以看到对应客户端pod能够正常访问productpage:9080;这里说一下我们在集群内部pod中用productpage来访问服务是可以正常被coredns解析到对应svc上进行响应的;</p> <p>  暴露bookinfo给集群外部客户端访问</p> <table border="0"> <tbody> <tr> <td> <p>1</p> <p>2</p> <p>3</p> <p>4</p> <p>5</p> <p>6</p> <p>7</p> <p>8</p> <p>9</p> <p>10</p> <p>11</p> <p>12</p> <p>13</p> <p>14</p> <p>15</p> <p>16</p> <p>17</p> <p>18</p> <p>19</p> <p>20</p> <p>21</p> <p>22</p> <p>23</p> <p>24</p> <p>25</p> <p>26</p> <p>27</p> <p>28</p> <p>29</p> <p>30</p> <p>31</p> <p>32</p> <p>33</p> <p>34</p> <p>35</p> <p>36</p> <p>37</p> <p>38</p> <p>39</p> <p>40</p> <p>41</p> <p>42</p> <p>43</p> </td> <td> <p><code>root@k8s-master01:~</code><code># cat /usr/local/istio/samples/bookinfo/networking/bookinfo-gateway.yaml</code></p> <p><code>apiVersion: networking.istio.io</code><code>/v1alpha3</code></p> <p><code>kind: Gateway</code></p> <p><code>metadata:</code></p> <p><code>  </code><code>name: bookinfo-gateway</code></p> <p><code>spec:</code></p> <p><code>  </code><code>selector:</code></p> <p><code>    </code><code>istio: ingressgateway </code><code># use istio default controller</code></p> <p><code>  </code><code>servers:</code></p> <p><code>  </code><code>- port:</code></p> <p><code>      </code><code>number: 80</code></p> <p><code>      </code><code>name: http</code></p> <p><code>      </code><code>protocol: HTTP</code></p> <p><code>    </code><code>hosts:</code></p> <p><code>    </code><code>- </code><code>"*"</code></p> <p><code>---</code></p> <p><code>apiVersion: networking.istio.io</code><code>/v1alpha3</code></p> <p><code>kind: VirtualService</code></p> <p><code>metadata:</code></p> <p><code>  </code><code>name: bookinfo</code></p> <p><code>spec:</code></p> <p><code>  </code><code>hosts:</code></p> <p><code>  </code><code>- </code><code>"*"</code></p> <p><code>  </code><code>gateways:</code></p> <p><code>  </code><code>- bookinfo-gateway</code></p> <p><code>  </code><code>http:</code></p> <p><code>  </code><code>- match:</code></p> <p><code>    </code><code>- uri:</code></p> <p><code>        </code><code>exact: </code><code>/productpage</code></p> <p><code>    </code><code>- uri:</code></p> <p><code>        </code><code>prefix: </code><code>/static</code></p> <p><code>    </code><code>- uri:</code></p> <p><code>        </code><code>exact: </code><code>/login</code></p> <p><code>    </code><code>- uri:</code></p> <p><code>        </code><code>exact: </code><code>/logout</code></p> <p><code>    </code><code>- uri:</code></p> <p><code>        </code><code>prefix: </code><code>/api/v1/products</code></p> <p><code>    </code><code>route:</code></p> <p><code>    </code><code>- destination:</code></p> <p><code>        </code><code>host: productpage</code></p> <p><code>        </code><code>port:</code></p> <p><code>          </code><code>number: 9080</code></p> <p><code>root@k8s-master01:~</code><code>#</code></p> </td> </tr> </tbody> </table> <p>  提示:该清单将bookinfo通过关联ingressgateway的外部地址的80端口关联,所以我们访问ingressgateway的外部地址就可以访问到bookinfo;</p> <p>  应用清单</p> <table border="0"> <tbody> <tr> <td> <p>1</p> <p>2</p> <p>3</p> <p>4</p> </td> <td> <p><code>root@k8s-master01:~</code><code># kubectl apply -f /usr/local/istio/samples/bookinfo/networking/bookinfo-gateway.yaml</code></p> <p><code>gateway.networking.istio.io</code><code>/bookinfo-gateway</code> <code>created</code></p> <p><code>virtualservice.networking.istio.io</code><code>/bookinfo</code> <code>created</code></p> <p><code>root@k8s-master01:~</code><code>#</code></p> </td> </tr> </tbody> </table> <p>  验证:访问ingressgateway的外部地址,看看对应bookinfo是否能够被访问到?</p> <p></p> <p class="img-center"><a href="http://img.e-com-net.com/image/info8/1023bdb9867945cf9448ac205419cb9a.gif" target="_blank"><img alt="Service Mesh之Istio部署bookinfo_第3张图片" height="594" src="http://img.e-com-net.com/image/info8/1023bdb9867945cf9448ac205419cb9a.gif" width="802" style="border:1px solid black;"></a></p> <p>  提示:可以看到现在我们在集群外部通过访问ingressgateway的外部地址就能正常访问到bookinfo,通过多次访问,还可以实现不同的效果;</p> <p>  模拟客户端访问bookinfo</p> <table border="0"> <tbody> <tr> <td> <p>1</p> </td> <td> <p><code>root@k8s-node03:~</code><code># while true ; do curl 192.168.0.252/productpage;sleep 0.$RANDOM;done</code></p> </td> </tr> </tbody> </table> <p>  在kiali上查看绘图</p> <p></p> <p class="img-center"></p> <p>  提示:我们在kiali上看到的图形,就是通过模拟客户端访问流量所形成的图形;该图形能够形象的展示对应服务流量的top,以及动态显示对应流量访问应用的比例;我们可以通过定义配置文件的方式,动态调整客户端能够访问到bookinfo那个版本;对应绘图也会通过采集到的指标数据动态将流量路径绘制出来;</p> <p>  通过bookinfo测试流量治理功能</p> <p>  创建destinationrule</p> <table border="0"> <tbody> <tr> <td> <p>1</p> <p>2</p> <p>3</p> <p>4</p> <p>5</p> <p>6</p> <p>7</p> <p>8</p> <p>9</p> <p>10</p> <p>11</p> <p>12</p> <p>13</p> <p>14</p> <p>15</p> <p>16</p> <p>17</p> <p>18</p> <p>19</p> <p>20</p> <p>21</p> <p>22</p> <p>23</p> <p>24</p> <p>25</p> <p>26</p> <p>27</p> <p>28</p> <p>29</p> <p>30</p> <p>31</p> <p>32</p> <p>33</p> <p>34</p> <p>35</p> <p>36</p> <p>37</p> <p>38</p> <p>39</p> <p>40</p> <p>41</p> <p>42</p> <p>43</p> <p>44</p> <p>45</p> <p>46</p> <p>47</p> <p>48</p> <p>49</p> <p>50</p> <p>51</p> <p>52</p> <p>53</p> <p>54</p> <p>55</p> <p>56</p> <p>57</p> <p>58</p> <p>59</p> <p>60</p> <p>61</p> <p>62</p> <p>63</p> <p>64</p> </td> <td> <p><code>root@k8s-master01:</code><code>/usr/local/istio</code><code># cat samples/bookinfo/networking/destination-rule-all.yaml</code></p> <p><code>apiVersion: networking.istio.io</code><code>/v1alpha3</code></p> <p><code>kind: DestinationRule</code></p> <p><code>metadata:</code></p> <p><code>  </code><code>name: productpage</code></p> <p><code>spec:</code></p> <p><code>  </code><code>host: productpage</code></p> <p><code>  </code><code>subsets:</code></p> <p><code>  </code><code>- name: v1</code></p> <p><code>    </code><code>labels:</code></p> <p><code>      </code><code>version: v1</code></p> <p><code>---</code></p> <p><code>apiVersion: networking.istio.io</code><code>/v1alpha3</code></p> <p><code>kind: DestinationRule</code></p> <p><code>metadata:</code></p> <p><code>  </code><code>name: reviews</code></p> <p><code>spec:</code></p> <p><code>  </code><code>host: reviews</code></p> <p><code>  </code><code>subsets:</code></p> <p><code>  </code><code>- name: v1</code></p> <p><code>    </code><code>labels:</code></p> <p><code>      </code><code>version: v1</code></p> <p><code>  </code><code>- name: v2</code></p> <p><code>    </code><code>labels:</code></p> <p><code>      </code><code>version: v2</code></p> <p><code>  </code><code>- name: v3</code></p> <p><code>    </code><code>labels:</code></p> <p><code>      </code><code>version: v3</code></p> <p><code>---</code></p> <p><code>apiVersion: networking.istio.io</code><code>/v1alpha3</code></p> <p><code>kind: DestinationRule</code></p> <p><code>metadata:</code></p> <p><code>  </code><code>name: ratings</code></p> <p><code>spec:</code></p> <p><code>  </code><code>host: ratings</code></p> <p><code>  </code><code>subsets:</code></p> <p><code>  </code><code>- name: v1</code></p> <p><code>    </code><code>labels:</code></p> <p><code>      </code><code>version: v1</code></p> <p><code>  </code><code>- name: v2</code></p> <p><code>    </code><code>labels:</code></p> <p><code>      </code><code>version: v2</code></p> <p><code>  </code><code>- name: v2-mysql</code></p> <p><code>    </code><code>labels:</code></p> <p><code>      </code><code>version: v2-mysql</code></p> <p><code>  </code><code>- name: v2-mysql-vm</code></p> <p><code>    </code><code>labels:</code></p> <p><code>      </code><code>version: v2-mysql-vm</code></p> <p><code>---</code></p> <p><code>apiVersion: networking.istio.io</code><code>/v1alpha3</code></p> <p><code>kind: DestinationRule</code></p> <p><code>metadata:</code></p> <p><code>  </code><code>name: details</code></p> <p><code>spec:</code></p> <p><code>  </code><code>host: details</code></p> <p><code>  </code><code>subsets:</code></p> <p><code>  </code><code>- name: v1</code></p> <p><code>    </code><code>labels:</code></p> <p><code>      </code><code>version: v1</code></p> <p><code>  </code><code>- name: v2</code></p> <p><code>    </code><code>labels:</code></p> <p><code>      </code><code>version: v2</code></p> <p><code>---</code></p> <p><code>root@k8s-master01:</code><code>/usr/local/istio</code><code>#</code></p> </td> </tr> </tbody> </table> <p>  提示:上述清单主要定义了不同版本对应的服务的版本;</p> <p>  应用清单</p> <table border="0"> <tbody> <tr> <td> <p>1</p> <p>2</p> <p>3</p> <p>4</p> <p>5</p> <p>6</p> </td> <td> <p><code>root@k8s-master01:</code><code>/usr/local/istio</code><code># kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml</code></p> <p><code>destinationrule.networking.istio.io</code><code>/productpage</code> <code>created</code></p> <p><code>destinationrule.networking.istio.io</code><code>/reviews</code> <code>created</code></p> <p><code>destinationrule.networking.istio.io</code><code>/ratings</code> <code>created</code></p> <p><code>destinationrule.networking.istio.io</code><code>/details</code> <code>created</code></p> <p><code>root@k8s-master01:</code><code>/usr/local/istio</code><code>#</code></p> </td> </tr> </tbody> </table> <p>  将所有流量路由至v1版本</p> <table border="0"> <tbody> <tr> <td> <p>1</p> <p>2</p> <p>3</p> <p>4</p> <p>5</p> <p>6</p> </td> <td> <p><code>root@k8s-master01:</code><code>/usr/local/istio</code><code># kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml</code></p> <p><code>virtualservice.networking.istio.io</code><code>/productpage</code> <code>created</code></p> <p><code>virtualservice.networking.istio.io</code><code>/reviews</code> <code>created</code></p> <p><code>virtualservice.networking.istio.io</code><code>/ratings</code> <code>created</code></p> <p><code>virtualservice.networking.istio.io</code><code>/details</code> <code>created</code></p> <p><code>root@k8s-master01:</code><code>/usr/local/istio</code><code>#</code></p> </td> </tr> </tbody> </table> <p>  验证:在kiali上查看对应流量是否只有v1版本了?</p> <p></p> <p class="img-center"><a href="http://img.e-com-net.com/image/info8/a8188c25a99645cf840d4f234b86dcb9.gif" target="_blank"><img alt="Service Mesh之Istio部署bookinfo_第4张图片" height="594" src="http://img.e-com-net.com/image/info8/a8188c25a99645cf840d4f234b86dcb9.gif" width="792" style="border:1px solid black;"></a></p> <p>  提示:可以看到现在kiali绘制的图里面就只有v1版本的流量,其他v2,v3版本流量就没有了;</p> <p>  通过客户端登陆身份标识来路由</p> <table border="0"> <tbody> <tr> <td> <p>1</p> <p>2</p> <p>3</p> <p>4</p> <p>5</p> <p>6</p> <p>7</p> <p>8</p> <p>9</p> <p>10</p> <p>11</p> <p>12</p> <p>13</p> <p>14</p> <p>15</p> <p>16</p> <p>17</p> <p>18</p> <p>19</p> <p>20</p> <p>21</p> <p>22</p> </td> <td> <p><code>root@k8s-master01:</code><code>/usr/local/istio</code><code># cat samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml</code></p> <p><code>apiVersion: networking.istio.io</code><code>/v1alpha3</code></p> <p><code>kind: VirtualService</code></p> <p><code>metadata:</code></p> <p><code>  </code><code>name: reviews</code></p> <p><code>spec:</code></p> <p><code>  </code><code>hosts:</code></p> <p><code>    </code><code>- reviews</code></p> <p><code>  </code><code>http:</code></p> <p><code>  </code><code>- match:</code></p> <p><code>    </code><code>- headers:</code></p> <p><code>        </code><code>end-user:</code></p> <p><code>          </code><code>exact: jason</code></p> <p><code>    </code><code>route:</code></p> <p><code>    </code><code>- destination:</code></p> <p><code>        </code><code>host: reviews</code></p> <p><code>        </code><code>subset: v2</code></p> <p><code>  </code><code>- route:</code></p> <p><code>    </code><code>- destination:</code></p> <p><code>        </code><code>host: reviews</code></p> <p><code>        </code><code>subset: v1</code></p> <p><code>root@k8s-master01:</code><code>/usr/local/istio</code><code>#</code></p> </td> </tr> </tbody> </table> <p>  提示:上述清单定义了,登录用户名为jason,就响应v2版本;其他未登录的客户端还是以v1版本响应;</p> <p>  验证:应用配置清单,登录jason,看看是否是以v2版本响应?</p> <p></p> <p class="img-center"></p> <p>  提示:可以看到我们应用了配置清单以后,对应模拟客户端访问的还是一直以v1的版本响应;我们登录jason用户以后,对应响应给我们的页面就是v2版本,退出jason用户又是以v1版本响应;</p> <p>  以上就是bookinfo在istio服务网格中,通过定义不同的配置,实现高级流量治理的效果; </p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1685122854292631552"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(service_mesh,istio,kubernetes)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1950192091439099904.htm" title="K8S 常用命令全解析:高效管理容器化集群" target="_blank">K8S 常用命令全解析:高效管理容器化集群</a> <span class="text-muted">恩爸编程</span> <a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/k8s%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/1.htm">k8s常用命令</a><a class="tag" taget="_blank" href="/search/k8s%E6%9C%89%E5%93%AA%E4%BA%9B%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/1.htm">k8s有哪些常用命令</a><a class="tag" taget="_blank" href="/search/k8s%E5%91%BD%E4%BB%A4%E6%9C%89%E5%93%AA%E4%BA%9B/1.htm">k8s命令有哪些</a><a class="tag" taget="_blank" href="/search/K8S%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E6%9C%89%E5%93%AA%E4%BA%9B/1.htm">K8S常用命令有哪些</a> <div>K8S常用命令全解析:高效管理容器化集群一、引言Kubernetes(K8S)作为强大的容器编排平台,其丰富的命令行工具(kubectl)为用户提供了便捷的方式来管理集群中的各种资源。熟练掌握K8S常用命令对于开发人员和运维人员至关重要,能够有效提高容器化应用的部署、监控与维护效率。本文将详细介绍一些K8S常用命令及其使用案例。二、基础资源操作命令(一)kubectlcreate功能:用于创建K8</div> </li> <li><a href="/article/1950131321980383232.htm" title="深入了解 Kubernetes(k8s):从概念到实践" target="_blank">深入了解 Kubernetes(k8s):从概念到实践</a> <span class="text-muted"></span> <div>目录一、k8s核心概念二、k8s的优势三、k8s架构组件控制平面组件节点组件四、k8s+docker运行前后端分离项目的例子1.准备前端项目2.准备后端项目3.创建k8s部署配置文件4.部署应用到k8s集群在当今云计算和容器化技术飞速发展的时代,Kubernetes(简称k8s)已成为容器编排领域的事实标准。无论是互联网巨头、传统企业还是初创公司,都在广泛采用k8s来管理和部署容器化应用。本文将带</div> </li> <li><a href="/article/1950065015335743488.htm" title="Coze开源实战指南:构建企业级AI应用的全链路技术解析(含Kubernetes+服务网格深度实践)" target="_blank">Coze开源实战指南:构建企业级AI应用的全链路技术解析(含Kubernetes+服务网格深度实践)</a> <span class="text-muted"></span> <div>一、Coze技术架构深度解析1.1核心组件与五层异构架构Coze采用五层异构架构(感知层→执行层→决策层→监控层→进化层),实现亚毫秒级实时响应与动态弹性扩展。其核心模块包括:架构亮点支持横向扩展的微服务集群基于Kubernetes的自动扩缩容机制服务网格(Istio)实现流量治理核心组件对比表组件功能特性典型性能指标CozeStudio30+节点类型/多模式编排响应速度提升300%CozeLoo</div> </li> <li><a href="/article/1949908035187044352.htm" title="kubeadm部署安装K8S集群及核心概念-02" target="_blank">kubeadm部署安装K8S集群及核心概念-02</a> <span class="text-muted"></span> <div>Kubernetes组件介绍KubernetesCluster由Master和Node组成,节点上运行着若干Kubernetes服务。Master节点Master是KubernetesCluster的大脑,运行着如下Daemon服务:kube-apiserver、kube-scheduler、kube-controller-manager、etcd和Pod网络(例如flannel)。APIServ</div> </li> <li><a href="/article/1949907403294175232.htm" title="Kubeadm 快速搭建 k8s 集群&&安装可视化管理界面" target="_blank">Kubeadm 快速搭建 k8s 集群&&安装可视化管理界面</a> <span class="text-muted">头发莫的了呀</span> <a class="tag" taget="_blank" href="/search/Kubernetes/1.htm">Kubernetes</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a> <div>文章目录1.实验准备2.安装docker3.配置阿里云K8Srepo源(三个节点)4.安装kubeadm,kubelet,kubectl(三个节点)5.部署kubernetesMaster节点(master节点上执行)6.k8s-node节点加入master节点(两个node执行)7.安装Pod网络插件(CNI插件,master节点)8.master节点安装可视化管理界面dashboard1.实验</div> </li> <li><a href="/article/1949900466318012416.htm" title="初始化 K8s 主节点时 报错failed to pull image registry.aliyuncs.com/google_containers/kube-apiserver:v1.23.17" target="_blank">初始化 K8s 主节点时 报错failed to pull image registry.aliyuncs.com/google_containers/kube-apiserver:v1.23.17</a> <span class="text-muted">Ashmcracker</span> <a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a> <div>运行r如下命令初始化kubernetes的master节点2025年3月12日更新:阿里云的镜像仓库目前只给它自己云上的服务器使用了,建议更换华为云的镜像加速器https://support.huaweicloud.com/usermanual-swr/swr_01_0045.htmlkubeadminit\--kubernetes-version=v1.23.17\--image-reposit</div> </li> <li><a href="/article/1949815341693595648.htm" title="零信任架构落地:Java + SPIFFE 微服务身份联邦体系" target="_blank">零信任架构落地:Java + SPIFFE 微服务身份联邦体系</a> <span class="text-muted">司铭鸿</span> <a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E6%9C%8D%E5%8A%A1/1.htm">微服务</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0/1.htm">线性代数</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>“信任是最昂贵的漏洞。”——2017年Equifax数据泄露后安全专家总结开篇:当城堡护城河干涸时2019年,某跨国金融集团遭遇“服务间信任链断裂”攻击。攻击者利用Kubernetes服务账户令牌泄露,伪装成合法服务横向渗透,窃取核心交易数据。其传统边界防火墙与VPN如同中世纪的护城河,对内部流量毫无防御能力。这场灾难性事件点燃了他们落地零信任架构(ZeroTrustArchitecture,ZT</div> </li> <li><a href="/article/1949785973357342720.htm" title="在阿里云服务器上搭建单节点Kubernetes集群的完整指南与故障排除" target="_blank">在阿里云服务器上搭建单节点Kubernetes集群的完整指南与故障排除</a> <span class="text-muted">老牛十八岁SYZ</span> <a class="tag" taget="_blank" href="/search/Kubernetes/1.htm">Kubernetes</a><a class="tag" taget="_blank" href="/search/%E9%98%BF%E9%87%8C%E4%BA%91/1.htm">阿里云</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a> <div>在阿里云服务器上搭建单节点Kubernetes集群的完整指南与故障排除在云计算和容器化技术日益普及的今天,Kubernetes(简称K8s)已成为容器编排的事实标准。本文将以阿里云服务器(AlibabaCloudLinux)为例,详细介绍如何搭建单节点Kubernetes集群,并针对实际操作中可能遇到的典型问题提供系统性解决方案。【阿里云限时特惠】云产品低至38元/年起!各位技术伙伴,阿里云爆款钜</div> </li> <li><a href="/article/1949651062357028864.htm" title="k8s 的基本原理、架构图、使用步骤和注意事项" target="_blank">k8s 的基本原理、架构图、使用步骤和注意事项</a> <span class="text-muted"></span> <div>Kubernetes(k8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。以下是其基本原理、使用步骤和注意事项的总结:一、k8s基本原理核心架构Master节点:控制集群的核心组件,包括:APIServer:所有操作的入口,提供RESTfulAPI。Scheduler:将Pod分配到合适的Node。ControllerManager:维护集群状态(如副本数、故障检测)。etcd</div> </li> <li><a href="/article/1949650935991037952.htm" title="1、kubernetes 1.5.2原理以及集群HA部署" target="_blank">1、kubernetes 1.5.2原理以及集群HA部署</a> <span class="text-muted">yongbang_yan</span> <a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a> <div>Kubernetes是什么?1.是一个全新的基于容器技术的分布式架构,是谷歌的Borg技术的一个开源版本Borg是谷歌的一个久负盛名的内部使用的大规模集群管理系统,基于容器技术,目的是实现资源管理的自动化,垮多个数据中心的资源利用率的最大化2.Kubernetes是一个开放的平台。不局限于任何一种语言,没有限定任何编程接口。3.Kubernetes是一个完备的分布式系统支持平台。Kubernete</div> </li> <li><a href="/article/1949649045467230208.htm" title="28、深入了解Kubernetes对象与EKS集群部署" target="_blank">28、深入了解Kubernetes对象与EKS集群部署</a> <span class="text-muted">week9</span> <a class="tag" taget="_blank" href="/search/AWS%E5%BE%AE%E6%9C%8D%E5%8A%A1%E5%AE%9E%E6%88%98%EF%BC%9A%E4%BB%8E%E7%90%86%E8%AE%BA%E5%88%B0%E5%AE%9E%E8%B7%B5/1.htm">AWS微服务实战:从理论到实践</a><a class="tag" taget="_blank" href="/search/Kubernetes/1.htm">Kubernetes</a><a class="tag" taget="_blank" href="/search/EKS/1.htm">EKS</a><a class="tag" taget="_blank" href="/search/Ingress/1.htm">Ingress</a> <div>深入了解Kubernetes对象与EKS集群部署1.Kubernetes对象概述Kubernetes中有多种重要对象,它们在集群的运行和管理中发挥着关键作用。-Ingress:Ingress是一个KubernetesAPI对象,用于管理集群中服务的外部HTTP/HTTPS流量。它通过Ingress配置中定义的规则,将集群外部的流量路由暴露给服务。Deployment用于创建Pod,ReplicaS</div> </li> <li><a href="/article/1949641856052686848.htm" title="2、Kubernetes:架构、优势与部署方案解析" target="_blank">2、Kubernetes:架构、优势与部署方案解析</a> <span class="text-muted">coffee</span> <a class="tag" taget="_blank" href="/search/Kubernetes/1.htm">Kubernetes</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E4%BC%98%E5%8A%BF/1.htm">优势</a> <div>Kubernetes:架构、优势与部署方案解析1.Kubernetes基础概念工作负载平面(WorkloadPlane)有时也被称为数据平面(DataPlane),但这种说法容易让人混淆,因为该平面承载的是应用程序而非数据。这里的“平面”可以理解为应用程序运行的“表面”。非生产集群可以使用单个主节点,而高可用集群则至少需要三个物理主节点来承载控制平面(ControlPlane)。工作节点的数量取决</div> </li> <li><a href="/article/1949618155378765824.htm" title="K8s 集群成本优化实战:基于 Spot 实例与模型量化的" target="_blank">K8s 集群成本优化实战:基于 Spot 实例与模型量化的</a> <span class="text-muted">女码农的重启</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/JAVA/1.htm">JAVA</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a> <div>在Kubernetes集群运维中,成本控制与服务稳定性往往存在博弈——根据CNCF2024年报告,超过67%的企业K8s集群资源利用率低于50%,年浪费成本平均达12万美元。对于中小团队而言,通过技术手段降低运行成本更是生存刚需。本文聚焦两类核心优化手段:Spot实例的弹性调度与模型量化的资源压缩,结合生产环境实测数据,提供可落地的K8s成本优化方案,包含完整的配置模板与量化指标对比。一、Spot</div> </li> <li><a href="/article/1949608572350427136.htm" title="Kubernetes 核心组件解析" target="_blank">Kubernetes 核心组件解析</a> <span class="text-muted">算法小生Đ</span> <a class="tag" taget="_blank" href="/search/%E7%B2%BE%E9%80%89%E5%AE%9E%E8%B7%B5/1.htm">精选实践</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a> <div>Kubernetes(K8S)的组件组成可以分为控制平面组件(ControlPlaneComponents)和节点组件(NodeComponents),以及一些附加组件。以下是详细的组成说明:1.控制平面组件(ControlPlaneComponents)控制平面负责管理集群的状态,通常运行在主节点(MasterNode)上,包含以下核心组件:APIServer(kube-apiserver)集群</div> </li> <li><a href="/article/1949563812122259456.htm" title="PHP 8.0 云原生与前沿技术深度整合(1)" target="_blank">PHP 8.0 云原生与前沿技术深度整合(1)</a> <span class="text-muted">jishujiaoliu1682</span> <a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>PHP8.0云原生与前沿技术深度整合目录云原生PHP架构ServerlessPHP实践AI/ML集成方案区块链与PHP物联网(IoT)开发边缘计算部署未来技术展望云原生PHP架构KubernetesOperator设计phpclassPhpAppOperator{private$k8sClient;publicfunction__construct(K8sClient$client){$this-</div> </li> <li><a href="/article/1949408476333666304.htm" title="istio-proxy用哪个端口代理http流量的?" target="_blank">istio-proxy用哪个端口代理http流量的?</a> <span class="text-muted">小诸葛的博客</span> <a class="tag" taget="_blank" href="/search/istio/1.htm">istio</a><a class="tag" taget="_blank" href="/search/http/1.htm">http</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a> <div>在Istio中,istio-proxy(基于Envoy)代理HTTP流量的端口取决于具体配置和服务类型。以下是以Markdown格式整理的详细说明,涵盖istio-proxy如何处理HTTP流量以及相关端口信息:istio-proxy代理HTTP流量的端口1.默认端口istio-proxy使用iptables规则或直接配置来拦截和代理应用的流量。HTTP流量的代理端口通常包括以下几种情况:出站流量</div> </li> <li><a href="/article/1949395368475160576.htm" title="关于cgroup 学习" target="_blank">关于cgroup 学习</a> <span class="text-muted">序冢--磊</span> <a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a> <div>一、前言cgroup在K8S中有重要应用,K8S参考书籍:kubernetes权威指南第5版公司一个项目用linux的cgroup技术来限制进场cpu和内存使用,具有非常好的学习意义,所以业余写下笔记,来记录一下cgroup的使用cgroup可以绑定一组进程集合,他的内核接口暴露是通过linux伪文件系统来实现的,我们可以通过linux上一些特定的文件来限制进场cpu和内存的使用二、cgroup学</div> </li> <li><a href="/article/1949395369490182144.htm" title="Linux 内核中 cgroup(控制组) 作用是什么?" target="_blank">Linux 内核中 cgroup(控制组) 作用是什么?</a> <span class="text-muted"></span> <div>cgroup(ControlGroups)是Linux内核提供的一种机制,用于对进程(或线程)组进行资源限制、优先级分配、统计监控和任务控制。通过将进程分组管理,可以实现对CPU、内存、磁盘I/O、网络等系统资源的精细化分配和隔离。它是现代容器技术(如Docker、Kubernetes)的底层核心组件之一。1.cgroup的核心目标资源限制:限制进程组使用的资源量(如CPU最大使用率、内存上限)。</div> </li> <li><a href="/article/1949320510164758528.htm" title="498. 【kubernetes】好用的 kubectl 命令" target="_blank">498. 【kubernetes】好用的 kubectl 命令</a> <span class="text-muted">七镜</span> <div>将Pod的端口号映射到宿主机(通常用于测试)命令格式:kubectlport-forwardPOD[LOCAL_PORT:]REMOTE_PORT[...[LOCAL_PORT_N:]REMOTE_PORT_N][flags]将Pod的80端口映射到宿主机的8888端口,客户端即可通过http://:8888访问容器服务:[root@k8s0workspace_test]#kubectlport-</div> </li> <li><a href="/article/1949282382083321856.htm" title="Java学习第六十三部分——K8s" target="_blank">Java学习第六十三部分——K8s</a> <span class="text-muted"></span> <div>目录一、关键概述二、定义起源三、核心特点️四、核心组件五、资源对象⚡六、应用场景七、Java与K8s️八、运维与监控九、总结与归纳一、关键概述Kubernetes(简称K8s,源自“K”与“s”之间的8个字母)是开源的容器编排平台,由Google团队基于其内部Borg系统设计理念开源,现已成为云原生应用管理的事实标准。Java与K8s的结合是云原生应用开发的核心实践,帮助Java开发者高效管理容器</div> </li> <li><a href="/article/1949230683268378624.htm" title="Go语言从入门到精通" target="_blank">Go语言从入门到精通</a> <span class="text-muted">qq_44601070</span> <a class="tag" taget="_blank" href="/search/go%E8%AF%AD%E8%A8%80/1.htm">go语言</a><a class="tag" taget="_blank" href="/search/go%E8%AF%AD%E8%A8%80/1.htm">go语言</a> <div>“Gowillbetheserverlanguageofthefuture.”—TobiasLütke,Shopify在过去几年,崛起了一门新的语言:Go或者GoLang。没有什么比一门新的编程语言更令开发者兴奋了,不是么?目前一些开源社区,纷纷采用Go语言开发了许多平台、框架等,如:Docker、Kubernetes等,甚至逐步从其它语言(如:C、Java等)转换到了Go,相信这一点你已经体会到</div> </li> <li><a href="/article/1949211135265796096.htm" title="企业运维实践-如何在K8S集群环境Gitlab+Jenkins+Jmeter+Grafana技术中实现自动化分布压力测试数据展示..." target="_blank">企业运维实践-如何在K8S集群环境Gitlab+Jenkins+Jmeter+Grafana技术中实现自动化分布压力测试数据展示...</a> <span class="text-muted">全栈工程师修炼指南</span> <a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4%E5%AE%9E%E8%B7%B5%E4%B8%93%E6%A0%8F/1.htm">运维实践专栏</a><a class="tag" taget="_blank" href="/search/%E5%8E%8B%E5%8A%9B%E6%B5%8B%E8%AF%95/1.htm">压力测试</a><a class="tag" taget="_blank" href="/search/jenkins/1.htm">jenkins</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/github/1.htm">github</a> <div>关注「WeiyiGeek」公众号设为「特别关注」每天带你玩转网络安全运维、应用开发、物联网IOT学习!本章目录:0x00前言简述0x01安装配置在Windows中安装Apachejmeter工具以二进制方式安装Helm部署工具以helm方式安装Grafana9.x在K8S集群中部署动态持久卷在K8S集群中部署压力测试演示站点1.基础环境2.依赖环境0x02Kubernetes+jmeter+Inf</div> </li> <li><a href="/article/1949197762411163648.htm" title="k8s:利用kubectl部署nginx" target="_blank">k8s:利用kubectl部署nginx</a> <span class="text-muted">云游</span> <a class="tag" taget="_blank" href="/search/k8s/1.htm">k8s</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a> <div>本文介绍了在离线环境下基于HygonC86处理器和麒麟操作系统部署HTTPS服务的完整流程。首先通过CA签发服务器证书并创建KubernetesSecret存储证书密钥,然后配置Nginx服务(包含HTTP/HTTPS监听端口),接着创建PV/PVC存储和部署Nginx容器,最后通过NodePort服务暴露端口。关键步骤包括:1)使用ConfigMap管理Nginx配置;2)通过Secret挂载T</div> </li> <li><a href="/article/1949195368575070208.htm" title="在K8S中,Deploy升级过程包括什么?" target="_blank">在K8S中,Deploy升级过程包括什么?</a> <span class="text-muted">Dusk_橙子</span> <a class="tag" taget="_blank" href="/search/K8S/1.htm">K8S</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a> <div>在kubernetes中,Deployment的升级过程主要包括以下几个步骤:1、更新Deployment配置:当需要对应程序进行升级时,通常会更新Deploymen的yaml配置文件,可以更新的内容包括但不限于:容器镜像版本(v1.0–升级–>v2.0)应用配置(环境变量、命令参数)资源请求与限制更新策略和其他元数据2、选择升级策略:默认情况,Deployment使用滚动升级(RollingUp</div> </li> <li><a href="/article/1949194108052500480.htm" title="【Kubernetes】使用StatefulSet进行的资源调度,扩缩容,更改配置到版本回滚,三种配置更新方式" target="_blank">【Kubernetes】使用StatefulSet进行的资源调度,扩缩容,更改配置到版本回滚,三种配置更新方式</a> <span class="text-muted"></span> <div>StatefulSet实战进阶:从扩缩容到版本回滚的完整操作指南在Kubernetes中,StatefulSet的优势不仅在于稳定的身份标识,更在于其有序的更新和回滚机制。一、StatefulSet的扩缩容:有序增减实例和Deployment不同,StatefulSet的扩缩容有严格的顺序——扩容时从低序号到高序号创建,缩容时从高序号到低序号删除。这对分布式集群(如ZooKeeper)尤为重要,避</div> </li> <li><a href="/article/1949189944236896256.htm" title="【 Kubernetes 集群】Service&Ingress 网络无法访问排障处理" target="_blank">【 Kubernetes 集群】Service&Ingress 网络无法访问排障处理</a> <span class="text-muted">soso160</span> <a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a> <div>Service提供公网或内网服务无法访问提供公网服务或者内网服务的Service,如果出现无法访问或者CLB端口状态异常的情况,建议您进行如下检查:参考查看节点安全组配置检查集群中节点的安全组是否正确放通30000-32768端口区间。如果是公网服务,则进一步检查节点是否有公网带宽(仅针对传统账户类型)。如果Service的type为loadbalancer类型,可忽略CLB,直接检查NodeIP</div> </li> <li><a href="/article/1949189439867645952.htm" title="k8s怎么找deploy历史版本?" target="_blank">k8s怎么找deploy历史版本?</a> <span class="text-muted"></span> <div>在Kubernetes中,可以通过以下步骤查找Deployment的历史版本:####查看Deployment的历史版本记录使用以下命令查看指定Deployment的历史版本列表:```bashkubectlrollouthistorydeployment/```示例:```bashkubectlrollouthistorydeployment/my-app```输出将显示版本的修订号(REVIS</div> </li> <li><a href="/article/1949051753324408832.htm" title="【云原生篇】深入理解K8S CNI,CRI和 CSI" target="_blank">【云原生篇】深入理解K8S CNI,CRI和 CSI</a> <span class="text-muted">IChen.</span> <a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a> <div>在Kubernetes(K8s)生态系统中,CNI,CRI和CSI是三个关键的接口,它们分别代表ContainerNetworkInterface,ContainerlRuntimeInterface和ContainerStorageInterface。这些接口定义了Kubernetes如何与网络、容器运行时和存储系统进行交互,使得Kubernetes能够与各种技术栈兼容,增加了其灵活性和可扩展性</div> </li> <li><a href="/article/1949041656204423168.htm" title="云原生组网架构介绍" target="_blank">云原生组网架构介绍</a> <span class="text-muted">大他者大战小客体</span> <a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a> <div>常用云服务介绍CCE:云容器引擎云容器引擎(CloudContainerEngine,简称CCE)是一个企业级的Kubernetes集群托管服务,支持容器化应用的全生命周期管理,为您提供高度可扩展的、高性能的云原生应用部署和管理方案。https://support.huaweicloud.com/productdesc-cce/cce_productdesc_0022.htmlAPIG:API网关</div> </li> <li><a href="/article/1949011027169439744.htm" title="Docker+Kubernetes 实战:1 小时实现容器化" target="_blank">Docker+Kubernetes 实战:1 小时实现容器化</a> <span class="text-muted">大力出奇迹985</span> <a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a> <div>在当今快速发展的技术领域,容器化部署已然成为众多开发者与企业的心头好。它就像一把神奇的钥匙,能够高效解决应用部署过程中的诸多难题。而Docker和Kubernetes,堪称容器化世界里的双子星。Docker凭借自身的独特魅力,让应用的打包与分发变得轻松简单,仿佛拥有了一键复制应用环境的超能力;Kubernetes则如同一位智慧的指挥官,有条不紊地管理着大规模容器,实现自动化部署、伸缩与调度。接下来</div> </li> <li><a href="/article/124.htm" title="mysql主从数据同步" target="_blank">mysql主从数据同步</a> <span class="text-muted">林鹤霄</span> <a class="tag" taget="_blank" href="/search/mysql%E4%B8%BB%E4%BB%8E%E6%95%B0%E6%8D%AE%E5%90%8C%E6%AD%A5/1.htm">mysql主从数据同步</a> <div>配置mysql5.5主从服务器(转) 教程开始:一、安装MySQL 说明:在两台MySQL服务器192.168.21.169和192.168.21.168上分别进行如下操作,安装MySQL 5.5.22  二、配置MySQL主服务器(192.168.21.169)mysql  -uroot  -p   &nb</div> </li> <li><a href="/article/251.htm" title="oracle学习笔记" target="_blank">oracle学习笔记</a> <span class="text-muted">caoyong</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a> <div>1、ORACLE的安装    a>、ORACLE的版本    8i,9i :   i是internet    10g,11g : grid (网格)    12c : cloud (云计算)       b>、10g不支持win7 &</div> </li> <li><a href="/article/378.htm" title="数据库,SQL零基础入门" target="_blank">数据库,SQL零基础入门</a> <span class="text-muted">天子之骄</span> <a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93%E5%85%A5%E9%97%A8/1.htm">数据库入门</a><a class="tag" taget="_blank" href="/search/%E5%9F%BA%E6%9C%AC%E6%9C%AF%E8%AF%AD/1.htm">基本术语</a> <div>数据库,SQL零基础入门        做网站肯定离不开数据库,本人之前没怎么具体接触SQL,这几天起早贪黑得各种入门,恶补脑洞。一些具体的知识点,可以让小白不再迷茫的术语,拿来与大家分享。          数据库,永久数据的一个或多个大型结构化集合,通常与更新和查询数据的软件相关</div> </li> <li><a href="/article/505.htm" title="pom.xml" target="_blank">pom.xml</a> <span class="text-muted">一炮送你回车库</span> <a class="tag" taget="_blank" href="/search/pom.xml/1.htm">pom.xml</a> <div>1、一级元素dependencies是可以被子项目继承的 2、一级元素dependencyManagement是定义该项目群里jar包版本号的,通常和一级元素properties一起使用,既然有继承,也肯定有一级元素modules来定义子元素 3、父项目里的一级元素<modules> <module>lcas-admin-war</module> <</div> </li> <li><a href="/article/632.htm" title="sql查地区省市县" target="_blank">sql查地区省市县</a> <span class="text-muted">3213213333332132</span> <a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div> -- db_yhm_city SELECT * FROM db_yhm_city WHERE class_parent_id = 1 -- 海南 class_id = 9 港、奥、台 class_id = 33、34、35 SELECT * FROM db_yhm_city WHERE class_parent_id =169 SELECT d1.cla</div> </li> <li><a href="/article/759.htm" title="关于监听器那些让人头疼的事" target="_blank">关于监听器那些让人头疼的事</a> <span class="text-muted">宝剑锋梅花香</span> <a class="tag" taget="_blank" href="/search/%E7%94%BB%E5%9B%BE%E6%9D%BF/1.htm">画图板</a><a class="tag" taget="_blank" href="/search/%E7%9B%91%E5%90%AC%E5%99%A8/1.htm">监听器</a><a class="tag" taget="_blank" href="/search/%E9%BC%A0%E6%A0%87%E7%9B%91%E5%90%AC%E5%99%A8/1.htm">鼠标监听器</a> <div>       本人初学JAVA,对于界面开发我只能说有点蛋疼,用JAVA来做界面的话确实需要一定的耐心(不使用插件,就算使用插件的话也没好多少)既然Java提供了界面开发,老师又要求做,只能硬着头皮上啦。但是监听器还真是个难懂的地方,我是上了几次课才略微搞懂了些。       </div> </li> <li><a href="/article/886.htm" title="JAVA的遍历MAP" target="_blank">JAVA的遍历MAP</a> <span class="text-muted">darkranger</span> <a class="tag" taget="_blank" href="/search/map/1.htm">map</a> <div>Java Map遍历方式的选择 1. 阐述   对于Java中Map的遍历方式,很多文章都推荐使用entrySet,认为其比keySet的效率高很多。理由是:entrySet方法一次拿到所有key和value的集合;而keySet拿到的只是key的集合,针对每个key,都要去Map中额外查找一次value,从而降低了总体效率。那么实际情况如何呢?   为了解遍历性能的真实差距,包括在遍历ke</div> </li> <li><a href="/article/1013.htm" title="POJ 2312 Battle City 优先多列+bfs" target="_blank">POJ 2312 Battle City 优先多列+bfs</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/%E6%90%9C%E7%B4%A2/1.htm">搜索</a> <div>来源:http://poj.org/problem?id=2312 题意:题目背景就是小时候玩的坦克大战,求从起点到终点最少需要多少步。已知S和R是不能走得,E是空的,可以走,B是砖,只有打掉后才可以通过。 思路:很容易看出来这是一道广搜的题目,但是因为走E和走B所需要的时间不一样,因此不能用普通的队列存点。因为对于走B来说,要先打掉砖才能通过,所以我们可以理解为走B需要两步,而走E是指需要1</div> </li> <li><a href="/article/1140.htm" title="Hibernate与Jpa的关系,终于弄懂" target="_blank">Hibernate与Jpa的关系,终于弄懂</a> <span class="text-muted">avords</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/jpa/1.htm">jpa</a> <div>我知道Jpa是一种规范,而Hibernate是它的一种实现。除了Hibernate,还有EclipseLink(曾经的toplink),OpenJPA等可供选择,所以使用Jpa的一个好处是,可以更换实现而不必改动太多代码。 在play中定义Model时,使用的是jpa的annotations,比如javax.persistence.Entity, Table, Column, OneToMany</div> </li> <li><a href="/article/1267.htm" title="酸爽的console.log" target="_blank">酸爽的console.log</a> <span class="text-muted">bee1314</span> <a class="tag" taget="_blank" href="/search/console/1.htm">console</a> <div>在前端的开发中,console.log那是开发必备啊,简直直观。通过写小函数,组合大功能。更容易测试。但是在打版本时,就要删除console.log,打完版本进入开发状态又要添加,真不够爽。重复劳动太多。所以可以做些简单地封装,方便开发和上线。 /** * log.js hufeng * The safe wrapper for `console.xxx` functions * </div> </li> <li><a href="/article/1394.htm" title="哈佛教授:穷人和过于忙碌的人有一个共同思维特质" target="_blank">哈佛教授:穷人和过于忙碌的人有一个共同思维特质</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/%E6%97%B6%E9%97%B4%E7%AE%A1%E7%90%86/1.htm">时间管理</a><a class="tag" taget="_blank" href="/search/%E5%8A%B1%E5%BF%97%E4%BA%BA%E7%94%9F/1.htm">励志人生</a><a class="tag" taget="_blank" href="/search/%E7%A9%B7%E4%BA%BA/1.htm">穷人</a><a class="tag" taget="_blank" href="/search/%E8%BF%87%E4%BA%8E%E5%BF%99%E7%A2%8C/1.htm">过于忙碌</a> <div>        一个跨学科团队今年完成了一项对资源稀缺状况下人的思维方式的研究,结论是:穷人和过于忙碌的人有一个共同思维特质,即注意力被稀缺资源过分占据,引起认知和判断力的全面下降。这项研究是心理学、行为经济学和政策研究学者协作的典范。   这个研究源于穆来纳森对自己拖延症的憎恨。他7岁从印度移民美国,很快就如鱼得水,哈佛毕业</div> </li> <li><a href="/article/1521.htm" title="other operate" target="_blank">other operate</a> <span class="text-muted">征客丶</span> <a class="tag" taget="_blank" href="/search/OS/1.htm">OS</a><a class="tag" taget="_blank" href="/search/osx/1.htm">osx</a> <div>一、Mac Finder 设置排序方式,预览栏 在显示-》查看显示选项中 二、有时预览显示时,卡死在那,有可能是一些临时文件夹被删除了,如:/private/tmp[有待验证] -------------------------------------------------------------------- 若有其他凝问或文中有错误,请及时向我指出, 我好及时改正,同时也让我们一</div> </li> <li><a href="/article/1648.htm" title="【Scala五】分析Spark源代码总结的Scala语法三" target="_blank">【Scala五】分析Spark源代码总结的Scala语法三</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/scala/1.htm">scala</a> <div>1. If语句作为表达式 val properties = if (jobIdToActiveJob.contains(jobId)) { jobIdToActiveJob(stage.jobId).properties } else { // this stage will be assigned to "default" po</div> </li> <li><a href="/article/1775.htm" title="ZooKeeper 入门" target="_blank">ZooKeeper 入门</a> <span class="text-muted">BlueSkator</span> <a class="tag" taget="_blank" href="/search/%E4%B8%AD%E9%97%B4%E4%BB%B6/1.htm">中间件</a><a class="tag" taget="_blank" href="/search/zk/1.htm">zk</a> <div>ZooKeeper是一个高可用的分布式数据管理与系统协调框架。基于对Paxos算法的实现,使该框架保证了分布式环境中数据的强一致性,也正是基于这样的特性,使得ZooKeeper解决很多分布式问题。网上对ZK的应用场景也有不少介绍,本文将结合作者身边的项目例子,系统地对ZK的应用场景进行一个分门归类的介绍。 值得注意的是,ZK并非天生就是为这些应用场景设计的,都是后来众多开发者根据其框架的特性,利</div> </li> <li><a href="/article/1902.htm" title="MySQL取得当前时间的函数是什么 格式化日期的函数是什么" target="_blank">MySQL取得当前时间的函数是什么 格式化日期的函数是什么</a> <span class="text-muted">BreakingBad</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/Date/1.htm">Date</a> <div>取得当前时间用 now() 就行。 在数据库中格式化时间 用DATE_FORMA T(date, format) . 根据格式串format 格式化日期或日期和时间值date,返回结果串。 可用DATE_FORMAT( ) 来格式化DATE 或DATETIME 值,以便得到所希望的格式。根据format字符串格式化date值: %S, %s 两位数字形式的秒( 00,01,</div> </li> <li><a href="/article/2029.htm" title="读《研磨设计模式》-代码笔记-组合模式" target="_blank">读《研磨设计模式》-代码笔记-组合模式</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a> <div>声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/ import java.util.ArrayList; import java.util.List; abstract class Component { public abstract void printStruct(Str</div> </li> <li><a href="/article/2156.htm" title="4_JAVA+Oracle面试题(有答案)" target="_blank">4_JAVA+Oracle面试题(有答案)</a> <span class="text-muted">chenke</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a> <div>基础测试题 卷面上不能出现任何的涂写文字,所有的答案要求写在答题纸上,考卷不得带走。 选择题 1、 What will happen when you attempt to compile and run the following code? (3) public class Static { static { int x = 5; // 在static内有效 } st</div> </li> <li><a href="/article/2283.htm" title="新一代工作流系统设计目标" target="_blank">新一代工作流系统设计目标</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E8%84%9A%E6%9C%AC/1.htm">脚本</a> <div>   用户只需要给工作流系统制定若干个需求,流程系统根据需求,并结合事先输入的组织机构和权限结构,调用若干算法,在流程展示版面上面显示出系统自动生成的流程图,然后由用户根据实际情况对该流程图进行微调,直到满意为止,流程在运行过程中,系统和用户可以根据情况对流程进行实时的调整,包括拓扑结构的调整,权限的调整,内置脚本的调整。。。。。 在这个设计中,最难的地方是系统根据什么来生成流</div> </li> <li><a href="/article/2410.htm" title="oracle 行链接与行迁移" target="_blank">oracle 行链接与行迁移</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E8%A1%8C%E8%BF%81%E7%A7%BB/1.htm">行迁移</a> <div>表里的一行对于一个数据块太大的情况有二种(一行在一个数据块里放不下) 第一种情况: INSERT的时候,INSERT时候行的大小就超一个块的大小。Oracle把这行的数据存储在一连串的数据块里(Oracle Stores the data for the row in a chain of data blocks),这种情况称为行链接(Row Chain),一般不可避免(除非使用更大的数据</div> </li> <li><a href="/article/2537.htm" title="[JShop]开源电子商务系统jshop的系统缓存实现" target="_blank">[JShop]开源电子商务系统jshop的系统缓存实现</a> <span class="text-muted">dinguangx</span> <a class="tag" taget="_blank" href="/search/jshop/1.htm">jshop</a><a class="tag" taget="_blank" href="/search/%E7%94%B5%E5%AD%90%E5%95%86%E5%8A%A1/1.htm">电子商务</a> <div>前言 jeeshop中通过SystemManager管理了大量的缓存数据,来提升系统的性能,但这些缓存数据全部都是存放于内存中的,无法满足特定场景的数据更新(如集群环境)。JShop对jeeshop的缓存机制进行了扩展,提供CacheProvider来辅助SystemManager管理这些缓存数据,通过CacheProvider,可以把缓存存放在内存,ehcache,redis,memcache</div> </li> <li><a href="/article/2664.htm" title="初三全学年难记忆单词" target="_blank">初三全学年难记忆单词</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/english/1.htm">english</a><a class="tag" taget="_blank" href="/search/word/1.htm">word</a> <div>several 儿子;若干 shelf 架子 knowledge 知识;学问 librarian 图书管理员 abroad 到国外,在国外 surf 冲浪 wave 浪;波浪 twice 两次;两倍 describe 描写;叙述 especially 特别;尤其 attract 吸引 prize 奖品;奖赏 competition 比赛;竞争 event 大事;事件 O</div> </li> <li><a href="/article/2791.htm" title="sphinx实践" target="_blank">sphinx实践</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/sphinx/1.htm">sphinx</a> <div>  安装参考地址:http://briansnelson.com/How_to_install_Sphinx_on_Centos_Server   yum install sphinx 如果失败的话使用下面的方式安装 wget http://sphinxsearch.com/files/sphinx-2.2.9-1.rhel6.x86_64.rpm yum loca</div> </li> <li><a href="/article/2918.htm" title="JPA之JPQL(三)" target="_blank">JPA之JPQL(三)</a> <span class="text-muted">frank1234</span> <a class="tag" taget="_blank" href="/search/orm/1.htm">orm</a><a class="tag" taget="_blank" href="/search/jpa/1.htm">jpa</a><a class="tag" taget="_blank" href="/search/JPQL/1.htm">JPQL</a> <div>1 什么是JPQL JPQL是Java Persistence Query Language的简称,可以看成是JPA中的HQL, JPQL支持各种复杂查询。 2 检索单个对象 @Test public  void querySingleObject1() {     Query query = em.createQuery("sele</div> </li> <li><a href="/article/3045.htm" title="Remove Duplicates from Sorted Array II" target="_blank">Remove Duplicates from Sorted Array II</a> <span class="text-muted">hcx2013</span> <a class="tag" taget="_blank" href="/search/remove/1.htm">remove</a> <div>Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For example,Given sorted array nums = [1,1,1,2,2,3], Your function should return length </div> </li> <li><a href="/article/3172.htm" title="Spring4新特性——Groovy Bean定义DSL" target="_blank">Spring4新特性——Groovy Bean定义DSL</a> <span class="text-muted">jinnianshilongnian</span> <a class="tag" taget="_blank" href="/search/spring+4/1.htm">spring 4</a> <div>Spring4新特性——泛型限定式依赖注入 Spring4新特性——核心容器的其他改进 Spring4新特性——Web开发的增强 Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC  Spring4新特性——Groovy Bean定义DSL Spring4新特性——更好的Java泛型操作API  Spring4新</div> </li> <li><a href="/article/3299.htm" title="CentOS安装Mysql5.5" target="_blank">CentOS安装Mysql5.5</a> <span class="text-muted">liuxingguome</span> <a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a> <div>CentOS下以RPM方式安装MySQL5.5 首先卸载系统自带Mysql: yum remove mysql mysql-server mysql-libs compat-mysql51 rm -rf /var/lib/mysql rm /etc/my.cnf 查看是否还有mysql软件: rpm -qa|grep mysql 去http://dev.mysql.c</div> </li> <li><a href="/article/3426.htm" title="第14章 工具函数(下)" target="_blank">第14章 工具函数(下)</a> <span class="text-muted">onestopweb</span> <a class="tag" taget="_blank" href="/search/%E5%87%BD%E6%95%B0/1.htm">函数</a> <div>index.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/</div> </li> <li><a href="/article/3553.htm" title="POJ 1050" target="_blank">POJ 1050</a> <span class="text-muted">SaraWon</span> <a class="tag" taget="_blank" href="/search/%E4%BA%8C%E7%BB%B4%E6%95%B0%E7%BB%84/1.htm">二维数组</a><a class="tag" taget="_blank" href="/search/%E5%AD%90%E7%9F%A9%E9%98%B5/1.htm">子矩阵</a><a class="tag" taget="_blank" href="/search/%E6%9C%80%E5%A4%A7%E5%92%8C/1.htm">最大和</a> <div>POJ ACM第1050题的详细描述,请参照 http://acm.pku.edu.cn/JudgeOnline/problem?id=1050 题目意思: 给定包含有正负整型的二维数组,找出所有子矩阵的和的最大值。 如二维数组 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 中和最大的子矩阵是 9 2 -4 1 -1 8 且最大和是15</div> </li> <li><a href="/article/3680.htm" title="[5]设计模式——单例模式" target="_blank">[5]设计模式——单例模式</a> <span class="text-muted">tsface</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B/1.htm">单例</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/%E8%99%9A%E6%8B%9F%E6%9C%BA/1.htm">虚拟机</a> <div>单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点   安全的单例模式:     /* * @(#)Singleton.java 2014-8-1 * * Copyright 2014 XXXX, Inc. All rights reserved. */ package com.fiberhome.singleton; </div> </li> <li><a href="/article/3807.htm" title="Java8全新打造,英语学习supertool" target="_blank">Java8全新打造,英语学习supertool</a> <span class="text-muted">yangshangchuan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/superword/1.htm">superword</a><a class="tag" taget="_blank" href="/search/%E9%97%AD%E5%8C%85/1.htm">闭包</a><a class="tag" taget="_blank" href="/search/java8/1.htm">java8</a><a class="tag" taget="_blank" href="/search/%E5%87%BD%E6%95%B0%E5%BC%8F%E7%BC%96%E7%A8%8B/1.htm">函数式编程</a> <div>superword是一个Java实现的英文单词分析软件,主要研究英语单词音近形似转化规律、前缀后缀规律、词之间的相似性规律等等。Clean code、Fluent style、Java8 feature: Lambdas, Streams and Functional-style Programming。   升学考试、工作求职、充电提高,都少不了英语的身影,英语对我们来说实在太重要</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>