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/1773606223896182784.htm"
                           title="极狐GitLab 论坛 2.0 全新上线,可以在论坛上查找与 GitLab 相关的问题了~" target="_blank">极狐GitLab 论坛 2.0 全新上线,可以在论坛上查找与 GitLab 相关的问题了~</a>
                        <span class="text-muted">极小狐</span>
<a class="tag" taget="_blank" href="/search/gitlab/1.htm">gitlab</a><a class="tag" taget="_blank" href="/search/%E6%9E%81%E7%8B%90GitLab/1.htm">极狐GitLab</a><a class="tag" taget="_blank" href="/search/devops/1.htm">devops</a><a class="tag" taget="_blank" href="/search/GitLab/1.htm">GitLab</a><a class="tag" taget="_blank" href="/search/ci%2Fcd/1.htm">ci/cd</a><a class="tag" taget="_blank" href="/search/devsecops/1.htm">devsecops</a><a class="tag" taget="_blank" href="/search/SCM/1.htm">SCM</a>
                        <div>安装出现依赖错误?版本升级搞不定?遇到422、500就懵逼了?不知道某个功能是免费or付费?……使用GitLab这种全球顶级的DevOps平台进行软件研发时,总会遇到一些困惑,想跟专业的技术人员快速交流以便获得答案,同时又想把这些问题沉淀下来以帮助他人?有这种赠人玫瑰,手有余香的解决方案吗?答案肯定有:论坛!!!论坛——一个各路大神聚集的地方,一个可以解惑答疑问道的地方。解惑:搜索与自己问题相同或</div>
                    </li>
                    <li><a href="/article/1773520124586819584.htm"
                           title="helm 部署 Kube-Prometheus + Grafana + 钉钉告警部署 Kube-Prometheus" target="_blank">helm 部署 Kube-Prometheus + Grafana + 钉钉告警部署 Kube-Prometheus</a>
                        <span class="text-muted">zxj19880502</span>
<a class="tag" taget="_blank" href="/search/grafana/1.htm">grafana</a><a class="tag" taget="_blank" href="/search/prometheus/1.htm">prometheus</a>
                        <div>背景角色IPK8S版本容器运行时k8s-master-1172.16.16.108v1.24.1containerd://1.6.8k8s-node-1172.16.16.109v1.24.1containerd://1.6.8k8s-node-2172.16.16.110v1.24.1containerd://1.6.8安装kube-prometheusmkdir-p/data/yaml/kub</div>
                    </li>
                    <li><a href="/article/1773489909345091584.htm"
                           title="docker基础(一)" target="_blank">docker基础(一)</a>
                        <span class="text-muted">运维搬运工</span>
<a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8-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><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>相关概念介绍Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖到一个可移植的容器中,然后发布到任何流行的linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,互相之间不会有任何接口。Docker有几个重要概念:dockerfile,配置文件,用来生成dockerimagedockerimage,交付部署的最小单元docker命令与API,定义命令与接口,支持第三方系统集</div>
                    </li>
                    <li><a href="/article/1773366674838323200.htm"
                           title="k8s入门到实战(十)—— CronJob详细介绍及使用示例" target="_blank">k8s入门到实战(十)—— CronJob详细介绍及使用示例</a>
                        <span class="text-muted">一弓虽</span>
