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/1947952458726699008.htm" title="helm charts_如何使用Helm Charts在Kubernetes上部署Kafka Connect" target="_blank">helm charts_如何使用Helm Charts在Kubernetes上部署Kafka Connect</a> <span class="text-muted">weixin_26737625</span> <div>helmchartsByAmitYadav,Sr.Engineer,DevOpsatIgniteSolutionsIgniteSolutions的DevOps高级工程师AmitYadavHere’sourstep-by-stephow-toguidetodeployingKafkaConnectonKubernetesforconnectingKafkatoexternalsystems.这是我们</div> </li> <li><a href="/article/1947917295045111808.htm" title="10分钟搞定 MinIO 单节点多磁盘部署!打造稳定高可用对象存储【二】" target="_blank">10分钟搞定 MinIO 单节点多磁盘部署!打造稳定高可用对象存储【二】</a> <span class="text-muted"></span> <div>MinIO是一个**高性能、开源的对象存储系统**,主要用于存储非结构化数据(如图片、视频、文档、备份等),与AmazonS3完全兼容。它被广泛用于云原生应用、大数据分析、AI模型存储、容器平台(如Kubernetes)等场景。MinIO支持多种部署模式,其中:单节点单磁盘(Single-NodeSingle-Drive)模式适用于开发测试、小规模应用或资源受限的场景。它的部署简单,不依赖集群、分</div> </li> <li><a href="/article/1947906827513556992.htm" title="macOS 上安装 Kubernetes(k8s)" target="_blank">macOS 上安装 Kubernetes(k8s)</a> <span class="text-muted">老兵发新帖</span> <a class="tag" taget="_blank" href="/search/macos/1.htm">macos</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>在macOS上安装Kubernetes(k8s)主要有三种主流方案,以下根据安装复杂度、资源占用和适用场景分类说明,并附详细步骤:⚙️一、推荐方案:Minikube(单节点本地集群)适用场景:学习、开发测试、资源有限(需2-4GB内存)。安装步骤:安装依赖工具安装DockerDesktop(推荐)或VirtualBox:brewinstall--caskdocker或brewinstallvirt</div> </li> <li><a href="/article/1947870900699328512.htm" title="YAML基础使用教程(单引号和双引号的区别)" target="_blank">YAML基础使用教程(单引号和双引号的区别)</a> <span class="text-muted">奔跑吧邓邓子</span> <a class="tag" taget="_blank" href="/search/%E5%B7%A5%E5%85%B7%E4%BD%BF%E7%94%A8/1.htm">工具使用</a><a class="tag" taget="_blank" href="/search/YAML/1.htm">YAML</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E5%BC%95%E5%8F%B7/1.htm">单引号</a><a class="tag" taget="_blank" href="/search/%E5%8F%8C%E5%BC%95%E5%8F%B7/1.htm">双引号</a> <div>提示:“奔跑吧邓邓子”的高效运维专栏聚焦于各类运维场景中的实际操作与问题解决。内容涵盖服务器硬件(如IBMSystem3650M5)、云服务平台(如腾讯云、华为云)、服务器软件(如Nginx、Apache、GitLab、Redis、Elasticsearch、Kubernetes、Docker等)、开发工具(如Git、HBuilder)以及网络安全(如挖矿病毒排查、SSL证书配置)等多个方面。无论</div> </li> <li><a href="/article/1947831182410444800.htm" title="Kubernetes存储入门" target="_blank">Kubernetes存储入门</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/%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存储概念1,volume的概念2,volume的类型二,配置volume存储1,通过emprydir共享数据2,使用hostpath挂载宿主机文件3,使用nfs挂载至容器三,配置pv持久卷1,pv回收策略2,pv访问策略3,pv的配置方式4,PersistentVolumeclaim(Pvc,持久卷声明)5,创建基于hostpath的pv6,创建基于nfs的pv一,Ku</div> </li> <li><a href="/article/1947799423295746048.htm" title="服务网格可观测性深度实践与创新优化" target="_blank">服务网格可观测性深度实践与创新优化</a> <span class="text-muted">zzywxc787</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E5%AE%9E%E6%97%B6%E4%BA%92%E5%8A%A8/1.htm">实时互动</a><a class="tag" taget="_blank" href="/search/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a><a class="tag" taget="_blank" href="/search/%E7%94%B5%E8%84%91/1.htm">电脑</a><a class="tag" taget="_blank" href="/search/AI%E7%BC%96%E7%A8%8B/1.htm">AI编程</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>主题:突破服务网格监控瓶颈——基于eBPF的无侵入式全链路可观测性实践技术领域:云原生/微服务/服务网格(ServiceMesh)一、问题背景:传统服务网格监控的痛点在Istio、Linkerd等服务网格架构中,可观测性依赖Sidecar代理(如Envoy)采集指标、日志和链路数据。但存在三大瓶颈:性能损耗:Sidecar的流量拦截与上报消耗额外CPU(10%~15%);数据割裂:应用层业务指标与</div> </li> <li><a href="/article/1947758078707429376.htm" title="【K8s】专题四(4):Kubernetes 控制器之 StatefulSet" target="_blank">【K8s】专题四(4):Kubernetes 控制器之 StatefulSet</a> <span class="text-muted"></span> <div>本文内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发、订阅专栏!专栏订阅入口Linux专栏|Docker专栏|Kubernetes专栏往期精彩文章【Docker】(全网首发)KylinV10下MySQL容器内存占用异常的解决方法【Docker】(全网首发)KylinV10下MySQL容器内存占用异常的解决方法(续)【Docker】MySQL源码构建Docker镜</div> </li> <li><a href="/article/1947746357376774144.htm" title="Kubernetes 高级调度 02" target="_blank">Kubernetes 高级调度 02</a> <span class="text-muted">别骂我h</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>一、Taint(污点)和Toleration(容忍)在生产环境中,经常会有这样的需求:master节点只部署系统组件容器,比如Calico、MetricsServer、Dashboard等,不应该部署业务应用。新添加节点不应该立即就允许部署业务容器,也就是新节点需要经过完整性及稳定性测试才可以被允许调度。某些节点可能需要进行系统升级或者其他维护,可能会引起节点上的容器不可用,此时需要将该节点上的P</div> </li> <li><a href="/article/1947746357854924800.htm" title="Kubernetes 资源管理" target="_blank">Kubernetes 资源管理</a> <span class="text-muted"></span> <div>一、ResourceQuota首先看一下ResourceQuota(资源配额)的使用,资源配额是限制某个命名空间对资源使用的一个总量限制,比如内存、CPU、Pod数量等。1.什么是资源配额在生产环境中,可能会有多个Kubernetes集群,面向开发环境、测试环境、预生产环境和生产环境等。身为Kubernetes管理员,必然知道每个环境的规模有多大、可调度资源有多少,并且知道如何合理地为容器分配内存</div> </li> <li><a href="/article/1947701240964116480.htm" title="Kubernetes服务发布进阶" target="_blank">Kubernetes服务发布进阶</a> <span class="text-muted">YUNYINGXIA</span> <a class="tag" taget="_blank" href="/search/k8s/1.htm">k8s</a> <div>目录一、Ingress基础概念与工作原理1.1Kubernetes服务暴露方式概述1.2Ingress核心组成1.2.1Ingress对象1.2.2IngressController1.3Ingress工作流程1.4Ingress工作原理图解二、IngressNginxController安装2.1准备工作2.1.1安装Helm2.1.2配置镜像源2.1.3关键参数配置2.2部署IngressNg</div> </li> <li><a href="/article/1947701241429684224.htm" title="Kubernetes存储入门" target="_blank">Kubernetes存储入门</a> <span class="text-muted"></span> <div>目录前言一、Volume的概念二、Volume的类型常见的卷类型Kubernetes独有的卷类型三、通过emptyDir共享数据1.编写emptyDir的Deployment文件2.部署该Deployment3.查看部署结果4.登录Pod中的第一个容器5.登录Pod中的第二个容器查看/mnt下的文件6.删除此Pod四、使用HostPath挂载宿主机文件1.编写Deployment文件,实现Host</div> </li> <li><a href="/article/1947648663819972608.htm" title="云原生技术与应用-Kubernetes服务发布基础" target="_blank">云原生技术与应用-Kubernetes服务发布基础</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/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a> <div>目录一.service定义二.K8s服务发布的核心组件1.Pod:服务的基本运行单元2.Service:稳定访问Pod的抽象层3.Deployment:管理Pod的部署与更新三.service的工作原理四.service的负载均衡机制1.userspace模式2.iptables模式3.ipvs模式service的四种类型五.测试service的四种类型1.ClusterIP2.NodePort3</div> </li> <li><a href="/article/1947545811718041600.htm" title="云原生周刊:K8s 中的后量子密码学" target="_blank">云原生周刊:K8s 中的后量子密码学</a> <span class="text-muted">KubeSphere 云原生</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/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AF%86%E7%A0%81%E5%AD%A6/1.htm">密码学</a> <div>开源项目推荐KanisterKanister是一个由CNCF托管的开源框架,最初由VeeamKasten团队创建,旨在简化Kubernetes上的应用程序级别数据操作管理。它通过定义Blueprint、ActionSet和Profile等CRD(自定义资源)及其相关组件,为专家提供一种模板化的方式,将复杂的数据库或分布式系统备份/恢复逻辑封装在可重用、可共享的蓝图中。Kanister支持异步或同步</div> </li> <li><a href="/article/1947543542477942784.htm" title="Kubernetes面试题分类整理" target="_blank">Kubernetes面试题分类整理</a> <span class="text-muted">jarenyVO</span> <a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95%E9%A2%98/1.htm">面试题</a><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><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a> <div>Kubernetes面试题分类整理文章目录Kubernetes面试题分类整理一、基础概念类1.什么是Kubernetes?它解决了什么问题?2.Pod是什么?为什么需要Pod而不是直接使用容器?二、核心组件类1.Kubernetes主节点(Master)有哪些核心组件?各自的作用是什么?2.kubelet和kube-proxy有什么区别?三、网络类1.Kubernetes网络模型的基本原则是什么?</div> </li> <li><a href="/article/1947524252697686016.htm" title="自建K8s集群无法通过公网访问解决方案" target="_blank">自建K8s集群无法通过公网访问解决方案</a> <span class="text-muted">大A崛起</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>问题原因通过ckube搭建k8s集群时,由于没有指定公网IP,导致签发的apiserver.cert默认可提供给对外访问的是内网IP,不包含宿主机的公网IP,所以直接通过admin.conf中配置宿主机的公网IP去访问kubernetes是不可能的。解决方案手动通过kubeadm重新签发apiserver.cert,并在签发时指定宿主机的公网IP,使签发的apiserver.cert可以将宿主机的</div> </li> <li><a href="/article/1947416812413054976.htm" title="ABP VNext + Kubernetes & Istio:微服务网格实战指南" target="_blank">ABP VNext + Kubernetes & Istio:微服务网格实战指南</a> <span class="text-muted"></span> <div>ABPVNext+Kubernetes&Istio:微服务网格实战指南目录ABPVNext+Kubernetes&Istio:微服务网格实战指南一、引言二、环境与依赖️三、项目与基础部署3.1生成Kubernetes资源3.2构建Docker镜像3.3HelmChart目录结构与参数注入四、安装Istio&定义入口五、Mermaid全链路流程概览六、将服务注入IstioMesh七、流量管理与金丝雀</div> </li> <li><a href="/article/1947187378661683200.htm" title="从代码到终端部署:Prompt如何颠覆传统DevOps流程" target="_blank">从代码到终端部署:Prompt如何颠覆传统DevOps流程</a> <span class="text-muted">LCG元</span> <a class="tag" taget="_blank" href="/search/%E5%B7%A5%E5%85%B7/1.htm">工具</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/prompt/1.htm">prompt</a><a class="tag" taget="_blank" href="/search/devops/1.htm">devops</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a> <div>文章目录基于Prompt工程的DevOps架构重构实践一、架构演进与技术对比1.1架构演进路径1.2核心流程对比二、核心实现方案2.1Prompt解析引擎实现(Python)2.2Kubernetes集成部署(YAML模板)三、生产部署实践3.1安全增强方案3.2性能优化数据四、技术前瞻与演进4.1未来三年技术路线图五、完整技术图谱六、核心代码实现(TypeScript前端)七、部署验证测试基于P</div> </li> <li><a href="/article/1947108155221667840.htm" title="【k8s学习】Kubernetes新手学习,4小时视频笔记总结" target="_blank">【k8s学习】Kubernetes新手学习,4小时视频笔记总结</a> <span class="text-muted">伊丽莎白2015</span> <div>【学习视频地址】KubernetesTutorialforBeginnersFULLCOURSEin4Hours视频不一定打得开,不过我笔记也很详细了。【笔记内容】1-【k8s学习】Kubernetes学习——核心组件和架构2-【k8s学习】minikube、kubectl、yaml配置文件的介绍3-【k8s学习】在minikube上布署MongoDB和MongoExpress4-【k8s学习】k</div> </li> <li><a href="/article/1946773191779217408.htm" title="Dify-Helm项目中Unstructured本地化部署方案解析" target="_blank">Dify-Helm项目中Unstructured本地化部署方案解析</a> <span class="text-muted"></span> <div>Dify-Helm项目中Unstructured本地化部署方案解析在基于Kubernetes的Dify部署实践中,文档预处理环节的Unstructured服务集成是一个值得关注的技术点。本文将从技术架构角度深入分析该组件的部署方案。核心需求分析Unstructured作为Dify生态中的重要预处理组件,主要负责文档解析和结构化处理。在Docker原生部署方案中,该服务通过独立容器提供RESTAPI</div> </li> <li><a href="/article/1946716727165382656.htm" title="k8s 基本架构" target="_blank">k8s 基本架构</a> <span class="text-muted">一切顺势而行</span> <a class="tag" taget="_blank" href="/search/k8s/1.htm">k8s</a> <div>基于Kubernetes(K8s)的核心设计,以下是其关键基本概念的详细解析。这些概念构成了K8s容器编排系统的基石,用于自动化部署、扩展和管理容器化应用。###一、K8s核心概念概览K8s的核心对象围绕容器生命周期管理、资源调度和服务发现展开,主要包括:1.**Pod**-**定义**:K8s最小调度单元,封装一个或多个紧密关联的容器(如主应用容器+辅助sidecar容器)。-**特性**:-共</div> </li> <li><a href="/article/1946710801574326272.htm" title="掌握未来云原生:Kamaji Kubernetes 控制平面管理器" target="_blank">掌握未来云原生:Kamaji Kubernetes 控制平面管理器</a> <span class="text-muted">白羿锟</span> <div>掌握未来云原生:KamajiKubernetes控制平面管理器项目简介在Kubernetes的世界里,我们迎来了Kamaji——一款创新的Kubernetes控制平面管理器。这个项目基于托管控制平面的理念,将Kubernetes控制面组件运行在Pod中,而不是独立的物理或虚拟机上。通过这种方式,Kamaji使大规模集群管理和扩展变得更为高效且降低了运维负担。Kamaji就像一支全天候工作的Site</div> </li> <li><a href="/article/1946710675187363840.htm" title="Kamaji项目中的Datastore:多租户Kubernetes控制平面数据存储方案解析" target="_blank">Kamaji项目中的Datastore:多租户Kubernetes控制平面数据存储方案解析</a> <span class="text-muted">胡易黎Nicole</span> <div>Kamaji项目中的Datastore:多租户Kubernetes控制平面数据存储方案解析引言在现代Kubernetes管理架构中,数据存储层是控制平面的核心组件。Kamaji项目通过创新的数据存储设计,为多租户Kubernetes环境提供了灵活高效的解决方案。本文将深入解析Kamaji中Datastore的工作原理、技术特性以及最佳实践。数据存储架构设计Kamaji采用控制平面与数据存储解耦的架</div> </li> <li><a href="/article/1946684845207908352.htm" title="大规模图计算引擎的分区与通信优化:负载均衡与网络延迟的解决方案" target="_blank">大规模图计算引擎的分区与通信优化:负载均衡与网络延迟的解决方案</a> <span class="text-muted">LCG元</span> <a class="tag" taget="_blank" href="/search/%E7%B3%BB%E7%BB%9F%E6%9C%8D%E5%8A%A1%E6%9E%B6%E6%9E%84/1.htm">系统服务架构</a><a class="tag" taget="_blank" href="/search/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1/1.htm">负载均衡</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a> <div>目录一、系统架构设计与核心流程1.1原创架构图解析1.2双流程对比分析二、分区策略优化实践2.1动态权重分区算法实现(Python)三、通信优化机制实现3.1基于RDMA的通信层实现(TypeScript)四、性能对比与调优4.1分区策略基准测试五、生产级部署方案5.1Kubernetes部署配置(YAML)5.2安全审计配置六、技术前瞻与演进附录:完整技术图谱一、系统架构设计与核心流程1.1原创</div> </li> <li><a href="/article/1946670718217416704.htm" title="第 20 课时:GPU 管理和 Device Plugin 工作机制(车漾)" target="_blank">第 20 课时:GPU 管理和 Device Plugin 工作机制(车漾)</a> <span class="text-muted">阿里云云原生</span> <a class="tag" taget="_blank" href="/search/CNCF/1.htm">CNCF</a><a class="tag" taget="_blank" href="/search/X/1.htm">X</a><a class="tag" taget="_blank" href="/search/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4%E4%BA%91%E5%8E%9F%E7%94%9F%E6%8A%80%E6%9C%AF%E5%85%AC%E5%BC%80%E8%AF%BE/1.htm">阿里巴巴云原生技术公开课</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/Kubernetes/1.htm">Kubernetes</a><a class="tag" taget="_blank" href="/search/CNCF/1.htm">CNCF</a><a class="tag" taget="_blank" href="/search/%E4%B8%93%E5%AE%B6%E5%9B%A2%E9%98%9F/1.htm">专家团队</a><a class="tag" taget="_blank" href="/search/CNCF/1.htm">CNCF</a><a class="tag" taget="_blank" href="/search/%E4%B8%93%E5%AE%B6%E5%9B%A2%E9%98%9F/1.htm">专家团队</a><a class="tag" taget="_blank" href="/search/CNCF/1.htm">CNCF</a><a class="tag" taget="_blank" href="/search/%E4%B8%93%E5%AE%B6%E5%9B%A2%E9%98%9F/1.htm">专家团队</a><a class="tag" taget="_blank" href="/search/Kubernetes/1.htm">Kubernetes</a> <div>本文将主要分享以下几个方面的内容:需求来源GPU的容器化Kubernetes的GPU管理工作原理课后思考与实践需求来源2016年,随着AlphaGo的走红和TensorFlow项目的异军突起,一场名为AI的技术革命迅速从学术圈蔓延到了工业界,所谓AI革命从此拉开了帷幕。经过三年的发展,AI有了许许多多的落地场景,包括智能客服、人脸识别、机器翻译、以图搜图等功能。其实机器学习或者说是人工智能,并不是</div> </li> <li><a href="/article/1946619892438462464.htm" title="k8s包管理器helm_K8S集群 Helm 包管理" target="_blank">k8s包管理器helm_K8S集群 Helm 包管理</a> <span class="text-muted">weixin_39872893</span> <a class="tag" taget="_blank" href="/search/k8s%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8helm/1.htm">k8s包管理器helm</a> <div>Helm是一个Kubernetes的包管理工具,就像Linux下的包管理器,如yum/apt等,可以很方便的将之前打包好的yaml文件部署到kubernetes上。k8s之前部署要写很多的yaml文件,大型应用部署起来比较麻烦,于是helm就出现了。Helm有两个重要概念:helm:一个命令行客户端工具,主要用于Kubernetes应用chart的创建、打包、发布和管理。Chart:应用描述,一系</div> </li> <li><a href="/article/1946616487884156928.htm" title="Kubernetes学习笔记(四)--Pod 状态与生命周期管理" target="_blank">Kubernetes学习笔记(四)--Pod 状态与生命周期管理</a> <span class="text-muted">Mr小三</span> <a class="tag" taget="_blank" href="/search/Kubernetes/1.htm">Kubernetes</a><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/kubernetes/1.htm">kubernetes</a> <div>文章目录四、Pod状态与生命周期管理1.Pod概念网络存储用法pod的终止2.Init容器init模板用途3.Pause容器4.Pod的生命周期Podphase(阶段)Pod状态5.Pod健康-容器探针(Probe)概念EXEC探针HTTP探针TCPSocket探针四、Pod状态与生命周期管理Pod是kubernetes中最重要的基本概念,在kubernetes中最小的管理元素不是一个个独立的容器</div> </li> <li><a href="/article/1946614718672203776.htm" title="Kubernetes 集群简介 部署搭建 及常用命令" target="_blank">Kubernetes 集群简介 部署搭建 及常用命令</a> <span class="text-muted">GHY@CloudGuardian</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/%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><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>Kubernetes集群简介Kubernetes(简称K8s)是一个开源的容器编排平台,用于自动化容器化应用的部署、扩展和管理。它为容器提供了一个完整的管理框架,帮助开发者和运维团队在大规模环境中高效地部署和管理应用。Kubernetes集群是由多个组件组成的,主要包括控制平面和工作节点。集群的核心目的是确保容器化应用的高可用性、可扩展性、负载均衡、自动化部署等功能。Kubernetes集群的基本</div> </li> <li><a href="/article/1946613709526855680.htm" title="【云原生】Helm来管理Kubernetes集群的详细使用方法与综合应用实战" target="_blank">【云原生】Helm来管理Kubernetes集群的详细使用方法与综合应用实战</a> <span class="text-muted">景天科技苑</span> <a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9FK8S/1.htm">云原生K8S</a><a class="tag" taget="_blank" href="/search/%E9%9B%B6%E5%9F%BA%E7%A1%80%E5%88%B0%E8%BF%9B%E9%98%B6%E5%AE%9E%E6%88%98/1.htm">零基础到进阶实战</a><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/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/Helm/1.htm">Helm</a><a class="tag" taget="_blank" href="/search/k8s/1.htm">k8s</a><a class="tag" taget="_blank" href="/search/k8s%E9%9B%86%E7%BE%A4/1.htm">k8s集群</a> <div>✨✨欢迎大家来到景天科技苑✨✨养成好习惯,先赞后看哦~作者简介:景天科技苑《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生k8s,linux,she</div> </li> <li><a href="/article/1946588984889110528.htm" title="etcd:从应用场景到实现原理的全方位解读" target="_blank">etcd:从应用场景到实现原理的全方位解读</a> <span class="text-muted"></span> <div>转自:http://www.infoq.com/cn/articles/etcd-interpretation-application-scenario-implement-principleetcd:从应用场景到实现原理的全方位解读随着CoreOS和Kubernetes等项目在开源社区日益火热,它们项目中都用到的etcd组件作为一个高可用强一致性的服务发现存储仓库,渐渐为开发人员所关注。在云计算</div> </li> <li><a href="/article/1946555448194822144.htm" title="AI大模型训练的云原生实践:如何用Kubernetes指挥千卡集群?" target="_blank">AI大模型训练的云原生实践:如何用Kubernetes指挥千卡集群?</a> <span class="text-muted"></span> <div>当你的团队还在手动拼装显卡集群时,聪明人早已教会Kubernetes自动调度千卡。就像交响乐团需要指挥家,万级GPU需要云原生调度艺术。深夜的机房,硬件工程师老张盯着监控屏上跳动的红色警报——手工组装的千卡集群再次因单点故障崩溃。而隔壁团队通过Kubernetes调度的百卡集群,训练效率竟高出他们47%。这不是魔法,而是云原生调度的降维打击。一、千卡训练:为什么传统方法行不通?想象指挥没有乐谱的千</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>