使用IPVS实现Kubernetes入口流量负载均衡

新搭建的Kubernetes集群如何承接外部访问的流量,是刚上手Kubernetes时常常会遇到的问题。 在公有云上,官方给出了比较直接的答案,使用LoadBalancer类型的Service,利用公有云提供的负载均衡服务来承接流量, 同时在多台服务器之间进行负载均衡。而在私有环境中,如何正确的将外部流量引入到集群内部,却暂时没有标准的做法。 本文将介绍一种基于IPVS来承接流量并实现负载均衡的方法,供大家参考。

IPVS

IPVS是LVS项目的一部分,是一款运行在Linux kernel当中的4层负载均衡器,性能异常优秀。 根据这篇文章的介绍,使用调优后的内核,可以轻松处理每秒10万次以上的转发请求。目前在中大型互联网项目中, IPVS被广泛的使用,用于承接网站入口处的流量。

Kubernetes Service

Service是Kubernetes的基础概念之一,它将一组Pod抽象成为一项服务,统一的对外提供服务,在各个Pod之间实现负载均衡。 Service有多种类型,最基本的ClusterIP类型解决了集群内部访问服务的需求,NodePort类型通过Node节点的端口暴露服务, 再配合上LoadBalancer类型所定义的负载均衡器,实现了流量经过前端负载均衡器分发到各个Node节点暴露出的端口, 再通过iptables进行一次负载均衡,最终分发到实际的Pod上这个过程。

在Service的Spec中,externalIPs字段平常鲜有人提到,当把IP地址填入这个字段后,kube-proxy会增加对应的iptables规则, 当有以对应IP为目标的流量发送到Node节点时,iptables将进行NAT,将流量转发到对应的服务上。一般情况下, 很少会遇到服务器接受非自身绑定IP流量的情况,所以externalIPs不常被使用,但配合网络层的其他工具,它可以实现给Service绑定外部IP的效果。

今天我们将使用externalIPs配合IPVS的DR(Direct Routing)模式实现将外部流量引入到集群内部,同时实现负载均衡。

环境搭建

为了演示,我们搭建了4台服务器组成的集群。一台服务器运行IPVS,扮演负载均衡器的作用,一台服务器运行Kubernetes Master组件, 其他两台服务器作为Node加入到Kubernetes集群当中。搭建过程这里不详细介绍,大家可以参考相关的文档。

所有服务器在172.17.8.0/24这个网段中。服务的VIP我们设定为172.17.8.201。整体架构入下图所示:

使用IPVS实现Kubernetes入口流量负载均衡_第1张图片

接下来让我们来配置IPVS和Kubernetes。

使用externalIPs暴露Kubernetes Service

首先在集群内部运行2个nginx Pod用作演示。

$ kubectl run nginx --image=nginx --replicas=2

再将它暴露为Service,同时设定externalIPs字段

$ kubectl expose deployment nginx --port 80 --external-ip 172.17.8.201

查看iptables配置,确认对应的iptables规则已经被加入。

$ sudo iptables -t nat -L KUBE-SERVICES -n
Chain KUBE-SERVICES (2 references)
target     prot opt source               destination
KUBE-SVC-4N57TFCL4MD7ZTDA  tcp  --  0.0.0.0/0            10.3.0.156           /* default/nginx: cluster IP */ tcp dpt:80
KUBE-MARK-MASQ  tcp  --  0.0.0.0/0            172.17.8.201         /* default/nginx: external IP */ tcp dpt:80
KUBE-SVC-4N57TFCL4MD7ZTDA  tcp  --  0.0.0.0/0            172.17.8.201         /* default/nginx: external IP */ tcp dpt:80 PHYSDEV match ! --physdev-is-in ADDRTYPE match src-type !LOCAL
KUBE-SVC-4N57TFCL4MD7ZTDA  tcp  --  0.0.0.0/0            172.17.8.201         /* default/nginx: external IP */ tcp dpt:80 ADDRTYPE match dst-type LOCAL
KUBE-SVC-NPX46M4PTMTKRN6Y  tcp  --  0.0.0.0/0            10.3.0.1             /* default/kubernetes:https cluster IP */ tcp dpt:443
KUBE-NODEPORTS  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes service nodeports; NOTE: this must be the last rule in this chain */ ADDRTYPE match dst-type LOCAL

配置IPVS实现流量转发

首先在IPVS服务器上,打开ipv4_forward

$ sudo sysctl -w net.ipv4.ip_forward=1

接下来加载IPVS内核模块。

$ sudo modprobe ip_vs

将VIP绑定在网卡上。

$ sudo ifconfig eth0:0 172.17.8.201 netmask 255.255.255.0 broadcast 172.17.8.255

再使用ipvsadm来配置IPVS,这里我们直接使用Docker镜像,避免和特定发行版绑定。

$ docker run --privileged -it --rm --net host luizbafilho/ipvsadm
/ # ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
/ # ipvsadm -A -t 172.17.8.201:80
/ # ipvsadm -a -t 172.17.8.201:80 -r 172.17.8.11:80 -g
/ # ipvsadm -a -t 172.17.8.201:80 -r 172.17.8.12:80 -g
/ # ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.17.8.201:http wlc
  -> 172.17.8.11:http             Route   1      0          0
  -> 172.17.8.12:http             Route   1      0          0

可以看到,我们成功建立了从VIP到后端服务器的转发。

验证转发效果

首先使用curl来测试是否能够正常访问nginx服务。

$ curl http://172.17.8.201
DOCTYPE html>


</span><span class="typ" style="color:rgb(166,226,46);">Welcome</span><span class="pln" style="color:rgb(102,217,239);"> to nginx</span><span class="pun" style="color:rgb(248,248,242);">!</</span><span class="pln" style="color:rgb(102,217,239);">title</span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);">
</span><span class="str" style="color:rgb(230,219,116);"><style></span><span class="pln" style="color:rgb(102,217,239);">
    body </span><span class="pun" style="color:rgb(248,248,242);">{</span><span class="pln" style="color:rgb(102,217,239);">
        width</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="lit" style="color:rgb(174,129,255);">35em</span><span class="pun" style="color:rgb(248,248,242);">;</span><span class="pln" style="color:rgb(102,217,239);">
        margin</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="lit" style="color:rgb(174,129,255);">0</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="kwd" style="color:rgb(249,38,89);">auto</span><span class="pun" style="color:rgb(248,248,242);">;</span><span class="pln" style="color:rgb(102,217,239);">
        font</span><span class="pun" style="color:rgb(248,248,242);">-</span><span class="pln" style="color:rgb(102,217,239);">family</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="typ" style="color:rgb(166,226,46);">Tahoma</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="typ" style="color:rgb(166,226,46);">Verdana</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="typ" style="color:rgb(166,226,46);">Arial</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> sans</span><span class="pun" style="color:rgb(248,248,242);">-</span><span class="pln" style="color:rgb(102,217,239);">serif</span><span class="pun" style="color:rgb(248,248,242);">;</span><span class="pln" style="color:rgb(102,217,239);">
    </span><span class="pun" style="color:rgb(248,248,242);">}</span><span class="pln" style="color:rgb(102,217,239);">
</span><span class="pun" style="color:rgb(248,248,242);"><</span><span class="str" style="color:rgb(230,219,116);">/style>
</</span><span class="pln" style="color:rgb(102,217,239);">head</span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);">
</span><span class="str" style="color:rgb(230,219,116);"><body></span><span class="pln" style="color:rgb(102,217,239);">
</span><span class="str" style="color:rgb(230,219,116);"><h1></span><span class="typ" style="color:rgb(166,226,46);">Welcome</span><span class="pln" style="color:rgb(102,217,239);"> to nginx</span><span class="pun" style="color:rgb(248,248,242);">!</</span><span class="pln" style="color:rgb(102,217,239);">h1</span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);">
</span><span class="str" style="color:rgb(230,219,116);"><p></span><span class="typ" style="color:rgb(166,226,46);">If</span><span class="pln" style="color:rgb(102,217,239);"> you see </span><span class="kwd" style="color:rgb(249,38,89);">this</span><span class="pln" style="color:rgb(102,217,239);"> page</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> the nginx web server </span><span class="kwd" style="color:rgb(249,38,89);">is</span><span class="pln" style="color:rgb(102,217,239);"> successfully installed </span><span class="kwd" style="color:rgb(249,38,89);">and</span><span class="pln" style="color:rgb(102,217,239);">
working</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="typ" style="color:rgb(166,226,46);">Further</span><span class="pln" style="color:rgb(102,217,239);"> configuration </span><span class="kwd" style="color:rgb(249,38,89);">is</span><span class="pln" style="color:rgb(102,217,239);"> required</span><span class="pun" style="color:rgb(248,248,242);">.</</span><span class="pln" style="color:rgb(102,217,239);">p</span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);">

