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/1835448111909138432.htm" title="react-intl——react国际化使用方案" target="_blank">react-intl——react国际化使用方案</a> <span class="text-muted">苹果酱0567</span> <a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95%E9%A2%98%E6%B1%87%E6%80%BB%E4%B8%8E%E8%A7%A3%E6%9E%90/1.htm">面试题汇总与解析</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E4%B8%AD%E9%97%B4%E4%BB%B6/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/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>国际化介绍i18n:internationalization国家化简称,首字母+首尾字母间隔的字母个数+尾字母,类似的还有k8s(Kubernetes)React-intl是React中最受欢迎的库。使用步骤安装#usenpmnpminstallreact-intl-D#useyarn项目入口文件配置//index.tsximportReactfrom"react";importReactDOMf</div> </li> <li><a href="/article/1835378774955356160.htm" title="Istio pilot-discovery服务发现源码解析(1.13版本)" target="_blank">Istio pilot-discovery服务发现源码解析(1.13版本)</a> <span class="text-muted">xidianjiapei001</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Istio/1.htm">Istio</a><a class="tag" taget="_blank" href="/search/istio/1.htm">istio</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/%E6%9C%8D%E5%8A%A1%E5%8F%91%E7%8E%B0/1.htm">服务发现</a> <div>Istiopilot-discovery服务发现介绍工作机制初始化初始化Config控制器初始化Service控制器controller初始化NamespaceServiceNodePodPilotDiscovery各组件启动流程DiscoveryServer接收Envoy的gRPC连接请求流程Config变化后向Envoy推送更新的流程总结参考介绍IstioPilot的代码分为Pilot-Dis</div> </li> <li><a href="/article/1835375621996376064.htm" title="Kubernetes数据持久化" target="_blank">Kubernetes数据持久化</a> <span class="text-muted">看清所苡看轻</span> <a class="tag" taget="_blank" href="/search/kubernetes%28k8s%29/1.htm">kubernetes(k8s)</a><a class="tag" taget="_blank" href="/search/emptyDir/1.htm">emptyDir</a><a class="tag" taget="_blank" href="/search/HostPath/1.htm">HostPath</a><a class="tag" taget="_blank" href="/search/pv/1.htm">pv</a><a class="tag" taget="_blank" href="/search/pvc/1.htm">pvc</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a> <div>在k8s中,Volume(数据卷)存在明确的生命周期(与包含该数据卷的容器组(pod)相同)。因此Volume的生命周期比同一容器组(pod)中任意容器的生命周期要更长,不管容器重启了多少次,数据都被保留下来。当然,如果pod不存在了,数据卷自然退出了。此时,根据pod所使用的数据卷类型不同,数据可能随着数据卷的退出而删除,也可能被真正持久化,并在下次容器组重启时仍然可以使用。从根本上来说,一个数</div> </li> <li><a href="/article/1835361001260806144.htm" title="Kubernetes部署MySQL数据持久化" target="_blank">Kubernetes部署MySQL数据持久化</a> <span class="text-muted">沫殇-MS</span> <a class="tag" taget="_blank" href="/search/Kubernetes/1.htm">Kubernetes</a><a class="tag" taget="_blank" href="/search/MySQL%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">MySQL数据库</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a> <div>一、安装配置NFS服务端1、安装nfs-kernel-server:sudoapt-yinstallnfs-kernel-server2、服务端创建共享目录#列出所有可用块设备的信息lsblk#格式化磁盘sudomkfs-text4/dev/sdb#创建一个目录:sudomkdir-p/data/nfs/mysql#更改目录权限:sudochown-Rnobody:nogroup/data/nfs</div> </li> <li><a href="/article/1835354574077128704.htm" title="Kubernetes的3种数据持久化方式" target="_blank">Kubernetes的3种数据持久化方式</a> <span class="text-muted">Seal^_^</span> <a class="tag" taget="_blank" href="/search/%E3%80%90%E4%BA%91%E5%8E%9F%E7%94%9F%E3%80%91%E5%AE%B9%E5%99%A8%E5%8C%96%E4%B8%8E%E7%BC%96%E6%8E%92%E6%8A%80%E6%9C%AF/1.htm">【云原生】容器化与编排技术</a><a class="tag" taget="_blank" href="/search/%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90/1.htm">持续集成</a><a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><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/EmptyDir/1.htm">EmptyDir</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/HostPath/1.htm">HostPath</a> <div>Kubernetes的3种数据持久化方式1.EmptyDir2.HostPath3.PersistentVolume(PV)TheBegin点点关注,收藏不迷路Kubernetes提供了几种数据持久化方式,以满足不同场景的需求:1.EmptyDir用途:临时数据存储,Pod内容器间共享。特点:生命周期与Pod相同,Pod删除时数据也删除。2.HostPath用途:访问宿主机特定文件或目录。特点:增</div> </li> <li><a href="/article/1835353689854930944.htm" title="【Kubernetes】常见面试题汇总(十一)" target="_blank">【Kubernetes】常见面试题汇总(十一)</a> <span class="text-muted">summer.335</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> <div>目录33.简述Kubernetes外部如何访问集群内的服务?34.简述Kubernetesingress?35.简述Kubernetes镜像的下载策略?33.简述Kubernetes外部如何访问集群内的服务?(1)对于Kubernetes,集群外的客户端默认情况,无法通过Pod的IP地址或者Service的虚拟IP地址:虚拟端口号进行访问。(2)通常可以通过以下方式进行访问Kubernetes集群</div> </li> <li><a href="/article/1835351925957160960.htm" title="k8s中Service暴露的种类以及用法" target="_blank">k8s中Service暴露的种类以及用法</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/%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中,有几种不同的方式可以将服务(Service)暴露给外部流量。这些方式通过定义服务的spec.type字段来确定。二、详解1.ClusterIP定义:默认类型,服务只能在集群内部访问。作用:通过集群内部IP地址暴露服务。示例:spec:type:ClusterIPports:-port:80targetPo</div> </li> <li><a href="/article/1835347257772306432.htm" title="Kubernetes 自定义控制器开发" target="_blank">Kubernetes 自定义控制器开发</a> <span class="text-muted">IT回忆录</span> <a class="tag" taget="_blank" href="/search/Kubenetes/1.htm">Kubenetes</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a> <div>目录前言一、CRD二、创建数据库表(Mysql)二、控制器开发1.使用kubernetes的examplecontroller模板2.在controller.go中新增数据表监听方法3.修改tools工具生成资源对象结构体定义这里记录开发k8s控制器的一般方式,controller开发主要使用k8s提供的client-go库进行。前言Controller监听集群内部资源对象的变化,编辑资源对象(增</div> </li> <li><a href="/article/1835344356878413824.htm" title="用kubedam搭建的k8s证书过期处理方法" target="_blank">用kubedam搭建的k8s证书过期处理方法</a> <span class="text-muted">我滴鬼鬼呀wks</span> <a class="tag" taget="_blank" href="/search/k8s/1.htm">k8s</a><a class="tag" taget="_blank" href="/search/1024%E7%A8%8B%E5%BA%8F%E5%91%98%E8%8A%82/1.htm">1024程序员节</a> <div>kubeadm部署的k8s证书过期1、查看证书过期时间kubeadmalphacertscheck-expiration若证书已经过期无法试用kubectl命令建议修改服务器时间到未过期的时间段2、配置kube-controller-manager.yaml文件cat/etc/kubernetes/manifests/kube-controller-manager.yamlapiVersion:v</div> </li> <li><a href="/article/1835340955637608448.htm" title="k8s证书过期问题处理" target="_blank">k8s证书过期问题处理</a> <span class="text-muted">olina_qin</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证书过期问题处理opensslx509-in/etc/kubernetes/pki/apiserver.crt-noout-dateskubeadmcertsrenewallsystemctlrestartkubeleopensslx509-in/etc/kubernetes/pki/apiserver.crt-noout-text|grep"NotAfter"cp/etc/kubernet</div> </li> <li><a href="/article/1835337301350248448.htm" title="Kubernetes Ingress 控制器(Nginx)安装与使用教程" target="_blank">Kubernetes Ingress 控制器(Nginx)安装与使用教程</a> <span class="text-muted">农优影</span> <div>KubernetesIngress控制器(Nginx)安装与使用教程kubernetes-ingressNGINXandNGINXPlusIngressControllersforKubernetes项目地址:https://gitcode.com/gh_mirrors/ku/kubernetes-ingress1.项目目录结构及介绍在nginxinc/kubernetes-ingress仓库中,</div> </li> <li><a href="/article/1835331377520799744.htm" title="【K8s】专题十一:Kubernetes 集群证书过期处理方法" target="_blank">【K8s】专题十一:Kubernetes 集群证书过期处理方法</a> <span class="text-muted">行者Sun1989</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/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a> <div>本文内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发、订阅专栏!专栏订阅入口Linux专栏|Docker专栏|Kubernetes专栏往期精彩文章【Docker】(全网首发)KylinV10下MySQL容器内存占用异常的解决方法【Docker】(全网首发)KylinV10下MySQL容器内存占用异常的解决方法(续)【Docker】MySQL源码构建Docker镜</div> </li> <li><a href="/article/1835269935358636032.htm" title="Docker学习十一:Kubernetes概述" target="_blank">Docker学习十一:Kubernetes概述</a> <span class="text-muted">爱打羽球的程序猿</span> <a class="tag" taget="_blank" href="/search/Docker%E5%AD%A6%E4%B9%A0%E7%B3%BB%E5%88%97/1.htm">Docker学习系列</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%AD%A6%E4%B9%A0/1.htm">学习</a> <div>一、Kubernetes简介2006年,Google提出了云计算的概念,当时的云计算领域还是以虚拟机为代表的云平台。2013年,Docker横空出世,Docker提出了镜像、仓库等核心概念,规范了服务的交付标准,使得复杂服务的落地变得更加简单,之后Docker又定义了OCI标准,Docker在容器领域称为事实的标准。但是,Docker诞生只是帮助定义了开发和交付标准,如果想要在生产环境中大批量的使</div> </li> <li><a href="/article/1835269304761806848.htm" title="Cloud Native Weekly | 华为云抢先发布Redis5.0,红帽宣布收购混合云提供商" target="_blank">Cloud Native Weekly | 华为云抢先发布Redis5.0,红帽宣布收购混合云提供商</a> <span class="text-muted">weixin_34302561</span> <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/devops/1.htm">devops</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a> <div>1——华为云抢先发布Redis5.02——DigitalOceanK8s服务正式上线3——红帽宣布收购混合云提供商NooBaa4——微软发布多项AzureKubernetes服务更新1华为云抢先发布Redis5.012月17日,华为云在DCS2.0的基础上,快人一步,抢先推出了新的Redis5.0产品,这是一个崭新的突破。目前国内在缓存领域的发展普遍停留在Redis4.0阶段,华为云率先发布了Re</div> </li> <li><a href="/article/1835209173944594432.htm" title="(k8s)Kubernetes 从0到1容器编排之旅" target="_blank">(k8s)Kubernetes 从0到1容器编排之旅</a> <span class="text-muted">道不贱卖,法不轻传</span> <a class="tag" taget="_blank" href="/search/kubernets/1.htm">kubernets</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的强大威力,仅仅掌握基本操作是远远不够的。本文将带你深入探索Kubernetes使用过程中的奇技妙法,为你开启一段优雅的容器编排之旅。二、高级资源管理之精妙艺术1.资源配额与限制:雕琢资源之美•Ku</div> </li> <li><a href="/article/1835061888858288128.htm" title="【K8S】kubernetes集群架构与组件" target="_blank">【K8S】kubernetes集群架构与组件</a> <span class="text-muted">奇奇怪怪^</span> <a class="tag" taget="_blank" href="/search/%E4%BA%91/1.htm">云</a><a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/IT/1.htm">IT</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%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>文章目录【K8S】kubernetes集群架构与组件kubernetes组件**master组件**node组件整体流程POD终止过程【K8S】kubernetes集群架构与组件kubernetes组件K8S是属于主从设备模型(Master-slave架构),即有Master节点负责集群的调度、管理和运维,Slave节点是集群中的运算工作负载节点在K8S中,主节点一般被称为Master节点,而从节</div> </li> <li><a href="/article/1835058988631289856.htm" title="K8S学习笔记02——K8S组件" target="_blank">K8S学习笔记02——K8S组件</a> <span class="text-muted">沉淅尘</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Docker/1.htm">Docker</a><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> <div>Kubernetes组件一、控制平面组件(ControlPlaneComponents)(1)kube-apiserver(2)etcd(3)kube-scheduler(4)kube-controller-manager(5)cloud-controller-manager二、Node组件1.kubelet2.kube-proxy3.容器运行时(ContainerRuntime)三、插件(Add</div> </li> <li><a href="/article/1835054063679533056.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/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a> <div>文章目录K8S的优势核心架构角色与功能集群图例K8S的优势能管理大量跨主机容器快速部署应用快速扩展应用无缝对接新的应用节省资源,优化硬件资源的使用核心架构master(管理节点)node(计算节点)images(镜像节点)角色与功能Master功能提供集群的控制对集群进行全局决策检测和响应集群事件Master节点核心组件APIServer是整个系统的对外接口,提供客户端和其他组件调用后端元数据存储</div> </li> <li><a href="/article/1835046751275413504.htm" title="Kubernetes组件" target="_blank">Kubernetes组件</a> <span class="text-muted">汉只只</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a><a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a> <div>Kubernetes核心组件Kubernetes定义了一组构建块,它们可以共同提供部署、维护和扩展应用程序的机制。组成Kubernetes的组件设计为松耦合和可扩展的,这样可以满足多种不同的工作负载。可扩展性在很大程度上由KubernetesAPI提供——它被作为扩展的内部组件以及Kubernetes上运行的容器等使用。Kubernetes主要由以下几个核心组件组成:etcd保存了整个集群的状态;</div> </li> <li><a href="/article/1835034781197365248.htm" title="【Linux 从基础到进阶】Kubernetes 集群搭建与管理" target="_blank">【Linux 从基础到进阶】Kubernetes 集群搭建与管理</a> <span class="text-muted">爱技术的小伙子</span> <a class="tag" taget="_blank" href="/search/Linux%E4%BB%8E%E5%9F%BA%E7%A1%80%E5%88%B0%E8%BF%9B%E9%98%B6/1.htm">Linux从基础到进阶</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a> <div>Kubernetes集群搭建与管理Kubernetes(简称K8s)是一个用于自动化部署、扩展和管理容器化应用程序的开源平台。它提供了容器编排功能,能够管理大量的容器实例,并支持应用的自动扩展、高可用性和自愈能力。本文将详细介绍如何在CentOS和Ubuntu系统上安装和配置Kubernetes集群,并讲解Kubernetes的基本概念和管理操作。1.Kubernetes基础概念在了解如何搭建Ku</div> </li> <li><a href="/article/1834999728476090368.htm" title="【Kubernetes】常见面试题汇总(十三)" target="_blank">【Kubernetes】常见面试题汇总(十三)</a> <span class="text-muted">summer.335</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> <div>目录39.简述KubernetesScheduler使用哪两种算法将Pod绑定到worker节点?40.简述Kuberneteskubelet的作用?41.简述Kuberneteskubelet监控Worker节点资源是使用什么组件来实现的?39.简述KubernetesScheduler使用哪两种算法将Pod绑定到worker节点?KubernetesScheduler根据如下两种调度算法将Po</div> </li> <li><a href="/article/1834893444238110720.htm" title="Ansible自动化部署kubernetes集群" target="_blank">Ansible自动化部署kubernetes集群</a> <span class="text-muted">theo.wu</span> <a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/ansible/1.htm">ansible</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">自动化</a> <div>机器环境介绍1.1.机器信息介绍IPhostnameapplicationCPUMemory192.168.204.129k8s-master01etcd,kube-apiserver,kube-controller-manager,kube-scheduler,kubelet,kube-proxy,containerd2C4G192.168.204.130k8s-worker01etcd,kub</div> </li> <li><a href="/article/1834787055985586176.htm" title="K8S - Emptydir - 取代ELK 使用fluentd 构建logging saidcar" target="_blank">K8S - Emptydir - 取代ELK 使用fluentd 构建logging saidcar</a> <span class="text-muted">nvd11</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> <div>由于k8s的无状态service通常部署在多个POD中,实现多实例面向高并发。但是k8s本身并没有提供集中查询多个pod的日志的功能其中1个常见方案就是ELK.本文的方案是利用fluentdsidecar和emptydir把多个pod的日志导向到bigquery的table中。Emptydir的简介Kubernetes中的EmptyDir是一种用于容器之间共享临时存储的空目录卷类型。EmptyDi</div> </li> <li><a href="/article/1834610443310690304.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/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>资源-控制器一,控制器作用二,控制器类型2.1,Deployment:无状态应用部署2.2,DaemonSet:确保所有Node运行同一个pod2.3,StatefulSet:有状态应用部署2.4,Job:一次性任务2.5,CronJob:定时任务2.6,pod2.7,service2.8,replicaset2.9,endpoints三,控制器yaml应用3.1,Deployment3.2,Da</div> </li> <li><a href="/article/1834610316504297472.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>常用数据卷类型一,emptyDir1.1,emptyDir概念1.2,应用场景1.3,yaml示例二,hostPath2.1,hostPath概念2.2,应用场景2.3,yaml示例三,congfigmap3.1,configmap的作用3.2,注意事项:3.3,使用configmap创建java项目配置文件3.4,subPath应用3.5,configmap作为环境变量四,secret4.1,s</div> </li> <li><a href="/article/1834610316068089856.htm" title="kubernetes-flannel组件的安装方式" target="_blank">kubernetes-flannel组件的安装方式</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> <div>使用flannel网络数据转发的过程数据->源容器->宿主机docker0虚拟网卡->flannel0虚拟网卡(UDP封装->etcd->目标容器所在宿主机flannel0->目标容器所在宿主机的docker0虚拟网卡->目标容器文章目录二进制安装flannelyaml文件部署flannel二进制安装flannel一,原有的二进制etcd集群添加配置信息#[Member]ETCD_NAME="et</div> </li> <li><a href="/article/1834546926272475136.htm" title="深入理解Kubernetes:kube-scheduler源码解析" target="_blank">深入理解Kubernetes:kube-scheduler源码解析</a> <span class="text-muted">mujingluo</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的调度器(kube-scheduler)是整个系统中至关重要的组件,它负责将待调度的Pods分配到合适的节点上。本文将深入分析kube-scheduler的源码,揭示其内部工作机制。kube-scheduler的核心功能kube-scheduler的核心功能包括:监听Pod变化:通过KubernetesAPI监听所有未调度的Pods。过滤(Filtering):根据一系列规则(</div> </li> <li><a href="/article/1834543901835358208.htm" title="开源项目 Kubernetes 源码探索与部署指南" target="_blank">开源项目 Kubernetes 源码探索与部署指南</a> <span class="text-muted">邹滢朦</span> <div>开源项目Kubernetes源码探索与部署指南kubernetesThisistherepothattracksallpatchestotheOpenShiftdistributionofKubernetesonbranchescorrespondingtoOpenShiftreleases.Seehttps://github.com/openshift/kubernetes/blob/maste</div> </li> <li><a href="/article/1834522729504665600.htm" title="【2023年】云计算金砖牛刀小试4" target="_blank">【2023年】云计算金砖牛刀小试4</a> <span class="text-muted">geekgold</span> <a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</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><a class="tag" taget="_blank" href="/search/jenkins/1.htm">jenkins</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a> <div>容器云问题1.Kubernetes集群支持Pod优先级抢占,通过抢占式调度策略来实现同一个Node节点内部的Pod对象抢占。在master节点/root目录下编写YAML文件schedule.yaml创建一个抢占式调度策略,具体要求如下:(1)抢占式调度策略名称:high-scheduling;(2)优先级为1000000;(3)不要将该调度策略设置为默认优先调度策略。vischedule.yam</div> </li> <li><a href="/article/1834471045063602176.htm" title="【Kubernetes】(K8S)彻底卸载详细教程" target="_blank">【Kubernetes】(K8S)彻底卸载详细教程</a> <span class="text-muted">哒哒-blog</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> <div>以下全部操作都是使用root用户进行(非root用户可以使用sudo),并且全部命令都需要在Kubernetes集群的所有节点分别执行:第一步、停止K8S所有节点执行:123systemctlstopkubeletsystemctlstopetcdsystemctlstopdocker第二步、清空K8S集群设置所有节点执行:1kubeadmreset-f第三步、删除K8S相关软件所有节点执行:12</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>