k8s集群安装Istio过程记录及问题总结

目录

  • 一、介绍
  • 二、部署Helm
  • 三、部署Istio
    • 部署官方示例 Bookinfo
  • 四、部署Kali
  • Bug 记录
  • 部署Bookinfo demo失败

一、介绍

这篇文章记录一下k8s集群安装Helm、Istio 和 Kiali,方便学习相关概念。
前提需要k8s集群:
k8s集群安装Istio过程记录及问题总结_第1张图片
可参考:Arm64架构(MacBookPro M1)虚拟机安装k8s1.27.3版本记录及问题总结

Helm是k8s机群的包管理器,我们可以通过Helm在k8s集群安装应用。
Istio是一个功能强大的服务网格平台,为微服务架构提供了一套丰富的工具和功能,以简化和增强服务之间的通信、安全性和可观察性。
Kiali 仪表板展示了网格的概览以及 Bookinfo 示例应用的各个服务之间的关系。 它还提供过滤器来可视化流量的流动。

Helm版本支持策略:https://helm.sh/zh/docs/topics/version_skew/
Istio 版本支持策略:https://istio.io/latest/zh/docs/releases/supported-releases/
k8s集群安装Istio过程记录及问题总结_第2张图片

k8s集群安装Istio过程记录及问题总结_第3张图片

二、部署Helm

官方文档:https://helm.sh/zh/docs/intro/quickstart/
Helm安装方式很简单,只需要执行一条命令,执行相应脚本完成安装。如果你需要安装对应版本,每个Helm 版本都提供了各种操作系统的二进制版本:https://github.com/helm/helm/releases,这些版本可以手动下载和安装,然后解压,将helm移动到需要的目录中(mv linux-amd64/helm /usr/local/bin/helm)

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
[root@k8s-master ~]# curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 11345  100 11345    0     0   8068      0  0:00:01  0:00:01 --:--:--  8063
[WARNING] Could not find git. It is required for plugin installation.
Downloading https://get.helm.sh/helm-v3.12.1-linux-arm64.tar.gz
Verifying checksum... Done.
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helm
[root@k8s-master ~]# helm version
version.BuildInfo{Version:"v3.12.1", GitCommit:"f32a527a060157990e2aa86bf45010dfb3cc8b8d", GitTreeState:"clean", GoVersion:"go1.20.4"}
[root@k8s-master ~]# helm ls
NAME    NAMESPACE       REVISION        UPDATED STATUS  CHART   APP VERSION
[root@k8s-master ~]# helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories
[root@k8s-master ~]# 
[root@k8s-master ~]# helm repo update     
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "bitnami" chart repository
Update Complete. ⎈Happy Helming!⎈

三、部署Istio

官方文档:https://istio.io/latest/zh/docs/setup/getting-started/
Istio也可以执行脚本安装,但是我的网络不通没办法。

[root@k8s-master ~]# curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.18.0
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   102  100   102    0     0    359      0 --:--:-- --:--:-- --:--:--   359
  0     0    0     0    0     0      0      0 --:--:--  0:01:36 --:--:--     0
curl: (56) OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 104
[root@k8s-master ~]# cat  >> /etc/hosts << EOF
> 75.2.60.5 istio.io
> EOF
> [root@k8s-master ~]# curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.18.0
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   102  100   102    0     0    337      0 --:--:-- --:--:-- --:--:--   337
  0     0    0     0    0     0      0      0 --:--:--  0:01:32 --:--:--     0
curl: (56) OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 104

只能下载二进制包,上传到虚拟机进行部署。
二进制包下载:https://github.com/istio/istio/releases/tag/1.18.0
下载对应版本
k8s集群安装Istio过程记录及问题总结_第4张图片
使用tar -zxvf命令进行解压,进入文件夹,将istio命令加入环境变量。
采用 demo 配置组合。 它包含了一组专为测试准备的功能集合,另外还有用于生产或性能测试的配置组合。

cd istio-1.18.0
export PATH=$PWD/bin:$PATH
istioctl install --set profile=demo -y

并且给命名空间添加标签,指示 Istio 在部署应用的时候,自动注入 Envoy 边车(Sidecar)代理:

kubectl label namespace default istio-injection=enabled

部署官方示例 Bookinfo

然后安装官方的Demo示例:

kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
[root@k8s-master ~]# ll | grep istio
-rw-r--r--. 1 root root 25307383 7月   5 23:16 istio-1.18.0-linux-arm64.tar.gz
[root@k8s-master ~]# tar -zxvf istio-1.18.0-linux-arm64.tar.gz 
[root@k8s-master ~]# ll | grep istio
drwxr-x---. 6 root root      115 6月   7 16:01 istio-1.18.0
-rw-r--r--. 1 root root 25307383 7月   5 23:16 istio-1.18.0-linux-arm64.tar.gz
[root@k8s-master ~]# cd istio-1.18.0
[root@k8s-master istio-1.18.0]# ls
bin  LICENSE  manifests  manifest.yaml  README.md  samples  tools
[root@k8s-master istio-1.18.0]# export PATH=$PWD/bin:$PATH
[root@k8s-master istio-1.18.0]# istioctl install --set profile=demo -y
✔ Istio core installed                                                                                                                                                                      
✔ Istiod installed                                                                                                                                                                          
✔ Egress gateways installed                                                                                                                                                                 
✔ Ingress gateways installed                                                                                                                                                                
✔ Installation complete                                                                                                                                                                     Making this installation the default for injection and validation.
[root@k8s-master istio-1.18.0]# kubectl label namespace default istio-injection=enabled
namespace/default labeled
[root@k8s-master istio-1.18.0]# 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-master istio-1.18.0]# 

应用很快会启动起来。当每个 Pod 准备就绪时,Istio 边车将伴随应用一起部署。

[root@k8s-master istio-1.18.0]# kubectl get services
NAME          TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
details       ClusterIP   10.111.93.162            9080/TCP   12m
kubernetes    ClusterIP   10.96.0.1                443/TCP    18h
productpage   ClusterIP   10.97.94.189             9080/TCP   12m
ratings       ClusterIP   10.106.155.115           9080/TCP   12m
reviews       ClusterIP   10.106.49.5              9080/TCP   12m
[root@k8s-master istio-1.18.0]# kubectl get pods
NAME                              READY   STATUS    RESTARTS   AGE
details-v1-7c7dbcb4b5-jx866       2/2     Running   0          12m
productpage-v1-664d44d68d-v722l   2/2     Running   0          12m
ratings-v1-844796bf85-kktgq       2/2     Running   0          12m
reviews-v1-5cf854487-gn6xv        2/2     Running   0          12m
reviews-v2-955b74755-rp9b5        2/2     Running   0          12m
reviews-v3-797fc48bc9-wspwt       2/2     Running   0          12m
[root@k8s-master istio-1.18.0]# 

确认上面的操作都正确之后,运行下面命令,通过检查返回的页面标题来验证应用是否已在集群中运行,并已提供网页服务:

[root@k8s-master istio-1.18.0]# kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o ".*"
Simple Bookstore App<<span class="token operator">/</span>title>
<span class="token namespace">[root@k8s-master istio-1.18.0]</span><span class="token comment"># </span>
</code></pre> 
  <p>此时,BookInfo 应用已经部署,但还不能被外界访问。 要开放访问,需要创建 Istio 入站网关(Ingress Gateway), 它会在网格边缘把一个路径映射到路由。</p> 
  <pre><code class="prism language-powershell"><span class="token namespace">[root@k8s-master istio-1.18.0]</span><span class="token comment"># kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml</span>
gateway<span class="token punctuation">.</span>networking<span class="token punctuation">.</span>istio<span class="token punctuation">.</span>io/bookinfo-gateway created
virtualservice<span class="token punctuation">.</span>networking<span class="token punctuation">.</span>istio<span class="token punctuation">.</span>io/bookinfo created

<span class="token comment"># 确保配置文件没有问题:</span>
<span class="token namespace">[root@k8s-master istio-1.18.0]</span><span class="token comment"># istioctl analyze</span>

✔ No validation issues found when analyzing namespace: default<span class="token punctuation">.</span>
<span class="token namespace">[root@k8s-master istio-1.18.0]</span><span class="token comment"># </span>
</code></pre> 
  <p>执行下面命令以判断您的 Kubernetes 集群环境是否支持外部负载均衡:</p> 
  <pre><code class="prism language-powershell"><span class="token namespace">[root@k8s-master ~]</span><span class="token comment"># kubectl get svc istio-ingressgateway -n istio-system</span>
NAME                   <span class="token function">TYPE</span>           CLUSTER-IP      EXTERNAL-IP   PORT<span class="token punctuation">(</span>S<span class="token punctuation">)</span>                                                                      AGE
istio-ingressgateway   LoadBalancer   10<span class="token punctuation">.</span>103<span class="token punctuation">.</span>45<span class="token punctuation">.</span>216   <pending>     15021:31564/TCP<span class="token punctuation">,</span>80:30704/TCP<span class="token punctuation">,</span>443:30854/TCP<span class="token punctuation">,</span>31400:30301/TCP<span class="token punctuation">,</span>15443:30563/TCP   20h
<span class="token namespace">[root@k8s-master ~]</span><span class="token comment"># </span>
</code></pre> 
  <p>设置 <code>EXTERNAL-IP</code> 的值之后, 环境就有了一个外部的负载均衡器,可以将其用作入站网关。 但如果 EXTERNAL-IP 的值为 (或者一直是 <<code>pending</code>> 状态), 则您的环境则没有提供可作为入站流量网关的外部负载均衡器。 在这个情况下,您还可以用服务(Service)的<code>NodePort</code>访问网关。<br> 如果你的环境中没有外部负载均衡器,那就选择一个<code>NodePort</code>来代替。<br> 设置入站 IP 地址和端口:</p> 
  <pre><code class="prism language-powershell">export INGRESS_PORT=$<span class="token punctuation">(</span>kubectl <span class="token operator">-</span>n istio-system get service istio-ingressgateway <span class="token operator">-</span>o jsonpath=<span class="token string">'{.spec.ports[?(@.name=="http2")].nodePort}'</span><span class="token punctuation">)</span>

