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/1950223356833886208.htm"
                           title="CentOS容器没有ip addr命令" target="_blank">CentOS容器没有ip addr命令</a>
                        <span class="text-muted">BLZxiaopang</span>
<a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a><a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a>
                        <div>centos容器没有ip命令[root@Centos/]#ipadd-bash:ip:commandnotfound[root@Centos/]#yum-yinstallinitscripts</div>
                    </li>
                    <li><a href="/article/1950207854388506624.htm"
                           title="深入理解 Tomcat Wrapper 原理" target="_blank">深入理解 Tomcat Wrapper 原理</a>
                        <span class="text-muted">北漂老男人</span>
<a class="tag" taget="_blank" href="/search/Tomcat/1.htm">Tomcat</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>深入理解TomcatWrapper原理一、引言在Tomcat的分层容器架构中,Wrapper作为最底层的容器,专门负责管理单个Servlet的生命周期及请求分发。每一个Servlet(包括JSP、Filter等)都对应一个Wrapper。Wrapper是Servlet规范与Tomcat容器实现之间的桥梁,直接关系到请求的分发效率、Servlet的加载与重用、安全隔离等。本文将系统剖析Wrapper</div>
                    </li>
                    <li><a href="/article/1950192091439099904.htm"
                           title="K8S 常用命令全解析:高效管理容器化集群" target="_blank">K8S 常用命令全解析:高效管理容器化集群</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/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/k8s%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/1.htm">k8s常用命令</a><a class="tag" taget="_blank" href="/search/k8s%E6%9C%89%E5%93%AA%E4%BA%9B%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/1.htm">k8s有哪些常用命令</a><a class="tag" taget="_blank" href="/search/k8s%E5%91%BD%E4%BB%A4%E6%9C%89%E5%93%AA%E4%BA%9B/1.htm">k8s命令有哪些</a><a class="tag" taget="_blank" href="/search/K8S%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E6%9C%89%E5%93%AA%E4%BA%9B/1.htm">K8S常用命令有哪些</a>
                        <div>K8S常用命令全解析:高效管理容器化集群一、引言Kubernetes(K8S)作为强大的容器编排平台,其丰富的命令行工具(kubectl)为用户提供了便捷的方式来管理集群中的各种资源。熟练掌握K8S常用命令对于开发人员和运维人员至关重要,能够有效提高容器化应用的部署、监控与维护效率。本文将详细介绍一些K8S常用命令及其使用案例。二、基础资源操作命令(一)kubectlcreate功能:用于创建K8</div>
                    </li>
                    <li><a href="/article/1950186041465958400.htm"
                           title="GitLab 18.2 发布几十项与 DevSecOps 有关的功能,可升级体验【二】" target="_blank">GitLab 18.2 发布几十项与 DevSecOps 有关的功能,可升级体验【二】</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/devsecops/1.htm">devsecops</a><a class="tag" taget="_blank" href="/search/devops/1.htm">devops</a><a class="tag" taget="_blank" href="/search/ci%2Fcd/1.htm">ci/cd</a>
                        <div>沿袭我们的月度发布传统,极狐GitLab发布了18.2版本,该版本带来了议题和任务的自定义工作流状态、新的合并请求主页、新的群组概览合规仪表盘、下载安全报告的PDF导出文件、中心化的安全策略管理(Beta)等几十个重点功能的改进。下面是对部分重点功能的详细解读。关于极狐GitLab的安装升级,可以查看官方指导文档。18.2.0容器镜像registry.gitlab.cn/omnibus/gitla</div>
                    </li>
                    <li><a href="/article/1950176839670493184.htm"
                           title="全局修改GitLab14默认语言为中文" target="_blank">全局修改GitLab14默认语言为中文</a>
                        <span class="text-muted"></span>

                        <div>GitLab安装成功后默认语言是英语,只有登录后才能手动指定为中文,且这个配置只对自己生效,经查阅资料后,总结全局修改GitLab14默认语言为中文方法如下:0.进入容器如果你用Docker部署的GitLab,那么需要使用命令sudodockerexec-itgitlab/bin/bash进入容器1.修改rails配置文件打开/opt/gitlab/embedded/service/gitlab-</div>
                    </li>
                    <li><a href="/article/1950169525244719104.htm"
                           title="从零到一:基于差分隐私决策树的客户购买预测系统实战开发" target="_blank">从零到一:基于差分隐私决策树的客户购买预测系统实战开发</a>
                        <span class="text-muted">笙囧同学</span>
