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/1890055713523298304.htm" title="k8s worker 节点使用kubectl 命令" target="_blank">k8s worker 节点使用kubectl 命令</a> <span class="text-muted">岳来</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/kubenetes/1.htm">kubenetes</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/kubectl/1.htm">kubectl</a><a class="tag" taget="_blank" href="/search/worker%E8%8A%82%E7%82%B9/1.htm">worker节点</a> <div>通常,kubectl命令在master节点使用,但为了方便,想要在worker节点使用该命令,如何操作?具体实现如下:$kubectlgetpodTheconnectiontotheserverlocalhost:8080wasrefused-didyouspecifytherighthostorport?#worker节点无法使用拷贝master节点文件scp/etc/kubernetes/ad</div> </li> <li><a href="/article/1890049776699895808.htm" title="k8s中的service、api-server、kube-proxy有什么区别" target="_blank">k8s中的service、api-server、kube-proxy有什么区别</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/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a> <div>在Kubernetes(K8s)中,Service、APIServer和kube-proxy是三个不同的组件,它们在集群中扮演着不同的角色和功能。下面我将为你解释它们之间的区别:1.Service(服务):Service是K8s中的一种资源对象,用于定义一组具有相同功能的Pod的访问方式和负载均衡。它提供了一个虚拟的IP地址和端口,作为对外提供服务的入口。Service将后端的一组Pod抽象为一个</div> </li> <li><a href="/article/1890046246928838656.htm" title="Sealos的k8s高可用集群搭建" target="_blank">Sealos的k8s高可用集群搭建</a> <span class="text-muted">da pai ge</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>Sealos介绍](https://sealos.io/zh-Hans/docs/Intro)Sealos是一个Go语言开发的简单干净且轻量的Kubernetes集群部署工具,能很好的支持在生产环境中部署高可用的Kubernetes集群。Sealos特性与优势支持离线安装,工具与部署资源包分离,方便不同版本间快速升级。证书有效期默认延期至99年。工具使用非常简单。支持使用自定义配置文件,可灵活完成</div> </li> <li><a href="/article/1890044859138502656.htm" title="kubernetes之kube-proxy运行机制分析" target="_blank">kubernetes之kube-proxy运行机制分析</a> <span class="text-muted">anyangyu0343</span> <a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a> <div>在kubernetes集群的每个node都会运行一个kube-proxy服务进程,这个进程可用看作Service的透明代理兼负载均衡器。其核心功能是将到某个Service的访问请求转发到后端的多个pod实例上。对每一个TCP类型的kubernetesService,kube-proxy都会在本地Node上建立一个SocketServer类负责接受请求,然后均匀发送到后端某个pod的端口上,这个过程</div> </li> <li><a href="/article/1890036919295864832.htm" title="Kubernetes之kube-proxy运行机制分析" target="_blank">Kubernetes之kube-proxy运行机制分析</a> <span class="text-muted">DawnEillen</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>一、基础知识1.Kubernetes再创建服务时会为服务分配一个虚拟IP地址,客户端通过这个虚拟Ip地址来访问服务,而服务则负责将请求转发到后端pod上。2.上述阐述的过程为一个反向代理的过程,但是这个反向代理和普通的反向代理的区别是它的IP地址是虚拟的而且它的部署和启动以及停止是由K8s统一自动管理。3.在K8s集群里每个Node上都会运行一个kube-proxy服务进程,这个进程可以看作ser</div> </li> <li><a href="/article/1889947421157421056.htm" title="Kubernetes (K8S)决定弃用 Docker!Kubernetes (K8S)学习详解" target="_blank">Kubernetes (K8S)决定弃用 Docker!Kubernetes (K8S)学习详解</a> <span class="text-muted">熙媛</span> <a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/1.htm">学习笔记</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/jenkins/1.htm">jenkins</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a> <div>确实如此。Kubernetes现已弃用Docker!!!目前,Kubernetes中的Docker支持功能现已弃用,并将在之后的版本中被删除。Kubernetes之前使用的是一个名为dockershim的模块,用以实现对Docker的CRI支持。但Kubernetes社区发现了与之相关的维护问题,因此建议大家考虑使用包含CRI完整实现(兼容v1alpha1或v1)的可用容器运行时。简而言之,Doc</div> </li> <li><a href="/article/1889909849110671360.htm" title="理解K8S CSI-S3中的节点插件与控制器插件:架构设计与核心职责" target="_blank">理解K8S CSI-S3中的节点插件与控制器插件:架构设计与核心职责</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>理解K8SCSI-S3中的节点插件与控制器插件:架构设计与核心职责在云原生生态中,Kubernetes已成为容器编排的事实标准,而存储管理则是其核心挑战之一。传统块存储和文件存储已通过CSI(ContainerStorageInterface)插件实现了标准化接入,但对象存储(如AmazonS3)因其独特的接口和语义,需要特殊适配。CSI-S3项目应运而生,它通过标准的CSI接口将S3兼容的对象存</div> </li> <li><a href="/article/1889889913948663808.htm" title="Kubernetes 如何确保应用高可用性?" target="_blank">Kubernetes 如何确保应用高可用性?</a> <span class="text-muted">fenglei2020</span> <a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a> <div>Kubernetes通过多种机制和策略确保应用的高可用性,主要包括以下几个方面:1.多副本部署定义:Kubernetes允许用户通过Deployment等控制器定义多个Pod副本,确保应用的多个实例同时运行。作用:当某个Pod出现故障时,其他副本仍然可以继续提供服务,从而保证应用的高可用性。示例:apiVersion:apps/v1kind:Deploymentmetadata:name:my-a</div> </li> <li><a href="/article/1889818534683406336.htm" title="【云安全】云原生-K8S- kubeconfig 文件泄露" target="_blank">【云安全】云原生-K8S- kubeconfig 文件泄露</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><a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/k8s/1.htm">k8s</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8%E5%A8%81%E8%83%81%E5%88%86%E6%9E%90/1.htm">安全威胁分析</a> <div>什么是kubeconfig文件?kubeconfig文件是Kubernetes的配置文件,用于存储集群的访问凭证、APIServer的地址和认证信息,允许用户和kubectl等工具与Kubernetes集群进行交互。它通常包含多个集群的配置,支持通过上下文(context)切换不同的集群、用户和命名空间。kubeconfig文件的典型路径是~/.kube/config,但也可以通过KUBECONF</div> </li> <li><a href="/article/1889715648792162304.htm" title="Docker 和 Kubernetes 如何协同工作?" target="_blank">Docker 和 Kubernetes 如何协同工作?</a> <span class="text-muted">fenglei2020</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是容器化和容器编排领域的两个重要工具,它们协同工作的方式如下:1.Docker的作用Docker是一个开源的应用容器引擎,它允许开发者将应用程序及其依赖打包到一个独立的容器中,从而实现应用程序的快速部署和运行。Docker的主要作用包括:容器化应用程序:Docker通过Dockerfile将应用程序及其运行环境打包成一个镜像。这个镜像包含了应用程序的所有依赖,确保</div> </li> <li><a href="/article/1889699135750205440.htm" title="Kubernetes - Pod和Deployment关系" target="_blank">Kubernetes - Pod和Deployment关系</a> <span class="text-muted">24k小善</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)中,"Deployment"和"Pod"是两个重要的概念,它们之间存在一定的关系。让我们来详细解释它们:Pod(容器组):Pod是Kubernetes中最小的可调度和可管理的单元。它是一个包含一个或多个容器的组,通常是紧密相关的应用程序组件。这些容器共享网络命名空间和存储卷,因此它们可以相互通信和共享数据。Pod有几个重要特点:生命周期短暂:Pod可以</div> </li> <li><a href="/article/1889678957872214016.htm" title="应用开发者必须了解的Kubernetes网络二三事" target="_blank">应用开发者必须了解的Kubernetes网络二三事</a> <span class="text-muted">Rancher by SUSE</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/pods/1.htm">pods</a><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%89%E5%85%A8/1.htm">安全</a> <div>在容器领域内,Kubernetes已毋庸置疑成为了容器编排和管理的社区标准。如果你希望你所搭建的应用程序能充分利用多云(multi-cloud)的优势,有一些与Kubernetes网络相关的基本内容是你必须了解与考虑的。Kubernetes网络基本的部署调度单元:PodKubernetes中的基本管理单元并非是一个容器,而是一个叫做pod的东西。我们认为部署了一个或多个容器的环境是一个pod单元。</div> </li> <li><a href="/article/1889552121288781824.htm" title="k8s第一章:kubeadm集群搭建" target="_blank">k8s第一章:kubeadm集群搭建</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>开源容器应用自动化部署技术KubernetesKubernetes这个单词来自于希腊语,含义是舵手或领航员;生产环境级别的容器编排编排是什么意思:1.按照一定的目的依次排列;2.调配、安排;Kubernetes,也称为K8S,其中8是代表中间“ubernete”的8个字符,是Google在2014年开源的一个容器编排引擎,用于自动化容器化应用程序的部署、规划、扩展和管理,它将组成应用程序的容器分组</div> </li> <li><a href="/article/1889552121754349568.htm" title="k8s第八章:k8s存储" target="_blank">k8s第八章: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/%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>K8s存储Volume:数据卷kubernetesPod中多个容器访问的共享目录。volume被定义在pod上,被这个pod的多个容器挂载到相同或不同的路径下。volume的生命周期与pod的生命周期相同,pod内的容器停止和重启时一般不会影响volume中的数据。所以一般volume被用于持久化pod产生的数据。volume类型:emptyDirhostPathgcePersistentDisk</div> </li> <li><a href="/article/1889517966513467392.htm" title="k8s常见面试题1" target="_blank">k8s常见面试题1</a> <span class="text-muted">风车带走过往</span> <a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/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>k8s常见面试题1Kubernetes基础知识核心组件及作用K8S生成pod过程Pod、Deployment、Service的区别保证Pod高可用ConfigMapvsSecret网络模型与Pod通信Ingress与Service的主要区别什么是Ingressk8s中为什么要做ServiceIngress与Service的区别资源配额Kubernetes实践如何监控Kubernetes集群的健康状</div> </li> <li><a href="/article/1889499947435356160.htm" title="Kubernetes (K8S) 集群架构与搭建方式详情" target="_blank">Kubernetes (K8S) 集群架构与搭建方式详情</a> <span class="text-muted">I~Lucky</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/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a> <div>简介Kubernetes(K8S)是一个开源的容器编排平台,用于自动化应用程序的部署、扩展和管理。本文将介绍K8S的常见集群架构和搭建方式,并详细说明如何基于Minikube搭建单节点K8S集群以及部署第一个K8S应用。K8S常见集群架构和搭建方式集群类型单master-Node集群一主多从,推荐测试环境使用。服务器要求:至少2台2核4G以上的云服务器。多master-Node集群多主多从(高可用</div> </li> <li><a href="/article/1889485068930445312.htm" title="kubernetes 核心技术-PVC 和 PV" target="_blank">kubernetes 核心技术-PVC 和 PV</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生态系统中,PersistentVolume(PV)和PersistentVolumeClaim(PVC)是用于管理持久化存储的核心组件。它们使得应用程序的数据能够安全地保存并在容器重启或迁移时继续可用,极大地增强了系统的可靠性和灵活性。本文将深入探讨PV和PVC的概念、工作原理及其配置方法,帮助您更好地掌握这一关键技术。什么是PV和PVC?PersistentVolume(</div> </li> <li><a href="/article/1889442690936926208.htm" title="ActiveMQ Artemis 集群化之JGroups升级陷阱" target="_blank">ActiveMQ Artemis 集群化之JGroups升级陷阱</a> <span class="text-muted">t0_54coder</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3%E6%89%8B%E5%86%8C/1.htm">编程问题解决手册</a><a class="tag" taget="_blank" href="/search/activemq/1.htm">activemq</a><a class="tag" taget="_blank" href="/search/%E4%B8%AA%E4%BA%BA%E5%BC%80%E5%8F%91/1.htm">个人开发</a> <div>引言在使用ActiveMQArtemis进行集群配置时,我们常常会遇到一些棘手的问题,尤其是在涉及到组件升级时。最近,我在升级ActiveMQArtemis和其依赖的JGroups时遇到了一个java.lang.NoSuchMethodError的错误。本文将详细探讨这个问题的根源,并提供解决方案。问题描述在升级到ActiveMQArtemis2.33.0并使用JGroups的Kubernetes</div> </li> <li><a href="/article/1889416348564516864.htm" title="k8s之CSI详解" target="_blank">k8s之CSI详解</a> <span class="text-muted">爱吃芝麻汤圆</span> <a class="tag" taget="_blank" href="/search/%23/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>KubernetesCSI详解一、CSI概述ContainerStorageInterface(CSI)是一个标准化接口,用于定义容器编排系统(如Kubernetes)与存储供应商(StorageProviders)之间的交互方式。其目标是让存储供应商开发的插件能够兼容多个容器编排系统(如Kubernetes、Mesos、Swarm等),从而简化存储资源的管理和使用。在Kubernetes中,CS</div> </li> <li><a href="/article/1889404367463837696.htm" title="EFK on Kubernetes" target="_blank">EFK on Kubernetes</a> <span class="text-muted">da pai ge</span> <a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/jenkins/1.htm">jenkins</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a> <div>elastic公司产品链。,文档类数据库,使用Java语言,收集端logstash后来用go语言改写了(使用filebeat),查询方便(配合展示界面可以不用语句就可以查询,并且查询速度快),原理:按照类似索引的机制查询,数据全部归于索引之下ELK:logstashEFK:采集:filebeat,fluentd存储:elasticsearch展示:kibanalogstash现在少用于收集,多用于</div> </li> <li><a href="/article/1889399830149656576.htm" title="CentOS 环境下 Docker、Jenkins、GitLab 和 Kubernetes 安装与配置" target="_blank">CentOS 环境下 Docker、Jenkins、GitLab 和 Kubernetes 安装与配置</a> <span class="text-muted">qq_58647543</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a> <div>以下是针对CentOS系统的安装和配置步骤,涵盖Docker、Jenkins、GitLab和Kubernetes(K8s),以及CI/CD流程的配置。通过这些步骤,可以搭建一个企业级DevOps环境。1.安装和配置Docker1.1安装Docker(CentOS示例)1.更新yum包列表:sudoyumupdate-y2.安装所需依赖:sudoyuminstall-yyum-utilsdevice</div> </li> <li><a href="/article/1889311053335031808.htm" title="Kubernetes集群架构" target="_blank">Kubernetes集群架构</a> <span class="text-muted">qichengzong_right</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</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/linux/1.htm">linux</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>Kubernetes集群架构Kubernetes集群架构控制平面组件kube-apiserveretcdkube-schedulerkube-controller-managercloud-controller-manager节点组件kubeletkebe-proxy(可选)容器运行时插件DNSWebUI(Dashboard)容器资源监控集群级日志输出网络插件架构变体控制平面部署选项工作负载调度说</div> </li> <li><a href="/article/1889093866506743808.htm" title="VMware Tanzu Kubernetes Grid Integrated Edition 1.21" target="_blank">VMware Tanzu Kubernetes Grid Integrated Edition 1.21</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a> <div>VMwareTanzuKubernetesGridIntegratedEdition(TKGI)1.21-运营商Kubernetes解决方案Kubernetes-basedcontainersolutionwithadvancednetworking,aprivatecontainerregistry,andlifecyclemanagement请访问原文链接:https://sysin.org/</div> </li> <li><a href="/article/1889072497303810048.htm" title="深入浅出DockerPDF" target="_blank">深入浅出DockerPDF</a> <span class="text-muted">ChatAlgorithm</span> <a class="tag" taget="_blank" href="/search/%E4%B9%A6%E7%B1%8D%E6%8E%A8%E8%8D%90/1.htm">书籍推荐</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a> <div>深入浅出Docker链接:关注微信公众号:景禹,回复10001即可获得提取码!作者简介NigelPoulton,DockerCaptains专家,亚马逊畅销图书作者,存储专家,Docker技术先驱。Nigel有丰富的运维技术经验,著有多部容器相关的图书,并开设了视频培训课程,在业界有非常大的影响力。出版了《DockerDeepDive》《TheKubernetesBook》等图书。目录······</div> </li> <li><a href="/article/1888951566040363008.htm" title="通过Kubernetes上免费部署Ollama如何使用DeepSeek" target="_blank">通过Kubernetes上免费部署Ollama如何使用DeepSeek</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>Ollama和Kubernetes的结合优势二者结合后,我们可以快速部署Ollama服务器,并通过API与DeepSeek模型进行交互。Ollama通过RESTAPI简化了模型服务的部署和调用,支持多种机器学习模型。Kubernetes提供灵活的扩展性和高可用性,适合部署复杂的模型服务。为Ollama创建一个专用命名空间。kubectlcreatnsollama创建一个ollama-deploy.</div> </li> <li><a href="/article/1888933667158421504.htm" title="【Kubernetes的Linux内核参数】最佳实践" target="_blank">【Kubernetes的Linux内核参数】最佳实践</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/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a> <div>KubernetesLinux内核参数最佳实践配置指南一、核心参数分类1.网络相关(net.*)2.虚拟内存管理(vm.*)3.文件系统(fs.*)4.进程调度(kernel.*)5.容器专用参数二、关键参数配置与原理说明1.网络优化#容器网络转发(必需)net.ipv4.ip_forward=1▸原理:允许IPv4数据包转发,实现跨节点容器通信#提升连接跟踪表大小(解决大规模集群连接问题)net</div> </li> <li><a href="/article/1888856751495770112.htm" title="构建基于Spring Boot和Kubernetes的云原生微服务架构" target="_blank">构建基于Spring Boot和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/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E6%9C%8D%E5%8A%A1/1.htm">微服务</a> <div>构建基于SpringBoot和Kubernetes的云原生微服务架构大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!本文将详细介绍如何使用SpringBoot和Kubernetes构建云原生微服务架构。通过结合SpringBoot的开发优势和Kubernetes的强大容器编排能力,我们可以构建出高可用、可扩展、易维护的微服务架构。一、项目结构与依赖首先,我们需要创建一</div> </li> <li><a href="/article/1888846405028605952.htm" title="【k8s应用管理】kubernetes pod资源控制管理(一)" target="_blank">【k8s应用管理】kubernetes pod资源控制管理(一)</a> <span class="text-muted">Karoku066</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><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>文章目录Pod基础Pod的组成Pod的特性Pod容器的镜像拉取策略Pod容器的重启策略示例静态Pod管理指南查看当前kubelet配置修改kubelet配置以添加静态Pod1.找到kubelet的启动配置文件编辑kubelet的环境变量配置重新加载systemd配置并重启kubelet创建静态Pod配置文件验证静态Pod的状态静态Pod的删除无法通过`kubectldelete`删除静态Pod删除</div> </li> <li><a href="/article/1888716330178244608.htm" title="Apache APISIX 入门与实战指南" target="_blank">Apache APISIX 入门与实战指南</a> <span class="text-muted">李华蓓Garret</span> <div>ApacheAPISIX入门与实战指南apisix-ingress-controllerAPISIXIngressControllerforKubernetes项目地址:https://gitcode.com/gh_mirrors/ap/apisix-ingress-controller项目介绍ApacheAPISIXIngressController是一个基于云原生理念设计的高性能API网关——</div> </li> <li><a href="/article/1888663237508001792.htm" title="12. k8s二进制集群之kubelet部署" target="_blank">12. k8s二进制集群之kubelet部署</a> <span class="text-muted">smart_ljh</span> <a class="tag" taget="_blank" href="/search/k8s%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%90%AD%E5%BB%BA/1.htm">k8s二进制搭建</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/kubelet/1.htm">kubelet</a> <div>什么是kubelet准备事项创建kubelet-bootstrap.kubeconfig文件创建kubelet配置文件创建kubelet服务配置文件(将kubelet配置成系统服务)分发CA证书及Kubelet-bootstrap.kubeconfig到所有工作节点最后启动工作节点的kubelet服务总结什么是kubeletKubelet是Kubernetes的核心组件之一,运行在每个节点(Nod</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>