export INGRESS_HOST=$<span class="token punctuation">(</span>kubectl get po <span class="token operator">-</span>l istio=ingressgateway <span class="token operator">-</span>n istio-system <span class="token operator">-</span>o jsonpath=<span class="token string">'{.items[0].status.hostIP}'</span><span class="token punctuation">)</span>
</code></pre> 
  <p>设置环境变量 GATEWAY_URL:</p> 
  <pre><code class="prism language-powershell">export GATEWAY_URL=<span class="token variable">$INGRESS_HOST</span>:<span class="token variable">$INGRESS_PORT</span>
<span class="token function">echo</span> <span class="token string">"<span class="token variable">$GATEWAY_URL</span>"</span>
<span class="token function">echo</span> <span class="token string">"http://<span class="token variable">$GATEWAY_URL</span>/productpage"</span>
</code></pre> 
  <p>把上面命令的输出地址复制粘贴到浏览器并访问,确认 Bookinfo 应用的产品页面是否可以打开。</p> 
  <pre><code class="prism language-powershell"><span class="token namespace">[root@k8s-master ~]</span><span class="token comment"># export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')</span>
<span class="token namespace">[root@k8s-master ~]</span><span class="token comment"># export INGRESS_HOST=$(kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}')</span>
<span class="token namespace">[root@k8s-master ~]</span><span class="token comment"># export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT</span>
<span class="token namespace">[root@k8s-master ~]</span><span class="token comment"># echo "$GATEWAY_URL"</span>
192<span class="token punctuation">.</span>168<span class="token punctuation">.</span>153<span class="token punctuation">.</span>102:30704
<span class="token namespace">[root@k8s-master ~]</span><span class="token comment"># echo "http://$GATEWAY_URL/productpage"</span>
http:<span class="token operator">/</span><span class="token operator">/</span>192<span class="token punctuation">.</span>168<span class="token punctuation">.</span>153<span class="token punctuation">.</span>102:30704/productpage
</code></pre> 
  <p>成功在外部(宿主机)访问:<br> <a href="http://img.e-com-net.com/image/info8/748c61eaa5514ff8a1ae055e3bc45577.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/748c61eaa5514ff8a1ae055e3bc45577.jpg" alt="k8s集群安装Istio过程记录及问题总结_第5张图片" width="650" height="369" style="border:1px solid black;"></a><br> <a href="http://img.e-com-net.com/image/info8/f852859ba9c242afb8ebe0dec88a84c1.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/f852859ba9c242afb8ebe0dec88a84c1.jpg" alt="k8s集群安装Istio过程记录及问题总结_第6张图片" width="650" height="369" style="border:1px solid black;"></a></p> 
  <h1>四、部署Kali</h1> 
  <p>Istio 和几个遥测应用做了集成。 遥测能帮我们了解服务网格的结构、展示网络的拓扑结构、分析网格的健康状态。<br> 使用下面说明部署 Kiali 仪表板、 以及 Prometheus、 Grafana、 还有 Jaeger。</p> 
  <pre><code class="prism language-powershell">kubectl apply <span class="token operator">-</span>f samples/addons
<span class="token comment"># 查询kiali在滚动更新期间的状态</span>
kubectl rollout status deployment/kiali <span class="token operator">-</span>n istio-system
</code></pre> 
  <p>要想外部访问kiali 的web页面,还需要创建一个<code>NodePort</code> Service。</p> 
  <pre><code class="prism language-powershell">kubectl <span class="token operator">-</span>n istio-system expose service kiali <span class="token operator">--</span><span class="token function">type</span>=NodePort <span class="token operator">--</span>name=kiali-external
kubectl get svc <span class="token operator">-</span>n istio-system
kubectl <span class="token operator">-</span>n istio-system get service kiali-external <span class="token operator">-</span>o=jsonpath=<span class="token string">'{.spec.ports[0].nodePort}'</span>
</code></pre> 
  <pre><code class="prism language-powershell"><span class="token namespace">[root@k8s-master ~]</span><span class="token comment"># cd istio-1.18.0</span>
<span class="token namespace">[root@k8s-master istio-1.18.0]</span><span class="token comment"># kubectl apply -f samples/addons</span>
serviceaccount/grafana created
configmap/grafana created
service/grafana created
deployment<span class="token punctuation">.</span>apps/grafana created
configmap/istio-grafana-dashboards created
configmap/istio-services-grafana-dashboards created
deployment<span class="token punctuation">.</span>apps/jaeger created
service/tracing created
service/zipkin created
service/jaeger-collector created
serviceaccount/kiali created
configmap/kiali created
clusterrole<span class="token punctuation">.</span>rbac<span class="token punctuation">.</span>authorization<span class="token punctuation">.</span>k8s<span class="token punctuation">.</span>io/kiali-viewer created
clusterrole<span class="token punctuation">.</span>rbac<span class="token punctuation">.</span>authorization<span class="token punctuation">.</span>k8s<span class="token punctuation">.</span>io/kiali created
clusterrolebinding<span class="token punctuation">.</span>rbac<span class="token punctuation">.</span>authorization<span class="token punctuation">.</span>k8s<span class="token punctuation">.</span>io/kiali created
role<span class="token punctuation">.</span>rbac<span class="token punctuation">.</span>authorization<span class="token punctuation">.</span>k8s<span class="token punctuation">.</span>io/kiali-controlplane created
rolebinding<span class="token punctuation">.</span>rbac<span class="token punctuation">.</span>authorization<span class="token punctuation">.</span>k8s<span class="token punctuation">.</span>io/kiali-controlplane created
service/kiali created
deployment<span class="token punctuation">.</span>apps/kiali created
serviceaccount/loki created
configmap/loki created
configmap/loki-runtime created
service/loki-memberlist created
service/loki-headless created
service/loki created
statefulset<span class="token punctuation">.</span>apps/loki created
serviceaccount/prometheus created
configmap/prometheus created
clusterrole<span class="token punctuation">.</span>rbac<span class="token punctuation">.</span>authorization<span class="token punctuation">.</span>k8s<span class="token punctuation">.</span>io/prometheus created
clusterrolebinding<span class="token punctuation">.</span>rbac<span class="token punctuation">.</span>authorization<span class="token punctuation">.</span>k8s<span class="token punctuation">.</span>io/prometheus created
service/prometheus created
deployment<span class="token punctuation">.</span>apps/prometheus created
<span class="token namespace">[root@k8s-master istio-1.18.0]</span><span class="token comment"># kubectl rollout status deployment/kiali -n istio-system</span>
deployment <span class="token string">"kiali"</span> successfully rolled out
<span class="token namespace">[root@k8s-master istio-kiali]</span><span class="token comment"># kubectl -n istio-system expose service kiali --type=NodePort --name=kiali-external</span>
service/kiali-external exposed
<span class="token namespace">[root@k8s-master istio-kiali]</span><span class="token comment"># kubectl get svc -n istio-system</span>
NAME                   <span class="token function">TYPE</span>           CLUSTER-IP      EXTERNAL-IP   PORT<span class="token punctuation">(</span>S<span class="token punctuation">)</span>                                                                      AGE
istio-egressgateway    ClusterIP      10<span class="token punctuation">.</span>111<span class="token punctuation">.</span>39<span class="token punctuation">.</span>235   <none>        80/TCP<span class="token punctuation">,</span>443/TCP                                                               21h
istio-ingressgateway   LoadBalancer   10<span class="token punctuation">.</span>103<span class="token punctuation">.</span>45<span class="token punctuation">.</span>216   <pending>     15021:31564/TCP<span class="token punctuation">,</span>80:30704/TCP<span class="token punctuation">,</span>443:30854/TCP<span class="token punctuation">,</span>31400:30301/TCP<span class="token punctuation">,</span>15443:30563/TCP   21h
istiod                 ClusterIP      10<span class="token punctuation">.</span>109<span class="token punctuation">.</span>218<span class="token punctuation">.</span>54   <none>        15010/TCP<span class="token punctuation">,</span>15012/TCP<span class="token punctuation">,</span>443/TCP<span class="token punctuation">,</span>15014/TCP                                        21h
kiali                  ClusterIP      10<span class="token punctuation">.</span>105<span class="token punctuation">.</span>43<span class="token punctuation">.</span>99    <none>        20001/TCP<span class="token punctuation">,</span>9090/TCP                                                           21h
kiali-external         NodePort       10<span class="token punctuation">.</span>110<span class="token punctuation">.</span>49<span class="token punctuation">.</span>251   <none>        20001:31430/TCP<span class="token punctuation">,</span>9090:30588/TCP                                               9s
<span class="token namespace">[root@k8s-master istio-kiali]</span><span class="token comment"># kubectl -n istio-system get service kiali-external -o=jsonpath='{.spec.ports[0].nodePort}'</span>
31430<span class="token namespace">[root@k8s-master istio-kiali]</span><span class="token comment">#</span>
</code></pre> 
  <p>通过集群IP地址+NodePort 访问:<code>http://192.168.153.102:31430/</code></p> 
  <p>要查看追踪数据,必须向服务发送请求。请求的数量取决于 Istio 的采样率。 采样率在安装 Istio 时设置,默认采样速率为 1%。在第一个跟踪可见之前,您需要发送至少 100 个请求。 使用以下命令向 productpage 服务发送 100 个请求:</p> 
  <pre><code class="prism language-powershell"><span class="token keyword">for</span> i in `seq 1 100`<span class="token punctuation">;</span> <span class="token keyword">do</span> curl <span class="token operator">-</span>s <span class="token operator">-</span>o <span class="token operator">/</span>dev/null http:<span class="token operator">/</span><span class="token operator">/</span><span class="token variable">$GATEWAY_URL</span><span class="token operator">/</span>productpage<span class="token punctuation">;</span> done
