<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>K8s on root@wanth3f1ag</title>
    <link>https://wanth3f1ag.top/tags/k8s/</link>
    <description>Recent content in K8s on root@wanth3f1ag</description>
    <image>
      <title>root@wanth3f1ag</title>
      <url>https://wanth3f1ag.top/images/avatar.jpg</url>
      <link>https://wanth3f1ag.top/images/avatar.jpg</link>
    </image>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Mon, 22 Jun 2026 17:34:57 +0800</lastBuildDate>
    <atom:link href="https://wanth3f1ag.top/tags/k8s/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>K8s基础</title>
      <link>https://wanth3f1ag.top/posts/K8s%E5%9F%BA%E7%A1%80/</link>
      <pubDate>Wed, 17 Jun 2026 14:57:57 +0800</pubDate>
      <guid>https://wanth3f1ag.top/posts/K8s%E5%9F%BA%E7%A1%80/</guid>
      <description>&lt;h1 id=&#34;什么是kubernetes&#34;&gt;什么是Kubernetes&lt;/h1&gt;
&lt;p&gt;Kubernetes又名k8s，是一个由Google开源，现由 CNCF（云原生计算基金会）维护的容器编排平台&lt;/p&gt;
&lt;p&gt;Kubernetes（K8s） 集群是k8s的基本运行单元，由一个控制平面和一组用于运行容器化应用的工作机器组成， 这些工作机器称作节点（Node）。每个集群至少需要一个工作节点来运行 Pod。&lt;/p&gt;
&lt;p&gt;K8S集群主要负责容器编排，本质上来说，K8S不仅能将单个容器运行起来，将其对外暴露出去提供服务。还提供了：路由网关、集群监控、灾难恢复，以及应用的水平扩展等能力。&lt;/p&gt;
&lt;h1 id=&#34;kubernetes架构&#34;&gt;Kubernetes架构&lt;/h1&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://wanth3f1ag.top/posts/K8s%E5%9F%BA%E7%A1%80/image/Pasted%20image%2020260731112310.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;从结构图不难看出，k8s主要是由Master节点（控制平面）以及工作器节点组成，Master节点参与对Node节点的管理控制&lt;/p&gt;
&lt;h1 id=&#34;master节点&#34;&gt;Master节点&lt;/h1&gt;
&lt;p&gt;MasterNode主要包括四个部分：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ApiServer：顾名思义就是提供API接口进行资源操作，并提供认证、授权、访问控制、API 注册和发现等机制&lt;/li&gt;
&lt;li&gt;Controller Manager：控制管理，负责维护集群的状态，监控各种资源状态的变化&lt;/li&gt;
&lt;li&gt;Scheduler：调度程序，负责资源的调度，其实就是根据策略将Pod调度到相应的机器上&lt;/li&gt;
&lt;li&gt;etcd：里面保存了整个集群的状态，用作 Kubernetes 所有集群数据的后台数据库。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;worker节点&#34;&gt;Worker节点&lt;/h1&gt;
&lt;p&gt;WorkerNode主要有以下部分：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;pod：k8s的最小的调度和运行单元，一个pod可以包含一个或多个容器，pod内所有容器都共用一个IP地址和网络命名空间，其实就类似于一台机器以及机器上的进程服务&lt;/li&gt;
&lt;li&gt;kubelet：每台节点上的代理，负责维护容器的生命周期&lt;/li&gt;
&lt;li&gt;Kube-proxy：通过为Service资源的ClusterIP生成iptable或ipvs规则，实现将K8S内部的服务暴露到集群外面去；处理节点上的网络规则，让 Pod 之间能互相通信&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;k8s和dockerdocker-compose的区别&#34;&gt;k8s和docker，docker-compose的区别&lt;/h1&gt;
&lt;p&gt;最大的区别就是在于运行管理方面，doker和docker-compose更偏向于单机运行的管理，docker一次只能管理一个容器，虽然docker-compose能同时管理多个容器，但本质上还是只限制在一台机器中，而k8s是集群多机器编排，可以同时管理多台机器&lt;/p&gt;
&lt;p&gt;除此之外，k8s还有以下特点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;弹性伸缩：容器数量的控制，流量高峰自动加副本，低谷自动缩减，节省成本&lt;/li&gt;
&lt;li&gt;自我修复/高可用：对容器进行监测，如果某台机器宕机，Pod 自动迁移到其他机器，而出现问题的机器会自动抛弃或重启&lt;/li&gt;
&lt;li&gt;自动部署和回滚：自动对容器的回滚更新且更新版本时无缝替换，用户无感知&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;k8s工作流程&#34;&gt;k8s工作流程&lt;/h1&gt;
&lt;p&gt;k8s工作的时候通常会使用kubectl，kubectl 是 k8s 的客户端工具，可以使用命令行管理集群&lt;/p&gt;
&lt;p&gt;具体流程如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;kubectl向apiserver发送部署创建请求（例如使用 kubectl create -f deployment.yml）&lt;/li&gt;
&lt;li&gt;apiserver将请求写入etcd，随后收到etcd的回调事件&lt;/li&gt;
&lt;li&gt;apiserver将回调事件发送给ControllerManager，ControllerManager中的ReplicationController根据deployment的描述创建一个ReplicaSet并将ReplicaSet对象返回给apiserver并持久化回etcd&lt;/li&gt;
&lt;li&gt;Scheduler调度程序看到未调度的pod对象，根据调度规则选择一个可调度的节点，将节点名写入pod描述的nodeName字段中，并将pod对象返回给apiserver并写入etcd&lt;/li&gt;
&lt;li&gt;apiserver接收到etcd的回调后会将更新pod的事件发送给pod对应的node上的kubelet进程&lt;/li&gt;
&lt;li&gt;kubelet在看到有pod对象中nodeName字段属于本节点，将其从队列中拉出，通过容器运行时创建pod中描述的容器&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;k8s安全基础&#34;&gt;k8s安全基础&lt;/h1&gt;
&lt;p&gt;一方面是组件接口的安全风险：&lt;/p&gt;
&lt;h2 id=&#34;api-server未授权访问&#34;&gt;API server未授权访问&lt;/h2&gt;
&lt;p&gt;API server的默认服务接口是8080和6443，但是8080只提供http服务，并没有认证与授权机制，而6443两者兼并&lt;/p&gt;
&lt;p&gt;默认情况下8080端口是不会启动的，但是如果使用者开启了该服务，就可能会造成API的未授权访问，从而控制整个k8s集群&lt;/p&gt;
&lt;p&gt;使用kubectl获取集群信息&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl -s &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;ip&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;port&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; get nodes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;kubelet未授权访问&#34;&gt;Kubelet未授权访问&lt;/h2&gt;
&lt;p&gt;Kubelet也是运行API服务的，默认服务端口是10250和10248，同样也容易存在未授权访问&lt;/p&gt;
&lt;h2 id=&#34;etcd信息泄露&#34;&gt;etcd信息泄露&lt;/h2&gt;
&lt;p&gt;etcd默认监听2379（用于客户端连接）和2380（用于多个etcd之间的通信）端口&lt;/p&gt;
&lt;p&gt;默认情况下，etcd两个端口的访问都需要证书去进行认证，所以如果我们拿到了证书或者使用者给etcd设置了允许匿名访问，那么就可以读取etcd中的数据，导致信息泄露风险&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;etcd v2：Kubernetes ≤ 1.5的版本默认使用etcd v2&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/v2/keys/?recursive=true
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;etcd v3：k8s v1.6开始默认使用 etcd v3,一般使用etcdctl实现对etcd的访问&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;文档：https://github.com/etcd-io/etcd/tree/main/etcdctl&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