</span><span class="str" style="color:rgb(230,219,116);"><p></span><span class="typ" style="color:rgb(166,226,46);">For</span><span class="pln" style="color:rgb(102,217,239);"> online documentation </span><span class="kwd" style="color:rgb(249,38,89);">and</span><span class="pln" style="color:rgb(102,217,239);"> support please refer to
</span><span class="pun" style="color:rgb(248,248,242);"><</span><span class="pln" style="color:rgb(102,217,239);">a href</span><span class="pun" style="color:rgb(248,248,242);">=</span><span class="str" style="color:rgb(230,219,116);">"http://nginx.org/"</span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);">nginx</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="pln" style="color:rgb(102,217,239);">org</span><span class="pun" style="color:rgb(248,248,242);"><</span><span class="str" style="color:rgb(230,219,116);">/a>.<br/</span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);">
</span><span class="typ" style="color:rgb(166,226,46);">Commercial</span><span class="pln" style="color:rgb(102,217,239);"> support </span><span class="kwd" style="color:rgb(249,38,89);">is</span><span class="pln" style="color:rgb(102,217,239);"> available at
</span><span class="pun" style="color:rgb(248,248,242);"><</span><span class="pln" style="color:rgb(102,217,239);">a href</span><span class="pun" style="color:rgb(248,248,242);">=</span><span class="str" style="color:rgb(230,219,116);">"http://nginx.com/"</span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);">nginx</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="pln" style="color:rgb(102,217,239);">com</span><span class="pun" style="color:rgb(248,248,242);"><</span><span class="str" style="color:rgb(230,219,116);">/a>.</</span><span class="pln" style="color:rgb(102,217,239);">p</span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);">

</span><span class="str" style="color:rgb(230,219,116);"><p><em></span><span class="typ" style="color:rgb(166,226,46);">Thank</span><span class="pln" style="color:rgb(102,217,239);"> you </span><span class="kwd" style="color:rgb(249,38,89);">for</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="kwd" style="color:rgb(249,38,89);">using</span><span class="pln" style="color:rgb(102,217,239);"> nginx</span><span class="pun" style="color:rgb(248,248,242);">.</</span><span class="pln" style="color:rgb(102,217,239);">em</span><span class="pun" style="color:rgb(248,248,242);">></</span><span class="pln" style="color:rgb(102,217,239);">p</span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);">
</span><span class="pun" style="color:rgb(248,248,242);"><</span><span class="str" style="color:rgb(230,219,116);">/body>
</</span><span class="pln" style="color:rgb(102,217,239);">html</span><span class="pun" style="color:rgb(248,248,242);">></span></pre> 
  </div> 
  <p style="text-indent:30px;"> 接下来在<code style="font-family:Menlo, Monaco, Consolas, 'Courier New', monospace;font-size:13.5px;color:rgb(199,37,78);">172.17.8.11</code>上抓包来确认IPVS的工作情况。</p> 
  <div class="highlight"> 
   <pre class="prettyprint" style="overflow:auto;font-family:'courier new';font-size:12px;line-height:20px;color:rgb(248,248,212);background:rgb(39,40,34);border:none;"><span class="pln" style="color:rgb(102,217,239);">$ sudo tcpdump </span><span class="pun" style="color:rgb(248,248,242);">-</span><span class="pln" style="color:rgb(102,217,239);">i any port </span><span class="lit" style="color:rgb(174,129,255);">80</span><span class="pln" style="color:rgb(102,217,239);">