<a class="tag" taget="_blank" href="/search/k8s%E5%AD%A6%E4%B9%A0/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>CronJob什么是CronJob在k8s中,CronJob是一种用于定期执行任务的资源对象。它基于Cron表达式,允许您在指定的时间间隔内自动运行容器化的任务。CronJob可以定义以下属性:schedule:指定任务执行的时间表,使用标准的Cron表达式语法。例如,“0****”表示每小时执行一次任务。jobTemplate:定义要执行的任务的模板,通常是一个Pod模板。这个模板包含了任务所需</div>
                    </li>
                    <li><a href="/article/1772775775930482688.htm"
                           title="【科学小论文】水的物质形态的三种变化" target="_blank">【科学小论文】水的物质形态的三种变化</a>
                        <span class="text-muted">橄榄树松</span>

                        <div>水的物质形态的三种变化张岩松众所周知,水这种物质有三个形态变化:第一个是固体,也就是冰块;第二个是液体,也就是普通的水;还有一种是气体,它存在于空气中,一般情况下是肉眼看不到的。今天,我就来给大家讲讲水的三种形态变化的原因。有人问了,水蒸气是气体还是液体?主张是气体的人说,反正名字里有一个气字,而且把水加热也有气,能从容器里面冒出来。但是主张是液体的人说气是看不见的,如果你把手对着水蒸气,你的手一</div>
                    </li>
                    <li><a href="/article/1772764949068709888.htm"
                           title="了解什么是Docker" target="_blank">了解什么是Docker</a>
                        <span class="text-muted">黑风风</span>
<a class="tag" taget="_blank" href="/search/DevOps%E5%AD%A6%E4%B9%A0/1.htm">DevOps学习</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/eureka/1.htm">eureka</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a>
                        <div>了解什么是DockerDocker是一个开源的容器化平台,它使得开发者可以将应用程序及其依赖项打包到一个轻量级的、可移植的容器中。这些容器可以在任何支持Docker的系统上运行,确保了应用程序在不同环境之间的一致性和可移植性。,同时享受隔离性和轻量级的优势。Docker的核心组件Docker引擎Docker引擎是一个客户端-服务器应用程序,包括一个长期运行的守护进程(dockerd)、一个REST</div>
                    </li>
                    <li><a href="/article/1772649898592763904.htm"
                           title="部署es集群" target="_blank">部署es集群</a>
                        <span class="text-muted">liushaojiax</span>
<a class="tag" taget="_blank" href="/search/elasticsearch/1.htm">elasticsearch</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a>
                        <div>我们会在单机上利用docker容器运行多个es实例来模拟es集群。不过生产环境推荐大家每一台服务节点仅部署一个es的实例。部署es集群可以直接使用docker-compose来完成,但这要求你的Linux虚拟机至少有4G的内存空间创建es集群首先编写一个docker-compose文件,内容如下:version:'2.2'services:es01:image:elasticsearch:7.12</div>
                    </li>
                    <li><a href="/article/1772365540988354560.htm"
                           title="mineadmin使用docker启动方式" target="_blank">mineadmin使用docker启动方式</a>
                        <span class="text-muted">qq_38812523</span>
<a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a>
                        <div>找个目录,git下来mineadmin代码,在根目录,创建文件名docker-compose.yml然后复制下面代码version:'3'services:#首先下载前端,https://gitee.com/mineadmin/mineadmin-vue#在后端根目录建立mine-ui目录,把前端文件复制过来。#容器内访问宿主机的地址用:host.docker.internal#宿主机也可以在ho</div>
                    </li>
                    <li><a href="/article/1772295559269384192.htm"
                           title="RabbitMQ的安装" target="_blank">RabbitMQ的安装</a>
                        <span class="text-muted">白泽27</span>
<a class="tag" taget="_blank" href="/search/rabbitmq/1.htm">rabbitmq</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a>
                        <div>典型应用场景:异步处理。把消息放入消息中间件中,等到需要的时候再去处理。流量削峰。例如秒杀活动,在短时间内访问量急剧增加,使用消息队列,当消息队列满了就拒绝响应,跳转到错误页面,这样就可以使得系统不会因为超负载而崩溃Linux下安装#拉取镜像dockerpullrabbitmq:3.8-management#创建容器启动dockerrun-d--restart=always-p5672:5672-</div>
                    </li>
                    <li><a href="/article/1772226456160632832.htm"
                           title="Devops-02-Jpom 简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件" target="_blank">Devops-02-Jpom 简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件</a>
                        <span class="text-muted">老马啸西风</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>拓展阅读Devops-01-devops是什么?Devops-02-Jpom简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件代码质量管理SonarQube-01-入门介绍项目管理平台-01-jira入门介绍缺陷跟踪管理系统,为针对缺陷管理、任务追踪和项目管理的商业性应用软件项目管理平台-01-Phabricator入门介绍一套集成的强大工具,帮助公司构建更高质量的软件持续集成平台01je</div>
                    </li>
                    <li><a href="/article/1772217644963921920.htm"
                           title="今天简单聊聊容器化" target="_blank">今天简单聊聊容器化</a>
                        <span class="text-muted">第十个灵魂</span>
