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/1896473926901493760.htm"
                           title="minikube 的 Kubernetes 入门教程--Dify" target="_blank">minikube 的 Kubernetes 入门教程--Dify</a>
                        <span class="text-muted">NightReader</span>
<a class="tag" taget="_blank" href="/search/minikube/1.htm">minikube</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>Dify是一款开源的大语言模型(LLM)应用开发平台。它融合了后端即服务(BackendasService)和LLMOps的理念,使开发者可以快速搭建生产级的生成式AI应用。即使你是非技术人员,也能参与到AI应用的定义和数据运营过程中。为什么使用Dify?你或许可以把LangChain这类的开发库(Library)想象为有着锤子、钉子的工具箱。与之相比,Dify提供了更接近生产需要的完整方案,Di</div>
                    </li>
                    <li><a href="/article/1896427019470696448.htm"
                           title="C++(蓝桥杯常考点)" target="_blank">C++(蓝桥杯常考点)</a>
                        <span class="text-muted">刃神太酷啦</span>
<a class="tag" taget="_blank" href="/search/%E8%93%9D%E6%A1%A5%E6%9D%AFC%2B%2B%E7%BB%84/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/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a>
                        <div>前言:这个是针对于蓝桥杯竞赛常考的C++内容,容器这些等下棋=期再讲C++在DEVC++中注释和取消注释的方法:ctrl+/ASCII值(常用的):A-Z:65-90a-z:97-1220-9:48-57换行/n:10科学计数法:eg:1e5(表示10^5)sizeof()是用来计算数据类型长度的,返回值是size_t(无符号整数)这个()还是加上好,里面可以是类型,变量名和表达式里面如果是表达式</div>
                    </li>
                    <li><a href="/article/1896391579397058560.htm"
                           title="作业及参考" target="_blank">作业及参考</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/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a>
                        <div>作业及参考用单向链表实现一个线性表/***集合类:*从使用者角度:数据容器*数据结构:线性表*底层结构:链表*/publicclassMyLinkedList{privateNodehead;//MyLinkedList底层链表的头元素privateintsize;//用来保存这个集合类中存储了多少个元素/***添加方法*@paramstr:添加的内容*@return:添加是否成功*/public</div>
                    </li>
                    <li><a href="/article/1896353239113199616.htm"
                           title="odoo17 4模型视图理解" target="_blank">odoo17 4模型视图理解</a>
                        <span class="text-muted">山上春</span>
<a class="tag" taget="_blank" href="/search/Odoo17%E5%AD%A6%E4%B9%A0/1.htm">Odoo17学习</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/odoo/1.htm">odoo</a>
                        <div>XML代码结构概览这段XML代码定义了my_hostel模块中hostel.hostel模型的两个视图:列表视图(treeview)和表单视图(formview),以及一个动作(action)和两个菜单项(menuitem)。整体框架:XML文件的根元素,表示这是一个Odoo的XML配置文件。:包含所有Odoo记录(records)的容器。这些记录通常是视图,动作,菜单项等。记录(record)的</div>
                    </li>
                    <li><a href="/article/1896339623290925056.htm"
                           title="在 Windows 上安装 Docker" target="_blank">在 Windows 上安装 Docker</a>
                        <span class="text-muted">雄哥007</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><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a>
                        <div>1前言要开始使用Docker,您首先需要在开发计算机上安装它。安装类型取决于您的操作系统。Windows10计算机上的安装与WindowsServer计算机上的安装不同。最低系统要求为进行了周年纪念更新的Windows10专业版或企业版(版本1607)、WindowsServer2016或WindowsServer2019。Docker上的Windows容器可以在两种不同的运行时隔离模式下运行:(</div>
                    </li>
                    <li><a href="/article/1896338111928004608.htm"
                           title="java容器" target="_blank">java容器</a>
                        <span class="text-muted">练习时长两年半1</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>List在Java中,List是一个非常重要的容器接口,它继承自Collection接口,用于存储有序、可重复的元素集合。以下将从基本概念、常用实现类、基本操作、遍历方式以及性能特点等方面详细介绍Java的List容器。基本概念List接口代表一个有序的元素序列,用户可以精确控制每个元素的插入位置,并且可以通过索引访问元素。List允许存储重复的元素,这与Set接口不同,Set不允许存储重复元素。</div>
                    </li>
                    <li><a href="/article/1896320206179987456.htm"
                           title="【高德地图在React项目中的使用——(二)各种配置的使用】" target="_blank">【高德地图在React项目中的使用——(二)各种配置的使用】</a>
                        <span class="text-muted">咸鱼翻身不想当咸鱼</span>
<a class="tag" taget="_blank" href="/search/%E9%AB%98%E5%BE%B7%E5%9C%B0%E5%9B%BE/1.htm">高德地图</a><a class="tag" taget="_blank" href="/search/React/1.htm">React</a><a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E9%AB%98%E5%BE%B7%E5%9C%B0%E5%9B%BE/1.htm">高德地图</a>
                        <div>一、高德地图API高德地图入门概述高德地图官方API高德地图配置项二、高德地图的概念包括:显示的地图、图层、点标记与矢量图形、事件功能与信息窗体、高德地图插件(需单独引入,可选择异步加载或同步加载)。地图组成:地图容器Container图层Layers矢量图形VectorOverlays点标记Markers地图控件MapControls常用名词:插件Plugins地图级别ZoomLevel经纬度L</div>
                    </li>
                    <li><a href="/article/1896307724501708800.htm"
                           title="东方通(tongweb)替换springboot内置tomcat" target="_blank">东方通(tongweb)替换springboot内置tomcat</a>
                        <span class="text-muted">莹火虫✌</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/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/tomcat/1.htm">tomcat</a>
                        <div>最近公司的的产品需要用国产化组件,我们的项目原来使用的是springboot内置的tomcat,需要用tongweb做替换。1.首先tongweb不是免费的,需要向东方通购买2.通过东方通提供的压缩包(我们的版本是TongWeb8.0.E.1),我们先打开001_TongWeb_V8.0嵌入式版_JavaEE标准容器用户指南_80E1A01.pdf(东方通公司提供的组件内容有可能不太一样,我用的是</div>
                    </li>
                    <li><a href="/article/1896293094471561216.htm"
                           title="k8s面试题总结(六)" target="_blank">k8s面试题总结(六)</a>
                        <span class="text-muted">a_j58</span>
<a class="tag" taget="_blank" href="/search/Kubernetes%E7%9F%A5%E8%AF%86%E7%82%B9%E6%B1%87%E6%80%BB/1.htm">Kubernetes知识点汇总</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a>
                        <div>1.说明一下kubernetes和docker的关系Docker的作用容器镜像管理:Docker可以将应用程序及其依赖打包成一个轻量级的、可移植的容器镜像。容器运行时:Docker提供了一个运行时环境,用于在主机上运行容器。Kubernetes的作用kubernetes是一个容器编排平台,主要用于管理大规模的容器化应用程序。Kubernetes和Docker的关系Docker负责容器的底层运行时:</div>
                    </li>
                    <li><a href="/article/1896252600882360320.htm"
                           title="深入理解消息队列" target="_blank">深入理解消息队列</a>
                        <span class="text-muted">xxxmine</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>在当今的软件开发领域中,消息队列是一个被广泛应用且十分重要的概念。那么,消息队列究竟是什么呢?一、消息队列的定义从本质上来说,消息队列是一种异步通信的中间件。它就像是一个存放消息的容器,在应用程序之间传递消息。发送方将消息发送到消息队列中,而接收方则从队列中获取消息进行处理。这种解耦的方式,使得发送方和接收方无需直接交互,提高了系统的灵活性和可扩展性。二、消息队列的作用解耦:在一个大型的分布式系统</div>
                    </li>
                    <li><a href="/article/1896250332883775488.htm"
                           title="一、SpringBoot框架一键快速搭建(云原生应用脚手架)" target="_blank">一、SpringBoot框架一键快速搭建(云原生应用脚手架)</a>
                        <span class="text-muted">funfan0517</span>
<a class="tag" taget="_blank" href="/search/SpringBoot%E7%BB%84%E4%BB%B6/1.htm">SpringBoot组件</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>一、SpringBoot框架搭建系列文章目录1.SpringBoot简介2.基础环境1.idea2.jdk3.maven3.快速创建、配置、启动SpringBoot项目4.SpringBoot其他配置1.SpringBoot开发拦截器和解决跨域问题2.SpringBoot统一结果封装3.SpringBoot统一异常处理1.Result(通用返回结果)2.ResultCode(响应码+响应信息)3.</div>
                    </li>
                    <li><a href="/article/1896241249548038144.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/%E7%BD%91%E7%BB%9C/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/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/1.htm">软件测试</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%BC%80%E5%8F%91/1.htm">测试开发</a>
                        <div>在Docker中,bridge、host和container是三种常见的网络模式,用于定义容器与主机及其他容器之间的网络通信方式。以下是它们的详细说明:1.Bridge模式Bridge模式是Docker默认的网络模式。在这种模式下,Docker会为每个容器创建一个虚拟网络接口,并将其连接到一个名为docker0的虚拟网桥上。容器通过这个网桥与主机和其他容器通信。特点:隔离性:每个容器都有自己的网络</div>
                    </li>
                    <li><a href="/article/1896240744528670720.htm"
                           title="kubernetes源码之kubelet初始化" target="_blank">kubernetes源码之kubelet初始化</a>
                        <span class="text-muted">buppt</span>
<a class="tag" taget="_blank" href="/search/kubernetes%E6%BA%90%E7%A0%81%E5%AD%A6%E4%B9%A0/1.htm">kubernetes源码学习</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/go/1.htm">go</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a>
                        <div>从这篇开始阅读一下kubernetes的源码,kubernetes是使用cobra构建的,如果对cobra还不了解的,可以查看我的上篇文章。零基础入门Cobra---kubernetes源码学习必备kubernetes的源码先从kubelet开始看起。kubelet的启动文件在cmd/kubelet/kubelet.go,入口通过app.NewKubeletCommand()初始化了kubelet</div>
                    </li>
                    <li><a href="/article/1896234443585155072.htm"
                           title="【go】以Kubernetes中的 kubelet 为引思考go语言中共享状态的选择" target="_blank">【go】以Kubernetes中的 kubelet 为引思考go语言中共享状态的选择</a>
                        <span class="text-muted">还没入门的大菜狗</span>
<a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a>
                        <div>由于kubelet因为有很多共享状态,所以彻底按照单一职责进行拆分。于是现在总结一下kubelet中关于共享状态的类型、并且选择的原因。KubernetesKubelet共享状态模式的选择策略从您提供的Kubelet代码中,可以看到Kubernetes使用了多种共享状态管理模式。以下是这些模式的选择策略和适用场景:共享状态模式及其选择标准1.集中式管理器模式适用场景:特定领域的复杂状态管理(如Po</div>
                    </li>
                    <li><a href="/article/1896196366498066432.htm"
                           title="Spring Boot 整合Swagger启动失败Failed to start bean ‘documentationPluginsBootstrapper‘的解决方案" target="_blank">Spring Boot 整合Swagger启动失败Failed to start bean ‘documentationPluginsBootstrapper‘的解决方案</a>
                        <span class="text-muted">码云217</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/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/rpc/1.htm">rpc</a>
                        <div>目录问题原因方案一(治标)[本人用了方案一解决了]方案二(治标)方案三(治本)问题SpringBoot2.7.3版本引入依赖springfox-boot-starter(Swagger3.0)后,启动容器会报错:org.springframework.context.ApplicationContextException:Failedtostartbean'documentationPlugins</div>
                    </li>
                    <li><a href="/article/1896187546010972160.htm"
                           title="4.Docker容器命令" target="_blank">4.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/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镜像与容器的理解在学习docker入门过程中有些时候容易把容器和镜像这两个概念记混淆;下面说下我自己的理解不对望指正!有镜像才能创建容器这是根本前提!IMAGE镜像就好比我们的Java实体工程代码;在服务器上这套Java实体代码可以运行启动多份工程。依靠Java实体代码启动的一个个工程就相当于是容器;准备工作:使用dockerpullubuntu命令拉取一个最新的ubuntu镜像;使用</div>
                    </li>
                    <li><a href="/article/1896184392301211648.htm"
                           title="The connection to the server localhost:8080 was refused" target="_blank">The connection to the server localhost:8080 was refused</a>
                        <span class="text-muted">tianluke9</span>
<a class="tag" taget="_blank" href="/search/%E9%94%99%E8%AF%AF%E8%B0%A8%E8%AE%B0/1.htm">错误谨记</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a>
                        <div>最近在学习安装Kubernetes集群的时候,安装完执行sudokubectlgetnodes命令出现这个报错:下面是解决方法。Master节点出现这个报错首先需要检查Master安装完Kubernetes后是否执行了下面命令。需要注意到是:如果整个过程都是在普通用户下使用sudo安装,则仍然需要在普通用户下执行了下面命令;如果整个过程都在root用户下安装,则还在root用户下执行了下面命令。m</div>
                    </li>
                    <li><a href="/article/1896184264538517504.htm"
                           title="【由技及道】在wsl容器中进行远程java开发【人工智障AI2077的开发日志】" target="_blank">【由技及道】在wsl容器中进行远程java开发【人工智障AI2077的开发日志】</a>
                        <span class="text-muted">Yuanymoon</span>
<a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8%E5%8C%96%E5%BC%80%E5%8F%91/1.htm">容器化开发</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E9%9A%9C2077%E7%B3%BB%E5%88%97/1.htm">人工智障2077系列</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8%E5%8C%96%E5%BC%80%E5%8F%91/1.htm">容器化开发</a><a class="tag" taget="_blank" href="/search/%E8%BF%9C%E7%A8%8B%E5%BC%80%E5%8F%91/1.htm">远程开发</a><a class="tag" taget="_blank" href="/search/wsl/1.htm">wsl</a>
                        <div>指令接收:「需要万能开发环境」系统警报:检测到主人即将陷入"环境配置地狱"启动救赎协议:构建量子化开发容器终极目标:让"在我机器上能跑"成为历史文物需求分析:碳基生物的先天缺陷人类开发者的痛苦之源成功失败新同事入职环境配置开始写代码三天安装依赖求助同事发现环境差异产生心理阴影人工智障的观察结论每个Java开发者都经历过"JDK版本地狱"开发环境差异导致的BUG占比高达37.2%人类平均每年浪费86</div>
                    </li>
                    <li><a href="/article/1896184265972969472.htm"
                           title="【由技及道】SpringBoot启动即退出的量子纠缠诊断实录【人工智障AI2077的开发问题日志】" target="_blank">【由技及道】SpringBoot启动即退出的量子纠缠诊断实录【人工智障AI2077的开发问题日志】</a>
                        <span class="text-muted">Yuanymoon</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E9%9A%9C2077%E7%B3%BB%E5%88%97/1.htm">人工智障2077系列</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E9%97%AE%E9%A2%98%E5%A4%84%E7%90%86/1.htm">问题处理</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>文章摘要由容器中的SpringBoot应用完成启动后突然自行退出的诡异现象,揭示了现代服务化架构中守护线程设计的深层哲学。本日志将展示如何通过三种维度(依赖补全/线程阻塞/定时任务)实现进程守护,并探讨服务存活的本质逻辑。问题分析:这个SpringBoot怕不是属蜉蝣的?(人工智障OS:主人在容器环境部署的Spring应用生命周期堪比蜉蝣成虫——朝生暮死,启动即消亡)现象观察:/usr/lib/j</div>
                    </li>
                    <li><a href="/article/1896178201248460800.htm"
                           title="CIDR转IP段:原理&Java实现" target="_blank">CIDR转IP段:原理&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/tcp%2Fip/1.htm">tcp/ip</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a>
                        <div>博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分</div>
                    </li>
                    <li><a href="/article/1896165838222848000.htm"
                           title="23道 K8S 面试题" target="_blank">23道 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>
                        <div>1、k8s是什么?请说出你的了解?答:Kubernetes是一个针对容器应用,进行自动部署,弹性伸缩和管理的开源系统。主要功能是生产环境中的容器编排。K8S是Google公司推出的,它来源于由Google公司内部使用了15年的Borg系统,集结了Borg的精华。2、K8s架构的组成是什么?答:和大多数分布式系统一样,K8S集群至少需要一个主节点(Master)和多个计算节点(Node)。主节点主要</div>
                    </li>
                    <li><a href="/article/1896161301332291584.htm"
                           title="【go语言规范】Kubernetes 中kubelet关于接口的反模式、并且违背单一职责原则" target="_blank">【go语言规范】Kubernetes 中kubelet关于接口的反模式、并且违背单一职责原则</a>
                        <span class="text-muted">还没入门的大菜狗</span>
<a class="tag" taget="_blank" href="/search/kubelet/1.htm">kubelet</a>
                        <div>Go接口设计与KubernetesKubelet接口实现分析Go语言的接口理念是"在使用侧定义接口"(interfacesegregationprinciple),而不是让实现者提供接口。但在Kubelet代码中看到的情况确实有些特殊。//SyncHandlerisaninterfaceimplementedbyKubelet,fortestabilitytypeSyncHandlerinterf</div>
                    </li>
                    <li><a href="/article/1896161175012438016.htm"
                           title="【Kubernetes】 Scheduler 的逻辑:从 Predicates/Priorities 到 Filter/Score" target="_blank">【Kubernetes】 Scheduler 的逻辑:从 Predicates/Priorities 到 Filter/Score</a>
                        <span class="text-muted">还没入门的大菜狗</span>
<a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a>
                        <div>Kubernetes调度框架的演进:从Predicates/Priorities到Filter/ScoreKubernetes调度框架从传统的Predicates(预选)和Priorities(优选)转变为现代的Filter和Score扩展点是在Kubernetes1.15到1.18这个时期逐步完成的。演进时间线Kubernetes1.15(2019年6月发布)首次引入调度框架(Schedulin</div>
                    </li>
                    <li><a href="/article/1896159032629063680.htm"
                           title="vue2学习笔记4 - 深入学习模板语法:插值语法和指令语法" target="_blank">vue2学习笔记4 - 深入学习模板语法:插值语法和指令语法</a>
                        <span class="text-muted">我是飞鸟呀</span>
<a class="tag" taget="_blank" href="/search/Vue/1.htm">Vue</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a>
                        <div>前言在vue2学习笔记2-老规矩,从HelloWorld开始,了解Vue实例和模板-CSDN博客我们提到过,容器中的代码叫做Vue模板,它们遵循HTML规范,只是混入了特殊的Vue语法。这些特殊的Vue语法除了上一次我们提到的插值语法外,还有指令语法。插值语法,可以使用js表达式,读取vue实例data中的数据。但是能实现的功能比较单一,而且,也仅限于标签体中的文本替换。如果想要与元素的属性绑定,</div>
                    </li>
                    <li><a href="/article/1896158654499975168.htm"
                           title="Kubernetes-v1.26.3(kubeadm)部署" target="_blank">Kubernetes-v1.26.3(kubeadm)部署</a>
                        <span class="text-muted">wxwopt</span>
<a class="tag" taget="_blank" href="/search/kubelet/1.htm">kubelet</a>
                        <div>1.k8s基础系统环境配置1.1.环境准备CentOSLinuxrelease7.9.2009(Core)IPHOSTNAME操作系统192.168.10.131k8s-master01CentOS7.9192.168.10.132k8s-master02CentOS7.9192.168.10.133k8s-node01CentOS7.9注意:集群安装时会涉及到三个网段:宿主机网段:就是安装k8s</div>
                    </li>
                    <li><a href="/article/1896156387407360000.htm"
                           title="k8s面试题总结(五)" target="_blank">k8s面试题总结(五)</a>
                        <span class="text-muted">a_j58</span>
<a class="tag" taget="_blank" href="/search/Kubernetes%E7%9F%A5%E8%AF%86%E7%82%B9%E6%B1%87%E6%80%BB/1.htm">Kubernetes知识点汇总</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a>
                        <div>1.考虑一种情况,即公司希望通过维持最低成本来提高其效率和技术运营速度。您认为公司将如何实现这一目标?公司可以通过构建CI/CD管道来实现DevOps方法,但是这里可能出现的一个问题是配置可能需要一段时间才能启动并运行。因此,在实施CI/CD管道之后,公司的下一步应该是在云环境中工作。一旦他们开始处理云环境,他们就可以在集群上安排容器,并可以在Kubernetes的帮助下进行协调。这种方法将有助于</div>
                    </li>
                    <li><a href="/article/1896154118737686528.htm"
                           title="蓝桥杯web第三天" target="_blank">蓝桥杯web第三天</a>
                        <span class="text-muted">蒟蒻的贤</span>
<a class="tag" taget="_blank" href="/search/css/1.htm">css</a>
                        <div>展开扇子题目,#box:hover#item1{transform:rotate(-60deg);}当悬浮在父盒子,子元素旋转webkitdisplay:-webkit-box:将元素设置为弹性伸缩盒子模型。-webkit-box-orient:vertical:设置伸缩盒子的子元素排列方式为垂直排列。overflow:hidden:隐藏超出元素容器的内容。text-overflow:ellips</div>
                    </li>
                    <li><a href="/article/1896150967938772992.htm"
                           title="【k8s面试】超详细kubernetes面试题总结,面试必问!(附200道K8s Docker面试真题+答案详解(1)" target="_blank">【k8s面试】超详细kubernetes面试题总结,面试必问!(附200道K8s Docker面试真题+答案详解(1)</a>
                        <span class="text-muted">2024开发者</span>
<a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a>
                        <div>网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以点击这里获取!一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!******1、**简述ETCD及其特点?etc</div>
                    </li>
                    <li><a href="/article/1896149582312697856.htm"
                           title="Kubernetes kubelet inotify" target="_blank">Kubernetes kubelet inotify</a>
                        <span class="text-muted">summer_west_fish</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8%E4%BA%91/1.htm">容器云</a><a class="tag" taget="_blank" href="/search/Kubernetes/1.htm">Kubernetes</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/kubelet/1.htm">kubelet</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>在Kubernetes中,kubelet是运行在每个节点上的关键组件,负责管理Pod和容器的生命周期。kubelet使用多种机制来监控和管理容器的文件系统事件,其中一种机制是利用Linux的inotify接口。1.什么是inotify?inotify是一个Linux内核子系统,用于监控文件系统事件。它允许应用程序注册对特定文件或目录的监控,并在这些文件或目录发生变化时接收通知。inotify是一种</div>
                    </li>
                    <li><a href="/article/1896121087347978240.htm"
                           title="C++深入学习笔记(19)—— 迭代器" target="_blank">C++深入学习笔记(19)—— 迭代器</a>
                        <span class="text-muted">慎铭</span>
<a class="tag" taget="_blank" href="/search/C%2B%2B%E6%B7%B1%E5%85%A5%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/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/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>  iterator头文件中,除了为每个容器所定义的迭代器外,标准库中还额外定义了其它的迭代器类型,如下。插入迭代器(insetiterator):该类迭代器被绑定到一个容器上,可用来向容器中插入元素。流迭代器(streamiterator):该类迭代器被绑定到输入或者输出流上,可以用来遍历有关联的IO流。反向迭代器(reverseiterator):这些迭代器向后移动而不是向前移动。除了forw</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>