tcpdump</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="pln" style="color:rgb(102,217,239);"> verbose output suppressed</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="kwd" style="color:rgb(249,38,89);">use</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="pun" style="color:rgb(248,248,242);">-</span><span class="pln" style="color:rgb(102,217,239);">v </span><span class="kwd" style="color:rgb(249,38,89);">or</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="pun" style="color:rgb(248,248,242);">-</span><span class="pln" style="color:rgb(102,217,239);">vv </span><span class="kwd" style="color:rgb(249,38,89);">for</span><span class="pln" style="color:rgb(102,217,239);"> full protocol decode
listening on any</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> link</span><span class="pun" style="color:rgb(248,248,242);">-</span><span class="pln" style="color:rgb(102,217,239);">type LINUX_SLL </span><span class="pun" style="color:rgb(248,248,242);">(</span><span class="typ" style="color:rgb(166,226,46);">Linux</span><span class="pln" style="color:rgb(102,217,239);"> cooked</span><span class="pun" style="color:rgb(248,248,242);">),</span><span class="pln" style="color:rgb(102,217,239);"> capture size </span><span class="lit" style="color:rgb(174,129,255);">262144</span><span class="pln" style="color:rgb(102,217,239);"> bytes
</span><span class="lit" style="color:rgb(174,129,255);">04</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">09</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">07.503858</span><span class="pln" style="color:rgb(102,217,239);"> IP </span><span class="lit" style="color:rgb(174,129,255);">172.17</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">8.1</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">51921</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="lit" style="color:rgb(174,129,255);">172.17</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">8.201</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="pln" style="color:rgb(102,217,239);">http</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="typ" style="color:rgb(166,226,46);">Flags</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="pun" style="color:rgb(248,248,242);">[</span><span class="pln" style="color:rgb(102,217,239);">S</span><span class="pun" style="color:rgb(248,248,242);">],</span><span class="pln" style="color:rgb(102,217,239);"> seq </span><span class="lit" style="color:rgb(174,129,255);">2747628840</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> win </span><span class="lit" style="color:rgb(174,129,255);">65535</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> options </span><span class="pun" style="color:rgb(248,248,242);">[</span><span class="pln" style="color:rgb(102,217,239);">mss </span><span class="lit" style="color:rgb(174,129,255);">1460</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">wscale </span><span class="lit" style="color:rgb(174,129,255);">5</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">TS val </span><span class="lit" style="color:rgb(174,129,255);">1332071005</span><span class="pln" style="color:rgb(102,217,239);"> ecr </span><span class="lit" style="color:rgb(174,129,255);">0</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">sackOK</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">eol</span><span class="pun" style="color:rgb(248,248,242);">],</span><span class="pln" style="color:rgb(102,217,239);"> length </span><span class="lit" style="color:rgb(174,129,255);">0</span><span class="pln" style="color:rgb(102,217,239);">
</span><span class="lit" style="color:rgb(174,129,255);">04</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">09</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">07.504241</span><span class="pln" style="color:rgb(102,217,239);"> IP </span><span class="lit" style="color:rgb(174,129,255);">10.2</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">0.1</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">51921</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="lit" style="color:rgb(174,129,255);">10.2</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">0.3</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="pln" style="color:rgb(102,217,239);">http</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="typ" style="color:rgb(166,226,46);">Flags</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="pun" style="color:rgb(248,248,242);">[</span><span class="pln" style="color:rgb(102,217,239);">S</span><span class="pun" style="color:rgb(248,248,242);">],</span><span class="pln" style="color:rgb(102,217,239);"> seq </span><span class="lit" style="color:rgb(174,129,255);">2747628840</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> win </span><span class="lit" style="color:rgb(174,129,255);">65535</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> options </span><span class="pun" style="color:rgb(248,248,242);">[</span><span class="pln" style="color:rgb(102,217,239);">mss </span><span class="lit" style="color:rgb(174,129,255);">1460</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">wscale </span><span class="lit" style="color:rgb(174,129,255);">5</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">TS val </span><span class="lit" style="color:rgb(174,129,255);">1332071005</span><span class="pln" style="color:rgb(102,217,239);"> ecr </span><span class="lit" style="color:rgb(174,129,255);">0</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">sackOK</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">eol</span><span class="pun" style="color:rgb(248,248,242);">],</span><span class="pln" style="color:rgb(102,217,239);"> length </span><span class="lit" style="color:rgb(174,129,255);">0</span><span class="pln" style="color:rgb(102,217,239);">
</span><span class="lit" style="color:rgb(174,129,255);">04</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">09</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">07.504498</span><span class="pln" style="color:rgb(102,217,239);"> IP </span><span class="lit" style="color:rgb(174,129,255);">10.2</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">0.1</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">51921</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="lit" style="color:rgb(174,129,255);">10.2</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">0.3</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="pln" style="color:rgb(102,217,239);">http</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="typ" style="color:rgb(166,226,46);">Flags</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="pun" style="color:rgb(248,248,242);">[</span><span class="pln" style="color:rgb(102,217,239);">S</span><span class="pun" style="color:rgb(248,248,242);">],</span><span class="pln" style="color:rgb(102,217,239);"> seq </span><span class="lit" style="color:rgb(174,129,255);">2747628840</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> win </span><span class="lit" style="color:rgb(174,129,255);">65535</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> options </span><span class="pun" style="color:rgb(248,248,242);">[</span><span class="pln" style="color:rgb(102,217,239);">mss </span><span class="lit" style="color:rgb(174,129,255);">1460</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">wscale </span><span class="lit" style="color:rgb(174,129,255);">5</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">TS val </span><span class="lit" style="color:rgb(174,129,255);">1332071005</span><span class="pln" style="color:rgb(102,217,239);"> ecr </span><span class="lit" style="color:rgb(174,129,255);">0</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">sackOK</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">eol</span><span class="pun" style="color:rgb(248,248,242);">],</span><span class="pln" style="color:rgb(102,217,239);"> length </span><span class="lit" style="color:rgb(174,129,255);">0</span><span class="pln" style="color:rgb(102,217,239);">
</span><span class="lit" style="color:rgb(174,129,255);">04</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">09</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">07.504827</span><span class="pln" style="color:rgb(102,217,239);"> IP </span><span class="lit" style="color:rgb(174,129,255);">10.2</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">0.3</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="pln" style="color:rgb(102,217,239);">http </span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="lit" style="color:rgb(174,129,255);">10.2</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">0.1</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">51921</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="typ" style="color:rgb(166,226,46);">Flags</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="pun" style="color:rgb(248,248,242);">[</span><span class="pln" style="color:rgb(102,217,239);">S</span><span class="pun" style="color:rgb(248,248,242);">.],</span><span class="pln" style="color:rgb(102,217,239);"> seq </span><span class="lit" style="color:rgb(174,129,255);">3762638044</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> ack </span><span class="lit" style="color:rgb(174,129,255);">2747628841</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> win </span><span class="lit" style="color:rgb(174,129,255);">28960</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> options </span><span class="pun" style="color:rgb(248,248,242);">[</span><span class="pln" style="color:rgb(102,217,239);">mss </span><span class="lit" style="color:rgb(174,129,255);">1460</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">sackOK</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">TS val </span><span class="lit" style="color:rgb(174,129,255);">153786592</span><span class="pln" style="color:rgb(102,217,239);"> ecr </span><span class="lit" style="color:rgb(174,129,255);">1332071005</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">wscale </span><span class="lit" style="color:rgb(174,129,255);">7</span><span class="pun" style="color:rgb(248,248,242);">],</span><span class="pln" style="color:rgb(102,217,239);"> length </span><span class="lit" style="color:rgb(174,129,255);">0</span><span class="pln" style="color:rgb(102,217,239);">
</span><span class="lit" style="color:rgb(174,129,255);">04</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">09</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">07.504827</span><span class="pln" style="color:rgb(102,217,239);"> IP </span><span class="lit" style="color:rgb(174,129,255);">10.2</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">0.3</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="pln" style="color:rgb(102,217,239);">http </span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="lit" style="color:rgb(174,129,255);">172.17</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">8.1</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">51921</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="typ" style="color:rgb(166,226,46);">Flags</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="pun" style="color:rgb(248,248,242);">[</span><span class="pln" style="color:rgb(102,217,239);">S</span><span class="pun" style="color:rgb(248,248,242);">.],</span><span class="pln" style="color:rgb(102,217,239);"> seq </span><span class="lit" style="color:rgb(174,129,255);">3762638044</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> ack </span><span class="lit" style="color:rgb(174,129,255);">2747628841</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> win </span><span class="lit" style="color:rgb(174,129,255);">28960</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> options </span><span class="pun" style="color:rgb(248,248,242);">[</span><span class="pln" style="color:rgb(102,217,239);">mss </span><span class="lit" style="color:rgb(174,129,255);">1460</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">sackOK</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">TS val </span><span class="lit" style="color:rgb(174,129,255);">153786592</span><span class="pln" style="color:rgb(102,217,239);"> ecr </span><span class="lit" style="color:rgb(174,129,255);">1332071005</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">wscale </span><span class="lit" style="color:rgb(174,129,255);">7</span><span class="pun" style="color:rgb(248,248,242);">],</span><span class="pln" style="color:rgb(102,217,239);"> length </span><span class="lit" style="color:rgb(174,129,255);">0</span><span class="pln" style="color:rgb(102,217,239);">
</span><span class="lit" style="color:rgb(174,129,255);">04</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">09</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">07.504888</span><span class="pln" style="color:rgb(102,217,239);"> IP </span><span class="lit" style="color:rgb(174,129,255);">172.17</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">8.201</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="pln" style="color:rgb(102,217,239);">http </span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="lit" style="color:rgb(174,129,255);">172.17</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">8.1</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">51921</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="typ" style="color:rgb(166,226,46);">Flags</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="pun" style="color:rgb(248,248,242);">[</span><span class="pln" style="color:rgb(102,217,239);">S</span><span class="pun" style="color:rgb(248,248,242);">.],</span><span class="pln" style="color:rgb(102,217,239);"> seq </span><span class="lit" style="color:rgb(174,129,255);">3762638044</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> ack </span><span class="lit" style="color:rgb(174,129,255);">2747628841</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> win </span><span class="lit" style="color:rgb(174,129,255);">28960</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> options </span><span class="pun" style="color:rgb(248,248,242);">[</span><span class="pln" style="color:rgb(102,217,239);">mss </span><span class="lit" style="color:rgb(174,129,255);">1460</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">sackOK</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">TS val </span><span class="lit" style="color:rgb(174,129,255);">153786592</span><span class="pln" style="color:rgb(102,217,239);"> ecr </span><span class="lit" style="color:rgb(174,129,255);">1332071005</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">wscale </span><span class="lit" style="color:rgb(174,129,255);">7</span><span class="pun" style="color:rgb(248,248,242);">],</span><span class="pln" style="color:rgb(102,217,239);"> length </span><span class="lit" style="color:rgb(174,129,255);">0</span><span class="pln" style="color:rgb(102,217,239);">
</span><span class="lit" style="color:rgb(174,129,255);">04</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">09</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">07.505599</span><span class="pln" style="color:rgb(102,217,239);"> IP </span><span class="lit" style="color:rgb(174,129,255);">172.17</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">8.1</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">51921</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="lit" style="color:rgb(174,129,255);">172.17</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">8.201</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="pln" style="color:rgb(102,217,239);">http</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="typ" style="color:rgb(166,226,46);">Flags</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="pun" style="color:rgb(248,248,242);">[.],</span><span class="pln" style="color:rgb(102,217,239);"> ack </span><span class="lit" style="color:rgb(174,129,255);">1</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> win </span><span class="lit" style="color:rgb(174,129,255);">4117</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> options </span><span class="pun" style="color:rgb(248,248,242);">[</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">TS val </span><span class="lit" style="color:rgb(174,129,255);">1332071007</span><span class="pln" style="color:rgb(102,217,239);"> ecr </span><span class="lit" style="color:rgb(174,129,255);">153786592</span><span class="pun" style="color:rgb(248,248,242);">],</span><span class="pln" style="color:rgb(102,217,239);"> length </span><span class="lit" style="color:rgb(174,129,255);">0</span></pre> 
  </div> 
  <p style="text-indent:30px;"> 可以看到,由客户端<code style="font-family:Menlo, Monaco, Consolas, 'Courier New', monospace;font-size:13.5px;color:rgb(199,37,78);">172.17.8.1</code>发送给<code style="font-family:Menlo, Monaco, Consolas, 'Courier New', monospace;font-size:13.5px;color:rgb(199,37,78);">172.17.8.201</code>的封包,经过IPVS的中转发送给了<code style="font-family:Menlo, Monaco, Consolas, 'Courier New', monospace;font-size:13.5px;color:rgb(199,37,78);">172.17.8.11</code>这台服务器, 并经过NAT后发送给了<code style="font-family:Menlo, Monaco, Consolas, 'Courier New', monospace;font-size:13.5px;color:rgb(199,37,78);">10.2.0.3</code>这个Pod。返回的封包不经过IPVS服务器直接从<code style="font-family:Menlo, Monaco, Consolas, 'Courier New', monospace;font-size:13.5px;color:rgb(199,37,78);">172.17.8.11</code>发送给了<code style="font-family:Menlo, Monaco, Consolas, 'Courier New', monospace;font-size:13.5px;color:rgb(199,37,78);">172.17.8.1</code>。 说明IPVS的DR模式工作正常。重复多次测试可以看到流量分别从<code style="font-family:Menlo, Monaco, Consolas, 'Courier New', monospace;font-size:13.5px;color:rgb(199,37,78);">172.17.8.11</code>和<code style="font-family:Menlo, Monaco, Consolas, 'Courier New', monospace;font-size:13.5px;color:rgb(199,37,78);">172.17.8.12</code>进入,再分发给不同的Pod, 说明负载均衡工作正常。</p> 
  <p style="text-indent:30px;"> 与传统的IPVS DR模式配置不同的是,我们并未在承接流量的服务器上执行绑定VIP,再关闭ARP的操作。 那是因为对VIP的处理直接发生在iptables上,我们无需在服务器上运行程序来承接流量,iptables会将流量转发到对应的Pod上。</p> 
  <p style="text-indent:30px;"> 使用这种方法来承接流量,仅需要配置<code style="font-family:Menlo, Monaco, Consolas, 'Courier New', monospace;font-size:13.5px;color:rgb(199,37,78);">externalIPs</code>为VIP即可,无需对服务器做任何特殊的设置,使用起来相当方便。</p> 
  <h2 id="总结" style="font-family:inherit;line-height:1.1;font-size:18px;border-bottom:1px solid rgb(234,234,234);"> 总结</h2> 
  <p style="text-indent:30px;"> 在本文中演示了使用IPVS配合externalIPs实现将外部流量导入到Kubernetes集群中,并实现负载均衡的方法。 希望可以帮助大家理解IPVS和externalIPs的工作原理,以便在恰当的场景下合理使用这两项技术解决问题。 实际部署时,还需要考虑后台服务器可用性检查,IPVS节点主从备份,水平扩展等问题。在这里就不详细介绍了。</p> 
  <p style="text-indent:30px;"> 在Kubernetes中还有许多与externalIPs类似的非常用功能,有些甚至是使用Annotation来进行配置,将来有机会再进一步分享。</p> 
  <p style="text-indent:30px;"> 最后插播下广告,为了实现私有环境下的Kubernetes集群自动化部署和运维,我们为Archon系统增加了PXE管理物理机的支持, 相应的配置案例在这里。如果使用过程中有任何问题,欢迎跟我们联系。</p> 
  <p style="text-indent:30px;"> 原文:使用IPVS实现Kubernetes入口流量负载均衡</p> 
  <div> 
   <br> 
  </div> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1188508656078004224"></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">你可能感兴趣的:(kubernetes)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1884362219156729856.htm"
                           title="阿里巴巴超大规模 Kubernetes 基础设施运维体系介绍" target="_blank">阿里巴巴超大规模 Kubernetes 基础设施运维体系介绍</a>
                        <span class="text-muted">阿里云云栖号</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%91%E6%A0%96%E5%8F%B7%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/1.htm">云栖号技术分享</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a>
                        <div>简介:ASI作为阿里集团、阿里云基础设施底座,为越来越多的云产品提供更多专业服务,托管底层K8s集群,屏蔽复杂的K8s门槛、透明几乎所有的基础设施复杂度,并用专业的产品技术能力兜底稳定性,让云产品只需要负责自己的业务,专业的平台分工做专业的事。作者:仔仁、墨封、光南序言ASI:AlibabaServerlessinfrastructure,阿里巴巴针对云原生应用设计的统一基础设施。ASI基于阿里云</div>
                    </li>
                    <li><a href="/article/1884294222442459136.htm"
                           title="万字长文 | 面向k8s编程,如何写一个Operator" target="_blank">万字长文 | 面向k8s编程,如何写一个Operator</a>
                        <span class="text-muted">新钛云服</span>