<a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/K8S/1.htm">K8S</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%95%B0%E5%AD%97%E5%8C%96%E8%BD%AC%E5%9E%8B/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/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a>
                        <div>什么是容器化容器化(Containerization)是一种软件开发和部署的方法,其核心思想是将应用程序及其所有依赖项打包到一个独立的运行环境中,这个环境被称为容器。容器化技术使得应用程序可以在不同的计算环境中以一致的方式运行,从而提供了更高的可移植性、可靠性和可扩展性。容器化的优势可移植性:容器可以轻松地在不同的环境中运行,而无需进行任何修改。资源隔离:每个容器都拥有自己的资源,并与其他容器隔离</div>
                    </li>
                    <li><a href="/article/1772081453992050688.htm"
                           title="【WPF应用4】WPF界面对象编辑" target="_blank">【WPF应用4】WPF界面对象编辑</a>
                        <span class="text-muted">白话Learning</span>
<a class="tag" taget="_blank" href="/search/WPF/1.htm">WPF</a><a class="tag" taget="_blank" href="/search/wpf/1.htm">wpf</a>
                        <div>简介WPF(WindowsPresentationFoundation)是.NET框架的一部分,它为开发人员提供了一个用于构建桌面应用程序用户界面的强大平台。WPF界面对象编辑是指在WPF应用程序中创建、设计和修改用户界面元素的过程。这些界面对象不仅包括基本的控件如按钮、文本框和标签,还包括更复杂的布局容器如面板和堆叠面板,以及自定义控件和视觉效果。WPF界面对象编辑的功能和灵活性使得它成为开发富</div>
                    </li>
                    <li><a href="/article/1772005170595561472.htm"
                           title="Docker 安装mysql 主从复制" target="_blank">Docker 安装mysql 主从复制</a>
                        <span class="text-muted">dylan_2017</span>
<a class="tag" taget="_blank" href="/search/Docker%E9%AB%98%E7%BA%A7/1.htm">Docker高级</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</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>目录1MySql主从复制简介1.1主从复制的概念1.2主从复制的作用2.搭建主从复制2.1pullmysql镜像2.2新建主服务器容器实例33072.2.1master创建my.cnf2.2.2重启master2.2.3进入mysql容器,创建同步用户2.3新建从服务器容器实例33082.3.1slave创建my.cnf2.3.2重启slave实例2.3.3在master中查看主从同步状态2.3.</div>
                    </li>
                    <li><a href="/article/1771924358550323200.htm"
                           title="突破编程_C++_面试(STL 编程 stack)" target="_blank">突破编程_C++_面试(STL 编程 stack)</a>
                        <span class="text-muted">breakthrough_01</span>
<a class="tag" taget="_blank" href="/search/%E7%AA%81%E7%A0%B4%E7%BC%96%E7%A8%8B_C%2B%2B_%E9%9D%A2%E8%AF%95/1.htm">突破编程_C++_面试</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a>
                        <div>1请简述std::stack在C++STL中的基本功能和使用场景std::stack在C++STL(标准模板库)中是一个容器适配器,专门用于实现后进先出(LIFO,Last-In-First-Out)的数据结构。其基本功能和使用场景如下:基本功能:push(element):向栈顶添加元素。pop():移除栈顶元素。如果栈为空,则此操作可能会导致未定义行为。top():返回栈顶元素的引用,但不移除</div>
                    </li>
                    <li><a href="/article/1771872627095306240.htm"
                           title="使用 Redux 管理 React 应用状态" target="_blank">使用 Redux 管理 React 应用状态</a>
                        <span class="text-muted">JudithHuang</span>
