Skip to content

Commit 398593c

Browse files
committed
新增 k8s
1 parent 7b962e7 commit 398593c

File tree

4 files changed

+148
-2
lines changed

4 files changed

+148
-2
lines changed

book/.vuepress/sidebar/otherTech.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,5 @@ export default arraySidebar([
3838
},
3939
buildSimpleNavObj("Docker", "docker"),
4040
buildSimpleNavObj("Nginx", "nginx"),
41+
buildSimpleNavObj("Kubernetes", "k8s"),
4142
]);

book/.vuepress/theme.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export default hopeTheme(
1616
darkmode: "switch",
1717
fullscreen: false,
1818
// pure: true,
19-
iconAssets: "//at.alicdn.com/t/c/font_4437669_ss389g6d0t.css",
19+
iconAssets: "//at.alicdn.com/t/c/font_4437669_jvfuh8sn5ha.css",
2020
// iconPrefix: ???
2121
logo: "https://figure-bed.chua-n.com/logo/荒流.png",
2222
favicon: "https://figure-bed.chua-n.com/logo/川.ico",

book/杂技/Kubernetes.md

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
---
2+
title: Kubernetes
3+
---
4+
5+
## 大纲
6+
7+
- 第一部分:k8s概念和架构
8+
- 第二部分:从零搭建k8s集群
9+
- 基于客户端工具 kubeadm
10+
- 基于二进制包
11+
- 第三部分:k8s概述概念
12+
- pod
13+
- controller
14+
- service
15+
- ingress
16+
- RABC
17+
- helm
18+
- 持久存储
19+
- 第四部分:搭建集群监控平台系统
20+
- 第五部分:从零搭建高可用 k8s 集群
21+
- 第六部分:在集群环境部署项目
22+
23+
## 概述
24+
25+
> **Kubernetes** 这个名字源于希腊语,意为“舵手”或“飞行员”。K8s 这个缩写是因为 K 和 s 之间有 8 个字符的关系。Google 在 2014 年开源了 Kubernetes 项目。
26+
27+
Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,方便进行声明式配置和自动化。
28+
29+
Kubernetes 为你提供了一个可弹性运行分布式系统的框架。具体而言,Kubernetes 为你提供:
30+
31+
- **服务发现和负载均衡**:Kubernetes 可以使用 DNS 名称或自己的 IP 地址来暴露容器。 如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。
32+
33+
- **存储编排**:Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。
34+
35+
- **自动部署和回滚**:你可以使用 Kubernetes 描述已部署容器的所需状态, 它可以以受控的速率将实际状态更改为期望状态。 例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。
36+
37+
- **自动完成装箱计算**:你为 Kubernetes 提供许多节点组成的集群,在这个集群上运行容器化的任务。 你告诉 Kubernetes 每个容器需要多少 CPU 和内存 (RAM)。 Kubernetes 可以将这些容器按实际情况调度到你的节点上,以最佳方式利用你的资源。
38+
39+
- **自我修复**:Kubernetes 将重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器, 并且在准备好服务之前不将其通告给客户端。
40+
41+
- **密钥与配置管理**:Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 SSH 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。
42+
43+
- **批处理执行**:除了服务外,Kubernetes 还可以管理你的批处理和 CI(持续集成)工作负载,如有需要,可以替换失败的容器。
44+
- **水平扩缩**:使用简单的命令、用户界面或根据 CPU 使用率自动对你的应用进行扩缩。
45+
- **IPv4/IPv6 双栈**:为 Pod(容器组)和 Service(服务)分配 IPv4 和 IPv6 地址。
46+
- **为可扩展性设计**:在不改变上游源代码的情况下为你的 Kubernetes 集群添加功能。
47+
48+
## Kubernetes 对象
49+
50+
### 释义
51+
52+
Kubernetes 对象是 Kubernetes 系统中的持久性实体。 Kubernetes 使用这些实体表示你的集群状态。具体而言,它们描述了如下信息:
53+
54+
- 哪些容器化应用正在运行(以及在哪些节点上运行)
55+
- 可以被应用使用的资源
56+
- 关于应用运行时行为的策略,比如重启策略、升级策略以及容错策略
57+
58+
关于 Kubernetes 对象,官方有下面一段描述:
59+
60+
> A Kubernetes object is a "record of intent"--once you create the object, the Kubernetes system will constantly work to ensure that the object exists. By creating an object, you're effectively telling the Kubernetes system what you want your cluster's workload to look like; this is your cluster's *desired state*.
61+
62+
操作 Kubernetes 对象(无论是创建、修改或者删除)需要使用 [Kubernetes API](https://kubernetes.io/zh-cn/docs/concepts/overview/kubernetes-api)
63+
64+
- 比如,当使用 `kubectl` 命令行接口(CLI)时,CLI 会调用必要的 Kubernetes API;
65+
- 也可以在程序中使用[客户端库](https://kubernetes.io/zh-cn/docs/reference/using-api/client-libraries/), 来直接调用 Kubernetes API。
66+
67+
### 对象的规约(Spec)与状态(Status)
68+
69+
几乎每个 Kubernetes 对象包含两个嵌套的对象字段,它们负责管理对象的配置: 对象 `spec` 和对象 `status`
70+
71+
- `spec`:对于具有 `spec` 的 Kubernetes 对象,你必须在创建对象时就设置 `spec` 的内容,它们描述了你希望这个 Kubernetes 对象所具有的特征,即**期望状态(Desired State)**
72+
- `status``status` 描述了对象的**当前状态(Current State)**,它是由 Kubernetes 系统和组件来设置并更新的。在任何时刻,Kubernetes [控制平面](https://kubernetes.io/zh-cn/docs/reference/glossary/?all=true#term-control-plane) 都一直在积极地管理着对象的实际状态,以使之达成期望状态。
73+
74+
例如,Kubernetes 中的 Deployment 对象能够表示运行在集群中的应用。当创建 Deployment 时,你可能会设置 Deployment 的 `spec`,指定该应用要有 3 个副本运行。Kubernetes 系统读取 Deployment 的 `spec`, 并启动我们所期望的应用的 3 个实例——更新状态以与规约相匹配。 如果这些实例中有的失效了,Kubernetes 系统会通过执行修正操作来响应 `spec``status` 间的不一致——意味着它会启动一个新的实例来替换。
75+
76+
## Kubernetes 组件
77+
78+
Kubernetes 集群由控制平面和一个或多个工作节点(Node)组成。工作节点托管着组成应用负载的 Pod,控制平面管理集群中的工作节点和 Pod。在生产环境中,控制平面通常跨多台计算机运行,而一个集群通常运行多个节点,以提供容错和高可用。下面描述了一个正常运行的 Kubernetes 集群所需的各种组件:
79+
80+
| 组件图 | 架构图 |
81+
| :----------------------------------------------------------: | :----------------------------------------------------------: |
82+
| ![Kubernetes 的组件](https://figure-bed.chua-n.com/杂技/Kubernetes/components-of-kubernetes.svg) | ![kubernetes-cluster-architecture](https://figure-bed.chua-n.com/杂技/Kubernetes/kubernetes-cluster-architecture.svg) |
83+
84+
> PS:Kubernetes 允许灵活地部署和管理这些组件。此架构可以适应各种需求,从小型开发环境到大规模生产部署。有关每个组件的详细信息以及配置集群架构的各种方法, 请参阅[集群架构](https://kubernetes.io/zh-cn/docs/concepts/architecture/)页面。
85+
86+
### 控制平面组件
87+
88+
> 管理集群的整体状态。
89+
90+
- *kube-apiserver*:核心的组件 server,用以暴露 Kubernetes HTTP API
91+
- *etcd*:具备一致性和高可用性的键值存储,用于所有 API 服务器的数据存储
92+
- *kube-scheduler*:查找尚未绑定到节点的 Pod,并将每个 Pod 分配给合适的节点
93+
- *kube-controller-manager*:运行[控制器](https://kubernetes.io/zh-cn/docs/concepts/architecture/controller/)来实现 Kubernetes API 行为
94+
- *cloud-controller-manager*(可选):与底层云驱动集成
95+
96+
### Node 组件
97+
98+
> 在每个节点上运行,维护运行的 Pod 并提供 Kubernetes 运行时环境。
99+
100+
- *kubelet*:确保 Pod 及其容器正常运行。
101+
- *kube-proxy*(可选):维护节点上的网络规则以实现 Service 的功能。
102+
- *Container runtime*:容器运行时,负责运行容器的软件(阅读[容器运行时](https://kubernetes.io/zh-cn/docs/setup/production-environment/container-runtimes/)以了解更多信息)。
103+
104+
### 插件
105+
106+
插件扩展了 Kubernetes 的功能。一些重要的例子包括:
107+
108+
- DNS:集群范围内的 DNS 解析
109+
- Web 界面(Dashboard):通过 Web 界面进行集群管理
110+
- 容器资源监控:用于收集和存储容器指标
111+
- 集群层面日志:用于将容器日志保存到中央日志存储
112+
113+
## Kubernetes API
114+
115+
Kubernetes API 使你可以查询和操纵 Kubernetes 中对象的状态。Kubernetes 控制平面的核心是 API 服务器和它暴露的 HTTP API,用户、集群的不同部分以及外部组件都通过 API 服务器相互通信。
116+
117+
大部分操作都可以通过 `kubectl` 命令行接口或类似 `kubeadm` 这类命令行工具来执行, 这些工具在背后也是调用 API。不过,你也可以使用 REST 调用来访问这些 API。 Kubernetes 为那些希望使用 Kubernetes API 编写应用的开发者提供一组[客户端库](https://kubernetes.io/zh-cn/docs/reference/using-api/client-libraries/)
118+
119+
## Node
120+
121+
Kubernetes 通过将容器放入在节点(Node)上运行的 Pod 中来执行你的[工作负载](https://kubernetes.io/zh-cn/docs/concepts/workloads/)
122+
123+
节点可以是一个虚拟机或者物理机器,取决于所在的集群配置。每个节点包含运行 Pod 所需的服务,这些节点由控制面负责管理。通常集群中会有若干个节点;而在一个学习所用或者资源受限的环境中,你的集群中也可能只有一个节点。
124+
125+
节点上的组件包括:
126+
127+
- kubelet
128+
- 容器运行时
129+
- kube-proxy
130+
131+
### 管理
132+
133+
134+
135+
## ~~核心概念~~
136+
137+
- Pod
138+
- 最小部署单元
139+
- 一组容器的集合
140+
- 一个 pod 中的容器是共享网络的
141+
- 生命周期是短暂的
142+
- Controller
143+
- Service
144+
- 定义一组 Pod 的访问规则
145+

0 commit comments

Comments
 (0)