<a class="tag" taget="_blank" href="/search/%E5%86%B3%E7%AD%96%E6%A0%91/1.htm">决策树</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a>
                        <div>作者简介:笙囧同学,中科院计算机大模型方向硕士,全栈开发爱好者联系方式:3251736703@qq.com各大平台账号:笙囧同学座右铭:偷懒是人生进步的阶梯文章导航快速导航前言-项目背景与价值项目概览-系统架构与功能技术深度解析-核心算法原理️系统实现详解-工程实践细节性能评估与分析-实验结果分析Web系统开发-前后端开发部署与运维-DevOps实践完整复现指南-手把手教程️实践案例与故障排除-问</div>
                    </li>
                    <li><a href="/article/1950161707464716288.htm"
                           title="Ubuntu Docker 安装Redis" target="_blank">Ubuntu Docker 安装Redis</a>
                        <span class="text-muted">LLLL96</span>
<a class="tag" taget="_blank" href="/search/Ubuntu/1.htm">Ubuntu</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/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a>
                        <div>目录介绍1.数据结构丰富2.高性能3.持久化1.拉取Redis镜像2.创建挂载目录(可选)3.配置Redis持久化(可选)4.使用配置文件运行容器5.查看redis日志介绍1.数据结构丰富Redis支持多种数据结构,包括:字符串(String):可以用来存储任何类型的数据,例如文本、数字或二进制数据。哈希(Hash):存储字段和值的映射,适合用于表示对象。列表(List):有序的字符串列表,可以用</div>
                    </li>
                    <li><a href="/article/1950154523955752960.htm"
                           title="Docker" target="_blank">Docker</a>
                        <span class="text-muted">℡余晖^</span>
<a class="tag" taget="_blank" href="/search/%E9%BB%91%E9%A9%AC%E7%82%B9%E8%AF%84%E9%A1%B9%E7%9B%AE%E7%9B%B8%E5%85%B3%E9%97%AE%E9%A2%98%E5%92%8C%E7%AC%94%E8%AE%B0/1.htm">黑马点评项目相关问题和笔记</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>在黑马点评项目中,在谈到Redisson解决redis的主从一致性问题时,弹幕提到了Docker,本文来简单了解一下Docker,我的初步理解运维是维护多个集群的稳定,那它和VM虚拟机的区别又是什么?,如果要更深入地理解与学习(运维工程师),可以到b站搜索专门的课程(SpringCloud)。一、Docker是什么?重新理解“容器化”的本质1.1Docker的定义Docker是一个开源的容器化平台</div>
                    </li>
                    <li><a href="/article/1950144063588069376.htm"
                           title="Serverless架构下Spring Function的创新实践" target="_blank">Serverless架构下Spring Function的创新实践</a>
                        <span class="text-muted">tmjpz04412</span>
<a class="tag" taget="_blank" href="/search/serverless/1.htm">serverless</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                        <div>引言:Serverless与Spring生态的交汇背景介绍:云计算与Serverless架构的兴起Spring生态的演进与云原生适配性核心问题:传统Spring应用如何融入Serverless范式Serverless架构的核心特征与挑战事件驱动、弹性伸缩与按需计费冷启动问题与性能优化需求Spring应用在Serverless环境中的典型瓶颈(如依赖注入、上下文初始化)SpringFunction的</div>
                    </li>
                    <li><a href="/article/1950143934961348608.htm"
                           title="Spring Boot与云原生:微服务架构的创新实践" target="_blank">Spring Boot与云原生:微服务架构的创新实践</a>
                        <span class="text-muted">tmjpz04412</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/graphql/1.htm">graphql</a>
                        <div>引言:Spring生态的演进与现状Spring框架的发展历程与核心设计理念当前Spring生态的核心组件(SpringBoot、SpringCloud、SpringData等)行业对Spring生态的依赖与创新需求SpringBoot的创新实践1.自动化配置与启动优化条件装配(@Conditional)的深度定制案例启动类加载机制与类路径扫描优化示例:通过自定义Starter实现快速集成第三方服务</div>
                    </li>
                    <li><a href="/article/1950135734396579840.htm"
                           title="国产测试用例管理工具横向评测:DevOps时代如何选择最适合的协作平台?" target="_blank">国产测试用例管理工具横向评测:DevOps时代如何选择最适合的协作平台?</a>
                        <span class="text-muted">不念霉运</span>