</code></pre> 
  <p>Kiali 仪表板展示了网格的概览以及 Bookinfo 示例应用的各个服务之间的关系。 它还提供过滤器来可视化流量的流动。<br> <a href="http://img.e-com-net.com/image/info8/0df87b68b4b44841a425a6243fafa11b.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/0df87b68b4b44841a425a6243fafa11b.jpg" alt="k8s集群安装Istio过程记录及问题总结_第7张图片" width="650" height="406" style="border:1px solid black;"></a><br> <a href="http://img.e-com-net.com/image/info8/7a39102d0b944d559005320547d8d800.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/7a39102d0b944d559005320547d8d800.jpg" alt="k8s集群安装Istio过程记录及问题总结_第8张图片" width="650" height="406" style="border:1px solid black;"></a><br> <a href="http://img.e-com-net.com/image/info8/7b734e2542ac4263970efccb3ce2462a.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/7b734e2542ac4263970efccb3ce2462a.jpg" alt="k8s集群安装Istio过程记录及问题总结_第9张图片" width="650" height="406" style="border:1px solid black;"></a></p> 
  <h1>Bug 记录</h1> 
  <h1>部署Bookinfo demo失败</h1> 
  <p>当我使用<code>kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml</code>命令部署Demo时,发现Pod一直启动不下来。</p> 
  <pre><code class="prism language-powershell"><span class="token namespace">[root@k8s-master istio-1.18.0]</span><span class="token comment"># kubectl get pods -o wide</span>
NAME                              READY   STATUS                  RESTARTS      AGE     IP              NODE         NOMINATED NODE   READINESS GATES
details-v1-7c7dbcb4b5-lw8hr       0/2     Init:CrashLoopBackOff   5 <span class="token punctuation">(</span>82s ago<span class="token punctuation">)</span>   4m13s   172<span class="token punctuation">.</span>16<span class="token punctuation">.</span>85<span class="token punctuation">.</span>212   k8s-node01   <none>           <none>
productpage-v1-664d44d68d-lgc4k   0/2     Init:CrashLoopBackOff   5 <span class="token punctuation">(</span>69s ago<span class="token punctuation">)</span>   4m12s   172<span class="token punctuation">.</span>16<span class="token punctuation">.</span>58<span class="token punctuation">.</span>203   k8s-node02   <none>           <none>
ratings-v1-844796bf85-7s4zp       0/2     Init:CrashLoopBackOff   5 <span class="token punctuation">(</span>87s ago<span class="token punctuation">)</span>   4m13s   172<span class="token punctuation">.</span>16<span class="token punctuation">.</span>85<span class="token punctuation">.</span>213   k8s-node01   <none>           <none>
reviews-v1-5cf854487-ztl9l        0/2     Init:CrashLoopBackOff   5 <span class="token punctuation">(</span>73s ago<span class="token punctuation">)</span>   4m13s   172<span class="token punctuation">.</span>16<span class="token punctuation">.</span>58<span class="token punctuation">.</span>202   k8s-node02   <none>           <none>
reviews-v2-955b74755-tm6cj        0/2     Init:CrashLoopBackOff   5 <span class="token punctuation">(</span>74s ago<span class="token punctuation">)</span>   4m13s   172<span class="token punctuation">.</span>16<span class="token punctuation">.</span>85<span class="token punctuation">.</span>214   k8s-node01   <none>           <none>
reviews-v3-797fc48bc9-s29zm       0/2     Init:CrashLoopBackOff   5 <span class="token punctuation">(</span>78s ago<span class="token punctuation">)</span>   4m13s   172<span class="token punctuation">.</span>16<span class="token punctuation">.</span>85<span class="token punctuation">.</span>215   k8s-node01   <none>           <none>
</code></pre> 
  <p>开始以为是由于镜像下载不下来,单独下载了镜像</p> 
  <pre><code class="prism language-powershell">crictl pull docker<span class="token punctuation">.</span>io/istio/examples-bookinfo-details-v1:1<span class="token punctuation">.</span>17<span class="token punctuation">.</span>0
crictl pull docker<span class="token punctuation">.</span>io/istio/examples-bookinfo-productpage-v1:1<span class="token punctuation">.</span>17<span class="token punctuation">.</span>0
crictl pull docker<span class="token punctuation">.</span>io/istio/examples-bookinfo-ratings-v1:1<span class="token punctuation">.</span>17<span class="token punctuation">.</span>0
crictl pull docker<span class="token punctuation">.</span>io/istio/examples-bookinfo-reviews-v1:1<span class="token punctuation">.</span>17<span class="token punctuation">.</span>0
crictl pull docker<span class="token punctuation">.</span>io/istio/examples-bookinfo-reviews-v2:1<span class="token punctuation">.</span>17<span class="token punctuation">.</span>0
crictl pull docker<span class="token punctuation">.</span>io/istio/examples-bookinfo-reviews-v3:1<span class="token punctuation">.</span>17<span class="token punctuation">.</span>0
crictl pull docker<span class="token punctuation">.</span>io/istio/proxyv2:1<span class="token punctuation">.</span>18<span class="token punctuation">.</span>0
</code></pre> 
  <pre><code class="prism language-powershell"><span class="token namespace">[root@k8s-node02 istio-1.18.0]</span><span class="token comment"># crictl images</span>
IMAGE                                                            TAG                 IMAGE ID            SIZE
docker<span class="token punctuation">.</span>io/calico/cni                                             v3<span class="token punctuation">.</span>25<span class="token punctuation">.</span>0             0bb8d6f033a05       81<span class="token punctuation">.</span>1MB
docker<span class="token punctuation">.</span>io/calico/kube-controllers                                v3<span class="token punctuation">.</span>25<span class="token punctuation">.</span>0             2a83e28de3677       27<span class="token punctuation">.</span>1MB
docker<span class="token punctuation">.</span>io/calico/node                                            v3<span class="token punctuation">.</span>25<span class="token punctuation">.</span>0             8a2dff14388de       82<span class="token punctuation">.</span>2MB
docker<span class="token punctuation">.</span>io/istio/examples-bookinfo-details-v1                     1<span class="token punctuation">.</span>17<span class="token punctuation">.</span>0              8c7b34204cae9       59<span class="token punctuation">.</span>8MB
docker<span class="token punctuation">.</span>io/istio/examples-bookinfo-productpage-v1                 1<span class="token punctuation">.</span>17<span class="token punctuation">.</span>0              348980125f0b0       64<span class="token punctuation">.</span>7MB
docker<span class="token punctuation">.</span>io/istio/examples-bookinfo-ratings-v1                     1<span class="token punctuation">.</span>17<span class="token punctuation">.</span>0              18290de2e4a28       54<span class="token punctuation">.</span>2MB
docker<span class="token punctuation">.</span>io/istio/examples-bookinfo-reviews-v1                     1<span class="token punctuation">.</span>17<span class="token punctuation">.</span>0              9dc1566776c17       412MB
docker<span class="token punctuation">.</span>io/istio/examples-bookinfo-reviews-v2                     1<span class="token punctuation">.</span>17<span class="token punctuation">.</span>0              5233615dc9972       412MB
docker<span class="token punctuation">.</span>io/istio/examples-bookinfo-reviews-v3                     1<span class="token punctuation">.</span>17<span class="token punctuation">.</span>0              fbb7b7ceabf34       412MB
docker<span class="token punctuation">.</span>io/istio/proxyv2                                          1<span class="token punctuation">.</span>18<span class="token punctuation">.</span>0              c901fe029266e       90<span class="token punctuation">.</span>4MB
docker<span class="token punctuation">.</span>io/kubernetesui/dashboard                                 v2<span class="token punctuation">.</span>3<span class="token punctuation">.</span>1              5bb89698273d8       65<span class="token punctuation">.</span>4MB
registry<span class="token punctuation">.</span>aliyuncs<span class="token punctuation">.</span>com/google_containers/pause                    3<span class="token punctuation">.</span>8                 4e42fb3c9d90e       268kB
registry<span class="token punctuation">.</span>cn-hangzhou<span class="token punctuation">.</span>aliyuncs<span class="token punctuation">.</span>com/google_containers/coredns      v1<span class="token punctuation">.</span>10<span class="token punctuation">.</span>1             97e04611ad434       14<span class="token punctuation">.</span>6MB
registry<span class="token punctuation">.</span>cn-hangzhou<span class="token punctuation">.</span>aliyuncs<span class="token punctuation">.</span>com/google_containers/kube-proxy   v1<span class="token punctuation">.</span>27<span class="token punctuation">.</span>3             fb73e92641fd5       21<span class="token punctuation">.</span>4MB
<span class="token namespace">[root@k8s-node02 istio-1.18.0]</span><span class="token comment"># </span>
</code></pre> 
  <p>在三个节点都把镜像下载下来了,但是容器还是无法启动。<br> 后来查看了Pod的日志,发现这个问题:<code>error output: xtables parameter problem: iptables-restore: unable to initialize table 'nat'</code></p> 
  <p>最后找到解决方案:</p> 
  <pre><code class="prism language-powershell"><span class="token function">cat</span> <<EOT >> <span class="token operator">/</span>etc/modules-load<span class="token punctuation">.</span>d/k8s<span class="token punctuation">.</span>conf