<a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a>
                        <div>新钛云服已为您服务1489天概述随着我们对Kubernetes的逐步了解,可能就会发现Kubernetes中内置的对象定义,比如Deployment、StatefulSet、ConfigMap,可能已经不能满足我们的需求。我们希望在Kubernetes定义一些自己的对象,一是可以通过kube-apiserver提供统一的访问入口,二是可以像其他内置对象一样,通过kubectl命令管理这些自定义的对</div>
                    </li>
                    <li><a href="/article/1884221959147941888.htm"
                           title="k8s(kubernetes)常见故障处理总结——详细文档" target="_blank">k8s(kubernetes)常见故障处理总结——详细文档</a>
                        <span class="text-muted">运维实战课程</span>
<a class="tag" taget="_blank" href="/search/docker%E5%92%8Ck8s%E5%AD%A6%E4%B9%A0%E6%96%87%E6%A1%A3/1.htm">docker和k8s学习文档</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/%E5%AE%B9%E5%99%A8/1.htm">容器</a>
                        <div>k8s(kubernetes)常见故障处理总结——详细文档本文涵盖了k8s运维过程中大部分常见的故障,提供相应的排查思路,笔记详细,仅供参考本人会经常更新运维相关技术文档,如有兴趣,可以关注我博客,欢迎互动分享k8s其他相关详细资料下载地址:kubeadm初始化高可用k8s1.20.4集群网盘地址:https://url28.ctfile.com/f/37115828-599516373-25f4</div>
                    </li>
                    <li><a href="/article/1884127631100669952.htm"
                           title="kuberay 安装和使用" target="_blank">kuberay 安装和使用</a>
                        <span class="text-muted">CHEN_RUI_2200</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>KubeRay是一个基于Kubernetes的项目,旨在简化在Kubernetes上部署和管理Ray集群的过程。先贴点正确的废话:1.简化集群管理KubeRay提供了一个易于使用的界面和工具,允许用户快速创建、配置和管理Ray集群,而不需要深入了解底层Kubernetes的细节。2.自动化部署通过使用Kubernetes的自定义资源定义(CRD),用户可以通过简单的YAML配置文件来定义Ray集群</div>
                    </li>
                    <li><a href="/article/1883944695315361792.htm"
                           title="Prometheus学习笔记" target="_blank">Prometheus学习笔记</a>
                        <span class="text-muted">柠檬编程工作室</span>
<a class="tag" taget="_blank" href="/search/k8s/1.htm">k8s</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/Docker/1.htm">Docker</a><a class="tag" taget="_blank" href="/search/prometheus/1.htm">prometheus</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>
                        <div>Prometheus官方教程Prometheus官方下载网址Prometheus简介Prometheus是一个开源的监控和报警系统,专为大规模分布式系统设计。它能够实时地收集、存储和查询时间序列数据,广泛用于监控云原生应用、微服务架构和容器化环境(如Kubernetes)。Prometheus的关键特点:时间序列数据存储:Prometheus以时间序列的形式存储数据,数据点由时间戳、指标名称和标签</div>
                    </li>
                    <li><a href="/article/1883917711961026560.htm"
                           title="K8S中高级存储之PV和PVC" target="_blank">K8S中高级存储之PV和PVC</a>
                        <span class="text-muted">元气满满的热码式</span>
<a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a>
                        <div>高级存储PV和PVC由于kubernetes支持的存储系统有很多,要求客户全都掌握,显然不现实。为了能够屏蔽底层存储实现的细节,方便用户使用,kubernetes引入PV和PVC两种资源对象。PV(PersistentVolume)PV是Kubernetes中的一个API对象,它代表集群中的一块存储,这块存储已经预先按照某种方式设置好了,并且可以被多个用户使用。PV是集群资源,由Kubernete</div>
                    </li>
                    <li><a href="/article/1883912665844215808.htm"
                           title="K8s存储之配置存储" target="_blank">K8s存储之配置存储</a>
                        <span class="text-muted">Herry_644280825</span>
<a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/K8s%E7%AB%AF%E5%8F%A3%26amp%3B%E5%AD%98%E5%82%A8%E6%8A%80%E6%9C%AF/1.htm">K8s端口&存储技术</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a>
                        <div>1.配置存储配置存储包括ConfigMap和Secrect。1.1ConfigMapConfigMap是K8s中的一种API对象,用于存储非敏感的配置数据,存储简单的键值对或者一组文件。单个ConfigMap的数据量不能超过1MB,适合存储小规模的配置信息‌。(1)配置清单字段说明apiVersion:v1说明:指定ConfigMap的API版本。在这个例子中,我们使用的是KubernetesAP</div>
                    </li>
                    <li><a href="/article/1883907624265641984.htm"
                           title="K8S中数据存储之配置存储" target="_blank">K8S中数据存储之配置存储</a>
                        <span class="text-muted">元气满满的热码式</span>
<a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a>
                        <div>配置存储在Kubernetes中,ConfigMap和Secret是两种核心资源,用于存储和管理应用程序的配置数据和敏感信息。理解它们的功能和最佳实践对于提高Kubernetes应用程序的安全性和配置管理的效率至关重要。ConfigMapConfigMap是一种API对象,允许你存储非敏感配置数据,如环境变量、数据库URL等。它以键值对的形式存储数据,便于应用程序访问必要的配置。ConfigMap</div>
                    </li>
                    <li><a href="/article/1883875990602575872.htm"
                           title="k8s的主要组件以及重要概念" target="_blank">k8s的主要组件以及重要概念</a>
                        <span class="text-muted">linshuai-on</span>
<a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a>
                        <div>K8S(Kubernetes)是一个用于自动部署、扩展和管理容器化应用程序的开源系统。它采用主从设备模型(Master-Slave架构),其中Master节点负责集群的调度、管理和运维,Slave节点(也被称为WorkerNode节点)负责执行工作负载。Kubernetes(K8s)主要由以下几个核心组件组成:一、Master节点组件APIServer:原理:作为Kubernetes系统的前端控制</div>
                    </li>
                    <li><a href="/article/1883873722109063168.htm"
                           title="构建高可用系统设计OpenStack、Docker、Mesos和Kubernetes(简称K8s)" target="_blank">构建高可用系统设计OpenStack、Docker、Mesos和Kubernetes(简称K8s)</a>
                        <span class="text-muted">葡萄爱</span>