<a class="tag" taget="_blank" href="/search/React/1.htm">React</a><a class="tag" taget="_blank" href="/search/%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E6%94%BE%E5%BC%83/1.htm">从入门到放弃</a><a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>使用Redux管理React应用状态在复杂的React应用中,管理组件状态变得越来越复杂,这时候引入Redux可以帮助我们更好地管理状态。Redux是一个可预测状态容器,它可以帮助我们统一管理应用的状态,使得状态变化更加可控。本文将介绍如何在React应用中使用Redux。Redux简介Redux是一个状态管理库,它提供了一种可预测的状态管理方案。Redux的核心思想是将应用的状态存储在一个单一的</div>
                    </li>
                    <li><a href="/article/1771560968229289984.htm"
                           title="使用 BPF 监控 Kubernetes 集群(k8s BPF 工具 kubectl-trace认知" target="_blank">使用 BPF 监控 Kubernetes 集群(k8s BPF 工具 kubectl-trace认知</a>
                        <span class="text-muted">山河已无恙</span>
<a class="tag" taget="_blank" href="/search/K8s%26amp%3Bkubelct/1.htm">K8s&kubelct</a><a class="tag" taget="_blank" href="/search/%E6%8F%92%E4%BB%B6/1.htm">插件</a><a class="tag" taget="_blank" href="/search/BPF/1.htm">BPF</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>写在前面学习中遇到,整理分享,博文内容涉及:kubectl-trace安装,在节点,容器中如何使用需要注意的问题:job闪完成,一直Pending状态解决理解不足小伙伴帮忙指正不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情的时候,眼前的风景已经和从前不一样了。——村上春树kubectl-trace安装┌──[root@vms100.liruilongs.github.io]-[~/ansi</div>
                    </li>
                    <li><a href="/article/1770887425384579072.htm"
                           title="Docker进阶教程 - 3 虚悬镜像" target="_blank">Docker进阶教程 - 3 虚悬镜像</a>
                        <span class="text-muted">山石岐渡</span>
<a class="tag" taget="_blank" href="/search/Docker%E8%BF%9B%E9%98%B6%E6%95%99%E7%A8%8B/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><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>更好的阅读体验:点这里(www.doubibiji.com)3虚悬镜像什么是虚悬镜像(danglingimage)?镜像名、标签都是的镜像。通常在构建的过程中,取消构建、构建出现问题的时候,会出现异常的镜像,这种镜像没有名称和标签。因此,这些镜像被称为虚悬镜像,因为它们“悬浮”在Docker中,没有被任何容器所使用,也不会被Docker清理工具删除。虚悬镜像的产生概率不高,但一旦生成,可能会对系统</div>
                    </li>
                    <li><a href="/article/1770356457712189440.htm"
                           title="05. spring-boot对spring-mvc的自动配置" target="_blank">05. spring-boot对spring-mvc的自动配置</a>
                        <span class="text-muted">马晓钧</span>

                        <div>spring-mvc的自动配置viewResolver:视图解析器:根据方法的返回值得到视图对象(View)。//会将容器中已有的ViewResolver和自己定义的ViewResolver全部add进去ContentNegotiatingViewResolver自定义视图解析器://需要实现ViewResolver,并注入进容器@ConfigurationpublicclassViewConfi</div>
                    </li>
                    <li><a href="/article/1770250983599833088.htm"
                           title="Docker 命令大全" target="_blank">Docker 命令大全</a>
                        <span class="text-muted">箭头大人</span>
<a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%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>Docker命令大全容器生命周期管理runstart/stop/restartkillrmpause/unpausecreateexec容器操作psinspecttopattacheventslogswaitexportportstats容器rootfs命令commitcpdiff镜像仓库loginpullpushsearch本地镜像管理imagesrmitagbuildhistorysavelo</div>
                    </li>
                    <li><a href="/article/1770234242572288000.htm"
                           title="docker批量删除容器或镜像" target="_blank">docker批量删除容器或镜像</a>
                        <span class="text-muted">wcy10086</span>
<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>删除容器停止所有容器删除所有容器,需要先停止所有运行中的容器dockerstop`dockerps-a-q`dockerps-a-q,意思是列出所有容器(包括未运行的),只显示容器编号,其中-a:显示所有的容器,包括未运行的。-q:静默模式,只显示容器编号。1.删除所有处于停止状态的容器使用以下命令删除所有处于停止状态的容器:dockercontainerprune该命令将删除所有未运行的容器,释</div>
                    </li>
                    <li><a href="/article/1770028690424528896.htm"
                           title="docker 入门教程(常用命令汇总)" target="_blank">docker 入门教程(常用命令汇总)</a>
                        <span class="text-muted">小羊Code</span>
<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><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>docker常用命令汇总1.系统启动/重启/停用docker2.docker镜像2.1查看镜像列表2.2查找镜像2.3拉取镜像2.4构建镜像2.5添加标签2.6推送镜像&镜像仓库2.7登录仓库3.docker容器3.1启动一个容器3.2启动/重启/关闭容器3.3查看容器列表3.4进入容器3.5查看docker日志1.系统启动/重启/停用dockersystemctlstartdocker#启用do</div>
                    </li>
                    <li><a href="/article/1770027807980716032.htm"
                           title="【Docker】PostgreSQL 容器化部署" target="_blank">【Docker】PostgreSQL 容器化部署</a>
                        <span class="text-muted">轻云UC</span>
<a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4%E9%83%A8%E7%BD%B2/1.htm">运维部署</a><a class="tag" taget="_blank" href="/search/postgresql/1.htm">postgresql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>PostgreSQL标准软件基于BitnamiPostgreSQL构建。当前版本为16.1.0你可以通过轻云UC部署工具直接安装部署,也可以手动按如下文档操作,该项目已经全面开源,可以从如下环境获取配置文件地址:https://gitee.com/qingplus/qingcloud-platformqinghub自动安装部署配置库连接到其他容器使用Docker容器网络,应用程序容器可以轻松访问容</div>
                    </li>
                    <li><a href="/article/1770009303005069312.htm"
                           title="【Docker】wordpress 容器化部署" target="_blank">【Docker】wordpress 容器化部署</a>
                        <span class="text-muted">轻云UC</span>
<a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4%E9%83%A8%E7%BD%B2/1.htm">运维部署</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/web/1.htm">web</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>WordPress标准软件基于Bitnamiwordpress构建。当前版本为6.4.3你可以通过轻云UC部署工具直接安装部署,也可以手动按如下文档操作,该项目已经全面开源,可以从如下环境获取配置文件地址:https://gitee.com/qingplus/qingcloud-platformqinghub自动安装部署配置库什么是WordPress?WordPress是世界上最受欢迎的博客和内容</div>
                    </li>
                    <li><a href="/article/1769965376365461504.htm"
                           title="C++面试:STL篇" target="_blank">C++面试:STL篇</a>
                        <span class="text-muted">葛雨龙</span>
<a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a>
                        <div>STL个人小结:stl是c++的标准模板库,stl6大组件:容器:存储数据,本质是类模板vector:底层是动态数组,连续内存支持随机存取,尾部增删效率高,内部增删O(n)list:底层是双链表,内存不连续,只能顺序访问,任意位置增删都是O(1)deque:整体连续,支持随机存取,首尾增删效率高,但是迭代器太复杂,所以一般只有当既要随机存取又要首尾增删采用deque。unordered_set:无</div>
                    </li>
                    <li><a href="/article/1769949010392580096.htm"
                           title="云原生周刊:Istio 加入 Phippy 家族 | 2024.3.18" target="_blank">云原生周刊:Istio 加入 Phippy 家族 | 2024.3.18</a>
                        <span class="text-muted">KubeSphere 云原生</span>
<a class="tag" taget="_blank" href="/search/k8s/1.htm">k8s</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8%E5%B9%B3%E5%8F%B0/1.htm">容器平台</a><a class="tag" taget="_blank" href="/search/kubesphere/1.htm">kubesphere</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a>
                        <div>开源项目推荐ko"ko"是一个用于构建和部署Go应用程序的简单、快速的容器镜像构建工具。它适用于那些镜像中只包含单个Go应用程序且没有或很少依赖于操作系统基础镜像的情况(例如没有cgo,没有操作系统软件包依赖)。"ko"在本地机器上通过执行"gobuild"的方式构建镜像,因此不需要安装Docker。这使得它非常适合轻量级的CI/CD场景。"ko"支持简单的YAML模板化,并且支持跨平台构建,还默</div>
                    </li>
                    <li><a href="/article/1769919937096253440.htm"
                           title="云原生部署手册01:构建k8s集群并配置持久化存储" target="_blank">云原生部署手册01:构建k8s集群并配置持久化存储</a>
                        <span class="text-muted">吴智深</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a>
                        <div>写在前面:k8s弃用docker的影响其实没那么大k8s通过dockershim对docker的支持从1.20版本后就已经移除,仅支持符合ContainerRuntimeInterface(CRI)的容器运行环境,比如containerd。containerd本身就是docker底层的容器运行环境,只不过docker在containerd的基础上增加了符合人类操作的接口。docker构建的镜像并不</div>
                    </li>
                    <li><a href="/article/1769837109247541248.htm"
                           title="css新特性?" target="_blank">css新特性?</a>
                        <span class="text-muted">一个大长腿</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>CSS(层叠样式表)作为网页样式设计的关键语言,在不断发展和更新中也引入了许多新的特性以提供更强大的样式控制和设计能力。以下是一些较新的CSS特性:CSSGrid布局:CSSGrid布局是一种二维布局系统,可以通过定义行和列来创建复杂的布局结构,实现灵活的网格布局。Flexbox布局:Flexbox是一种弹性盒子布局模型,可以实现更加简单和有效的布局方式,使得元素在容器内按照指定的规则排列和对齐。</div>
                    </li>
                    <li><a href="/article/1769812941969883136.htm"
                           title="Apache Tomcat环境搭建" target="_blank">Apache Tomcat环境搭建</a>
                        <span class="text-muted">R0ot</span>
<a class="tag" taget="_blank" href="/search/apache/1.htm">apache</a><a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>ApacheTomcat是一个开源的Servlet容器,用于运行JavaWeb应用程序。本文将详细介绍在Linux和Windows系统下如何搭建ApacheTomcat环境。一、Linux系统下搭建ApacheTomcat1.下载Tomcat首先,你需要从ApacheTomcat的官方网站下载适合Linux系统的Tomcat安装包。通常,你可以下载到.tar.gz格式的压缩包。2.解压Tomcat</div>
                    </li>
                    <li><a href="/article/1769789527355883520.htm"
                           title="tomcat调优" target="_blank">tomcat调优</a>
                        <span class="text-muted">Liu.Yongqian</span>
<a class="tag" taget="_blank" href="/search/Jmeter%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95/1.htm">Jmeter性能测试</a><a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>一、tomcat线程数可以参照https://blog.csdn.net/luoyang_java/article/details/85790435Tomcat配置文件server.xml中:Connector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据;然后分配线程让Engine(也就是Servlet容器)来处理这个请求,并把产生的Request和Re</div>
                    </li>
                    <li><a href="/article/1769758561816084480.htm"
                           title="Docker介绍与使用" target="_blank">Docker介绍与使用</a>
                        <span class="text-muted">叶域</span>
<a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                        <div>Docker介绍与使用目录:一、Docker介绍1、Docker概述与安装2、Docker三要素二、Docker常用命令的使用1、镜像相关命令2、容器相关命令三、Docker实战之下载mysql、redis、zimg一、Docker介绍Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的操作系统的机器上,也能实现虚拟化。1、Docke</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>