<a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B/1.htm">测试用例</a><a class="tag" taget="_blank" href="/search/devops/1.htm">devops</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>国产测试用例管理工具横向评测:DevOps时代如何选择最适合的协作平台?在数字化转型浪潮下,软件研发效能已成为企业核心竞争力。作为DevOps流程中的关键环节,测试用例管理工具的选择直接影响着团队的协作效率和产品质量。面对市场上琳琅满目的国产解决方案,研发团队该如何做出明智选择?GiteeTest:为敏捷团队打造的工程化测试管理利器GiteeTest凭借其"工程化"的用例管理理念,在敏捷开发场景中</div>
                    </li>
                    <li><a href="/article/1950134417968132096.htm"
                           title="20个月幼儿游戏" target="_blank">20个月幼儿游戏</a>
                        <span class="text-muted">一只暴躁的小仙女</span>

                        <div>这个阶段注重宝宝平衡能力协调发展,蹲下起立和弯腰拾物,各种能力相互配合,逐步学会复杂的动作。宝宝已经会扭动门把手,会自己开门走出房间。玩沙给宝宝准备一堆干净的细沙和一个小桶、一个小铲,让宝宝玩耍,看细沙从指间流出。然后用水壶把干沙打湿,用塑料小碗制作出小沙饼,宝宝会非常兴奋,会找出不同形状的塑料容器来制作不同形状的沙坯;也可教宝宝用小铲子铲出河流,架上积木做的小桥,陪宝宝玩一阵后,妈妈可以去做自己</div>
                    </li>
                    <li><a href="/article/1950134096558616576.htm"
                           title="Python STL概念学习与代码实践" target="_blank">Python STL概念学习与代码实践</a>
                        <span class="text-muted">体制教科书</span>

                        <div>本文还有配套的精品资源,点击获取简介:通过”py_stl_learning”项目,学习者可以使用Python实现和理解C++STL的概念,包括数据结构、算法、容器适配器、模板和泛型容器等。Python中的列表、集合、字典等数据结构与STL中的vector、set、map等类似,而Python的itertools和functools模块提供了STL风格的算法功能。Python通过其面向对象的特性以及</div>
                    </li>
                    <li><a href="/article/1950131321980383232.htm"
                           title="深入了解 Kubernetes(k8s):从概念到实践" target="_blank">深入了解 Kubernetes(k8s):从概念到实践</a>
                        <span class="text-muted"></span>

                        <div>目录一、k8s核心概念二、k8s的优势三、k8s架构组件控制平面组件节点组件四、k8s+docker运行前后端分离项目的例子1.准备前端项目2.准备后端项目3.创建k8s部署配置文件4.部署应用到k8s集群在当今云计算和容器化技术飞速发展的时代,Kubernetes(简称k8s)已成为容器编排领域的事实标准。无论是互联网巨头、传统企业还是初创公司,都在广泛采用k8s来管理和部署容器化应用。本文将带</div>
                    </li>
                    <li><a href="/article/1950117601879322624.htm"
                           title="《教学勇气》——阅读第287天" target="_blank">《教学勇气》——阅读第287天</a>
                        <span class="text-muted">清镇052李微</span>

                        <div>今天是我勇气读书会打卡阅读第287天。书名:《教学勇气》。时间:2019年10月19日。内容:停滞、绝望与希望。文章中说到制度阻力抗衡的是社会改革运动,这两者即对立又统一的关系,机构组织和变革运动双方都扮演着创造性的角色,变革运动代表的是流动与改变,它是一个能量输送更新和变迁的过程,而机构组织代表着秩序和维持的原则,是保存历代来之不易的财富的容器,两者是相互依存的。图片发自App</div>
                    </li>
                    <li><a href="/article/1950094764498022400.htm"
                           title="Coze Studio 架构拆解:AI Agent 开发平台项目结构全分析" target="_blank">Coze Studio 架构拆解:AI Agent 开发平台项目结构全分析</a>
                        <span class="text-muted">代码简单说</span>
