【k8s】4、组件

第四章 组件/实战入门

本章节将介绍如何在kubernetes集群中部署一个nginx服务,并且能够对其进行访问。

一、Namespace

​ Namespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离

​ 默认情况下,kubernetes集群中的所有的Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互相的访问,那此时就可以将两个Pod划分到不同的namespace下。kubernetes通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的"组",以方便不同的组的资源进行隔离使用和管理。

​ 可以通过kubernetes的授权机制,将不同的namespace交给不同租户进行管理,这样就实现了多租户的资源隔离。此时还能结合kubernetes的资源配额机制,限定不同租户能占用的资源,例如CPU使用量、内存使用量等等,来实现租户可用资源的管理。

【k8s】4、组件_第1张图片

kubernetes在集群启动之后,会默认创建几个namespace

[root@master ~]# kubectl  get namespace
NAME              STATUS   AGE
default           Active   45h     #  所有未指定Namespace的对象都会被分配在default命名空间
kube-node-lease   Active   45h     #  集群节点之间的心跳维护,v1.13开始引入
kube-public       Active   45h     #  此命名空间下的资源可以被所有人访问(包括未认证用户)
kube-system       Active   45h     #  所有由Kubernetes系统创建的资源都处于这个命名空间

下面来看namespace资源的具体操作:

查看