<a class="tag" taget="_blank" href="/search/openstack/1.htm">openstack</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a>
                        <div>如果构建高可用、高并发、高效运维的大型系统大型系统架构设计包括业务层设计、服务层设计、基础架层设计、存储层设计、网络层协同设计来完成。一、业务层根据主要业务范畴的分类和特征提取,抽象出独立的业务系统,分别统计系统的用户角色群体、访问量、计算量。二、服务层细化和落地业务层的划分、拆分、服务治理三、架构技术层构建技术包括:OpenStack、Docker、Mesos和Kubernetes(简称K8s)</div>
                    </li>
                    <li><a href="/article/1883812449619079168.htm"
                           title="kubernetes 查询容器的 network namespace" target="_blank">kubernetes 查询容器的 network namespace</a>
                        <span class="text-muted">安心Smile</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/namespace/1.htm">namespace</a>
                        <div>简介命名空间是容器使用的主要方面之一(请参见下图)。它们提供了一种隔离形式,允许容器保持可移植性并与主机系统分离。尽管Linux内核提供了各种类型的名称空间,在本文中,我们将研究如何查看Kubernetes集群中容器的networknamespace,这对于故障排除和学习非常有用。普通方式查询一般情况下,可以通过ipnetndlist命令查看主机的networknamespace,但是,在kube</div>
                    </li>
                    <li><a href="/article/1883809673618976768.htm"
                           title="k8s支持自定义field-selector spec.hostNetwork过滤" target="_blank">k8s支持自定义field-selector spec.hostNetwork过滤</a>
                        <span class="text-muted">安心Smile</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/k8s/1.htm">k8s</a><a class="tag" taget="_blank" href="/search/field-selector/1.htm">field-selector</a>
                        <div>好久没写博客啦,年前写一个博客就算混过去啦写一个小功能,对于Pod,在没有label的情况下,支持--field-selectorspec.hostNetwork查询Pod是否为hostNetwork类型,只为了熟悉APIServer是如何构建索引向Etcd查询过程。Kubernetes版本1.17.4的,需要重新编译APIServer。不要怪太老了,高版本代码这块儿没怎么变过,下载代码:gitc</div>
                    </li>
                    <li><a href="/article/1883783818414977024.htm"
                           title="K8s ❉ 高级存储-PV / PVC详解" target="_blank">K8s ❉ 高级存储-PV / PVC详解</a>
                        <span class="text-muted">wangjie722703</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a>
                        <div>一介绍1基本理念前面已经学习了使用NFS提供存储,此时就要求用户会搭建NFS系统,并且会在yaml配置nfs。由于kubernetes支持的存储系统有很多,要求客户全都掌握,显然不现实。为了能够屏蔽底层存储实现的细节,以便用户使用,kubernetes引用PV和PVC两种资源对象。PV(PersistentVolume)是持久化卷的意思,是对底层的共享存储的一种抽象。一般情况下PV由kuberne</div>
                    </li>
                    <li><a href="/article/1883704923875504128.htm"
                           title="K8S中的数据存储之基本存储" target="_blank">K8S中的数据存储之基本存储</a>
                        <span class="text-muted">元气满满的热码式</span>
<a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a>
                        <div>基本存储类型EmptyDir描述:当Pod被调度到节点上时,Kubernetes会为Pod创建一个空目录,所有在该Pod中的容器都可以访问这个目录。特点:生命周期与Pod绑定,Pod删除时,数据也会丢失。适用于临时存储需求,如缓存或临时计算数据。支持多种存储类型(如tmpfs)可以根据需求选择。HostPath描述:将主机节点上的文件或目录挂载到Pod中的容器内。特点:允许Pod访问宿主机的文件系</div>
                    </li>
                    <li><a href="/article/1883655124576956416.htm"
                           title="kubernetes 核心技术-探针" target="_blank">kubernetes 核心技术-探针</a>
                        <span class="text-muted">難釋懷</span>
<a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a>
                        <div>在Kubernetes集群中,容器的健康状态对于确保应用的稳定性和可靠性至关重要。为了更好地管理容器生命周期,Kubernetes提供了一套探针机制(Probes),包括存活探针(LivenessProbes)、就绪探针(ReadinessProbes)和服务可用性探针(StartupProbes)。这些探针允许我们自动检测容器的状态,并据此采取相应的行动,如重启不健康的Pod或者仅在服务准备好时</div>
                    </li>
                    <li><a href="/article/1883650460494131200.htm"
                           title="RocketMQ优势剖析-集成云原生环境" target="_blank">RocketMQ优势剖析-集成云原生环境</a>
                        <span class="text-muted">Lin_Miao_09</span>
<a class="tag" taget="_blank" href="/search/RocketMq/1.htm">RocketMq</a><a class="tag" taget="_blank" href="/search/rocketmq/1.htm">rocketmq</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a>
                        <div>目录弹性和可扩展性Serverless架构支持容器化和Kubernetes支持多协议支持持久化和可靠性分布式事务支持社区和生态系统结论RocketMQ在集成云原生环境方面的优势主要体现在其设计的灵活性、扩展性以及对现代云计算基础设施的支持。以下是对RocketMQ在云原生环境中优势的具体剖析:弹性和可扩展性RocketMQ的设计考虑到了大规模分布式系统的需要,能够很好地适应动态变化的工作负载。它支</div>
                    </li>
                    <li><a href="/article/1883627315292860416.htm"
                           title="K8S 拉取私有仓库镜像" target="_blank">K8S 拉取私有仓库镜像</a>
                        <span class="text-muted"></span>

                        <div>K8S拉取私有仓库镜像在使用Kubernetes(k8s)从私有仓库拉取镜像时,会出现无法拉去镜像的情况,私有仓库需要认证才能访问,如果Kubernetes无法通过认证,就会导致拉取失败,这时我们就需要手动创建私有仓库的登录信息。省流版#创建secret#【harbor-docker】自定义名称#【--namespace】和应用在同一个命名空间下#【--docker-server】仓库的地址#【-</div>
                    </li>
                    <li><a href="/article/1883564009303633920.htm"
                           title="kubernetes 安装 kubernetes-dashboard 7.x" target="_blank">kubernetes 安装 kubernetes-dashboard 7.x</a>
                        <span class="text-muted"></span>

                        <div>kubernetes安装kubernetes-dashboard7.x介绍Kubernetes仪表板是Kubernetes集群的通用、基于Web的UI。它允许用户管理集群中运行的应用程序并对其进行故障排除,以及管理集群本身。从7.x版开始,不再支持基于Manifest的安装。现在只支持基于Helm的安装。由于多容器设置和对Kong网关API代理的严重依赖要轻松支持基于清单安装是不可行的。安装#添加</div>
                    </li>
                    <li><a href="/article/1883504589303508992.htm"
                           title="Linux二进制部署K8s集群的平滑升级教程" target="_blank">Linux二进制部署K8s集群的平滑升级教程</a>
                        <span class="text-muted">努力的小T</span>
<a class="tag" taget="_blank" href="/search/Kubernetes/1.htm">Kubernetes</a><a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97%E8%BF%90%E7%BB%B4%E5%9F%BA%E7%A1%80/1.htm">云计算运维基础</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>一、升级前的准备工作备份集群配置和数据备份/etc/kubernetes/目录,其中包含Kubernetes集群的配置文件。备份/var/lib/etcd/目录,其中存储了etcd数据库的数据。使用etcdctl工具备份etcd数据:bash复制ETCDCTL_API=3etcdctlsnapshotsave/data/etcd/etcd_bak.db\--endpoints=https://12</div>
                    </li>
                    <li><a href="/article/1883500564805906432.htm"
                           title="Kuberntes部署MetalLB负载均衡器" target="_blank">Kuberntes部署MetalLB负载均衡器</a>
                        <span class="text-muted"></span>

                        <div>Kuberntes部署MetalLB负载均衡器MetalLB简介MetalLB是一个为基础Kubernetes集群提供负载均衡实现的工具,使用标准路由协议。Kubernetes在基础集群中不提供网络负载均衡器(类型为LoadBalancer的服务)的实现。Kubernetes提供的网络负载平衡器实现都是调用各种IaaS平台(如GCP、AWS、Azure等)的接口代码。如果您没有运行在受支持的Iaa</div>
                    </li>
                    <li><a href="/article/1883499929100414976.htm"
                           title="使用kubeadm部署高可用IPV4/IPV6集群" target="_blank">使用kubeadm部署高可用IPV4/IPV6集群</a>
                        <span class="text-muted"></span>

                        <div>使用kubeadm部署高可用IPV4/IPV6集群https://github.com/cby-chen/Kubernetes开源不易,帮忙点个star,谢谢了介绍kubernetes(k8s)二进制高可用安装部署,支持IPv4+IPv6双栈。我使用IPV6的目的是在公网进行访问,所以我配置了IPV6静态地址。若您没有IPV6环境,或者不想使用IPv6,不对主机进行配置IPv6地址即可。不配置IP</div>
                    </li>
                    <li><a href="/article/1883377495038816256.htm"
                           title="Kubernetes满足高性能计算" target="_blank">Kubernetes满足高性能计算</a>
                        <span class="text-muted">qichengzong_right</span>