<a class="tag" taget="_blank" href="/search/2025%E5%BC%80%E5%8F%91%E5%BF%85%E5%A4%87%28%E9%99%90%E6%97%B6%E7%89%B9%E6%83%A0%29/1.htm">2025开发必备(限时特惠)</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/Coze/1.htm">Coze</a><a class="tag" taget="_blank" href="/search/Studio/1.htm">Studio</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/Agent/1.htm">Agent</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E5%B9%B3%E5%8F%B0/1.htm">开发平台</a><a class="tag" taget="_blank" href="/search/%E5%85%A8%E6%A0%88/1.htm">全栈</a><a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E7%A8%8B%E5%8C%96/1.htm">工程化</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E8%A7%A3%E6%9E%B6%E6%9E%84/1.htm">图解架构</a>
                        <div>CozeStudio架构拆解:AIAgent开发平台项目结构全分析标签:CozeStudio项目架构、领域驱动设计DDD、全栈开发规范、Hertz框架、前后端协作、云原生容器、前端测试、IDL接口设计、微服务解耦、AI开发平台源码分析在最近研究AIAgent开发平台的过程中,我深入分析了刚刚开源的CozeStudio项目。这套系统是国内少有的开源全栈AI工程化项目,代码整洁、架构先进,特别是它基于</div>
                    </li>
                    <li><a href="/article/1950089974804180992.htm"
                           title="9、Docker Compose 实战" target="_blank">9、Docker Compose 实战</a>
                        <span class="text-muted">小醉你真好</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E9%83%A8%E7%BD%B2%E4%B8%8D%E6%B1%82%E4%BA%BA/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>DockerCompose实战教程(含完整Nginx案例+配置项详解)适合读者:开发者、后端工程师、运维工程师、初学者环境要求:CentOS9+Docker已安装教程亮点:实战驱动、配置项详解、挂载说明、可直接复制使用标签:#Docker#DockerCompose#运维实战#Nginx部署一、什么是DockerCompose?DockerCompose是Docker官方推出的多容器应用编排工具,</div>
                    </li>
                    <li><a href="/article/1950076488409739264.htm"
                           title="Consul 与 Hive:云原生数据仓库集成" target="_blank">Consul 与 Hive:云原生数据仓库集成</a>
                        <span class="text-muted">AI云原生与云计算技术学院</span>
<a class="tag" taget="_blank" href="/search/AI%E4%BA%91%E5%8E%9F%E7%94%9F%E4%B8%8E%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">AI云原生与云计算</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E4%BB%93%E5%BA%93/1.htm">数据仓库</a><a class="tag" taget="_blank" href="/search/consul/1.htm">consul</a><a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a>
                        <div>Consul与Hive:云原生数据仓库集成关键词:Consul、Hive、云原生、数据仓库集成、服务发现摘要:本文深入探讨了Consul与Hive在云原生环境下的数据仓库集成。首先介绍了集成的背景和相关概念,包括Consul的服务发现机制和Hive作为数据仓库的特点。接着详细阐述了核心概念及联系,通过文本示意图和Mermaid流程图展示其架构。对集成所涉及的核心算法原理进行了讲解,并给出Pytho</div>
                    </li>
                    <li><a href="/article/1950065015335743488.htm"
                           title="Coze开源实战指南:构建企业级AI应用的全链路技术解析(含Kubernetes+服务网格深度实践)" target="_blank">Coze开源实战指南:构建企业级AI应用的全链路技术解析(含Kubernetes+服务网格深度实践)</a>
                        <span class="text-muted"></span>

                        <div>一、Coze技术架构深度解析1.1核心组件与五层异构架构Coze采用五层异构架构(感知层→执行层→决策层→监控层→进化层),实现亚毫秒级实时响应与动态弹性扩展。其核心模块包括:架构亮点支持横向扩展的微服务集群基于Kubernetes的自动扩缩容机制服务网格(Istio)实现流量治理核心组件对比表组件功能特性典型性能指标CozeStudio30+节点类型/多模式编排响应速度提升300%CozeLoo</div>
                    </li>
                    <li><a href="/article/1950062622913130496.htm"
                           title="个人笔记集合框架" target="_blank">个人笔记集合框架</a>
                        <span class="text-muted">清秀咸鱼</span>
