From f31532e6e10d25d2ad70c57fb6bded54552beca7 Mon Sep 17 00:00:00 2001
From: 01Petard <1520394133@qq.com>
Date: Tue, 12 Nov 2024 17:03:43 +0800
Subject: [PATCH] =?UTF-8?q?doc:=20=E5=A4=87=E4=BB=BD=E6=96=87=E7=AB=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
...- \345\210\206\345\270\203\345\274\217.md" | 28 +++++++++----------
...41\346\201\257\345\267\245\345\205\267.md" | 18 ++++++------
2 files changed, 23 insertions(+), 23 deletions(-)
diff --git "a/docs/\345\274\200\345\217\221/My Java Guide/My Java Guide - \345\210\206\345\270\203\345\274\217.md" "b/docs/\345\274\200\345\217\221/My Java Guide/My Java Guide - \345\210\206\345\270\203\345\274\217.md"
index 6def22e..64773cc 100644
--- "a/docs/\345\274\200\345\217\221/My Java Guide/My Java Guide - \345\210\206\345\270\203\345\274\217.md"
+++ "b/docs/\345\274\200\345\217\221/My Java Guide/My Java Guide - \345\210\206\345\270\203\345\274\217.md"
@@ -2819,12 +2819,12 @@ Kubernetes,它是 **Google **开源的神器,它介于**应用服务**和**
# Kubernetes 解决的问题
-
+
随着**应用服务变多**,需求也千奇百怪。有的应用服务不希望被外网访问到,有的部署的时候要求内存得大于 xxGB 才能正常跑。
你每次都需要登录到各个服务器上,执行**手动**操作更新。不仅容易出错,还贼**浪费时间**。那么问题就来了,有没有一个办法,可以解决上面的问题?当然有,**没有什么是加一个中间层不能解决的,如果有,那就再加一层**。这次要加的中间层,叫 **Kubernetes**。
-
+
# 为什么要用 Kubernetes ?
@@ -2871,13 +2871,13 @@ Kubernetes 是一个开源的容器编排系统,它用于自动化部署、扩
总之,Kubernetes 和 Docker 之间是互补而非竞争的关系。它们共同构成了现代云原生应用开发和部署的重要基石。
-
+
# Kubernetes 架构原理
为了实现上面的功能,Kubernetes 会将我们的服务器划为两部分,一部分叫**控制平面**(control plane,以前叫master),另一部分叫**工作节点**,也就是 **Node**。简单来说它们的关系就是老板和打工人, 用现在流行的说法就是训练师和帕鲁。控制平面负责控制和管理各个 Node,而 Node 则负责实际运行各个应用服务。
-
+
我们依次看下这两者的内部架构。
@@ -2890,7 +2890,7 @@ Kubernetes 是一个开源的容器编排系统,它用于自动化部署、扩
以上就是控制平面内部的组件。
-
+
我们接下来再看看 Node 里有哪些组件。
@@ -2898,38 +2898,38 @@ Kubernetes 是一个开源的容器编排系统,它用于自动化部署、扩
Node 是实际的工作节点,它既可以是**裸机服务器**,也可以是**虚拟机**。它会负责实际运行各个应用服务。多个应用服务**共享**一台 Node 上的内存和 CPU 等计算资源。
-
+
在文章开头,我们聊到了部署多个应用服务的场景。以前我们需要上传代码到服务器,而用了 k8s 之后,我们只需要将服务代码打包成**Container Image**(容器镜像),就能一行命令将它部署。
如果你不了解容器镜像的含义,你可以简单理解为它其实就是将**应用代码**和依赖的**系统环境**打了个压缩包,在任意一台机器上解压这个压缩包,就能正常运行服务。为了下载和部署镜像,Node 中会有一个 **Container runtime** 组件。
-
+
每个应用服务都可以认为是一个 **Container**(容器), 并且大多数时候,我们还会为应用服务搭配一个日志收集器 Container 或监控收集器 Container,多个 Container 共同组成一个一个 **Pod**,它运行在 Node 上。
-
+
k8s 可以将 pod 从某个 Node 调度到另一个 Node,还能以 pod 为单位去做重启和动态扩缩容的操作。
所以说 **Pod 是 k8s 中最小的调度单位**。
-
+
另外,前面提到控制平面会用 **Controller Manager** (通过API Server)控制 Node 创建和关闭服务,那 Node 也得有个组件能接收到这个命令才能去做这些动作,这个组件叫 **kubelet**,它主要负责管理和监控 Pod。最后,Node 中还有个 **Kube Proxy** ,它负责 Node 的网络通信功能,有了它,外部请求就能被转发到 Pod 内。
-
+
# Cluster
**控制平面和Node** 共同构成了一个 **Cluster**,也就是**集群**。在公司里,我们一般会构建多个集群, 比如测试环境用一个集群,生产环境用另外一个集群。同时,为了将集群内部的服务暴露给外部用户使用,我们一般还会部署一个入口控制器,比如 **Ingress 控制器(比如Nginx)**,它可以提供一个入口让外部用户访问集群内部服务。
-
+
# kubectl
上面提到说我们可以使用 k8s 提供的 API 去创建服务,但问题就来了,这是需要我们自己写代码去调用这些 API 吗?答案是不需要,k8s 为我们准备了一个命令行工具 **kubectl**,我们只需要执行命令,它内部就会调用 k8s 的 API。
-
+
接下来我们以部署服务为例子,看下 k8s 是怎么工作的。
@@ -2939,7 +2939,7 @@ k8s 可以将 pod 从某个 Node 调度到另一个 Node,还能以 pod 为单
至此服务完成创建。
-
+
整个过程下来,我们只需要写一遍 yaml 文件,和执行一次 kubectl 命令,比以前省心太多了!部署完服务后,我们来看下服务是怎么被调用的。
@@ -2947,7 +2947,7 @@ k8s 可以将 pod 从某个 Node 调度到另一个 Node,还能以 pod 为单
以前外部用户小明,直接在浏览器上发送 http 请求,就能打到我们服务器上的 Nginx,然后转发到部署的服务内。用了 k8s 之后,外部请求会先到达 Kubernetes 集群的 Ingress 控制器,然后请求会被转发到 Kubernetes 内部的某个 Node 的 **Kube Proxy** 上,再找到对应的 pod,然后才是转发到内部**容器服务**中,处理结果原路返回,到这就完成了一次服务调用。
-
+
到这里我们就大概了解了 k8s 的工作原理啦,它本质上就是应用服务和服务器之间的**中间层**,通过暴露一系列 API 能力让我们简化服务的部署运维流程。
diff --git "a/docs/\350\275\257\344\273\266/Linux/\345\221\275\344\273\244\350\241\214\347\263\273\347\273\237\344\277\241\346\201\257\345\267\245\345\205\267.md" "b/docs/\350\275\257\344\273\266/Linux/\345\221\275\344\273\244\350\241\214\347\263\273\347\273\237\344\277\241\346\201\257\345\267\245\345\205\267.md"
index 8b65e88..b431dd8 100644
--- "a/docs/\350\275\257\344\273\266/Linux/\345\221\275\344\273\244\350\241\214\347\263\273\347\273\237\344\277\241\346\201\257\345\267\245\345\205\267.md"
+++ "b/docs/\350\275\257\344\273\266/Linux/\345\221\275\344\273\244\350\241\214\347\263\273\347\273\237\344\277\241\346\201\257\345\267\245\345\205\267.md"
@@ -20,13 +20,13 @@ top_img: https://cdn.jsdelivr.net/gh/01Petard/imageURL@main/img/202411052242895.
# 个人推荐
-- 查看系统信息:[x uname](#x uname)
+- 查看系统信息:[x uname](#x-uname)
-- 查询 ip 地址:[x ip](#x ip)
+- 查询 ip 地址:[x ip](#x-ip)
-- 查看进程的实时信息:[x btop](#x btop)
+- 查看进程的实时信息:[x btop](#x-btop)
-- 查看文件内容:[x cat](#x cat)
+- 查看文件内容:[x cat](#x-cat)
- 查看当前目录下的文件:[lsd](#lsd)
@@ -52,7 +52,7 @@ eval "$(wget -O- https://get.x-cmd.com)"
-# x uname
+# x uname
> 通过终端命令查看电脑以及操作系统的相关信息,相比自带的`uname`能看到更多信息
@@ -82,7 +82,7 @@ x ping -b www.baidu.com
-# x ip
+# x ip
> 查询 ip 地址,可以平替`ifconfig`
@@ -112,7 +112,7 @@ x htop
-# x btop
+# x btop
使用 htop 来查看进程的实时信息
@@ -132,7 +132,7 @@ x cd
-# x ll
+# x ll
> 一个可交互性的命令行文件管理器
@@ -142,7 +142,7 @@ x ll
-# x cat
+# x cat
> 查看文件内容,很好地解决了`cat`的痛点