overlay
br_netfilter
nf_nat
xt_REDIRECT
xt_owner
iptable_nat
iptable_mangle
iptable_filter
EOT
</code></pre> 
  <pre><code class="prism language-powershell">modprobe br_netfilter <span class="token punctuation">;</span> modprobe nf_nat <span class="token punctuation">;</span> modprobe xt_REDIRECT <span class="token punctuation">;</span> modprobe xt_owner<span class="token punctuation">;</span> modprobe iptable_nat<span class="token punctuation">;</span> modprobe iptable_mangle<span class="token punctuation">;</span> modprobe iptable_filter
</code></pre> 
  <p>https://stackoverflow.com/questions/73473680/service-deployed-with-istio-doesnt-start-minikube-docker-mac-m1</p> 
  <p>https://github.com/istio/istio/issues/36762</p> 
  <p>容器运行成功:</p> 
  <pre><code class="prism language-powershell"><span class="token namespace">[root@k8s-master istio-1.18.0]</span><span class="token comment"># kubectl get pods -o wide</span>
NAME                              READY   STATUS    RESTARTS   AGE   IP              NODE         NOMINATED NODE   READINESS GATES
details-v1-7c7dbcb4b5-jx866       2/2     Running   0          12m   172<span class="token punctuation">.</span>16<span class="token punctuation">.</span>85<span class="token punctuation">.</span>220   k8s-node01   <none>           <none>
productpage-v1-664d44d68d-v722l   2/2     Running   0          12m   172<span class="token punctuation">.</span>16<span class="token punctuation">.</span>58<span class="token punctuation">.</span>207   k8s-node02   <none>           <none>
ratings-v1-844796bf85-kktgq       2/2     Running   0          12m   172<span class="token punctuation">.</span>16<span class="token punctuation">.</span>85<span class="token punctuation">.</span>221   k8s-node01   <none>           <none>
reviews-v1-5cf854487-gn6xv        2/2     Running   0          12m   172<span class="token punctuation">.</span>16<span class="token punctuation">.</span>58<span class="token punctuation">.</span>206   k8s-node02   <none>           <none>
reviews-v2-955b74755-rp9b5        2/2     Running   0          12m   172<span class="token punctuation">.</span>16<span class="token punctuation">.</span>85<span class="token punctuation">.</span>222   k8s-node01   <none>           <none>
reviews-v3-797fc48bc9-wspwt       2/2     Running   0          12m   172<span class="token punctuation">.</span>16<span class="token punctuation">.</span>85<span class="token punctuation">.</span>223   k8s-node01   <none>           <none>
<span class="token namespace">[root@k8s-master istio-1.18.0]</span><span class="token comment"># </span>
</code></pre> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1694592648146399232"></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">你可能感兴趣的:(DevOps,云原生,kubernetes,istio,容器)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1895298960801722368.htm"
                           title="C++ STL std::vector 底层实现" target="_blank">C++ STL std::vector 底层实现</a>
                        <span class="text-muted">zjkzjk7711</span>
<a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a>
                        <div>C++STLstd::vector底层实现std::vector是C++STL中最常用的动态数组容器,其底层实现依赖于连续内存块,并采用动态扩容策略来管理内存。1.std::vector的底层数据结构std::vector内部维护三个指针templateclassvector{private:T*_start;//指向数据存储的起始位置T*_finish;//指向数据存储的末尾(size)T*_e</div>
                    </li>
                    <li><a href="/article/1895295424571437056.htm"
                           title="c++_sort函数" target="_blank">c++_sort函数</a>
                        <span class="text-muted">惊讶的猫</span>
<a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a>
                        <div>sort介绍在C/C++中,要想应用排序算法,可以使用c语言的qsort,也可以使用c++的sort。1)qsort是C标准库提供的一个通用排序函数,位于stdlib.h头文件中。qsort适用于C语言中的数组。2)sort是C++中STL的泛型算法(即函数)sort可以排数组,vector(以及其他的容器)sort可以自定义排序规则。引入:#include排静态数组c语言中arr是一个数组名作为</div>
                    </li>
                    <li><a href="/article/1895275997763268608.htm"
                           title="Spring Bean 的生命周期全过程" target="_blank">Spring Bean 的生命周期全过程</a>
                        <span class="text-muted">2401_85327573</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>SpringBean的生命周期是指从Bean的创建到销毁的整个过程。在这个过程中,Spring容器会按照一系列固定的步骤对Bean进行初始化、配置、使用和销毁。了解SpringBean的生命周期可以帮助我们更好地理解和使用Spring框架,尤其是通过自定义生命周期行为来实现特定功能。以下是SpringBean生命周期的全过程,按阶段详细说明:---###**1.实例化(Instantiation)</div>
                    </li>
                    <li><a href="/article/1895219375208722432.htm"
                           title="【云原生】Docker搭建知识库文档协作平台Confluence" target="_blank">【云原生】Docker搭建知识库文档协作平台Confluence</a>
                        <span class="text-muted">逆风飞翔的小叔</span>
<a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/Confluence/1.htm">Confluence</a><a class="tag" taget="_blank" href="/search/Confluence%E6%90%AD%E5%BB%BA/1.htm">Confluence搭建</a><a class="tag" taget="_blank" href="/search/Confluence%E4%BD%BF%E7%94%A8/1.htm">Confluence使用</a><a class="tag" taget="_blank" href="/search/Confluence%E6%90%AD%E5%BB%BA%E4%B8%8E%E4%BD%BF%E7%94%A8/1.htm">Confluence搭建与使用</a><a class="tag" taget="_blank" href="/search/Confluence%E4%BD%BF%E7%94%A8%E8%AF%A6%E8%A7%A3/1.htm">Confluence使用详解</a>
                        <div>目录一、前言二、企业级知识库文档工具部署形式2.1开源工具平台2.1.1开源工具优点2.1.2开源工具缺点2.2私有化部署2.3混合部署三、如何选择合适的知识库平台工具3.1明确目标和需求3.2选择合适的知识库平台工具四、Confluence介绍4.2confluence特点4.3Confluence中的几个概念4.3.1空间(Space)4.3.2Dashboard4.3.3页面(Page)4.</div>
                    </li>
                    <li><a href="/article/1895214706201784320.htm"
                           title="镜像解决,向量数据库Milvus报错" target="_blank">镜像解决,向量数据库Milvus报错</a>
                        <span class="text-muted">zwzscnds</span>
<a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/milvus/1.htm">milvus</a>
                        <div>MilvusMilvus是一款开源的向量数据库,具有高度的灵活性、稳定可靠性以及高速查询等特点。它支持针对TB级向量的增删改操作和近实时查询,适用于大规模向量数据的存储和检索。Milvus的官网:https://milvus.ioGithub上Milvus的链接:https://github.com/milvus-ioDockerDocker是一种容器化技术,它允许开发者将应用程序及其依赖项打包到</div>
                    </li>
                    <li><a href="/article/1895210291445166080.htm"
                           title="如何收集k8s pod的服务日志(rancher)" target="_blank">如何收集k8s pod的服务日志(rancher)</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/rancher/1.htm">rancher</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a>
                        <div>一、环境情况说明当前环境是k8s+rancher+filebeat+es+kibana本文只讲解部署filebeat收集容器日志的过程、使用daemonset的方式部署filebeat,es+kibana+k8s已提前创建好的二、部署安装1、在已创建完成的k8s环境中,用kubectl先创建一个命名空间elk-log,新增一个filebeat目录,上传一下4个代码文件filebeat.daemon</div>
                    </li>
                    <li><a href="/article/1895202095921950720.htm"
                           title="深入理解 Spring IoC 与 DI:控制反转与依赖注入解析" target="_blank">深入理解 Spring IoC 与 DI:控制反转与依赖注入解析</a>
                        <span class="text-muted">代码江</span>
<a class="tag" taget="_blank" href="/search/Spring/1.htm">Spring</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>前言:在接触Spring框架之前,通常我们会在main方法或其他业务逻辑中手动new对象,然后调用这些对象的方法来完成任务。手动创建对象的方式意味着我们自己掌握了对象的控制权。然而,在Spring中,我们不再直接在代码中手动创建对象,而是将对象的创建、管理、依赖注入等职责交给了Spring容器。Spring框架通过IoC(控制反转)和DI(依赖注入)来实现这一点。大家伙,这次封面是我把标题发给ai</div>
                    </li>
                    <li><a href="/article/1895196168846110720.htm"
                           title="Spring:核心IOC容器、DI依赖注入案例以及注入方式-List-Map注入详解(2)" target="_blank">Spring:核心IOC容器、DI依赖注入案例以及注入方式-List-Map注入详解(2)</a>
                        <span class="text-muted">九八年的尾巴</span>