<a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a>
                        <div>集合框架集合概念:对象的容器,定义了对多个对象进行操作的常用方法。可实现数组的功能。和数组区别:(1)数组长度固定,集合长度不固定(2)数组可以存储基本类型和引用类型,集合只能存储引用类型位置:java.util.*;Collection根接口,父接口特点:代表一组任意类型的对象,无序、无下标、不能重复。booleanadd(0bjectobj)//添加一个对象。booleanaddAll(Col</div>
                    </li>
                    <li><a href="/article/1950061867435094016.htm"
                           title="c++ STL容器 --- 列表initializer_list" target="_blank">c++ STL容器 --- 列表initializer_list</a>
                        <span class="text-muted">qiuqiuyaq</span>
<a class="tag" taget="_blank" href="/search/STL%E5%AE%B9%E5%99%A8/1.htm">STL容器</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a>
                        <div>包含头文件在标准库中的容器可以直接用等号的方式初始化容器→直接用等号赋值{}列表就是一个{}数据一般情况下,如果想采用{}的方式初始化,类当中必须要有与之相匹配的参数的构造函数提供了一个构造函数,用initializer_list当做构造函数的参数,就可以实现我们想要的效果(有几个参数都可以)initializer_list主要是用在构造函数当中,可以忽略参数的个数去做初始化(两个、三个、多个..</div>
                    </li>
                    <li><a href="/article/1950055184184963072.htm"
                           title="DevOps CI/CD流水线配置实战:GitHub Actions与Jenkins详细教程" target="_blank">DevOps CI/CD流水线配置实战:GitHub Actions与Jenkins详细教程</a>
                        <span class="text-muted">火烧屁屁lo</span>
<a class="tag" taget="_blank" href="/search/devops/1.htm">devops</a><a class="tag" taget="_blank" href="/search/ci%2Fcd/1.htm">ci/cd</a><a class="tag" taget="_blank" href="/search/github/1.htm">github</a>
                        <div>现代软件开发中,持续集成与持续交付(CI/CD)是DevOps核心实践。通过自动化构建、测试和部署流程,团队能够快速交付高质量软件。本文将深入探讨两种主流工具(GitHubActions和Jenkins)的配置方法,并提供完整代码示例。GitHubActions配置指南GitHubActions是GitHub原生的CI/CD工具,直接集成在代码仓库中。以下为典型工作流配置:创建基础工作流文件在项目</div>
                    </li>
                    <li><a href="/article/1950051021308882944.htm"
                           title="C++---初始化列表(initializer_list)" target="_blank">C++---初始化列表(initializer_list)</a>
                        <span class="text-muted">MzKyle</span>
<a class="tag" taget="_blank" href="/search/C%2FC%2B%2B/1.htm">C/C++</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/list/1.htm">list</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>在C++编程中,我们经常会用到形如vectorv={1,2,3,4};的语法——用花括号包裹一组元素直接初始化容器。这种直观且简洁的写法背后,依赖于C++11引入的一个特殊类型:std::initializer_list。它不仅是列表初始化的“桥梁”,更是C++标准库设计中连接语法糖与底层实现的关键机制。一、initializer_list的本质std::initializer_list是C++1</div>
                    </li>
                    <li><a href="/article/1949987345340100608.htm"
                           title="Python中的解包" target="_blank">Python中的解包</a>
                        <span class="text-muted">_nephrologist_</span>
<a class="tag" taget="_blank" href="/search/Python%E5%9F%BA%E7%A1%80/1.htm">Python基础</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>解包(unpacking)是指将一个容器(如列表、元组、字典、集合等)中的元素分别赋值给多个变量的过程。1、列表解包:list=[1,2,3]a,b,c=listprint(a,b,c)#输出:123list=[1,2,[3,4,5]]a,b,c=listprint(a,b,c)#输出:12[3,4,5]2、元组解包:tuple=(1,2,3)a,b,c=tuple#等号左边的变量个数必须等于元组</div>
                    </li>
                    <li><a href="/article/1949958843928735744.htm"
                           title="运维-资产梳理" target="_blank">运维-资产梳理</a>
                        <span class="text-muted"></span>

                        <div>资产梳理一、明确目标与范围1.1、确定梳理目的网络安全:缩小攻击面、识别风险点。资源配置:优化资源利用率、降低成本。合规要求:满足法律法规或行业标准(如等保、ISO27001)。1.2、界定资产范围物理资产:服务器、网络设备、终端设备、IoT设备等。数字资产:操作系统、数据库、应用程序、域名、IP地址、云资源、容器/K8s集群、SaaS应用。数据资产:敏感数据(如客户信息、财务数据)、业务数据、备</div>
                    </li>
                    <li><a href="/article/1949950148796805120.htm"
                           title="布局管理器android,Android课程---布局管理器之相对布局(一)" target="_blank">布局管理器android,Android课程---布局管理器之相对布局(一)</a>
                        <span class="text-muted"></span>

                        <div>下面示例的是在父容器里如何设置按钮的位置,难度:***,重点是找到一个主按钮,设置它的id,然后根据它来设置其他按钮在父容器的位置。代码示例:android:layout_width="match_parent"android:layout_height="match_parent">android:layout_width="wrap_content"android:layout_height=</div>
                    </li>
                    <li><a href="/article/1949926566876213248.htm"
                           title="Azure-in-bullet-points项目解析:深入理解Azure Service Fabric架构与技术实践" target="_blank">Azure-in-bullet-points项目解析:深入理解Azure Service Fabric架构与技术实践</a>
                        <span class="text-muted">萧桔格Wilbur</span>

                        <div>Azure-in-bullet-points项目解析:深入理解AzureServiceFabric架构与技术实践一、AzureServiceFabric概述AzureServiceFabric是微软提供的分布式系统平台,专为构建和管理可扩展、可靠的微服务而设计。作为云原生应用开发的核心技术,它解决了现代分布式系统开发中的诸多挑战。核心特性集群管理能力:基于共享机器池(集群)构建,实现资源的高效利用</div>
                    </li>
                    <li><a href="/article/1949920012890337280.htm"
                           title="MCP架构对比演示文档" target="_blank">MCP架构对比演示文档</a>
                        <span class="text-muted">it_czz</span>
<a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a>
                        <div>MCP架构对比演示文档1.核心架构对比1.1本系统:自包含式MCP架构外部客户端SpringBoot应用容器应用层业务层MCP实现层数据处理层浏览器客户端第三方MCP客户端RESTAPI客户端网段计算引擎地理位置APIOpenAI集成内置MCP服务器内置MCP客户端IP网段服务SpringAI服务RESTAPI接口MCPWebSocket接口图1.1本系统自包含式MCP架构说明:这个架构图展示了我</div>
                    </li>
                    <li><a href="/article/1949918624361803776.htm"
                           title="spring boot入门" target="_blank">spring boot入门</a>
                        <span class="text-muted">开往1982</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>SpringBoot简介(脚手架)简化Spring应用开发的一个框架;整个Spring技术栈的一个大整合;J2EE开发的一站式解决方案;优点:快速创建独立运行的spring项目以及与主流框架集成使用嵌入式的Servlet容器,应用无需打成war包,内嵌TomcatStarters自动依赖和版本控制大量的自动装配,简化开发,也可以修改默认值无需配置XML无代码生成开箱即用准生产环境的运行时应用监控与</div>
                    </li>
                    <li><a href="/article/1949912574225084416.htm"
                           title="Spring Boot 默认使用 CGLIB,但CGLIB 无法代理 final 类或 final 方法" target="_blank">Spring Boot 默认使用 CGLIB,但CGLIB 无法代理 final 类或 final 方法</a>
                        <span class="text-muted">yourkin666</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>那么当这两件事冲突时,SpringBoot是怎么“解决”的呢?答案是:它不解决,也无法解决。当这种情况发生时,你的应用程序会直接启动失败。这不是SpringBoot的疏忽,而是由CGLIB的底层原理和Java语言的规则所决定的。工作流程和失败原因让我们来模拟一下SpringBoot启动时会发生什么:Spring容器开始创建所有的Bean。它找到了一个需要被AOP增强的Bean(例如,一个被@Ser</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>