<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/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</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/kubernetes/1.htm">kubernetes</a>
                        <div>Kubernetes满足高性能计算Kubernetes满足高性能计算HPC工作负载的独特挑战打破容器和HPC之间的界限现有方法Kubernetes上的混合工作负载在IHME部署混合工作负载链接文章内容大部分翻译自kubernetes官方博文KubernetesMeetsHigh-PerformanceComputing,文章编写时间较早,结合自身认知对内容进行标注解释。Kubernetes满足高性</div>
                    </li>
                    <li><a href="/article/1883371698003177472.htm"
                           title="使用GitLab CI/CD部署应用到Kubernetes集群的方案" target="_blank">使用GitLab CI/CD部署应用到Kubernetes集群的方案</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/CI%2FCD/1.htm">CI/CD</a><a class="tag" taget="_blank" href="/search/%E6%95%99%E7%A8%8B/1.htm">教程</a><a class="tag" taget="_blank" href="/search/ci%2Fcd/1.htm">ci/cd</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/devops/1.htm">devops</a>
                        <div>最近业余时间调研了一下在GitLabCI/CD中部署应用到Kubernetes的方案。这是一个老生常谈的话题,很多粉丝和读者问我如何部署应用到K8s中。其实思路是很清晰的,只是其中又很多点大家可能无法串起来。那么本篇文章就带领大家实践一下如何做CD的方案。本方案的好处就是,读者不需要了解太多关K8s相关知识也可以实现该方案。Kubernets的命令行工具是kubectl。就像我们使用docker命</div>
                    </li>
                    <li><a href="/article/1883294007719686144.htm"
                           title="深度剖析 Rancher:一站式容器管理与编排平台" target="_blank">深度剖析 Rancher:一站式容器管理与编排平台</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/rancher/1.htm">rancher</a><a class="tag" taget="_blank" href="/search/Rancher%E6%98%AF%E4%BB%80%E4%B9%88/1.htm">Rancher是什么</a><a class="tag" taget="_blank" href="/search/Rancher%E4%BD%9C%E7%94%A8/1.htm">Rancher作用</a><a class="tag" taget="_blank" href="/search/Rancher%E4%BD%BF%E7%94%A8/1.htm">Rancher使用</a><a class="tag" taget="_blank" href="/search/Rancher%E6%A6%82%E5%BF%B5/1.htm">Rancher概念</a>
                        <div>深度剖析Rancher:一站式容器管理与编排平台一、引言在当今数字化转型加速的时代,容器技术已成为构建和部署现代应用的基石。随着容器化应用的规模不断扩大以及复杂性日益增加,高效的管理与编排工具成为企业的迫切需求。Rancher应运而生,作为一款领先的开源容器管理平台,它不仅提供了强大的功能来简化容器的部署、管理和监控,还支持多种容器编排引擎,如Kubernetes、DockerSwarm等,为企业</div>
                    </li>
                    <li><a href="/article/1883259450723201024.htm"
                           title="配置cri-docker使kubernetes1.24以docker作为运行时" target="_blank">配置cri-docker使kubernetes1.24以docker作为运行时</a>
                        <span class="text-muted">萌褚</span>
<a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a>
                        <div>镜像下载、域名解析、时间同步请点击阿里云开源镜像站从kubernetes1.24开始,dockershim已经从kubelet中移除,但因为历史问题docker却不支持kubernetes主推的CRI(容器运行时接口)标准,所以docker不能再作为kubernetes的容器运行时了,即从kubernetesv1.24开始不再使用docker了。但是如果想继续使用docker的话,可以在kubel</div>
                    </li>
                    <li><a href="/article/1883177203135475712.htm"
                           title="rockylinux9.4单master节点k8s1.28集群部署" target="_blank">rockylinux9.4单master节点k8s1.28集群部署</a>
                        <span class="text-muted">大白菜和MySQL</span>