<a class="tag" taget="_blank" href="/search/SpringFramework/1.htm">SpringFramework</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/ioc/1.htm">ioc</a><a class="tag" taget="_blank" href="/search/bean/1.htm">bean</a>
                        <div>什么是IOCInverseofControl(控制反转)?是一种设计思想将原本在程序中手动创建对象的流程,交由Spring框架来管理核心:以前创建对象主动权是自己把控,现在创建对象的控制权反转给Spring框架,DI依赖注入和控制反转是同一概念不同角度的描述。就是应用程序在运行时依赖IOC容器来动态注入对象需要的外部资源。对象的生命周期由Spring统一管理Spring框架核心就是容器,里面存储管</div>
                    </li>
                    <li><a href="/article/1895178135297650688.htm"
                           title="通过docker和gitlab实现项目自动打包部署" target="_blank">通过docker和gitlab实现项目自动打包部署</a>
                        <span class="text-muted">hxj..</span>
<a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E9%83%A8%E7%BD%B2/1.htm">服务部署</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>Gitlab如何实现自动打包部署到docker集群?预备知识:开发模式转变:瀑布模型——》敏捷开发——》DevOpsDevOps:DevelopmentOperations的组合词CICD:持续集成(ContinuousIntegration),持续交付(ContinuousDelivery),持续部署(ContinuousDeployment)使用Gitlab-CI实现自动打包部署通过pipel</div>
                    </li>
                    <li><a href="/article/1895174101367058432.htm"
                           title="【Flutter 1-16】Flutter手把手教程UI布局和Widget——容器控件Container 我们先来看一下Container初始化的参数:" target="_blank">【Flutter 1-16】Flutter手把手教程UI布局和Widget——容器控件Container 我们先来看一下Container初始化的参数:</a>
                        <span class="text-muted">m0_54072730</span>