# 1 查看所有的ns  命令:kubectl get ns
[root@master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   45h # 创建ns多长时间了
kube-node-lease   Active   45h
kube-public       Active   45h     
kube-system       Active   45h     

# 2 查看指定的ns   命令:kubectl get ns ns名称
[root@master ~]# kubectl get ns default
NAME      STATUS   AGE
default   Active   45h

# 3 指定输出格式  命令:kubectl get ns ns名称  -o 格式参数
# kubernetes支持的格式有很多,比较常见的是wide、json、yaml
[root@master ~]# kubectl get ns default -o yaml
apiVersion: v1
kind: Namespace
metadata:
  creationTimestamp: "2020-04-05T04:44:16Z"
  name: default
  resourceVersion: "151"
  selfLink: /api/v1/namespaces/default
  uid: 7405f73a-e486-43d4-9db6-145f1409f090
spec:
  finalizers:
  - kubernetes
status:
  phase: Active
  
# 4 查看ns详情  命令:kubectl describe ns ns名称
[root@master ~]# kubectl describe ns default
Name:         default
Labels:       
Annotations:  
Status:       Active  # Active 命名空间正在使用中  Terminating 正在删除命名空间

# ResourceQuota 针对namespace做的资源限制
# LimitRange针对namespace中的每个组件做的资源限制
No resource quota.
No LimitRange resource.

创建

# 创建namespace
[root@master ~]# kubectl create ns dev
namespace/dev created

删除

# 删除namespace
[root@master ~]# kubectl delete ns dev
namespace "dev" deleted

配置方式

首先准备一个yaml文件:ns-dev.yaml

apiVersion: v1
kind: Namespace  #  ns的配置
metadata:
  name: dev

然后就可以执行对应的创建和删除命令了:

​ 创建:kubectl create -f ns-dev.yaml

​ 删除:kubectl delete -f ns-dev.yaml

二、Pod

Pod是kubernetes集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中。

Pod可以认为是容器的封装,一个Pod中可以存在多个容器。

一个pod中容器共享网络命名空间

【k8s】4、组件_第2张图片

kubernetes在集群启动之后,集群中的各个组件也都是以Pod方式运行的。可以通过下面命令查看:

# 一主二从情况下
[root@master ~]# kubectl get pod -n kube-system
NAMESPACE     NAME                             READY   STATUS    RESTARTS   AGE
kube-system   coredns-6955765f44-68g6v         1/1     Running   0          2d1h
kube-system   coredns-6955765f44-cs5r8         1/1     Running   0          2d1h
kube-system   etcd-master                      1/1     Running   0          2d1h  # 存放信息
kube-system   kube-apiserver-master            1/1     Running   0          2d1h  # 访问入口
kube-system   kube-controller-manager-master   1/1     Running   0          2d1h  # 具体执行的
kube-system   kube-flannel-ds-amd64-47r25      1/1     Running   0          2d1h
kube-system   kube-flannel-ds-amd64-ls5lh      1/1     Running   0          2d1h
kube-system   kube-proxy-685tk                 1/1     Running   0          2d1h
kube-system   kube-proxy-87spt                 1/1     Running   0          2d1h
kube-system   kube-scheduler-master            1/1     Running   0          2d1h  # 请求过来选择哪个节点运行,调度
创建并运行

kubernetes没有提供单独运行Pod的命令,都是通过Pod控制器来实现的

# 命令格式: kubectl run (pod控制器名称) [参数] 
# --image  指定Pod的镜像
# --port   指定端口
# --namespace  指定namespace
[root@master ~]# kubectl run nginx --image=nginx:1.17.1 --port=80 --namespace dev 
deployment.apps/nginx created

查看pod信息

# 查看Pod基本信息
[root@master ~]# kubectl get pods -n dev
NAME                     READY   STATUS    RESTARTS   AGE
nginx-5ff7956ff6-fg2db   1/1     Running   0          43s
# 不计算根容器

# 查看Pod的详细信息
[root@master ~]# kubectl describe pod nginx-5ff7956ff6-fg2db -n dev
Name:         nginx-5ff7956ff6-fg2db
Namespace:    dev
Priority:     0
Node:         node1/192.168.109.101
Start Time:   Wed, 08 Apr 2020 09:29:24 +0800
Labels:       pod-template-hash=5ff7956ff6
              run=nginx
Annotations:  
Status:       Running
IP:           10.244.1.23
IPs:
  IP:           10.244.1.23
Controlled By:  ReplicaSet/nginx-5ff7956ff6
Containers:
  nginx:
    Container ID:   docker://4c62b8c0648d2512380f4ffa5da2c99d16e05634979973449c98e9b829f6253c
    Image:          nginx:1.17.1
    Image ID:       docker-pullable://nginx@sha256:485b610fefec7ff6c463ced9623314a04ed67e3945b9c08d7e53a47f6d108dc7
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Wed, 08 Apr 2020 09:30:01 +0800
    Ready:          True
    Restart Count:  0
    Environment:    
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-hwvvw (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  default-token-hwvvw:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-hwvvw
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:  # 这块信息可以用来排错
  Type    Reason     Age        From               Message
  ----    ------     ----       ----               -------
  Normal  Scheduled    default-scheduler  Successfully assigned dev/nginx-5ff7956ff6-fg2db to node1
  Normal  Pulling    4m11s      kubelet, node1     Pulling image "nginx:1.17.1"
  Normal  Pulled     3m36s      kubelet, node1     Successfully pulled image "nginx:1.17.1"
  Normal  Created    3m36s      kubelet, node1     Created container nginx
  Normal  Started    3m36s      kubelet, node1     Started container nginx
访问Pod
# 获取podIP
[root@master ~]# kubectl get pods -n dev -o wide
NAME                     READY   STATUS    RESTARTS   AGE    IP             NODE    ... 
nginx-5ff7956ff6-fg2db   1/1     Running   0          190s   10.244.1.23   node1   ...

#访问POD
[root@master ~]# curl http://10.244.1.23:80
<!DOCTYPE html>


	Welcome to nginx<span class="token operator">!</span><<span class="token operator">/</span>title>
<<span class="token operator">/</span>head>
<body>
	<p><em>Thank you <span class="token keyword">for</span> <span class="token keyword">using</span> nginx<span class="token punctuation">.</span><<span class="token operator">/</span>em><<span class="token operator">/</span>p>
<<span class="token operator">/</span>body>
<<span class="token operator">/</span>html>
</code></pre> 
  <h5><strong>删除指定Pod</strong></h5> 
  <pre><code class="prism language-powershell"><span class="token comment"># 删除指定Pod</span>
<span class="token namespace">[root@master ~]</span><span class="token comment"># kubectl delete pod nginx-5ff7956ff6-fg2db -n dev</span>
pod <span class="token string">"nginx-5ff7956ff6-fg2db"</span> deleted

<span class="token comment"># 此时,显示删除Pod成功,但是再查询,发现又新产生了一个 </span>
<span class="token namespace">[root@master ~]</span><span class="token comment"># kubectl get pods -n dev</span>
NAME                     READY   STATUS    RESTARTS   AGE
nginx<span class="token operator">-</span>5ff7956ff6<span class="token operator">-</span>jj4ng   1<span class="token operator">/</span>1     Running   0          21s

<span class="token comment"># 这是因为当前Pod是由Pod控制器创建的,控制器会监控Pod状况,一旦发现Pod死亡,会立即重建</span>
<span class="token comment"># 此时要想删除Pod,必须删除Pod控制器</span>

<span class="token comment"># 先来查询一下当前namespace下的Pod控制器</span>
<span class="token namespace">[root@master ~]</span><span class="token comment"># kubectl get deploy -n  dev</span>
NAME    READY   UP<span class="token operator">-</span>TO<span class="token operator">-</span>DATE   AVAILABLE   AGE
nginx   1<span class="token operator">/</span>1     1            1           9m7s

<span class="token comment"># 接下来,删除此PodPod控制器</span>
<span class="token namespace">[root@master ~]</span><span class="token comment"># kubectl delete deploy nginx -n dev</span>
deployment<span class="token punctuation">.</span>apps <span class="token string">"nginx"</span> deleted

<span class="token comment"># 稍等片刻,再查询Pod,发现Pod被删除了</span>
<span class="token namespace">[root@master ~]</span><span class="token comment"># kubectl get pods -n dev</span>
No resources found in dev namespace<span class="token punctuation">.</span>
</code></pre> 
  <h5><strong>配置操作</strong></h5> 
  <blockquote> 
   <p>命令行运行没法单独启动一个pod(没有控制器),但是yaml可以,</p> 
  </blockquote> 
  <p>创建一个pod-nginx.yaml,内容如下:</p> 
  <pre><code class="prism language-yaml"><span class="token key atrule">apiVersion</span><span class="token punctuation">:</span> v1
<span class="token key atrule">kind</span><span class="token punctuation">:</span> Pod
<span class="token key atrule">metadata</span><span class="token punctuation">:</span>
  <span class="token key atrule">name</span><span class="token punctuation">:</span> nginx
  <span class="token key atrule">namespace</span><span class="token punctuation">:</span> dev
<span class="token key atrule">spec</span><span class="token punctuation">:</span>
  <span class="token key atrule">containers</span><span class="token punctuation">:</span>
  <span class="token punctuation">-</span> <span class="token key atrule">image</span><span class="token punctuation">:</span> nginx<span class="token punctuation">:</span>1.17.1
    <span class="token key atrule">name</span><span class="token punctuation">:</span> pod
    <span class="token key atrule">ports</span><span class="token punctuation">:</span>
    <span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> nginx<span class="token punctuation">-</span>port
      <span class="token key atrule">containerPort</span><span class="token punctuation">:</span> <span class="token number">80</span>
      <span class="token key atrule">protocol</span><span class="token punctuation">:</span> TCP
</code></pre> 
  <p>然后就可以执行对应的创建和删除命令了:</p> 
  <p>​ 创建:kubectl create -f pod-nginx.yaml</p> 
  <p>​ 删除:kubectl delete -f pod-nginx.yaml</p> 
  <h2>三、Label</h2> 
  <p>Label是kubernetes系统中的一个重要概念。它的作用就是在资源上添加标识,用来对它们进行区分和选择。</p> 
  <blockquote> 
   <p>前台、后台</p> 
   <p>ns无法通信</p> 
  </blockquote> 
  <p>Label的特点:</p> 
  <ul> 
   <li>一个Label会以key/value键值对的形式附加到各种对象上,如Node、Pod、Service等等</li> 
   <li>一个资源对象可以定义任意数量的Label ,同一个Label也可以被添加到任意数量的资源对象上去</li> 
   <li>Label通常在资源对象定义时确定,当然也可以在对象创建后动态添加或者删除</li> 
  </ul> 
  <p>可以通过Label实现资源的多维度分组,以便灵活、方便地进行资源分配、调度、配置、部署等管理工作。</p> 
  <blockquote> 
   <p>一些常用的Label 示例如下:</p> 
   <ul> 
    <li>版本标签:“version”:“release”, “version”:“stable”…</li> 
    <li>环境标签:“environment”:“dev”,“environment”:“test”,“environment”:“pro”</li> 
    <li>架构标签:“tier”:“frontend”,“tier”:“backend”</li> 
   </ul> 
  </blockquote> 
  <p>标签定义完毕之后,还要考虑到标签的选择,这就要使用到<code>Label Selector</code>,即:</p> 
  <ul> 
   <li>Label用于给某个资源对象定义标识</li> 
   <li>Label Selector用于查询和筛选拥有某些标签的资源对象</li> 
  </ul> 
  <p>当前有两种Label Selector:</p> 
  <ul> 
   <li> <p>基于等式的Label Selector</p> <p>name = slave: 选择所有包含Label中key="name"且value="slave"的对象</p> <p>env != production: 选择所有包括Label中的key="env"且value不等于"production"的对象</p> </li> 
   <li> <p>基于集合的Label Selector</p> <p>name in (master, slave): 选择所有包含Label中的key="name"且value="master"或"slave"的对象</p> <p>name not in (frontend): 选择所有包含Label中的key="name"且value不等于"frontend"的对象</p> </li> 
  </ul> 
  <p>标签的选择条件可以使用多个,此时将多个Label Selector进行组合,使用逗号","进行分隔即可。例如:</p> 
  <p>​ name=slave,env!=production</p> 
  <p>​ name not in (frontend),env!=production</p> 
  <p><strong>命令方式</strong></p> 
  <pre><code class="prism language-powershell"><span class="token comment"># 为pod资源打标签</span>
<span class="token namespace">[root@master ~]</span><span class="token comment"># kubectl label pod nginx-pod version=1.0 -n dev</span>
pod<span class="token operator">/</span>nginx<span class="token operator">-</span>pod labeled

<span class="token comment"># 为pod资源更新标签</span>
<span class="token namespace">[root@master ~]</span><span class="token comment"># kubectl label pod nginx-pod version=2.0 -n dev --overwrite</span>
pod<span class="token operator">/</span>nginx<span class="token operator">-</span>pod labeled

<span class="token comment"># 查看标签</span>
<span class="token namespace">[root@master ~]</span><span class="token comment"># kubectl get pod nginx-pod  -n dev --show-labels</span>
NAME        READY   STATUS    RESTARTS   AGE   LABELS
nginx<span class="token operator">-</span>pod   1<span class="token operator">/</span>1     Running   0          10m   version=2<span class="token punctuation">.</span>0

<span class="token comment"># 筛选标签 -l</span>
<span class="token namespace">[root@master ~]</span><span class="token comment"># kubectl get pod -n dev -l version=2.0  --show-labels</span>
NAME        READY   STATUS    RESTARTS   AGE   LABELS
nginx<span class="token operator">-</span>pod   1<span class="token operator">/</span>1     Running   0          17m   version=2<span class="token punctuation">.</span>0
<span class="token namespace">[root@master ~]</span><span class="token comment"># kubectl get pod -n dev -l version!=2.0 --show-labels</span>
No resources found in dev namespace<span class="token punctuation">.</span>

<span class="token comment">#删除标签 version-</span>
<span class="token namespace">[root@master ~]</span><span class="token comment"># kubectl label pod nginx-pod version- -n dev</span>
pod<span class="token operator">/</span>nginx<span class="token operator">-</span>pod labeled
</code></pre> 
  <p><strong>配置方式</strong></p> 
  <pre><code class="prism language-yaml"><span class="token key atrule">apiVersion</span><span class="token punctuation">:</span> v1
<span class="token key atrule">kind</span><span class="token punctuation">:</span> Pod
<span class="token key atrule">metadata</span><span class="token punctuation">:</span>
  <span class="token key atrule">name</span><span class="token punctuation">:</span> nginx
  <span class="token key atrule">namespace</span><span class="token punctuation">:</span> dev
  <span class="token key atrule">labels</span><span class="token punctuation">:</span>
    <span class="token key atrule">version</span><span class="token punctuation">:</span> <span class="token string">"3.0"</span> 
    <span class="token key atrule">env</span><span class="token punctuation">:</span> <span class="token string">"test"</span>
<span class="token key atrule">spec</span><span class="token punctuation">:</span>
  <span class="token key atrule">containers</span><span class="token punctuation">:</span>
  <span class="token punctuation">-</span> <span class="token key atrule">image</span><span class="token punctuation">:</span> nginx<span class="token punctuation">:</span>1.17.1
    <span class="token key atrule">name</span><span class="token punctuation">:</span> pod
    <span class="token key atrule">ports</span><span class="token punctuation">:</span>
    <span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> nginx<span class="token punctuation">-</span>port
      <span class="token key atrule">containerPort</span><span class="token punctuation">:</span> <span class="token number">80</span>
      <span class="token key atrule">protocol</span><span class="token punctuation">:</span> TCP
</code></pre> 
  <p>然后就可以执行对应的更新命令了:kubectl apply -f pod-nginx.yaml</p> 
  <h2>四、Deployment</h2> 
  <p>​ 在kubernetes中,Pod是最小的控制单元,但是kubernetes很少直接控制Pod,一般都是通过Pod控制器来完成的。Pod控制器用于pod的管理,确保pod资源符合预期的状态,当pod的资源出现故障时,会尝试进行重启或重建pod。</p> 
  <p>​ 在kubernetes中Pod控制器的种类有很多,本章节只介绍一种:Deployment。</p> 
  <p><a href="http://img.e-com-net.com/image/info8/5614a164cb464fd293c5c9bcd79141b0.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/5614a164cb464fd293c5c9bcd79141b0.jpg" alt="【k8s】4、组件_第3张图片" width="650" height="356" style="border:1px solid black;"></a></p> 
  <h5><strong>命令操作</strong></h5> 
  <pre><code class="prism language-powershell"><span class="token comment"># 命令格式: kubectl run deployment名称  [参数] </span>
<span class="token comment"># --image  指定pod的镜像</span>
<span class="token comment"># --port   指定端口</span>
<span class="token comment"># --replicas  指定创建pod数量</span>
<span class="token comment"># --namespace  指定namespace</span>
<span class="token namespace">[root@master ~]</span><span class="token comment"># kubectl run nginx --image=nginx:1.17.1 --port=80 --replicas=3 -n dev</span>
deployment<span class="token punctuation">.</span>apps<span class="token operator">/</span>nginx created

<span class="token comment"># 查看创建的Pod</span>
<span class="token namespace">[root@master ~]</span><span class="token comment"># kubectl get pods -n dev</span>
NAME                     READY   STATUS    RESTARTS   AGE
nginx<span class="token operator">-</span>5ff7956ff6<span class="token operator">-</span>6k8cb   1<span class="token operator">/</span>1     Running   0          19s
nginx<span class="token operator">-</span>5ff7956ff6<span class="token operator">-</span>jxfjt   1<span class="token operator">/</span>1     Running   0          19s
nginx<span class="token operator">-</span>5ff7956ff6<span class="token operator">-</span>v6jqw   1<span class="token operator">/</span>1     Running   0          19s

<span class="token comment"># 查看deployment的信息</span>
<span class="token namespace">[root@master ~]</span><span class="token comment"># kubectl get deploy -n dev</span>
NAME    READY   UP<span class="token operator">-</span>TO<span class="token operator">-</span>DATE   AVAILABLE   AGE
nginx   3<span class="token operator">/</span>3     3            3           2m42s

<span class="token comment"># UP-TO-DATE:成功升级的副本数量</span>
<span class="token comment"># AVAILABLE:可用副本的数量</span>
<span class="token namespace">[root@master ~]</span><span class="token comment"># kubectl get deploy -n dev -o wide</span>
NAME    READY UP<span class="token operator">-</span>TO<span class="token operator">-</span>DATE  AVAILABLE   AGE     CONTAINERS   IMAGES              SELECTOR
nginx   3<span class="token operator">/</span>3     3         3           2m51s   nginx        nginx:1<span class="token punctuation">.</span>17<span class="token punctuation">.</span>1        run=nginx

<span class="token comment"># 查看deployment的详细信息</span>
<span class="token namespace">[root@master ~]</span><span class="token comment"># kubectl describe deploy nginx -n dev</span>
Name:                   nginx
Namespace:              dev
CreationTimestamp:      Wed<span class="token punctuation">,</span> 08 Apr 2020 11:14:14 <span class="token operator">+</span>0800
Labels:                 run=nginx
Annotations:            deployment<span class="token punctuation">.</span>kubernetes<span class="token punctuation">.</span>io<span class="token operator">/</span>revision: 1
Selector:               run=nginx
Replicas:               3 desired <span class="token punctuation">|</span> 3 updated <span class="token punctuation">|</span> 3 total <span class="token punctuation">|</span> 3 available <span class="token punctuation">|</span> 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25<span class="token operator">%</span> max unavailable<span class="token punctuation">,</span> 25<span class="token operator">%</span> max surge
Pod Template:
  Labels:  run=nginx
  Containers:
   nginx:
    Image:        nginx:1<span class="token punctuation">.</span>17<span class="token punctuation">.</span>1
    Port:         80<span class="token operator">/</span>TCP
    Host Port:    0<span class="token operator">/</span>TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  <span class="token function">Type</span>           Status  Reason
  <span class="token operator">--</span>-<span class="token operator">-</span>           <span class="token operator">--</span>-<span class="token operator">--</span><span class="token operator">-</span>  <span class="token operator">--</span>-<span class="token operator">--</span><span class="token operator">-</span>
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   nginx<span class="token operator">-</span>5ff7956ff6 <span class="token punctuation">(</span>3<span class="token operator">/</span>3 replicas created<span class="token punctuation">)</span>
Events:
  <span class="token function">Type</span>    Reason             Age    <span class="token keyword">From</span>                   Message
  <span class="token operator">--</span>-<span class="token operator">-</span>    <span class="token operator">--</span>-<span class="token operator">--</span><span class="token operator">-</span>             <span class="token operator">--</span>-<span class="token operator">-</span>   <span class="token operator">--</span>-<span class="token operator">-</span>                   <span class="token operator">--</span>-<span class="token operator">--</span>-<span class="token operator">-</span>
  Normal  ScalingReplicaSet  5m43s  deployment<span class="token operator">-</span>controller  Scaled up replicaset nginx<span class="token operator">-</span>5ff7956ff6 to 3
  
<span class="token comment"># 删除 </span>
<span class="token namespace">[root@master ~]</span><span class="token comment"># kubectl delete deploy nginx -n dev</span>
deployment<span class="token punctuation">.</span>apps <span class="token string">"nginx"</span> deleted
</code></pre> 
  <h5><strong>配置操作</strong></h5> 
  <p>创建一个deploy-nginx.yaml,内容如下:</p> 
  <pre><code class="prism language-yaml"><span class="token key atrule">apiVersion</span><span class="token punctuation">:</span> apps/v1
<span class="token key atrule">kind</span><span class="token punctuation">:</span> Deployment
<span class="token key atrule">metadata</span><span class="token punctuation">:</span>
  <span class="token key atrule">name</span><span class="token punctuation">:</span> nginx
  <span class="token key atrule">namespace</span><span class="token punctuation">:</span> dev
<span class="token key atrule">spec</span><span class="token punctuation">:</span>
  <span class="token key atrule">replicas</span><span class="token punctuation">:</span> <span class="token number">3</span>
  <span class="token key atrule">selector</span><span class="token punctuation">:</span>
    <span class="token key atrule">matchLabels</span><span class="token punctuation">:</span>
      <span class="token key atrule">run</span><span class="token punctuation">:</span> nginx <span class="token comment"># 通过这里和下面的标签建立关系</span>
  <span class="token key atrule">template</span><span class="token punctuation">:</span>
    <span class="token key atrule">metadata</span><span class="token punctuation">:</span>
      <span class="token key atrule">labels</span><span class="token punctuation">:</span>
        <span class="token key atrule">run</span><span class="token punctuation">:</span> nginx  <span class="token comment"># 被选择</span>
    <span class="token key atrule">spec</span><span class="token punctuation">:</span>
      <span class="token key atrule">containers</span><span class="token punctuation">:</span>
      <span class="token punctuation">-</span> <span class="token key atrule">image</span><span class="token punctuation">:</span> nginx<span class="token punctuation">:</span>1.17.1
        <span class="token key atrule">name</span><span class="token punctuation">:</span> nginx
        <span class="token key atrule">ports</span><span class="token punctuation">:</span>
        <span class="token punctuation">-</span> <span class="token key atrule">containerPort</span><span class="token punctuation">:</span> <span class="token number">80</span>
          <span class="token key atrule">protocol</span><span class="token punctuation">:</span> TCP
</code></pre> 
  <p>然后就可以执行对应的创建和删除命令了:</p> 
  <p>​ 创建:kubectl create -f deploy-nginx.yaml</p> 
  <p>​ 删除:kubectl delete -f deploy-nginx.yaml</p> 
  <h2>五、Service</h2> 
  <p>通过上节课的学习,已经能够利用Deployment来创建一组Pod来提供具有高可用性的服务。</p> 
  <p>虽然每个Pod都会分配一个单独的Pod IP,然而却存在如下两问题:</p> 
  <ul> 
   <li>Pod IP 会随着Pod的重建产生变化</li> 
   <li>Pod IP 仅仅是集群内可见的虚拟IP,外部无法访问(主从结点外的机器无法访问)</li> 
  </ul> 
  <p>这样对于访问这个服务带来了难度。因此,kubernetes设计了Service来解决这个问题。</p> 
  <p>Service可以看作是一组同类Pod<strong>对外的访问接口</strong>。借助Service,应用可以方便地实现服务发现和负载均衡。</p> 
  <p><a href="http://img.e-com-net.com/image/info8/92037562a9b34020b3188d5732faac49.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/92037562a9b34020b3188d5732faac49.jpg" alt="【k8s】4、组件_第4张图片" width="650" height="296" style="border:1px solid black;"></a></p> 
  <blockquote> 
   <p>deployment和service都通过标签选择器label selector来选择pod</p> 
  </blockquote> 
  <h5>内网ip</h5> 
  <p><strong>操作一:创建集群内部可访问的Service</strong>(指的是如master可以访问,外网用户不可访问)</p> 
  <ul> 
   <li>–name是service名称</li> 
   <li>–port和service的端口,</li> 
   <li>–target-port是pod的端口</li> 
  </ul> 
  <pre><code class="prism language-powershell"><span class="token comment"># 暴露Service  # 通过deployment间接选择要保留的端口  # --type=ClusterIP</span>
<span class="token namespace">[root@master ~]</span><span class="token comment"># kubectl expose deploy nginx --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n dev</span>
service<span class="token operator">/</span>svc<span class="token operator">-</span>nginx1 exposed

<span class="token comment"># 查看service #svc是service的缩写</span>
<span class="token namespace">[root@master ~]</span><span class="token comment"># kubectl get svc svc-nginx -n dev -o wide</span>
NAME         <span class="token function">TYPE</span>        CLUSTER<span class="token operator">-</span>IP       EXTERNAL<span class="token operator">-</span>IP   PORT<span class="token punctuation">(</span>S<span class="token punctuation">)</span>   AGE     SELECTOR
svc<span class="token operator">-</span>nginx1   ClusterIP   10<span class="token punctuation">.</span>109<span class="token punctuation">.</span>179<span class="token punctuation">.</span>231   <none>        80<span class="token operator">/</span>TCP    3m51s   run=nginx

<span class="token comment"># 这里产生了一个CLUSTER-IP,这就是service的IP,在Service的生命周期中,这个地址是不会变动的 # 可以使用NodePort</span>
<span class="token comment"># 可以通过这个IP访问当前service对应的POD</span>
<span class="token namespace">[root@master ~]</span><span class="token comment"># curl 10.109.179.231:80</span>
<<span class="token operator">!</span>DOCTYPE html>
<html>
<head>
<title>Welcome to nginx<span class="token operator">!</span><<span class="token operator">/</span>title>
<<span class="token operator">/</span>head>
<body>
<h1>Welcome to nginx<span class="token operator">!</span><<span class="token operator">/</span>h1>
<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
<<span class="token operator">/</span>body>
<<span class="token operator">/</span>html>
</code></pre> 
  <h5>外网ip</h5> 
  <p><strong>操作二:创建集群外部也可访问的Service</strong></p> 
  <pre><code class="prism language-powershell"><span class="token comment"># 上面创建的Service的type类型为ClusterIP,这个ip地址只用集群内部可访问</span>
<span class="token comment"># 如果需要创建外部也可以访问的Service,需要修改type为NodePort</span>
<span class="token namespace">[root@master ~]</span><span class="token comment"># kubectl expose deploy nginx --name=svc-nginx2 --type=NodePort --port=80 --target-port=80 -n dev</span>
service<span class="token operator">/</span>svc<span class="token operator">-</span>nginx2 exposed

<span class="token comment"># 此时查看,会发现出现了NodePort类型的Service,而且有一对Port(80:31928/TC)</span>
<span class="token namespace">[root@master ~]</span><span class="token comment"># kubectl get svc  svc-nginx-1  -n dev -o wide</span>
NAME          <span class="token function">TYPE</span>        CLUSTER<span class="token operator">-</span>IP       EXTERNAL<span class="token operator">-</span>IP   PORT<span class="token punctuation">(</span>S<span class="token punctuation">)</span>        AGE    SELECTOR
svc<span class="token operator">-</span>nginx2    NodePort    10<span class="token punctuation">.</span>100<span class="token punctuation">.</span>94<span class="token punctuation">.</span>0      <none>        80:31928<span class="token operator">/</span>TCP   9s     run=nginx

<span class="token comment"># 接下来就可以通过集群外的主机访问 节点IP:31928访问服务了</span>
<span class="token comment"># 例如在的电脑主机上通过浏览器访问下面的地址</span>
http:<span class="token operator">/</span><span class="token operator">/</span>192<span class="token punctuation">.</span>168<span class="token punctuation">.</span>109<span class="token punctuation">.</span>100:31928<span class="token operator">/</span>
</code></pre> 
  <ul> 
   <li>集群ip:10.109.179.231</li> 
   <li>外部ip:10.100.94.0</li> 
  </ul> 
  <h5><strong>删除Service</strong></h5> 
  <pre><code class="prism language-powershell"><span class="token namespace">[root@master ~]</span><span class="token comment"># kubectl delete svc svc-nginx-1 -n dev</span>
service <span class="token string">"svc-nginx-1"</span> deleted
</code></pre> 
  <h5><strong>配置方式</strong></h5> 
  <p>创建一个svc-nginx.yaml,内容如下:</p> 
  <pre><code class="prism language-yaml"><span class="token key atrule">apiVersion</span><span class="token punctuation">:</span> v1
<span class="token key atrule">kind</span><span class="token punctuation">:</span> Service
<span class="token key atrule">metadata</span><span class="token punctuation">:</span>
  <span class="token key atrule">name</span><span class="token punctuation">:</span> svc<span class="token punctuation">-</span>nginx
  <span class="token key atrule">namespace</span><span class="token punctuation">:</span> dev
<span class="token key atrule">spec</span><span class="token punctuation">:</span>
  <span class="token key atrule">clusterIP</span><span class="token punctuation">:</span> 10.109.179.231
  <span class="token key atrule">ports</span><span class="token punctuation">:</span>
  <span class="token punctuation">-</span> <span class="token key atrule">port</span><span class="token punctuation">:</span> <span class="token number">80</span>
    <span class="token key atrule">protocol</span><span class="token punctuation">:</span> TCP
    <span class="token key atrule">targetPort</span><span class="token punctuation">:</span> <span class="token number">80</span>
  <span class="token key atrule">selector</span><span class="token punctuation">:</span>
    <span class="token key atrule">run</span><span class="token punctuation">:</span> nginx
  <span class="token key atrule">type</span><span class="token punctuation">:</span> ClusterIP <span class="token comment"># 这里写了之后可以不写,不写就是随机分配</span>
</code></pre> 
  <p>然后就可以执行对应的创建和删除命令了:</p> 
  <p>​ 创建:kubectl create -f svc-nginx.yaml</p> 
  <p>​ 删除:kubectl delete -f svc-nginx.yaml</p> 
  <blockquote> 
   <p><strong>小结</strong></p> 
   <p>​ 至此,已经掌握了Namespace、Pod、Deployment、Service资源的基本操作,有了这些操作,就可以在kubernetes集群中实现一个服务的简单部署和访问了,但是如果想要更好的使用kubernetes,就需要深入学习这几种资源的细节和原理。</p> 
  </blockquote> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1599332757215936512"></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">你可能感兴趣的:(k8s)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1903828929043558400.htm"
                           title="使用kubeadm部署高可用IPV4/IPV6集群---V1.32" target="_blank">使用kubeadm部署高可用IPV4/IPV6集群---V1.32</a>
                        <span class="text-muted"></span>

                        <div>使用kubeadm部署高可用IPV4/IPV6集群https://github.com/cby-chen/Kubernetes开源不易,帮忙点个star,谢谢了k8s基础系统环境配置配置IP#注意!#若虚拟机是进行克隆的那么网卡的UUID和MachineID会重复#需要重新生成新的UUIDUUID和MachineID#UUID和MachineID重复无法DHCP获取到IPV6地址sshroot@1</div>
                    </li>
                    <li><a href="/article/1903643222761074688.htm"
                           title="Kubernetes配置全解析:从小白到高手的进阶秘籍" target="_blank">Kubernetes配置全解析:从小白到高手的进阶秘籍</a>
                        <span class="text-muted">ivwdcwso</span>
<a class="tag" taget="_blank" href="/search/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E4%B8%8E%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">操作系统与云原生</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><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/k8s/1.htm">k8s</a><a class="tag" taget="_blank" href="/search/%E9%85%8D%E7%BD%AE/1.htm">配置</a>
                        <div>导语在Kubernetes(K8s)的世界里,合理且精准的配置是释放其强大功能的关键。无论是搭建集群、部署应用,还是优化资源利用,配置都贯穿始终。然而,K8s配置涉及众多参数与组件,错综复杂,令不少初学者望而却步。本文将带你一步步深入K8s配置领域,从小白进阶为配置高手,轻松驾驭K8s集群。一、Kubernetes集群配置Master节点配置kube-api-server:这是K8s集群的“门面”</div>
                    </li>
                    <li><a href="/article/1903503196186275840.htm"
                           title="k8s学习笔记(3)--- kubernetes核心技术概念" target="_blank">k8s学习笔记(3)--- kubernetes核心技术概念</a>
                        <span class="text-muted">梦谜</span>
<a class="tag" taget="_blank" href="/search/k8s%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/1.htm">k8s基础知识</a><a class="tag" taget="_blank" href="/search/k8%E5%9F%BA%E6%9C%AC%E6%A0%B8%E5%BF%83%E6%A6%82%E5%BF%B5/1.htm">k8基本核心概念</a>
                        <div>kubernetes核心技术概念1.容器(Container)2.API对象3.集群(Cluster)4.Master5.Node6.Pod7.复制控制器(ReplicationController,RC)8.副本集(ReplicaSet,RS)9.部署(Deployment)10.服务(Service)11.任务(Job)12.定时任务(CronJob)13.后台支撑服务集(DaemonSet)</div>
                    </li>
                    <li><a href="/article/1903460585920589824.htm"
                           title="云原生周刊丨CIO 洞察:Kubernetes 解锁 AI 新纪元" target="_blank">云原生周刊丨CIO 洞察:Kubernetes 解锁 AI 新纪元</a>
                        <span class="text-muted">KubeSphere 云原生</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>开源项目推荐DRANETDRANET是由谷歌开发的K8s网络驱动程序,利用K8s的动态资源分配(DRA)功能,为高吞吐量和低延迟应用提供高性能网络支持。它旨在优化资源管理,确保K8s集群中的网络资源能够按需高效分配。DRANET采用Apache-2.0开源许可,鼓励社区贡献与扩展,是云原生环境下提升网络性能的创新解决方案。LazyjournalLazyjournal是一个用Go语言编写的终端用户界</div>
                    </li>
                    <li><a href="/article/1903456806299037696.htm"
                           title="k8s集群版本升级" target="_blank">k8s集群版本升级</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/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集群的版本升级应遵循逐步升级的策略,不建议直接跳过多个版本。Kubernetes版本升级的常见流程:升级顺序:先升级控制平面节点(MasterNodes),然后升级工作节点(WorkerNodes)。遵循版本兼容性:Kubernetes支持小版本的</div>
                    </li>
                    <li><a href="/article/1903456175660265472.htm"
                           title="新书速览|云原生Kubernetes自动化运维实践" target="_blank">新书速览|云原生Kubernetes自动化运维实践</a>
                        <span class="text-muted">全栈开发圈</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a>
                        <div>《云原生Kubernetes自动化运维实践》本书内容:《云原生Kubernetes自动化运维实践》以一名大型企业集群运维工程师的实战经验为基础,全面系统地阐述Kubernetes(K8s)在自动化运维领域的技术应用。《云原生Kubernetes自动化运维实践》共16章,内容由浅入深,逐步揭示K8s的原理及实际操作技巧。第1章引领读者踏入Kubernetes的世界,详细介绍其起源、核心组件的概念以及</div>
                    </li>
                    <li><a href="/article/1903449874121158656.htm"
                           title="分析K8S中Node状态为`NotReady`问题" target="_blank">分析K8S中Node状态为`NotReady`问题</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/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)集群中,Node状态为NotReady通常意味着节点上存在某些问题,下面为你分析正常情况下节点应运行的容器以及解决NotReady状态的方法。正常情况下Node节点应运行的容器1.kubeletkubelet是节点上的核心组件,它负责与控制平面通信,管理节点上的容器生命周期。它通常作为系统服务运行,而不是以容器形式存在,但也有使用容器化部署的情况。2.kube-pr</div>
                    </li>
                    <li><a href="/article/1903440548849577984.htm"
                           title="K8S之POD调度" target="_blank">K8S之POD调度</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/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-Pod调度1、Deployment/RC:全自动调度简述Deployment或RC的主要功能就是自动部署一个容器应用的多份副本,及持续监控副本的数量并维持该值。创建Deploymentkubectlcreate-fnginx-deployment.yaml#nginx-deployment.yamlapiVersion:apps/v1kind:Deploymentmetadata:name</div>
                    </li>
                    <li><a href="/article/1903437902029844480.htm"
                           title="K8S遇到过的比较深刻的Pod问题" target="_blank">K8S遇到过的比较深刻的Pod问题</a>
                        <span class="text-muted">Gold Steps.</span>
<a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF%E5%8D%9A%E6%96%87%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/%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%95%85%E9%9A%9C%E5%A4%84%E7%90%86/1.htm">故障处理</a>
                        <div>第一案:Pod集体自杀凌晨12点的告警总是格外刺眼。值班群里突然炸出一连串消息:"支付服务全部下线!但Pod日志显示一切正常!"运维组赶到战场时,发现大量Pod像多米诺骨牌般接连消失,监控面板上却全是绿色对勾。错误排查:#查看案发时间线kubectlgetevents--sort-by='.lastTimestamp'|grep-ikilled#查看Pod详细信息kubectldescribepo</div>
                    </li>
                    <li><a href="/article/1903428823525945344.htm"
                           title="k8s主要控制器简述(一)ReplicaSet与Deployment" target="_blank">k8s主要控制器简述(一)ReplicaSet与Deployment</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>目录一、ReplicaSet关键特性示例解释支持的Operator二、Deployment1.声明式更新示例2.滚动更新示例3.回滚示例4.ReplicaSet管理示例5.自动恢复示例6.扩展和缩容示例示例一、ReplicaSetReplicaSet是Kubernetes中的一个核心控制器,用于确保指定数量的Pod副本始终处于运行状态。它的主要职责是维护一组稳定的Pod副本,确保在任何时候都有指定</div>
                    </li>
                    <li><a href="/article/1903423405827354624.htm"
                           title="golang面经整理(一)(k8s,docker二次开发方向,云原生方向)" target="_blank">golang面经整理(一)(k8s,docker二次开发方向,云原生方向)</a>
                        <span class="text-muted">gooooer</span>
<a class="tag" taget="_blank" href="/search/1024%E7%A8%8B%E5%BA%8F%E5%91%98%E8%8A%82/1.htm">1024程序员节</a>
                        <div>笔者在2022年7月份-9月份之间面试了很多golang和k8s相关的面试,主要想从事云原生相关的开发工作,大小公司面试了很多,现将整体面试感受和一些通用的问题做一些整理记录,帮助大家在面试的时候更好的进行准备。最近大环境不好,大厂的岗位也少了不少。主要投递的岗位包含广州、深圳的岗位,面试的是golang工程师相关的岗位,但其实单纯做云原生相关岗位比较少,基本上局限于国内的几朵云,阿里云,华为云,</div>
                    </li>
                    <li><a href="/article/1903245057771761664.htm"
                           title="K8S集群新增和删除Node节点(K8s Cluster Adds and Removes Node Nodes)" target="_blank">K8S集群新增和删除Node节点(K8s Cluster Adds and Removes Node Nodes)</a>
                        <span class="text-muted">Linux运维老纪</span>
<a class="tag" taget="_blank" href="/search/%E5%A4%A9%E6%B6%AF%E6%B5%B7%E8%A7%92/1.htm">天涯海角</a><a class="tag" taget="_blank" href="/search/k8s%E4%BC%B4%E4%BD%A0%E5%90%8C%E8%A1%8C/1.htm">k8s伴你同行</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a><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/%E8%BF%90%E7%BB%B4%E5%BC%80%E5%8F%91/1.htm">运维开发</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                        <div>实战:在已有K8S集群如何新增和删除Node节点在Kubernetes(K8S)集群中,Node节点是集群中的工作节点,它们运行着容器的实际实例。管理K8S集群中的Node节点,包括新增和删除节点,是一个常见且重要的操作,可以帮助你根据需求扩展或缩减集群的容量。本篇文章将分享一下如何在已有集群添加新节点和删除现有节点1新增节点到K8S集群新增节点可以分为准备节点、配置节点和将其加入集群三步。1.1</div>
                    </li>
                    <li><a href="/article/1903146015372931072.htm"
                           title="Kubernetes学习笔记-移除Nacos迁移至K8s" target="_blank">Kubernetes学习笔记-移除Nacos迁移至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/J2EE/1.htm">J2EE</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/k8s/1.htm">k8s</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>项目服务的配置管理和服务注册发现由原先的Nacos全面迁移到Kubernetes上。一、移除Nacos移除Nacos组件依赖。com.alibaba.cloudspring-cloud-starter-alibaba-nacos-discoverycom.alibaba.cloudspring-cloud-starter-alibaba-nacos-configorg.springframewor</div>
                    </li>
                    <li><a href="/article/1902987094125506560.htm"
                           title="k8s往secret里导入证书_Kubernetes K8S之存储Secret详解" target="_blank">k8s往secret里导入证书_Kubernetes K8S之存储Secret详解</a>
                        <span class="text-muted">weixin_39604598</span>
<a class="tag" taget="_blank" href="/search/k8s%E5%BE%80secret%E9%87%8C%E5%AF%BC%E5%85%A5%E8%AF%81%E4%B9%A6/1.htm">k8s往secret里导入证书</a>
                        <div>K8S之存储Secret概述与类型说明,并详解经常使用Secret示例html主机配置规划服务器名称(hostname)系统版本配置内网IP外网IP(模拟)k8s-masterCentOS7.72C/4G/20G172.16.1.11010.0.0.110k8s-node01CentOS7.72C/4G/20G172.16.1.11110.0.0.111k8s-node02CentOS7.72C/</div>
                    </li>
                    <li><a href="/article/1902979399364440064.htm"
                           title="K8S中若要挂载其他命名空间中的 Secret" target="_blank">K8S中若要挂载其他命名空间中的 Secret</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/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)里,若要挂载其他命名空间中的Secret,你可以通过创建一个Secret的ServiceAccount和RoleBinding来实现对其他命名空间Secret的访问,接着在Pod中挂载这个Secret。下面是详细的步骤和示例代码:步骤创建ServiceAccount:在要挂载Secret的命名空间里创建一个ServiceAccount。创建Role与RoleBind</div>
                    </li>
                    <li><a href="/article/1902937261012480000.htm"
                           title="【K8S】ImagePullBackOff状态问题排查。" target="_blank">【K8S】ImagePullBackOff状态问题排查。</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/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>ImagePullBackOff是在使用Kubernetes(K8s)时经常遇到的一种错误状态,下面为你详细介绍其含义、可能的原因及解决办法。含义当你在K8s集群中创建一个Pod时,Kubelet会尝试从指定的镜像仓库拉取所需的容器镜像。如果拉取镜像失败,Kubelet会进行重试。随着重试次数的增加,重试的间隔时间会逐渐变长,这就是所谓的“指数退避”策略。当Kubelet多次尝试拉取镜像都失败后,</div>
                    </li>
                    <li><a href="/article/1902928424431841280.htm"
                           title="helm安装kubernetes-dashboard(2,Linux运维开发技巧" target="_blank">helm安装kubernetes-dashboard(2,Linux运维开发技巧</a>
                        <span class="text-muted">2401_83974783</span>
<a class="tag" taget="_blank" href="/search/2024%E5%B9%B4%E7%A8%8B%E5%BA%8F%E5%91%98%E5%AD%A6%E4%B9%A0/1.htm">2024年程序员学习</a><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/%E8%BF%90%E7%BB%B4%E5%BC%80%E5%8F%91/1.htm">运维开发</a>
                        <div>当前k8s集群版本1.23.61.1添加repo[root@masterhelm]#helmrepoaddkubernetes-dashboardhttps://kubernetes.github.io/dashboard/[root@masterhelm]#helmsearchrepokubernetes-dashboard/kubernetes-dashboardNAMECHARTVERSIO</div>
                    </li>
                    <li><a href="/article/1902927918703636480.htm"
                           title="k8s中PAUSE容器与init容器比较 local卷与hostpath卷比较" target="_blank">k8s中PAUSE容器与init容器比较 local卷与hostpath卷比较</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>目录一、PAUSE容器与INIT容器比较1.Pause容器作用特点示例2.Init容器作用特点示例3.Pause容器vsInit容器4.总结这两个哪个先启动呢?详细启动顺序为什么Pause容器最先启动?示例总结二、local卷与hostpath卷1.local卷定义特点配置示例2.hostPath卷定义特点配置示例3.local卷vshostPath卷4.选择建议一、PAUSE容器与INIT容器比</div>
                    </li>
                    <li><a href="/article/1902927919311810560.htm"
                           title="k8s服务中userspace,iptables,和ipvs的比较" target="_blank">k8s服务中userspace,iptables,和ipvs的比较</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/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a>
                        <div>在Kubernetes中,kube-proxy是负责实现服务负载均衡的组件。它支持三种代理模式:userspace、iptables和ipvs。这三种模式在性能、功能和复杂性上有所不同。以下是它们的详细比较:1.Userspace模式Userspace是Kubernetes最早支持的代理模式,kube-proxy在用户空间监听服务的IP和端口,并将流量转发到后端Pod。工作原理kube-proxy</div>
                    </li>
                    <li><a href="/article/1902900921399046144.htm"
                           title="Docker Compose 和 Kubernetes(K8s)对比" target="_blank">Docker Compose 和 Kubernetes(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/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/k8s/1.htm">k8s</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a>
                        <div>DockerCompose和Kubernetes(K8s)在某些方面有相似的功能,但它们的核心用途和适用场景不同。以下是它们的主要区别和联系:1.DockerCompose和Kubernetes的区别对比项DockerComposeKubernetes(K8s)核心作用管理多个Docker容器管理容器编排(大规模应用)适用环境本地开发、测试环境生产环境、大规模集群容器编排能力基础编排(启动多个容器</div>
                    </li>
                    <li><a href="/article/1902761197174845440.htm"
                           title="【DevOps】Rancher:rancher2.4.16 高可用安装文档" target="_blank">【DevOps】Rancher:rancher2.4.16 高可用安装文档</a>
                        <span class="text-muted">运维归一</span>
<a class="tag" taget="_blank" href="/search/DevOps/1.htm">DevOps</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/zookeeper/1.htm">zookeeper</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>视频教程视频教程:https://edu.csdn.net/learn/38191/604440?spm=1003.2001.3001.4143RancherHA集群安装部署当前最新版本V2.4.16安装流程:rke安装k8s,在k8s集群上搭建helm,通过helm创建rancher容器应用节点名称ip地址系统版本rke,k8s-master01,rancher192.168.1.9centos</div>
                    </li>
                    <li><a href="/article/1902698006218600448.htm"
                           title="流式编程 JDK8 Stream的简单使用方法介绍" target="_blank">流式编程 JDK8 Stream的简单使用方法介绍</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/jdk/1.htm">jdk</a><a class="tag" taget="_blank" href="/search/stream/1.htm">stream</a>
                        <div>JDK8Stream文章目录JDK8Stream概念特点代码简洁多核友好示例foreach方式Stream方式流程操作特性常用操作符具体用法一、流的创建1.1使用Collection下的stream()和parallelStream()方法。1.2使用Arrays中的stream()方法,将数组转成流。1.3使用Stream中的静态方法:of()、iterate()、generate()。1.4使</div>
                    </li>
                    <li><a href="/article/1902673414917779456.htm"
                           title="K8S学习之基础四十:配置altermanager发送告警到钉钉群" target="_blank">K8S学习之基础四十:配置altermanager发送告警到钉钉群</a>
                        <span class="text-muted">云上艺旅</span>
<a class="tag" taget="_blank" href="/search/K8S%E5%AD%A6%E4%B9%A0/1.htm">K8S学习</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E9%92%89%E9%92%89/1.htm">钉钉</a><a class="tag" taget="_blank" href="/search/prometheus/1.htm">prometheus</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a>
                        <div>配置altermanager发送告警到钉钉群创建钉钉群,设置机器人助手(必须是管理员才能设置),获取webhookwebhook:https://oapi.dingtalk.com/robot/send?access_token=25bed933a52d69f192347b5be4b2193bc0b257a6d9ae68d81619e3ae3d93f7c6#创建cm,配置钉钉群信息vialertm</div>
                    </li>
                    <li><a href="/article/1902606703229202432.htm"
                           title="K8S学习之基础三十六:node-exporter部署" target="_blank">K8S学习之基础三十六:node-exporter部署</a>
                        <span class="text-muted">云上艺旅</span>
<a class="tag" taget="_blank" href="/search/K8S%E5%AD%A6%E4%B9%A0/1.htm">K8S学习</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E8%B4%AA%E5%BF%83%E7%AE%97%E6%B3%95/1.htm">贪心算法</a><a class="tag" taget="_blank" href="/search/prometheus/1.htm">prometheus</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a>
                        <div>Prometheusv2.2.1编写yaml文件,包含创建ns、configmap、deployment、service#创建monitoring空间viprometheus-ns.yamlapiVersion:v1kind:Namespacemetadata:name:monitoring#创建SA并绑定权限kubectlcreateserviceaccountmonitor-nmonitori</div>
                    </li>
                    <li><a href="/article/1902605065311547392.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/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/http/1.htm">http</a>
                        <div>一、环境背景1、k8s集群,1.17+,目前k8s最新版本已更新至V1.31版本;2、镜像仓库,如harbor、registry、portus、nexus等;3、配置镜像仓库用户登录认证,参考资料如下:harbor参考:https://www.geekby.cn/posts/harbor-https/registry参考:https://www.cnblogs.com/chen2ha/p/1478</div>
                    </li>
                    <li><a href="/article/1902599897094352896.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/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a>
                        <div>1.创建Docker注册表的Secret首先,创建一个类型为dockerconfigjson的Secret,用于存储Docker注册表的认证信息。方法1:使用DockerCLI和kubectl不适用于阿里云格式不一样登录Docker注册表:dockerlogin这会生成一个包含认证信息的配置文件,通常位于~/.docker/config.json。创建Secret:kubectl-npromcre</div>
                    </li>
                    <li><a href="/article/1902567852808925184.htm"
                           title="基于Ubuntu22.04操作系统部署k8s1.28集群" target="_blank">基于Ubuntu22.04操作系统部署k8s1.28集群</a>
                        <span class="text-muted">Gold Steps.</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/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a>
                        <div>IP地址主机名角色192.168.200.16mastermaster192.168.200.17k8s-node1worker192.168.200.18k8s-node2worker基础环境准备tips:以下操作三个节点都要完成修改host文件&&关闭防火墙&&配置时间与时区&&关闭Swap&&开启IPv4转发(三个节点)root@cfc:~#systemctlstopufwroot@cfc:</div>
                    </li>
                    <li><a href="/article/1902455868914462720.htm"
                           title="【mysql】mysql之主从部署以及介绍" target="_blank">【mysql】mysql之主从部署以及介绍</a>
                        <span class="text-muted">向往风的男子</span>
<a class="tag" taget="_blank" href="/search/DBA/1.htm">DBA</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>本站以分享各种运维经验和运维所需要的技能为主《python零基础入门》:python零基础入门学习《python运维脚本》:python运维脚本实践《shell》:shell学习《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战《k8》从问题中去学习k8s《docker学习》暂未更新《ceph学习》ceph日常问题解决分享《日志收集》ELK+各种中间件《运维日常》</div>
                    </li>
                    <li><a href="/article/1902437718609162240.htm"
                           title="k8s1.3、containerd2.0部署实战" target="_blank">k8s1.3、containerd2.0部署实战</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>k8s1.3、containerd2.0部署实战参考博客containerd二进制安装与使用测试下载nerdctl-fullk8s安装参考博客containerd二进制安装与使用测试containerd可以和docker共存,直接二进制安装,nerdctl-full包含containerd和nerdctl命令行工具可以代替docker单机使用下载nerdctl-full建议下载-full版本下载后</div>
                    </li>
                    <li><a href="/article/1902435189343186944.htm"
                           title="Linux:kubeadm⽅式部署k8s集群" target="_blank">Linux:kubeadm⽅式部署k8s集群</a>
                        <span class="text-muted">陈婷婷1</span>
<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/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a>
                        <div>1.kubeadm创建环境k8s-master192.168.150.11k8s-node1192.168.150.12k8s-node2192.168.150.13三台节点都安装docker#Step1:安装必要的一些系统工具sudoyuminstall-yyum-utilsdevice-mapper-persistent-datalvm2#Step2:添加软件源信息sudoyum-config</div>
                    </li>
                                <li><a href="/article/53.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/%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE/1.htm">二分查找</a><a class="tag" taget="_blank" href="/search/%E6%8E%92%E5%BA%8F/1.htm">排序</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E6%8A%98%E5%8D%8A/1.htm">折半</a>
                                    <div> 一:概念 二分查找又称
折半查找(
折半搜索/
二分搜索),优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而 查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表 分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步</div>
                                </li>
                                <li><a href="/article/180.htm"
                                       title="java中的BigDecimal" target="_blank">java中的BigDecimal</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/BigDecimal/1.htm">BigDecimal</a>
                                    <div>        在项目开发过程中出现精度丢失问题,查资料用BigDecimal解决,并发现如下这篇BigDecimal的解决问题的思路和方法很值得学习,特转载。 
        原文地址:http://blog.csdn.net/ugg/article/de</div>
                                </li>
                                <li><a href="/article/307.htm"
                                       title="Shell echo命令详解" target="_blank">Shell echo命令详解</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/echo/1.htm">echo</a><a class="tag" taget="_blank" href="/search/shell/1.htm">shell</a>
                                    <div>Shell echo命令 
Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。命令格式: 
echo string 
您可以使用echo实现更复杂的输出格式控制。 1.显示普通字符串: 
  echo "It is a test" 
这里的双引号完全可以省略,以下命令与上面实例效果一致: 
  echo Itis a test 2.显示转义</div>
                                </li>
                                <li><a href="/article/434.htm"
                                       title="Oracle DBA 简单操作" target="_blank">Oracle DBA 简单操作</a>
                                    <span class="text-muted">周凡杨</span>
<a class="tag" taget="_blank" href="/search/oracle+dba+sql/1.htm">oracle dba sql</a>
                                    <div> --执行次数多的SQL 
 select sql_text,executions from ( 
     select sql_text,executions from v$sqlarea order by executions desc 
     ) where rownum<81; 
 &nb</div>
                                </li>
                                <li><a href="/article/561.htm"
                                       title="画图重绘" target="_blank">画图重绘</a>
                                    <span class="text-muted">朱辉辉33</span>
<a class="tag" taget="_blank" href="/search/%E6%B8%B8%E6%88%8F/1.htm">游戏</a>
                                    <div>  我第一次接触重绘是编写五子棋小游戏的时候,因为游戏里的棋盘是用线绘制的,而这些东西并不在系统自带的重绘里,所以在移动窗体时,棋盘并不会重绘出来。所以我们要重写系统的重绘方法。 
  在重写系统重绘方法时,我们要注意一定要调用父类的重绘方法,即加上super.paint(g),因为如果不调用父类的重绘方式,重写后会把父类的重绘覆盖掉,而父类的重绘方法是绘制画布,这样就导致我们</div>
                                </li>
                                <li><a href="/article/688.htm"
                                       title="线程之初体验" target="_blank">线程之初体验</a>
                                    <span class="text-muted">西蜀石兰</span>
<a class="tag" taget="_blank" href="/search/%E7%BA%BF%E7%A8%8B/1.htm">线程</a>
                                    <div>一直觉得多线程是学Java的一个分水岭,懂多线程才算入门。 
之前看《编程思想》的多线程章节,看的云里雾里,知道线程类有哪几个方法,却依旧不知道线程到底是什么?书上都写线程是进程的模块,共享线程的资源,可是这跟多线程编程有毛线的关系,呜呜。。。 
 
线程其实也是用户自定义的任务,不要过多的强调线程的属性,而忽略了线程最基本的属性。 
你可以在线程类的run()方法中定义自己的任务,就跟正常的Ja</div>
                                </li>
                                <li><a href="/article/815.htm"
                                       title="linux集群互相免登陆配置" target="_blank">linux集群互相免登陆配置</a>
                                    <span class="text-muted">林鹤霄</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                                    <div>配置ssh免登陆 
1、生成秘钥和公钥    ssh-keygen -t rsa 
2、提示让你输入,什么都不输,三次回车之后会在~下面的.ssh文件夹中多出两个文件id_rsa 和 id_rsa.pub 
   其中id_rsa为秘钥,id_rsa.pub为公钥,使用公钥加密的数据只有私钥才能对这些数据解密    c</div>
                                </li>
                                <li><a href="/article/942.htm"
                                       title="mysql : Lock wait timeout exceeded; try restarting transaction" target="_blank">mysql : Lock wait timeout exceeded; try restarting transaction</a>
                                    <span class="text-muted">aigo</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a>
                                    <div>原文:http://www.cnblogs.com/freeliver54/archive/2010/09/30/1839042.html 
  
原因是你使用的InnoDB   表类型的时候, 
默认参数:innodb_lock_wait_timeout设置锁等待的时间是50s, 
因为有的锁等待超过了这个时间,所以抱错. 
  
你可以把这个时间加长,或者优化存储</div>
                                </li>
                                <li><a href="/article/1069.htm"
                                       title="Socket编程 基本的聊天实现。" target="_blank">Socket编程 基本的聊天实现。</a>
                                    <span class="text-muted">alleni123</span>
<a class="tag" taget="_blank" href="/search/socket/1.htm">socket</a>
                                    <div>public class Server
{

	//用来存储所有连接上来的客户
	private List<ServerThread> clients;
	
	public static void main(String[] args)
	{
		Server s = new Server();
		s.startServer(9988);
	}

	publi</div>
                                </li>
                                <li><a href="/article/1196.htm"
                                       title="多线程监听器事件模式(一个简单的例子)" target="_blank">多线程监听器事件模式(一个简单的例子)</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/%E7%BA%BF%E7%A8%8B/1.htm">线程</a><a class="tag" taget="_blank" href="/search/%E7%9B%91%E5%90%AC%E6%A8%A1%E5%BC%8F/1.htm">监听模式</a>
                                    <div>    
多线程的事件监听器模式 
  监听器时间模式经常与多线程使用,在多线程中如何知道我的线程正在执行那什么内容,可以通过时间监听器模式得到 
  
     创建多线程的事件监听器模式 思路: 
   1, 创建线程并启动,在创建线程的位置设置一个标记 
    2,创建队</div>
                                </li>
                                <li><a href="/article/1323.htm"
                                       title="spring InitializingBean接口" target="_blank">spring InitializingBean接口</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/spring/1.htm">spring</a>
                                    <div>spring的事务的TransactionTemplate,其源码如下: 
public class TransactionTemplate extends DefaultTransactionDefinition implements TransactionOperations, InitializingBean{
 ...
} 
TransactionTemplate继承了DefaultT</div>
                                </li>
                                <li><a href="/article/1450.htm"
                                       title="Oracle中询表的权限被授予给了哪些用户" target="_blank">Oracle中询表的权限被授予给了哪些用户</a>
                                    <span class="text-muted">bijian1013</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%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E6%9D%83%E9%99%90/1.htm">权限</a>
                                    <div>        Oracle查询表将权限赋给了哪些用户的SQL,以备查用。 
select t.table_name as "表名",
       t.grantee    as "被授权的属组",
       t.owner      as "对象所在的属组"</div>
                                </li>
                                <li><a href="/article/1577.htm"
                                       title="【Struts2五】Struts2 参数传值" target="_blank">【Struts2五】Struts2 参数传值</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/struts2/1.htm">struts2</a>
                                    <div>Struts2中参数传值的3种情况 
1.请求参数绑定到Action的实例字段上 
2.Action将值传递到转发的视图上 
3.Action将值传递到重定向的视图上 
  一、请求参数绑定到Action的实例字段上以及Action将值传递到转发的视图上  
Struts可以自动将请求URL中的请求参数或者表单提交的参数绑定到Action定义的实例字段上,绑定的规则使用ognl表达式语言</div>
                                </li>
                                <li><a href="/article/1704.htm"
                                       title="【Kafka十四】关于auto.offset.reset[Q/A]" target="_blank">【Kafka十四】关于auto.offset.reset[Q/A]</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a>
                                    <div>I got serveral questions about  auto.offset.reset. This configuration parameter governs how  consumer read the message from  Kafka when  there is no initial offset in ZooKeeper or </div>
                                </li>
                                <li><a href="/article/1831.htm"
                                       title="nginx gzip压缩配置" target="_blank">nginx gzip压缩配置</a>
                                    <span class="text-muted">ronin47</span>
<a class="tag" taget="_blank" href="/search/nginx+gzip+%E5%8E%8B%E7%BC%A9%E8%8C%83%E4%BE%8B/1.htm">nginx gzip 压缩范例</a>
                                    <div>nginx gzip压缩配置   更多 
0      
 nginx      
 gzip      
 配置         
随着nginx的发展,越来越多的网站使用nginx,因此nginx的优化变得越来越重要,今天我们来看看nginx的gzip压缩到底是怎么压缩的呢? 
gzip(GNU-ZIP)是一种压缩技术。经过gzip压缩后页面大小可以变为原来的30%甚至更小,这样,用</div>
                                </li>
                                <li><a href="/article/1958.htm"
                                       title="java-13.输入一个单向链表,输出该链表中倒数第 k 个节点" target="_blank">java-13.输入一个单向链表,输出该链表中倒数第 k 个节点</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>two cursors. 
Make the first cursor go K steps first. 
 
 

/*
	 * 第 13 题:题目:输入一个单向链表,输出该链表中倒数第 k 个节点
	 */
	public void displayKthItemsBackWard(ListNode head,int k){
		ListNode p1=head,p2=head;
</div>
                                </li>
                                <li><a href="/article/2085.htm"
                                       title="Spring源码学习-JdbcTemplate queryForObject" target="_blank">Spring源码学习-JdbcTemplate queryForObject</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                                    <div>JdbcTemplate中有两个可能会混淆的queryForObject方法: 
1. 
Object queryForObject(String sql, Object[] args, Class requiredType) 
2. 
Object queryForObject(String sql, Object[] args, RowMapper rowMapper) 
 
第1个方法是只查</div>
                                </li>
                                <li><a href="/article/2212.htm"
                                       title="[冰川时代]在冰川时代,我们需要什么样的技术?" target="_blank">[冰川时代]在冰川时代,我们需要什么样的技术?</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF/1.htm">技术</a>
                                    <div> 
 
     看美国那边的气候情况....我有个感觉...是不是要进入小冰期了? 
 
     那么在小冰期里面...我们的户外活动肯定会出现很多问题...在室内呆着的情况会非常多...怎么在室内呆着而不发闷...怎么用最低的电力保证室内的温度.....这都需要技术手段... 
 
  &nb</div>
                                </li>
                                <li><a href="/article/2339.htm"
                                       title="js 获取浏览器型号" target="_blank">js 获取浏览器型号</a>
                                    <span class="text-muted">cuityang</span>
<a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/%E6%B5%8F%E8%A7%88%E5%99%A8/1.htm">浏览器</a>
                                    <div>根据浏览器获取iphone和apk的下载地址 
 
<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8" content="text/html"/> 
    <meta name=</div>
                                </li>
                                <li><a href="/article/2466.htm"
                                       title="C# socks5详解 转" target="_blank">C# socks5详解 转</a>
                                    <span class="text-muted">dalan_123</span>
<a class="tag" taget="_blank" href="/search/socket/1.htm">socket</a><a class="tag" taget="_blank" href="/search/C%23/1.htm">C#</a>
                                    <div>http://www.cnblogs.com/zhujiechang/archive/2008/10/21/1316308.html    这里主要讲的是用.NET实现基于Socket5下面的代理协议进行客户端的通讯,Socket4的实现是类似的,注意的事,这里不是讲用C#实现一个代理服务器,因为实现一个代理服务器需要实现很多协议,头大,而且现在市面上有很多现成的代理服务器用,性能又好,</div>
                                </li>
                                <li><a href="/article/2593.htm"
                                       title="运维 Centos问题汇总" target="_blank">运维 Centos问题汇总</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%91%E4%B8%BB%E6%9C%BA/1.htm">云主机</a>
                                    <div>一、sh 脚本不执行的原因 
sh脚本不执行的原因 只有2个 
1.权限不够 
2.sh脚本里路径没写完整。 
  
二、解决You have new mail in /var/spool/mail/root 
修改/usr/share/logwatch/default.conf/logwatch.conf配置文件 
MailTo = 
MailFrom 
  
三、查询连接数</div>
                                </li>
                                <li><a href="/article/2720.htm"
                                       title="Yii防注入攻击笔记" target="_blank">Yii防注入攻击笔记</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/WEB%E5%AE%89%E5%85%A8/1.htm">WEB安全</a><a class="tag" taget="_blank" href="/search/yii/1.htm">yii</a>
                                    <div>网站表单有注入漏洞须对所有用户输入的内容进行个过滤和检查,可以使用正则表达式或者直接输入字符判断,大部分是只允许输入字母和数字的,其它字符度不允许;对于内容复杂表单的内容,应该对html和script的符号进行转义替换:尤其是<,>,',"",&这几个符号  这里有个转义对照表: 
http://blog.csdn.net/xinzhu1990/articl</div>
                                </li>
                                <li><a href="/article/2847.htm"
                                       title="MongoDB简介[一]" target="_blank">MongoDB简介[一]</a>
                                    <span class="text-muted">eksliang</span>
<a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a><a class="tag" taget="_blank" href="/search/MongoDB%E7%AE%80%E4%BB%8B/1.htm">MongoDB简介</a>
                                    <div>MongoDB简介 
转载请出自出处:http://eksliang.iteye.com/blog/2173288 1.1易于使用 
       MongoDB是一个面向文档的数据库,而不是关系型数据库。与关系型数据库相比,面向文档的数据库不再有行的概念,取而代之的是更为灵活的“文档”模型。 
       另外,不</div>
                                </li>
                                <li><a href="/article/2974.htm"
                                       title="zookeeper windows 入门安装和测试" target="_blank">zookeeper windows 入门安装和测试</a>
                                    <span class="text-muted">greemranqq</span>
<a class="tag" taget="_blank" href="/search/zookeeper/1.htm">zookeeper</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E8%A3%85/1.htm">安装</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a>
                                    <div>一、序言 
      以下是我对zookeeper 的一些理解:      zookeeper 作为一个服务注册信息存储的管理工具,好吧,这样说得很抽象,我们举个“栗子”。 
      栗子1号: 
      假设我是一家KTV的老板,我同时拥有5家KTV,我肯定得时刻监视</div>
                                </li>
                                <li><a href="/article/3101.htm"
                                       title="Spring之使用事务缘由(2-注解实现)" target="_blank">Spring之使用事务缘由(2-注解实现)</a>
                                    <span class="text-muted">ihuning</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                                    <div>  
Spring事务注解实现 
  
1. 依赖包: 
    1.1 spring包: 
          spring-beans-4.0.0.RELEASE.jar 
          spring-context-4.0.0.</div>
                                </li>
                                <li><a href="/article/3228.htm"
                                       title="iOS App Launch Option" target="_blank">iOS App Launch Option</a>
                                    <span class="text-muted">啸笑天</span>
<a class="tag" taget="_blank" href="/search/option/1.htm">option</a>
                                    <div>iOS 程序启动时总会调用application:didFinishLaunchingWithOptions:,其中第二个参数launchOptions为NSDictionary类型的对象,里面存储有此程序启动的原因。 
  
launchOptions中的可能键值见UIApplication Class Reference的Launch Options Keys节 。 
1、若用户直接</div>
                                </li>
                                <li><a href="/article/3355.htm"
                                       title="jdk与jre的区别(_)" target="_blank">jdk与jre的区别(_)</a>
                                    <span class="text-muted">macroli</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/jdk/1.htm">jdk</a>
                                    <div>简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。SDK是Software Development Kit 一般指软件开发包,可以包括函数库、编译程序等。  
JDK就是Java Development Kit JRE是Java Runtime Enviroment是指Java的运行环境,是面向Java程序的使用者,而不是开发者。 如果安装了JDK,会发同你</div>
                                </li>
                                <li><a href="/article/3482.htm"
                                       title="Updates were rejected because the tip of your current branch is behind" target="_blank">Updates were rejected because the tip of your current branch is behind</a>
                                    <span class="text-muted">qiaolevip</span>
<a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E6%B0%B8%E6%97%A0%E6%AD%A2%E5%A2%83/1.htm">学习永无止境</a><a class="tag" taget="_blank" href="/search/%E6%AF%8F%E5%A4%A9%E8%BF%9B%E6%AD%A5%E4%B8%80%E7%82%B9%E7%82%B9/1.htm">每天进步一点点</a><a class="tag" taget="_blank" href="/search/%E4%BC%97%E8%A7%82%E5%8D%83%E8%B1%A1/1.htm">众观千象</a><a class="tag" taget="_blank" href="/search/git/1.htm">git</a>
                                    <div>$ git push joe prod-2295-1

To git@git.dianrong.com:joe.le/dr-frontend.git
 ! [rejected]        prod-2295-1 -> prod-2295-1 (non-fast-forward)
error: failed to push some refs to 'git@git.dianron</div>
                                </li>
                                <li><a href="/article/3609.htm"
                                       title="[一起学Hive]之十四-Hive的元数据表结构详解" target="_blank">[一起学Hive]之十四-Hive的元数据表结构详解</a>
                                    <span class="text-muted">superlxw1234</span>
<a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a><a class="tag" taget="_blank" href="/search/hive%E5%85%83%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">hive元数据结构</a>
                                    <div>关键字:Hive元数据、Hive元数据表结构 
  
之前在 “[一起学Hive]之一–Hive概述,Hive是什么”中介绍过,Hive自己维护了一套元数据,用户通过HQL查询时候,Hive首先需要结合元数据,将HQL翻译成MapReduce去执行。 
本文介绍一下Hive元数据中重要的一些表结构及用途,以Hive0.13为例。 
  
文章最后面,会以一个示例来全面了解一下,</div>
                                </li>
                                <li><a href="/article/3736.htm"
                                       title="Spring 3.2.14,4.1.7,4.2.RC2发布" target="_blank">Spring 3.2.14,4.1.7,4.2.RC2发布</a>
                                    <span class="text-muted">wiselyman</span>
<a class="tag" taget="_blank" href="/search/Spring+3/1.htm">Spring 3</a>
                                    <div>  
Spring 3.2.14、4.1.7及4.2.RC2于6月30日发布。 
  
其中Spring 3.2.1是一个维护版本(维护周期到2016-12-31截止),后续会继续根据需求和bug发布维护版本。此时,Spring官方强烈建议升级Spring框架至4.1.7 或者将要发布的4.2 。 
  
其中Spring 4.1.7主要包含这些更新内容。 </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>