<a class="tag" taget="_blank" href="/search/k8s/1.htm">k8s</a><a class="tag" taget="_blank" href="/search/%E9%9B%86%E7%BE%A4/1.htm">集群</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a>
                        <div>kubernetes集群部署常见的k8s部署方式包括:二进制包、kubeadm工具、云服务提供商、或通过一些开源的工具搭建,例如:sealos、kuboard、Runcher、kubeSphere。本文使用kubeadm的部署方式,部署k8s1.28版本我本地安装资源规划如下:IP地址主机名称角色操作系统主机配置参考192.168.3.92master1masterrockylinux9.4(最小</div>
                    </li>
                    <li><a href="/article/1883174552947716096.htm"
                           title="华为云云原生王者之路集训营(黄金-第五章)" target="_blank">华为云云原生王者之路集训营(黄金-第五章)</a>
                        <span class="text-muted">※网络笨猪※</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%82%E5%95%86-%E5%85%AC%E6%9C%89%E4%BA%91/1.htm">云厂商-公有云</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA%E4%BA%91/1.htm">华为云</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a>
                        <div>华为云云原生王者之路集训营(黄金-第五章)1.11.1Kubernetes工作负载(Workload)介绍工作负载是在Kubernetes上运行的应用程序。无论你的负载是单一组件还是由多个一同工作的组件构成,在Kubernetes中你可以在一组Pods中运行它。在Kubernetes中,Pod代表的是集群上处于运行状态的一组容器。四种负载:无状态工作负载:管理的Pod集合是相互等价的,需要的时候可</div>
                    </li>
                    <li><a href="/article/1883015056866734080.htm"
                           title="redis清空缓存" target="_blank">redis清空缓存</a>
                        <span class="text-muted">奔跑吧邓邓子</span>
<a class="tag" taget="_blank" href="/search/%E9%AB%98%E6%95%88%E8%BF%90%E7%BB%B4/1.htm">高效运维</a><a class="tag" taget="_blank" href="/search/%E7%BC%93%E5%AD%98/1.htm">缓存</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>提示:“奔跑吧邓邓子”的高效运维专栏聚焦于各类运维场景中的实际操作与问题解决。内容涵盖服务器硬件(如IBMSystem3650M5)、云服务平台(如腾讯云、华为云)、服务器软件(如Nginx、Apache、GitLab、Redis、Elasticsearch、Kubernetes、Docker等)、开发工具(如Git、HBuilder)以及网络安全(如挖矿病毒排查、SSL证书配置)等多个方面。无论</div>
                    </li>
                    <li><a href="/article/1882985303317213184.htm"
                           title="Helm Chart 实现 Kubernetes 应用多环境部署实战" target="_blank">Helm Chart 实现 Kubernetes 应用多环境部署实战</a>
                        <span class="text-muted">ivwdcwso</span>
<a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/Helm/1.htm">Helm</a><a class="tag" taget="_blank" href="/search/k8s/1.htm">k8s</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a>
                        <div>在现代软件开发中,通常需要将应用部署到多个环境(如开发环境、测试环境、生产环境)。每个环境的配置可能不同,例如数据库连接、资源限制、镜像版本等。HelmChart提供了强大的模板化和参数化功能,可以轻松实现多环境部署。本文将详细介绍如何使用HelmChart实现Kubernetes应用的多环境配置,并通过实战演示完整的部署流程。©ivwdcwso(ID:u012172506)1.多环境部署的需求在</div>
                    </li>
                    <li><a href="/article/1882971050652790784.htm"
                           title="DigitalOcean Kubernetes现已支持VPC natvie集群" target="_blank">DigitalOcean Kubernetes现已支持VPC natvie集群</a>
                        <span class="text-muted">DO_Community</span>
<a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a>
                        <div>DigitalOceanKubernetes(DOKS)的VPCnatvie集群功能现已正式上线!这一新功能实现了DOKS集群与虚拟私有云(VPC)资源之间的无缝集成,提升了工作负载的网络灵活性和可扩展性。什么是VPCnatvie集群?VPCnatvie集群支持Kubernetes集群与VPC资源之间进行原生路由。这意味着你的DOKS集群可以作为现有VPC网络架构的自然扩展,提供更流畅的连接和更好</div>
                    </li>
                                <li><a href="/article/66.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/enum/1.htm">enum</a><a class="tag" taget="_blank" href="/search/annotation/1.htm">annotation</a>
                                    <div>前言:版本兼容,一直是迭代开发头疼的事,最近新版本加上了支持新题型,如果新创建一份问卷包含了新题型,那旧版本客户端就不支持,如果新创建的问卷不包含新题型,那么新旧客户端都支持。这里面我们通过给问卷类型枚举增加自定义注解的方式完成。顺便巩固下枚举与注解。 
 
一、枚举 
1.在创建枚举类的时候,该类已继承java.lang.Enum类,所以自定义枚举类无法继承别的类,但可以实现接口。 
 
   </div>
                                </li>
                                <li><a href="/article/193.htm"
                                       title="【Scala十七】Scala核心十一:下划线_的用法" target="_blank">【Scala十七】Scala核心十一:下划线_的用法</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/scala/1.htm">scala</a>
                                    <div>下划线_在Scala中广泛应用,_的基本含义是作为占位符使用。_在使用时是出问题非常多的地方,本文将不断完善_的使用场景以及所表达的含义 
  1. 在高阶函数中使用 
scala> val list = List(-3,8,7,9)
list: List[Int] = List(-3, 8, 7, 9)

scala> list.filter(_ > 7)
r</div>
                                </li>
                                <li><a href="/article/320.htm"
                                       title="web缓存基础:术语、http报头和缓存策略" target="_blank">web缓存基础:术语、http报头和缓存策略</a>
                                    <span class="text-muted">dalan_123</span>
<a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a>
                                    <div>对于很多人来说,去访问某一个站点,若是该站点能够提供智能化的内容缓存来提高用户体验,那么最终该站点的访问者将络绎不绝。缓存或者对之前的请求临时存储,是http协议实现中最核心的内容分发策略之一。分发路径中的组件均可以缓存内容来加速后续的请求,这是受控于对该内容所声明的缓存策略。接下来将讨web内容缓存策略的基本概念,具体包括如如何选择缓存策略以保证互联网范围内的缓存能够正确处理的您的内容,并谈论下</div>
                                </li>
                                <li><a href="/article/447.htm"
                                       title="crontab 问题" target="_blank">crontab 问题</a>
                                    <span class="text-muted">周凡杨</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/crontab/1.htm">crontab</a><a class="tag" taget="_blank" href="/search/unix/1.htm">unix</a>
                                    <div>  
一:  0481-079   Reached   a   symbol   that   is   not   expected.   
   
背景:  
*/5   *   *   *   *  /usr/IBMIHS/rsync.sh  </div>
                                </li>
                                <li><a href="/article/574.htm"
                                       title="让tomcat支持2级域名共享session" target="_blank">让tomcat支持2级域名共享session</a>
                                    <span class="text-muted">g21121</span>
<a class="tag" taget="_blank" href="/search/session/1.htm">session</a>
                                    <div>tomcat默认情况下是不支持2级域名共享session的,所有有些情况下登陆后从主域名跳转到子域名会发生链接session不相同的情况,但是只需修改几处配置就可以了。 
打开tomcat下conf下context.xml文件 
找到Context标签,修改为如下内容 
如果你的域名是www.test.com 
<Context sessionCookiePath="/path&q</div>
                                </li>
                                <li><a href="/article/701.htm"
                                       title="web报表工具FineReport常用函数的用法总结(数学和三角函数)" target="_blank">web报表工具FineReport常用函数的用法总结(数学和三角函数)</a>
                                    <span class="text-muted">老A不折腾</span>
<a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/finereport/1.htm">finereport</a><a class="tag" taget="_blank" href="/search/%E6%80%BB%E7%BB%93/1.htm">总结</a>
                                    <div>  
ABS 
ABS(number):返回指定数字的绝对值。绝对值是指没有正负符号的数值。 
Number:需要求出绝对值的任意实数。 
示例: 
ABS(-1.5)等于1.5。 
ABS(0)等于0。 
ABS(2.5)等于2.5。 
  
ACOS 
ACOS(number):返回指定数值的反余弦值。反余弦值为一个角度,返回角度以弧度形式表示。 
Number:需要返回角</div>
                                </li>
                                <li><a href="/article/828.htm"
                                       title="linux 启动java进程 sh文件" target="_blank">linux 启动java进程 sh文件</a>
                                    <span class="text-muted">墙头上一根草</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/shell/1.htm">shell</a><a class="tag" taget="_blank" href="/search/jar/1.htm">jar</a>
                                    <div>#!/bin/bash
#初始化服务器的进程PId变量
user_pid=0;
robot_pid=0;
loadlort_pid=0;
gateway_pid=0;

#########
#检查相关服务器是否启动成功
#说明:
#使用JDK自带的JPS命令及grep命令组合,准确查找pid
#jps 加 l 参数,表示显示java的完整包路径
#使用awk,分割出pid </div>
                                </li>
                                <li><a href="/article/955.htm"
                                       title="我的spring学习笔记5-如何使用ApplicationContext替换BeanFactory" target="_blank">我的spring学习笔记5-如何使用ApplicationContext替换BeanFactory</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/Spring+3+%E7%B3%BB%E5%88%97/1.htm">Spring 3 系列</a>
                                    <div>如何使用ApplicationContext替换BeanFactory? 
 
package onlyfun.caterpillar.device;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import</div>
                                </li>
                                <li><a href="/article/1082.htm"
                                       title="Linux 内存使用方法详细解析" target="_blank">Linux 内存使用方法详细解析</a>
                                    <span class="text-muted">annan211</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%86%85%E5%AD%98/1.htm">内存</a><a class="tag" taget="_blank" href="/search/Linux%E5%86%85%E5%AD%98%E8%A7%A3%E6%9E%90/1.htm">Linux内存解析</a>
                                    <div>来源 http://blog.jobbole.com/45748/ 
 
 

我是一名程序员,那么我在这里以一个程序员的角度来讲解Linux内存的使用。

一提到内存管理,我们头脑中闪出的两个概念,就是虚拟内存,与物理内存。这两个概念主要来自于linux内核的支持。

Linux在内存管理上份为两级,一级是线性区,类似于00c73000-00c88000,对应于虚拟内存,它实际上不占用</div>
                                </li>
                                <li><a href="/article/1209.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/%E5%87%BD%E6%95%B0/1.htm">函数</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E8%A1%A8%E6%9F%A5%E8%AF%A2/1.htm">单表查询</a>
                                    <div>  
  
创建数据库; 
      
--建表
create table bloguser(username varchar2(20),userage number(10),usersex char(2));

 
      创建bloguser表,里面有三个字段 
  
  
&nbs</div>
                                </li>
                                <li><a href="/article/1336.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/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/thread/1.htm">thread</a><a class="tag" taget="_blank" href="/search/java%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">java多线程</a>
                                    <div>一.进程和线程 
进程就是一个在内存中独立运行的程序,有自己的地址空间。如正在运行的写字板程序就是一个进程。 
“多任务”:指操作系统能同时运行多个进程(程序)。如WINDOWS系统可以同时运行写字板程序、画图程序、WORD、Eclipse等。 
线程:是进程内部单一的一个顺序控制流。 
线程和进程 
a.       每个进程都有独立的</div>
                                </li>
                                <li><a href="/article/1463.htm"
                                       title="fastjson简单使用实例" target="_blank">fastjson简单使用实例</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/fastjson/1.htm">fastjson</a>
                                    <div>一.简介 
        阿里巴巴fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库;包括“序列化”和“反序列化”两部分,它具备如下特征:     </div>
                                </li>
                                <li><a href="/article/1590.htm"
                                       title="【RPC框架Burlap】Spring集成Burlap" target="_blank">【RPC框架Burlap】Spring集成Burlap</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                                    <div>Burlap和Hessian同属于codehaus的RPC调用框架,但是Burlap已经几年不更新,所以Spring在4.0里已经将Burlap的支持置为Deprecated,所以在选择RPC框架时,不应该考虑Burlap了。 
这篇文章还是记录下Burlap的用法吧,主要是复制粘贴了Hessian与Spring集成一文,【RPC框架Hessian四】Hessian与Spring集成 
 </div>
                                </li>
                                <li><a href="/article/1717.htm"
                                       title="【Mahout一】基于Mahout 命令参数含义" target="_blank">【Mahout一】基于Mahout 命令参数含义</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/Mahout/1.htm">Mahout</a>
                                    <div>1. mahout seqdirectory 
  
    $ mahout seqdirectory 
        --input (-i) input               Path to job input directory(原始文本文件).
        --output (-o) output             The directory pathna</div>
                                </li>
                                <li><a href="/article/1844.htm"
                                       title="linux使用flock文件锁解决脚本重复执行问题" target="_blank">linux使用flock文件锁解决脚本重复执行问题</a>
                                    <span class="text-muted">ronin47</span>
<a class="tag" taget="_blank" href="/search/linux+lock%E3%80%80%E9%87%8D%E5%A4%8D%E6%89%A7%E8%A1%8C/1.htm">linux lock 重复执行</a>
                                    <div>linux的crontab命令,可以定时执行操作,最小周期是每分钟执行一次。关于crontab实现每秒执行可参考我之前的文章《linux crontab 实现每秒执行》现在有个问题,如果设定了任务每分钟执行一次,但有可能一分钟内任务并没有执行完成,这时系统会再执行任务。导致两个相同的任务在执行。 
例如:       
<?         
// 
test
.php      </div>
                                </li>
                                <li><a href="/article/1971.htm"
                                       title="java-74-数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字" target="_blank">java-74-数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>

public class OcuppyMoreThanHalf {

	/**
	 * Q74 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字
	 * two solutions:
	 * 1.O(n)
	 * see <beauty of coding>--每次删除两个不同的数字,不改变数组的特性
	 * 2.O(nlogn)
	 * 排序。中间</div>
                                </li>
                                <li><a href="/article/2098.htm"
                                       title="linux 系统相关命令" target="_blank">linux 系统相关命令</a>
                                    <span class="text-muted">candiio</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                                    <div>系统参数 
cat /proc/cpuinfo  cpu相关参数 
cat /proc/meminfo 内存相关参数 
cat /proc/loadavg 负载情况 
性能参数 
1)top 
M:按内存使用排序 
P:按CPU占用排序 
1:显示各CPU的使用情况 
k:kill进程 
o:更多排序规则 
回车:刷新数据 
2)ulimit 
ulimit -a:显示本用户的系统限制参</div>
                                </li>
                                <li><a href="/article/2225.htm"
                                       title="[经营与资产]保持独立性和稳定性对于软件开发的重要意义" target="_blank">[经营与资产]保持独立性和稳定性对于软件开发的重要意义</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91/1.htm">软件开发</a>
                                    <div> 
 
     一个软件的架构从诞生到成熟,中间要经过很多次的修正和改造 
 
      如果在这个过程中,外界的其它行业的资本不断的介入这种软件架构的升级过程中 
    
      那么软件开发者原有的设计思想和开发路线</div>
                                </li>
                                <li><a href="/article/2352.htm"
                                       title="在CentOS5.5上编译OpenJDK6" target="_blank">在CentOS5.5上编译OpenJDK6</a>
                                    <span class="text-muted">Cwind</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/OpenJDK/1.htm">OpenJDK</a>
                                    <div>几番周折终于在自己的CentOS5.5上编译成功了OpenJDK6,将编译过程和遇到的问题作一简要记录,备查。  
0. OpenJDK介绍 
OpenJDK是Sun(现Oracle)公司发布的基于GPL许可的Java平台的实现。其优点: 
1、它的核心代码与同时期Sun(-> Oracle)的产品版基本上是一样的,血统纯正,不用担心性能问题,也基本上没什么兼容性问题;(代码上最主要的差异是</div>
                                </li>
                                <li><a href="/article/2479.htm"
                                       title="java乱码问题" target="_blank">java乱码问题</a>
                                    <span class="text-muted">dashuaifu</span>
<a class="tag" taget="_blank" href="/search/java%E4%B9%B1%E7%A0%81%E9%97%AE%E9%A2%98/1.htm">java乱码问题</a><a class="tag" taget="_blank" href="/search/js%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81/1.htm">js中文乱码</a>
                                    <div>swfupload上传文件参数值为中文传递到后台接收中文乱码               在js中用setPostParams({"tag" : encodeURI( document.getElementByIdx_x("filetag").value,"utf-8")}); 
然后在servlet中String t</div>
                                </li>
                                <li><a href="/article/2606.htm"
                                       title="cygwin很多命令显示command not found的解决办法" target="_blank">cygwin很多命令显示command not found的解决办法</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/cygwin/1.htm">cygwin</a>
                                    <div>cygwin很多命令显示command not found的解决办法 
  
修改cygwin.BAT文件如下 
@echo off 
D: 
set CYGWIN=tty notitle glob 
set PATH=%PATH%;d:\cygwin\bin;d:\cygwin\sbin;d:\cygwin\usr\bin;d:\cygwin\usr\sbin;d:\cygwin\us</div>
                                </li>
                                <li><a href="/article/2733.htm"
                                       title="[介绍]从 Yii 1.1 升级" target="_blank">[介绍]从 Yii 1.1 升级</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/yii2/1.htm">yii2</a>
                                    <div>2.0 版框架是完全重写的,在 1.1 和 2.0 两个版本之间存在相当多差异。因此从 1.1 版升级并不像小版本间的跨越那么简单,通过本指南你将会了解两个版本间主要的不同之处。 
如果你之前没有用过 Yii 1.1,可以跳过本章,直接从"入门篇"开始读起。 
请注意,Yii 2.0 引入了很多本章并没有涉及到的新功能。强烈建议你通读整部权威指南来了解所有新特性。这样有可能会发</div>
                                </li>
                                <li><a href="/article/2860.htm"
                                       title="Linux SSH免登录配置总结" target="_blank">Linux SSH免登录配置总结</a>
                                    <span class="text-muted">eksliang</span>
<a class="tag" taget="_blank" href="/search/ssh-keygen/1.htm">ssh-keygen</a><a class="tag" taget="_blank" href="/search/Linux+SSH%E5%85%8D%E7%99%BB%E5%BD%95%E8%AE%A4%E8%AF%81/1.htm">Linux SSH免登录认证</a><a class="tag" taget="_blank" href="/search/Linux+SSH%E4%BA%92%E4%BF%A1/1.htm">Linux SSH互信</a>
                                    <div>转载请出自出处:http://eksliang.iteye.com/blog/2187265 一、原理 
     我们使用ssh-keygen在ServerA上生成私钥跟公钥,将生成的公钥拷贝到远程机器ServerB上后,就可以使用ssh命令无需密码登录到另外一台机器ServerB上。 
     生成公钥与私钥有两种加密方式,第一种是</div>
                                </li>
                                <li><a href="/article/2987.htm"
                                       title="手势滑动销毁Activity" target="_blank">手势滑动销毁Activity</a>
                                    <span class="text-muted">gundumw100</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                    <div>老是效仿ios,做android的真悲催! 
有需求:需要手势滑动销毁一个Activity 
怎么办尼?自己写? 
不用~,网上先问一下百度。 
结果: 
http://blog.csdn.net/xiaanming/article/details/20934541 
 
 
首先将你需要的Activity继承SwipeBackActivity,它会在你的布局根目录新增一层SwipeBackLay</div>
                                </li>
                                <li><a href="/article/3114.htm"
                                       title="JavaScript变换表格边框颜色" target="_blank">JavaScript变换表格边框颜色</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/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a>
                                    <div>效果查看:http://hovertree.com/texiao/js/2.htm代码如下,保存到HTML文件也可以查看效果: 
<html>
<head>
<meta charset="utf-8">
<title>表格边框变换颜色代码-何问起</title>
</head>
<body&</div>
                                </li>
                                <li><a href="/article/3241.htm"
                                       title="Kafka Rest : Confluent" target="_blank">Kafka Rest : Confluent</a>
                                    <span class="text-muted">kane_xie</span>
<a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a><a class="tag" taget="_blank" href="/search/REST/1.htm">REST</a><a class="tag" taget="_blank" href="/search/confluent/1.htm">confluent</a>
                                    <div>最近拿到一个kafka rest的需求,但kafka暂时还没有提供rest api(应该是有在开发中,毕竟rest这么火),上网搜了一下,找到一个Confluent Platform,本文简单介绍一下安装。 
这里插一句,给大家推荐一个九尾搜索,原名叫谷粉SOSO,不想fanqiang谷歌的可以用这个。以前在外企用谷歌用习惯了,出来之后用度娘搜技术问题,那匹配度简直感人。 
 
 环境声明:Ubu</div>
                                </li>
                                <li><a href="/article/3368.htm"
                                       title="Calender不是单例" target="_blank">Calender不是单例</a>
                                    <span class="text-muted">men4661273</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B/1.htm">单例</a><a class="tag" taget="_blank" href="/search/Calender/1.htm">Calender</a>
                                    <div>         在我们使用Calender的时候,使用过Calendar.getInstance()来获取一个日期类的对象,这种方式跟单例的获取方式一样,那么它到底是不是单例呢,如果是单例的话,一个对象修改内容之后,另外一个线程中的数据不久乱套了吗?从试验以及源码中可以得出,Calendar不是单例。 
测试: 
  Calendar c1 = </div>
                                </li>
                                <li><a href="/article/3495.htm"
                                       title="线程内存和主内存之间联系" target="_blank">线程内存和主内存之间联系</a>
                                    <span class="text-muted">qifeifei</span>
<a class="tag" taget="_blank" href="/search/java+thread/1.htm">java thread</a>
                                    <div>1, java多线程共享主内存中变量的时候,一共会经过几个阶段,    
  lock:将主内存中的变量锁定,为一个线程所独占。 
  unclock:将lock加的锁定解除,此时其它的线程可以有机会访问此变量。 
  read:将主内存中的变量值读到工作内存当中。 
  load:将read读取的值保存到工作内存中的变量副本中。 
  </div>
                                </li>
                                <li><a href="/article/3622.htm"
                                       title="schedule和scheduleAtFixedRate" target="_blank">schedule和scheduleAtFixedRate</a>
                                    <span class="text-muted">tangqi609567707</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/timer/1.htm">timer</a><a class="tag" taget="_blank" href="/search/schedule/1.htm">schedule</a>
                                    <div>原文地址:http://blog.csdn.net/weidan1121/article/details/527307 
import java.util.Timer;import java.util.TimerTask;import java.util.Date; 
/** * @author vincent */public class TimerTest { 
 </div>
                                </li>
                                <li><a href="/article/3749.htm"
                                       title="erlang 部署" target="_blank">erlang 部署</a>
                                    <span class="text-muted">wudixiaotie</span>
<a class="tag" taget="_blank" href="/search/erlang/1.htm">erlang</a>
                                    <div>1.如果在启动节点的时候报这个错 : 
{"init terminating in do_boot",{'cannot load',elf_format,get_files}} 
则需要在reltool.config中加入 
{app, hipe, [{incl_cond, exclude}]}, 
  
  
2.当generate时,遇到: 
ERROR</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>