<a class="tag" taget="_blank" href="/search/flask/1.htm">flask</a>
                        <div>Container({Keykey,//位置居左、居右、居中this.alignment,//EdgeInsetsContainer的内边距this.padding,//背景颜色this.color,//背景装饰器this.decoration,//前景装饰器this.foregroundDecoration,//宽度doublewidth,//告诉doubleheight,//约束BoxCons</div>
                    </li>
                    <li><a href="/article/1895171705844854784.htm"
                           title="nvidia docker, nvidia docker2, nvidia container toolkits区别" target="_blank">nvidia docker, nvidia docker2, nvidia container toolkits区别</a>
                        <span class="text-muted">coco_1998_2</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/CUDA/1.htm">CUDA</a><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/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a>
                        <div>背景在docker容器中用GPU时,查阅了网上许多教程,教程之间概念模糊不清,相互矛盾,过时的教程和新的教程混杂在一起。主要原因是Nvidia为docker容器的支持发生了好几代变更,api发生了不少变化。下面来总结一下各代支持发展历程。省流版总结凡是使用了命令nvidiadocker或者在docker中引入了--runtime=nvidia参数的都是过时教程,最新方法只需要下载nvidia-co</div>
                    </li>
                    <li><a href="/article/1895164393818222592.htm"
                           title="HTML中 video标签样式铺满全屏" target="_blank">HTML中 video标签样式铺满全屏</a>
                        <span class="text-muted">小华0000</span>
<a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>video标签默认不是铺满的,即使手动设置宽高100%也不会生效,所以当需要video铺满div时,需要加上一个css样式关键是这个“object-fit:fill”,这样就可以解决了!object-fit属性指定元素的内容应该如何去适应指定容器的高度与宽度。object-fit一般用于img和video标签,一般可以对这些元素进行保留原始比例的剪切、缩放或者直接进行拉伸等。fill:默认,不保证</div>
                    </li>
                    <li><a href="/article/1895156691486437376.htm"
                           title="JSP介绍(二)" target="_blank">JSP介绍(二)</a>
                        <span class="text-muted">frandiy</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>JSP介绍什么是JSPjsp(JavaServerPage)是JavaEE规范中的Web组件,用来编写动态页面。JSP文件以.jsp为后缀,通常存放在Eclipse的工程目录中的WebContent目录下,与静态资源使用方式非常相似。内容构成:JSP文件中的内容是HTML和Java代码的结合,静态部分使用HTML和文本,动态部分使用Java代码。Web容器处理JSP文件请求的三个阶段翻译阶段:We</div>
                    </li>
                    <li><a href="/article/1895154539581992960.htm"
                           title="技术分享| 分布式系统中服务注册发现组件的原理及比较" target="_blank">技术分享| 分布式系统中服务注册发现组件的原理及比较</a>
                        <span class="text-muted">anyRTC</span>
<a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F%E7%B3%BB%E7%BB%9F/1.htm">分布式系统</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F%E7%B3%BB%E7%BB%9F/1.htm">分布式系统</a><a class="tag" taget="_blank" href="/search/Consul/1.htm">Consul</a><a class="tag" taget="_blank" href="/search/Zookeeper/1.htm">Zookeeper</a><a class="tag" taget="_blank" href="/search/etcd/1.htm">etcd</a>
                        <div>背景在分布式架构的系统中,服务发现简单来讲就是通过服务名找到提供服务的实例地址和端口,主要用于解决如何获取服务实例地址问题。随着容器技术的兴起,服务集群部署在系统各处,服务之间的远程调用都需要通过服务发现来实现。服务注册发现是分布式系统中不可或缺的关键组件,常用于构建服务注册发现解决方案的开源框架如ZooKeeper、Etcd、Consul。下面主要介绍一下如何基于ZooKeeper、Etcd、C</div>
                    </li>
                    <li><a href="/article/1895135627674972160.htm"
                           title="Java进阶-在Ubuntu上部署SpringBoot应用" target="_blank">Java进阶-在Ubuntu上部署SpringBoot应用</a>
                        <span class="text-muted">m0_74823611</span>
<a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF/1.htm">学习路线</a><a class="tag" taget="_blank" href="/search/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4/1.htm">阿里巴巴</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</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>
                        <div>随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一。Java作为一种跨平台的编程语言,具有广泛的应用场景。本文将详细介绍如何在Ubuntu服务器上部署Java应用,包括环境准备、应用发布、配置反向代理(Nginx)、设置系统服务以及日志管理等步骤。一、部署准备在开始之前,请确保你具备以下条件:一台运行Ubuntu(如Ubuntu20.04或22.04)的服务器,具</div>
                    </li>
                    <li><a href="/article/1895131839249575936.htm"
                           title="【音视频】编解码相关概念总结" target="_blank">【音视频】编解码相关概念总结</a>
                        <span class="text-muted">gma999</span>
<a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a>
                        <div>NALURTPPS流三者总体关系NALU在RTP中的应用:视频流的RTP传输通常将NALU作为基本的单元进行传输。每个RTP包携带一个或多个NALU,这些NALU包含了视频编码数据。RTP协议通过其头部信息(如时间戳、序列号等)帮助接收端重新排列和解码这些NALUPS流和NALU的转化:PS流本质上是一个容器,它可以封装多个NALU。在将PS流通过网络传输时,通常会将其分解成一个个NALU,然后通</div>
                    </li>
                    <li><a href="/article/1895119476102328320.htm"
                           title="LeetCode HOT 100Ⅰ" target="_blank">LeetCode HOT 100Ⅰ</a>
                        <span class="text-muted">喝口茶吧</span>
<a class="tag" taget="_blank" href="/search/leetcode/1.htm">leetcode</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a>
                        <div>目录DAY11:两数之和2:两数相加3:无重复字符的最长子串DAY25:最长回文子串DAY311:盛最多水的容器(太秒了多看这道题)15:三数之和DAY453:最大子数组和20:有效的括号70:爬楼梯DAY521:合并两个有序链表DAY622:括号生成DAY7215:数组中的第k个最大元素DAY8206:反转链表45:跳跃游戏-ⅡDAY9104:二叉树的深度121:买股票的最佳时机136:只出现一</div>
                    </li>
                    <li><a href="/article/1895107375724032000.htm"
                           title="02DevOps基础环境准备" target="_blank">02DevOps基础环境准备</a>
                        <span class="text-muted">梁萌</span>
<a class="tag" taget="_blank" href="/search/DevOps/1.htm">DevOps</a><a class="tag" taget="_blank" href="/search/DevOps/1.htm">DevOps</a><a class="tag" taget="_blank" href="/search/CI/1.htm">CI</a><a class="tag" taget="_blank" href="/search/CD/1.htm">CD</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a>
                        <div>准备两台Linux的操作系统,最简单的方式就是在本机上使用虚拟机搭建两个操作系统(实际生产环境是两台服务器,虚拟机的方式用于学习使用)我搭建的两台服务器的ip分别是192.168.1.10、192.168.1.11192.168.1.10服务器用于安装docker、Gitlab、Jenkins。192.168.1.11服务器用于自动化应用发布和运行应用。设备拓扑图VMware下Centos7安装步</div>
                    </li>
                    <li><a href="/article/1895106590357385216.htm"
                           title="Vue中如何轻松实现可调整大小的容器布局——vue-resizeable组件教程" target="_blank">Vue中如何轻松实现可调整大小的容器布局——vue-resizeable组件教程</a>
                        <span class="text-muted"></span>

                        <div>介绍vue-resizeable是一款在vue项目中可调整各个区域大小的组件,支持任意组合,支持自定义样式演示体验地址https://liquanquan.top/vue-admin/resizablenpm地址https://www.npmjs.com/package/vue-resizeablegithubhttps://github.com/taoman/vue-resizeable欢迎各位</div>
                    </li>
                    <li><a href="/article/1895097020989894656.htm"
                           title="[k8s源码]9.workqueue" target="_blank">[k8s源码]9.workqueue</a>
                        <span class="text-muted">weixin_45396500</span>
<a class="tag" taget="_blank" href="/search/k8s%E6%BA%90%E7%A0%81/1.htm">k8s源码</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>
                        <div>client-go是一个库,提供了与KubernetesAPI服务器交互的基础设施。它提供了诸如Informer、Lister、ClientSet等工具,用于监听、缓存和操作Kubernetes资源。而自定义控制器则利用这些工具来实现特定的业务逻辑和自动化任务。业务逻辑实现:client-go不包含特定的业务逻辑。自定义控制器允许实现特定于您的应用程序或需求的逻辑。扩展Kubernetes:通过自</div>
                    </li>
                    <li><a href="/article/1895095761515900928.htm"
                           title="docker部署GPU环境" target="_blank">docker部署GPU环境</a>
                        <span class="text-muted">atom goper</span>
<a class="tag" taget="_blank" href="/search/gru/1.htm">gru</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a>
                        <div>使用Docker部署GPU环境涉及到几个关键步骤,以下是详细步骤:1.安装NVIDIA驱动程序确保你的系统已经安装了NVIDIAGPU驱动。这是使用GPU的前提条件。2.安装Docker和nvidia-container-toolkit首先,确保你已经安装了Docker。然后,安装NVIDIAContainerToolkit,它允许Docker容器访问宿主机上的GPU资源。对于Ubuntu系统,安</div>
                    </li>
                    <li><a href="/article/1895083143879258112.htm"
                           title="用Docker搭建Redis主从复制的集群" target="_blank">用Docker搭建Redis主从复制的集群</a>
                        <span class="text-muted">2401_84046635</span>
<a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/eureka/1.htm">eureka</a>
                        <div>同样再到redis-slave1容器的命令窗口里,通过dockerexec-itredis-slave1/bin/bash命令进入容器的命令行窗口,也通过redis-cli命令进入客户端命令行,也再通过inforeplication命令查看该Redis服务器的主从模式的状态,部分结果如下所示。1c:\work>dockerexec-itredis-slave1/bin/bash2root@2e32</div>
                    </li>
                    <li><a href="/article/1895067510441570304.htm"
                           title="企业级Java开发整理的常用注解汇总" target="_blank">企业级Java开发整理的常用注解汇总</a>
                        <span class="text-muted">小鱼ccd</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>一、SpringBoot核心注解1.启动与配置注解说明示例代码@SpringBootApplication主启动类注解(组合注解)@SpringBootApplicationpublicclassApp{...}@Configuration声明配置类@ConfigurationpublicclassAppConfig{...}@Bean将方法返回对象注入容器@BeanpublicDataSourc</div>
                    </li>
                    <li><a href="/article/1895059448859258880.htm"
                           title="C++模板与STL七日斩:从工业编程到高效数据管理(工业项目)" target="_blank">C++模板与STL七日斩:从工业编程到高效数据管理(工业项目)</a>
                        <span class="text-muted">AI少女小鹿</span>
<a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/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/c%2B%2B/1.htm">c++</a>
                        <div>模板如何提升工业代码复用性实战项目:创建通用【工业设备容器】模板类类模板的定义与实例化模板参数默认值#include#includeusingnamespacestd;templateclassIndustrialContainer{private:Tdata;public:IndustrialContainer(Td):data(d){}voiddisplay(){coutic1(100);//</div>
                    </li>
                    <li><a href="/article/1895047204045910016.htm"
                           title="Vue学习教程-16html标签元素绑定事件" target="_blank">Vue学习教程-16html标签元素绑定事件</a>
                        <span class="text-muted">番茄番茄君</span>
<a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>文章目录前言一、表单数据绑定事件二、多媒体元素绑定1.图片img和视频元素video三、容器元素绑定事件前言在Vue中,你可以通过v-on指令(或在Vue2.x中简写为@)来绑定事件。这种方式允许你监听DOM事件,并在触发时执行一些JavaScript代码。常见的元素主要是表单数据元素、多媒体元素和容器元素。一、表单数据绑定事件常见的表单数据元素1.文本输入框元素3.多选框元素4.下拉框元素5.按</div>
                    </li>
                    <li><a href="/article/1895046698795855872.htm"
                           title="作为一名测试工程师如何学习Kubernetes(k8s)技能" target="_blank">作为一名测试工程师如何学习Kubernetes(k8s)技能</a>
                        <span class="text-muted">网络安全小宇哥</span>
<a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/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/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/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/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/dubbo/1.htm">dubbo</a>
                        <div>前言Kubernetes(K8s)作为云原生时代的关键技术之一,对于运维工程师、开发工程师以及测试工程师来说,都是一门需要掌握的重要技术。作为一名软件测试工程师,学习Kubernetes是一个有助于提升自动化测试、容器化测试以及云原生应用测试能力的重要过程。以下是一个系统性的学习路径和建议:一、了解基础概念1)容器技术:学习Docker等容器技术的基础知识,了解容器的基本概念、镜像、容器运行与管理</div>
                    </li>
                    <li><a href="/article/1895035982181363712.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/%E8%B4%AA%E5%BF%83%E7%AE%97%E6%B3%95/1.htm">贪心算法</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>深入理解Kubernetes命名空间:高效管理与隔离资源的关键目录深入理解Kubernetes命名空间:高效管理与隔离资源的关键什么是命名空间?命名空间的作用1.资源隔离2.多租户支持3.资源管理和策略控制4.简化管理创建和使用命名空间命名空间与集群中的其他资源结语在Kubernetes(k8s)中,命名空间(Namespace)是资源隔离和组织管理的核心概念之一。本文将详细探讨命名空间的作用,以</div>
                    </li>
                    <li><a href="/article/1895026267384770560.htm"
                           title="Pandas使用" target="_blank">Pandas使用</a>
                        <span class="text-muted">Zhang_newbie</span>
<a class="tag" taget="_blank" href="/search/pandas/1.htm">pandas</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a>
                        <div>文章目录安装pandas内置数据结构SeriesDataFrameSeries创建Series对象使用有序一元容器对象创建ndarray对象创建字典对象创建标量创建Series常用属性Series常用方法head()和tail()isnull()和notnull()DataFarme创建DataFarmed对象列表创建字典创建Series创建列索引使用获取数据添加数据修改数据行索引操作loc方法i</div>
                    </li>
                    <li><a href="/article/1894996503253020672.htm"
                           title="Kubernetes 从入门到精通:解锁容器编排的终极指南 [特殊字符]" target="_blank">Kubernetes 从入门到精通:解锁容器编排的终极指南 [特殊字符]</a>
                        <span class="text-muted">a小胡哦</span>
<a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a>
                        <div>为什么需要Kubernetes?Kubernetes(简称K8s)是容器编排领域的王者,它能帮你:自动扩缩容:流量激增时自动扩展应用实例(HorizontalPodAutoscaler)自愈能力:崩溃的容器秒级重启,节点故障自动迁移(Self-Healing设计)服务发现:动态管理微服务通信(Service机制)存储编排:一键挂载云存储/本地磁盘(PersistentVolumes)跨环境部署:一</div>
                    </li>
                    <li><a href="/article/1894977597553569792.htm"
                           title="2025/2/27 上午《尚硅谷》——spring中bean的作用域(代码演示实例)" target="_blank">2025/2/27 上午《尚硅谷》——spring中bean的作用域(代码演示实例)</a>
                        <span class="text-muted">ㅤwisdom</span>
<a class="tag" taget="_blank" href="/search/Spring%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/1.htm">Spring学习笔记</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>SpringBean的作用域(Scope)1.Singleton(单例)含义:在SpringIoC容器中,Bean的对象始终为单实例。创建时机:IoC容器初始化时创建。特点:所有请求该Bean的地方都会返回同一个实例。适用于无状态的Bean,例如工具类、配置类等。spring-scope.xml代码:定义Bean:使用标签定义一个Bean。id="student":指定Bean的唯一标识符,用于在</div>
                    </li>
                                <li><a href="/article/71.htm"
                                       title="Linux的Initrd机制" target="_blank">Linux的Initrd机制</a>
                                    <span class="text-muted">被触发</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                                    <div>Linux 的 initrd 技术是一个非常普遍使用的机制,linux2.6 内核的 initrd 的文件格式由原来的文件系统镜像文件转变成了 cpio 格式,变化不仅反映在文件格式上, linux 内核对这两种格式的 initrd 的处理有着截然的不同。本文首先介绍了什么是 initrd 技术,然后分别介绍了 Linux2.4 内核和 2.6 内核的 initrd 的处理流程。最后通过对 Lin</div>
                                </li>
                                <li><a href="/article/198.htm"
                                       title="maven本地仓库路径修改" target="_blank">maven本地仓库路径修改</a>
                                    <span class="text-muted">bitcarter</span>
<a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a>
                                    <div>默认maven本地仓库路径:C:\Users\Administrator\.m2 
 
修改maven本地仓库路径方法: 
    
1.打开E:\maven\apache-maven-2.2.1\conf\settings.xml 
    
2.找到 
       </div>
                                </li>
                                <li><a href="/article/325.htm"
                                       title="XSD和XML中的命名空间" target="_blank">XSD和XML中的命名空间</a>
                                    <span class="text-muted">darrenzhu</span>
<a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a><a class="tag" taget="_blank" href="/search/xsd/1.htm">xsd</a><a class="tag" taget="_blank" href="/search/schema/1.htm">schema</a><a class="tag" taget="_blank" href="/search/namespace/1.htm">namespace</a><a class="tag" taget="_blank" href="/search/%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4/1.htm">命名空间</a>
                                    <div>http://www.360doc.com/content/12/0418/10/9437165_204585479.shtml 

http://blog.csdn.net/wanghuan203/article/details/9203621 

http://blog.csdn.net/wanghuan203/article/details/9204337 
 

http://www.cn</div>
                                </li>
                                <li><a href="/article/452.htm"
                                       title="Java 求素数运算" target="_blank">Java 求素数运算</a>
                                    <span class="text-muted">周凡杨</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E7%B4%A0%E6%95%B0/1.htm">素数</a>
                                    <div>网络上对求素数之解数不胜数,我在此总结归纳一下,同时对一些编码,加以改进,效率有成倍热提高。   
第一种:    
  
原理: 6N(+-)1法              任何一个自然数,总可以表示成为如下的形式之一: 6N,6N+1,6N+2,6N+3,6N+4,6N+5 (N=0,1,2,…)    </div>
                                </li>
                                <li><a href="/article/579.htm"
                                       title="java 单例模式" target="_blank">java 单例模式</a>
                                    <span class="text-muted">g21121</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>想必单例模式大家都不会陌生,有如下两种方式来实现单例模式: 
  
class Singleton {
  private static Singleton instance=new Singleton();
  private Singleton(){}
  static Singleton getInstance() {
      return instance;
  }</div>
                                </li>
                                <li><a href="/article/706.htm"
                                       title="Linux下Mysql源码安装" target="_blank">Linux下Mysql源码安装</a>
                                    <span class="text-muted">510888780</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a>
                                    <div>1.假设已经有mysql-5.6.23-linux-glibc2.5-x86_64.tar.gz 
 
(1)创建mysql的安装目录及数据库存放目录       
解压缩下载的源码包,目录结构,特殊指定的目录除外: 
          </div>
                                </li>
                                <li><a href="/article/833.htm"
                                       title="32位和64位操作系统" target="_blank">32位和64位操作系统</a>
                                    <span class="text-muted">墙头上一根草</span>
<a class="tag" taget="_blank" href="/search/32%E4%BD%8D%E5%92%8C64%E4%BD%8D%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/1.htm">32位和64位操作系统</a>
                                    <div>32位和64位操作系统是指:CPU一次处理数据的能力是32位还是64位。现在市场上的CPU一般都是64位的,但是这些CPU并不是真正意义上的64 位CPU,里面依然保留了大部分32位的技术,只是进行了部分64位的改进。32位和64位的区别还涉及了内存的寻址方面,32位系统的最大寻址空间是2 的32次方= 4294967296(bit)= 4(GB)左右,而64位系统的最大寻址空间的寻址空间则达到了</div>
                                </li>
                                <li><a href="/article/960.htm"
                                       title="我的spring学习笔记10-轻量级_Spring框架" target="_blank">我的spring学习笔记10-轻量级_Spring框架</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/Spring+3/1.htm">Spring 3</a>
                                    <div>一、问题提问: 
 
    → 请简单介绍一下什么是轻量级? 
 
    轻量级(Leightweight)是相对于一些重量级的容器来说的,比如Spring的核心是一个轻量级的容器,Spring的核心包在文件容量上只有不到1M大小,使用Spring核心包所需要的资源也是很少的,您甚至可以在小型设备中使用Spring。 
 
 </div>
                                </li>
                                <li><a href="/article/1087.htm"
                                       title="mongodb 环境搭建及简单CURD" target="_blank">mongodb 环境搭建及简单CURD</a>
                                    <span class="text-muted">antlove</span>
<a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/Install/1.htm">Install</a><a class="tag" taget="_blank" href="/search/curd/1.htm">curd</a><a class="tag" taget="_blank" href="/search/NoSQL/1.htm">NoSQL</a><a class="tag" taget="_blank" href="/search/mongo/1.htm">mongo</a>
                                    <div>一 搭建mongodb环境 
1. 在mongo官网下载mongodb 
2. 在本地创建目录 "D:\Program Files\mongodb-win32-i386-2.6.4\data\db" 
3. 运行mongodb服务 [mongod.exe --dbpath "D:\Program Files\mongodb-win32-i386-2.6.4\data\</div>
                                </li>
                                <li><a href="/article/1214.htm"
                                       title="数据字典和动态视图" target="_blank">数据字典和动态视图</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%AD%97%E5%85%B8/1.htm">数据字典</a><a class="tag" taget="_blank" href="/search/%E5%8A%A8%E6%80%81%E8%A7%86%E5%9B%BE/1.htm">动态视图</a><a class="tag" taget="_blank" href="/search/%E7%B3%BB%E7%BB%9F%E5%92%8C%E5%AF%B9%E8%B1%A1%E6%9D%83%E9%99%90/1.htm">系统和对象权限</a>
                                    <div>数据字典(data dictionary)是 Oracle 数据库的一个重要组成部分,这是一组用于记录数据库信息的只读(read-only)表。随着数据库的启动而启动,数据库关闭时数据字典也关闭   数据字典中包含 
  
 
 数据库中所有方案对象(schema object)的定义(包括表,视图,索引,簇,同义词,序列,过程,函数,包,触发器等等) 
 数据库为一</div>
                                </li>
                                <li><a href="/article/1341.htm"
                                       title="多线程编程一般规则" target="_blank">多线程编程一般规则</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/thread/1.htm">thread</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/java%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">java多线程</a>
                                    <div>       如果两个工两个以上的线程都修改一个对象,那么把执行修改的方法定义为被同步的,如果对象更新影响到只读方法,那么只读方法也要定义成同步的。 
       不要滥用同步。如果在一个对象内的不同的方法访问的不是同一个数据,就不要将方法设置为synchronized的。 
</div>
                                </li>
                                <li><a href="/article/1468.htm"
                                       title="将文件或目录拷贝到另一个Linux系统的命令scp" target="_blank">将文件或目录拷贝到另一个Linux系统的命令scp</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/unix/1.htm">unix</a><a class="tag" taget="_blank" href="/search/scp/1.htm">scp</a>
                                    <div>一.功能说明        scp就是security copy,用于将文件或者目录从一个Linux系统拷贝到另一个Linux系统下。scp传输数据用的是SSH协议,保证了数据传输的安全,其格式如下:        scp 远程用户名@IP地址:文件的绝对路径</div>
                                </li>
                                <li><a href="/article/1595.htm"
                                       title="【持久化框架MyBatis3五】MyBatis3一对多关联查询" target="_blank">【持久化框架MyBatis3五】MyBatis3一对多关联查询</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/Mybatis3/1.htm">Mybatis3</a>
                                    <div>以教员和课程为例介绍一对多关联关系,在这里认为一个教员可以叫多门课程,而一门课程只有1个教员教,这种关系在实际中不太常见,通过教员和课程是多对多的关系。 
  示例数据:
  
  
地址表: 
  
CREATE TABLE ADDRESSES 
(
  ADDR_ID INT(11) NOT NULL AUTO_INCREMENT,
  STREET VAR</div>
                                </li>
                                <li><a href="/article/1722.htm"
                                       title="cookie状态判断引发的查找问题" target="_blank">cookie状态判断引发的查找问题</a>
                                    <span class="text-muted">bitcarter</span>
<a class="tag" taget="_blank" href="/search/form/1.htm">form</a><a class="tag" taget="_blank" href="/search/cgi/1.htm">cgi</a>
                                    <div>先说一下我们的业务背景: 
1.前台将图片和文本通过form表单提交到后台,图片我们都做了base64的编码,并且前台图片进行了压缩 
2.form中action是一个cgi服务 
3.后台cgi服务同时供PC,H5,APP 
4.后台cgi中调用公共的cookie状态判断方法(公共的,大家都用,几年了没有问题) 
 
问题:(折腾两天。。。。) 
1.PC端cgi服务正常调用,cookie判断没</div>
                                </li>
                                <li><a href="/article/1849.htm"
                                       title="通过Nginx,Tomcat访问日志(access log)记录请求耗时" target="_blank">通过Nginx,Tomcat访问日志(access log)记录请求耗时</a>
                                    <span class="text-muted">ronin47</span>

                                    <div>一、Nginx通过$upstream_response_time $request_time统计请求和后台服务响应时间 
nginx.conf使用配置方式: 
log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_r</div>
                                </li>
                                <li><a href="/article/1976.htm"
                                       title="java-67- n个骰子的点数。 把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。" target="_blank">java-67- n个骰子的点数。 把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>

public class ProbabilityOfDice {

	/**
	 * Q67 n个骰子的点数
	 * 把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。
	 * 在以下求解过程中,我们把骰子看作是有序的。
	 * 例如当n=2时,我们认为(1,2)和(2,1)是两种不同的情况
	 */
	private stati</div>
                                </li>
                                <li><a href="/article/2103.htm"
                                       title="看别人的博客,觉得心情很好" target="_blank">看别人的博客,觉得心情很好</a>
                                    <span class="text-muted">Cb123456</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%9A%E5%AE%A2/1.htm">博客</a><a class="tag" taget="_blank" href="/search/%E5%BF%83%E6%83%85/1.htm">心情</a>
                                    <div>   以为写博客,就是总结,就和日记一样吧,同时也在督促自己。今天看了好长时间博客: 
   职业规划: 
   http://www.iteye.com/blogs/subjects/zhiyeguihua 
  
   android学习: 
   1.http://byandby.i</div>
                                </li>
                                <li><a href="/article/2230.htm"
                                       title="[JWFD开源工作流]尝试用原生代码引擎实现循环反馈拓扑分析" target="_blank">[JWFD开源工作流]尝试用原生代码引擎实现循环反馈拓扑分析</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C%E6%B5%81/1.htm">工作流</a>
                                    <div> 
    我们已经不满足于仅仅跳跃一次,通过对引擎的升级,今天我测试了一下循环反馈模式,大概跑了200圈,引擎报一个溢出错误 
 
     在一个流程图的结束节点中嵌入一段方程,每次引擎运行到这个节点的时候,通过实时编译器GM模块,计算这个方程,计算结果与预设值进行比较,符合条件则跳跃到开始节点,继续新一轮拓扑分析,直到遇到</div>
                                </li>
                                <li><a href="/article/2357.htm"
                                       title="JS常用的事件及方法" target="_blank">JS常用的事件及方法</a>
                                    <span class="text-muted">cwqcwqmax9</span>
<a class="tag" taget="_blank" href="/search/js/1.htm">js</a>
                                    <div>事件 描述 
onactivate 当对象设置为活动元素时触发。 
onafterupdate 当成功更新数据源对象中的关联对象后在数据绑定对象上触发。 
onbeforeactivate 对象要被设置为当前元素前立即触发。 
onbeforecut 当选中区从文档中删除之前在源对象触发。 
onbeforedeactivate 在 activeElement 从当前对象变为父文档其它对象之前立即</div>
                                </li>
                                <li><a href="/article/2484.htm"
                                       title="正则表达式验证日期格式" target="_blank">正则表达式验证日期格式</a>
                                    <span class="text-muted">dashuaifu</span>
<a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a><a class="tag" taget="_blank" href="/search/IT%E5%85%B6%E5%AE%83/1.htm">IT其它</a><a class="tag" taget="_blank" href="/search/java%E5%85%B6%E5%AE%83/1.htm">java其它</a>
                                    <div>                 正则表达式验证日期格式

function isDate(d){
 var v = d.match(/^(\d{4})-(\d{1,2})-(\d{1,2})$/i);
 if(!v) {
  this.focus();
  return false;
 }
}
<input value="2000-8-8" onblu</div>
                                </li>
                                <li><a href="/article/2611.htm"
                                       title="Yii CModel.rules() 方法 、validate预定义完整列表、以及说说验证" target="_blank">Yii CModel.rules() 方法 、validate预定义完整列表、以及说说验证</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/yii/1.htm">yii</a>
                                    <div>public array rules () {return} array 要调用 validate() 时应用的有效性规则。 返回属性的有效性规则。声明验证规则,应重写此方法。 每个规则是数组具有以下结构:array('attribute list', 'validator name', 'on'=>'scenario name', ...validation </div>
                                </li>
                                <li><a href="/article/2738.htm"
                                       title="UITextAttributeTextColor = deprecated in iOS 7.0" target="_blank">UITextAttributeTextColor = deprecated in iOS 7.0</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a>
                                    <div>In this lesson we used the key "UITextAttributeTextColor" to change the color of the UINavigationBar appearance to white. This prompts a warning "first deprecated in iOS 7.0." 
Ins</div>
                                </li>
                                <li><a href="/article/2865.htm"
                                       title="判断一个数是质数的几种方法" target="_blank">判断一个数是质数的几种方法</a>
                                    <span class="text-muted">EmmaZhao</span>
<a class="tag" taget="_blank" href="/search/Math/1.htm">Math</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                                    <div>质数也叫素数,是只能被1和它本身整除的正整数,最小的质数是2,目前发现的最大的质数是p=2^57885161-1【注1】。 
判断一个数是质数的最简单的方法如下: 
 

def isPrime1(n):
	for i in range(2, n):
		if n % i == 0:
			return False
	return True
 
但是在上面的方法中有一些冗余的计算,所以</div>
                                </li>
                                <li><a href="/article/2992.htm"
                                       title="SpringSecurity工作原理小解读" target="_blank">SpringSecurity工作原理小解读</a>
                                    <span class="text-muted">坏我一锅粥</span>
<a class="tag" taget="_blank" href="/search/SpringSecurity/1.htm">SpringSecurity</a>
                                    <div> 
   SecurityContextPersistenceFilter 
   ConcurrentSessionFilter 
   WebAsyncManagerIntegrationFilter 
   HeaderWriterFilter 
   CsrfFilter 
   LogoutFilter 
   Use</div>
                                </li>
                                <li><a href="/article/3119.htm"
                                       title="JS实现自适应宽度的Tag切换" target="_blank">JS实现自适应宽度的Tag切换</a>
                                    <span class="text-muted">ini</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a>
                                    <div>效果体验:http://hovertree.com/texiao/js/3.htm 
  
该效果使用纯JavaScript代码,实现TAB页切换效果,TAB标签根据内容自适应宽度,点击TAB标签切换内容页。 
HTML文件代码: 
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"</div>
                                </li>
                                <li><a href="/article/3246.htm"
                                       title="Hbase Rest API : 数据查询" target="_blank">Hbase Rest API : 数据查询</a>
                                    <span class="text-muted">kane_xie</span>
<a class="tag" taget="_blank" href="/search/REST/1.htm">REST</a><a class="tag" taget="_blank" href="/search/hbase/1.htm">hbase</a>
                                    <div>hbase(hadoop)是用java编写的,有些语言(例如python)能够对它提供良好的支持,但也有很多语言使用起来并不是那么方便,比如c#只能通过thrift访问。Rest就能很好的解决这个问题。Hbase的org.apache.hadoop.hbase.rest包提供了rest接口,它内嵌了jetty作为servlet容器。 
  
启动命令:./bin/hbase rest s</div>
                                </li>
                                <li><a href="/article/3373.htm"
                                       title="JQuery实现鼠标拖动元素移动位置(源码+注释)" target="_blank">JQuery实现鼠标拖动元素移动位置(源码+注释)</a>
                                    <span class="text-muted">明子健</span>
<a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/%E6%BA%90%E7%A0%81/1.htm">源码</a><a class="tag" taget="_blank" href="/search/%E6%8B%96%E5%8A%A8/1.htm">拖动</a><a class="tag" taget="_blank" href="/search/%E9%BC%A0%E6%A0%87/1.htm">鼠标</a>
                                    <div>欢迎讨论指正! 
  
print.html代码: 
<!DOCTYPE html>
<html>
<head>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
<title>发票打印</title>
&l</div>
                                </li>
                                <li><a href="/article/3500.htm"
                                       title="Postgresql 连表更新字段语法 update" target="_blank">Postgresql 连表更新字段语法 update</a>
                                    <span class="text-muted">qifeifei</span>
<a class="tag" taget="_blank" href="/search/PostgreSQL/1.htm">PostgreSQL</a>
                                    <div>下面这段sql本来目的是想更新条件下的数据,可是这段sql却更新了整个表的数据。sql如下: 
UPDATE tops_visa.visa_order
SET op_audit_abort_pass_date = now()
FROM
	tops_visa.visa_order as  t1
INNER JOIN tops_visa.visa_visitor as t2 
ON t1. </div>
                                </li>
                                <li><a href="/article/3627.htm"
                                       title="将redis,memcache结合使用的方案?" target="_blank">将redis,memcache结合使用的方案?</a>
                                    <span class="text-muted">tcrct</span>
<a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/cache/1.htm">cache</a>
                                    <div>公司架构上使用了阿里云的服务,由于阿里的kvstore收费相当高,打算自建,自建后就需要自己维护,所以就有了一个想法,针对kvstore(redis)及ocs(memcache)的特点,想自己开发一个cache层,将需要用到list,set,map等redis方法的继续使用redis来完成,将整条记录放在memcache下,即findbyid,save等时就memcache,其它就对应使用redi</div>
                                </li>
                                <li><a href="/article/3754.htm"
                                       title="开发中遇到的诡异的bug" target="_blank">开发中遇到的诡异的bug</a>
                                    <span class="text-muted">wudixiaotie</span>
<a class="tag" taget="_blank" href="/search/bug/1.htm">bug</a>
                                    <div>今天我们服务器组遇到个问题: 
我们的服务是从Kafka里面取出数据,然后把offset存储到ssdb中,每个topic和partition都对应ssdb中不同的key,服务启动之后,每次kafka数据更新我们这边收到消息,然后存储之后就发现ssdb的值偶尔是-2,这就奇怪了,最开始我们是在代码中打印存储的日志,发现没什么问题,后来去查看ssdb的日志,才发现里面每次set的时候都会对同一个key</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>