Fix and update

This commit is contained in:
baohua
2026-02-09 11:34:35 -08:00
parent e669ee0fe8
commit 63377d0431
136 changed files with 2146 additions and 262 deletions

View File

@@ -1,3 +1,3 @@
## etcd
# etcd
`etcd` `CoreOS` 团队发起的一个管理配置信息和服务发现`Service Discovery`的项目在这一章里面我们将基于 `etcd 3.x` 版本介绍该项目的目标安装和使用以及实现的技术

View File

@@ -91,6 +91,8 @@ etcd 在键的组织上采用了层次化的空间结构(类似于文件系统
#### put
运行以下命令
```bash
$ etcdctl put /testdir/testkey "Hello world"
OK

View File

@@ -1,5 +1,7 @@
## 安装
本节将介绍 etcd 的几种常见安装方式包括二进制安装Docker 镜像运行以及在 macOS 上的安装
`etcd` 基于 `Go` 语言实现因此用户可以从 [项目主页](https://github.com/etcd-io/etcd) 下载源代码自行编译,也可以下载编译好的二进制文件,甚至直接使用制作好的 `Docker` 镜像文件来体验。
>注意本章节内容基于 etcd `3.4.x` 版本
@@ -14,6 +16,7 @@
$ curl -L https://github.com/etcd-io/etcd/releases/download/v3.4.0/etcd-v3.4.0-linux-amd64.tar.gz -o etcd-v3.4.0-linux-amd64.tar.gz
## 国内用户可以使用以下方式加快下载
$ curl -L https://download.fastgit.org/etcd-io/etcd/releases/download/v3.4.0/etcd-v3.4.0-linux-amd64.tar.gz -o etcd-v3.4.0-linux-amd64.tar.gz
$ tar xzvf etcd-v3.4.0-linux-amd64.tar.gz
@@ -90,6 +93,8 @@ quay.io/coreos/etcd:v3.4.0 \
### macOS 中运行
运行以下命令
```bash
$ brew install etcd

View File

@@ -1,5 +1,7 @@
## 简介
简介 示意图如下
![](../_images/etcd_logo.png)
`etcd` `CoreOS` 团队于 2013 6 月发起的开源项目它的目标是构建一个高可用的分布式键值`key-value`数据库基于 `Go` 语言实现我们知道在分布式系统中各种服务的配置信息的管理分享服务的发现是一个很基本同时也是很重要的问题`CoreOS` 项目就希望基于 `etcd` 来解决这一问题

View File

@@ -1,4 +1,4 @@
## kubectl 使用
# kubectl 使用
[kubectl](https://github.com/kubernetes/kubernetes) 是 Kubernetes 自带的客户端,可以用它来直接操作 Kubernetes。
@@ -8,74 +8,74 @@ kubectl [flags]
kubectl [command]
```
### get
## get
显示一个或多个资源
### describe
## describe
显示资源详情
### create
## create
从文件或标准输入创建资源
### update
## update
从文件或标准输入更新资源
### delete
## delete
通过文件名标准输入资源名或者 label selector 删除资源
### log
## log
输出 pod 中一个容器的日志
### rolling-update
## rolling-update
对指定的 replication controller 执行滚动升级
### exec
## exec
在容器内部执行命令
### port-forward
## port-forward
将本地端口转发到Pod
### proxy
## proxy
Kubernetes API server 启动代理服务器
### run
## run
在集群中使用指定镜像启动容器
### expose
## expose
replication controller service pod 暴露为新的 kubernetes service
### label
## label
更新资源的 label
### config
## config
修改 kubernetes 配置文件
### cluster-info
## cluster-info
显示集群信息
### api-versions
## api-versions
"组/版本" 的格式输出服务端支持的 API 版本
### version
## version
输出服务端和客户端的版本信息
### help
## help
显示各个命令的帮助信息

View File

@@ -1,4 +1,4 @@
## Kubernetes
# Kubernetes
`Kubernetes` Google 团队发起并维护的基于 Docker 的开源容器集群管理系统它不仅支持常见的云平台而且支持内部数据中心

View File

@@ -20,7 +20,7 @@ Service 虽然提供了负载均衡,但通常是 4 层TCP/UDP。**Ingres
常见的 Ingress Controller有 Nginx Ingress Controller, Traefik, Istio Gateway
### Persistent Volume (PV) StorageClass
### Persistent VolumePV StorageClass
容器内的文件是临时的对于有状态应用如数据库需要持久化存储
@@ -28,7 +28,7 @@ Service 虽然提供了负载均衡,但通常是 4 层TCP/UDP。**Ingres
* **PV (Persistent Volume)**实际的存储资源NFS, AWS EBS, Ceph
* **StorageClass**定义存储类支持动态创建 PV
### Horizontal Pod Autoscaling (HPA)
### Horizontal Pod AutoscalingHPA
HPA 根据 CPU 利用率或其他指标如内存自定义指标自动扩缩 Deployment ReplicaSet 中的 Pod 数量

View File

@@ -1,5 +1,7 @@
## 基本概念
基本概念 示意图如下
![](../_images/kubernetes_design.jpg)
* 节点`Node`一个节点是一个运行 Kubernetes 中的主机
@@ -73,6 +75,8 @@ Kubernetes 校验节点可用依赖于 ID。在当前的版本中有两个接
#### 容器组设计的初衷
容器组Pod的设计主要是为了解决应用间的紧密协作和资源共享问题
#### 资源共享和通信
容器组主要是为了数据共享和它们之间的通信
@@ -175,14 +179,35 @@ Kubernetes 校验节点可用依赖于 ID。在当前的版本中有两个接
### Replication Controllers
> [!NOTE]
> Replication Controller 保证指定数量的 Pod 副本在任何时候都处于运行状态
### 服务
> [!NOTE]
> 服务Service定义一组 Pod 的逻辑集合和访问它们的策略
###
> [!NOTE]
> Volume包含可被 Pod 中容器访问的数据的目录
### 标签
> [!NOTE]
> 标签Label是附加到对象 Pods上的键值对用于组织和选择对象子集
### 接口权限
> [!NOTE]
> 接口权限通过认证授权和准入控制来保护 Kubernetes API 的访问
### web界面
> [!NOTE]
> Kubernetes Dashboard 是一个基于 Web 的用户界面用于管理集群
### 命令行操作
> [!NOTE]
> kubectl Kubernetes 的命令行工具用于与集群进行交互

View File

@@ -25,6 +25,8 @@
### 控制平面
控制平面Control Plane Kubernetes 集群的大脑负责做出全局决策如调度以及检测和响应集群事件
#### 主节点服务
主节点上需要提供如下的管理服务

View File

@@ -1,5 +1,7 @@
## Kubernetes 简介
Kubernetes 简介 示意图如下
![](../_images/kubernetes_logo.png)
### 什么是 Kubernetes
@@ -28,19 +30,24 @@ Kubernetes 完美解决了这些问题。
### 核心概念
#### Pod (豆荚)
#### Pod豆荚
Kubernetes 的最小调度单位一个 Pod 可以包含一个或多个紧密协作的容器共享网络和存储就像豌豆荚里的豌豆一样
#### Node (节点)
#### Node节点
运行 Pod 的物理机或虚拟机
#### Deployment (部署)
#### Deployment部署
定义应用的期望状态需要 3 个副本镜像版本为 v1K8s 会持续确保当前状态符合期望状态
#### Service (服务)
#### Service服务
定义一组 Pod 的访问策略提供稳定的 Cluster IP DNS 名称负责负载均衡
#### Namespace (命名空间)
#### Namespace命名空间
用于多租户资源隔离
---
@@ -60,7 +67,7 @@ Kubernetes 的最小调度单位。一个 Pod 可以包含一个或多个紧密
### 架构
Kubernetes 也是 C/S 架构 **Master (控制平面)** **Worker (工作节点)** 组成
Kubernetes 也是 C/S 架构 **Master (控制平面)****Worker (工作节点)** 组成
- **Control Plane**负责决策API Server, Scheduler, Controller Manager, etcd
- **Worker Node**负责干活Kubelet, Kube-proxy, Container Runtime

View File

@@ -75,7 +75,7 @@ kubectl get svc nginx-service
如果输出端口是 `80:30080/TCP`你可以通过 `http://<NodeIP>:30080` 访问 Nginx
### 步骤 3模拟滚动更新 (Rolling Update)
### 步骤 3模拟滚动更新Rolling Update
修改 `nginx-deployment.yaml`将镜像版本改为 `nginx:latest`

View File

@@ -1,4 +1,4 @@
## 部署 Kubernetes
# 部署 Kubernetes
目前Kubernetes 支持在多种环境下使用包括本地主机UbuntuDebianCentOSFedora 云服务[腾讯云](https://cloud.tencent.com/act/cps/redirect?redirect=10058&cps_key=3a5255852d5db99dcd5da4c72f05df61)、[阿里云](https://www.aliyun.com/product/kubernetes?source=5176.11533457&userCode=8lx5zmtu&type=copy)、[百度云](https://cloud.baidu.com/product/cce.html) 等)。

View File

@@ -12,6 +12,8 @@
### 测试
运行以下命令
```bash
$ kubectl version
```

View File

@@ -11,6 +11,8 @@
### 安装
K3s 的安装非常简单官方提供了便捷的安装脚本
#### 脚本安装Linux
K3s 提供了极为便捷的安装脚本
@@ -23,6 +25,8 @@ curl -sfL https://get.k3s.io | sh -
#### 查看状态
运行以下命令
```bash
sudo k3s kubectl get nodes
```
@@ -39,14 +43,18 @@ K3s 内置了 `kubectl` 命令(通过 `k3s kubectl` 调用),为了方便
```bash
## 读取 K3s 的配置文件
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
## 现在可以直接使用 kubectl
kubectl get pods -A
```
### 清理卸载
运行以下命令
```bash
/usr/local/bin/k3s-uninstall.sh
```

View File

@@ -4,6 +4,8 @@
### 为什么选择 Kind
Kind 相比其他本地集群方案 Minikube有以下显著优势
* **轻量便捷**只要有 Docker 环境即可无需额外虚拟机
* **多集群支持**可以轻松在本地启动多个集群
* **多版本支持**支持指定 Kubernetes 版本进行测试
@@ -11,18 +13,23 @@
### 安装 Kind
Kind 是一个二进制文件并在 PATH 中即可使用以下是不同系统的安装方法
#### macOS
运行以下命令
```bash
brew install kind
```
#### Linux / Windows (WSL2)
#### Linux / WindowsWSL2
可以下载二进制文件
```bash
## Linux AMD64
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
@@ -76,6 +83,8 @@ kind create cluster --config kind-config.yaml
### 删除集群
运行以下命令
```bash
kind delete cluster
```

View File

@@ -1,4 +1,4 @@
## 使用 kubeadm 部署 kubernetes(使用 Docker)
## 使用 kubeadm 部署 kubernetes使用 Docker
`kubeadm` 提供了 `kubeadm init` 以及 `kubeadm join` 这两个命令作为快速创建 `kubernetes` 集群的最佳实践
@@ -8,8 +8,12 @@
### 安装 **kubelet** **kubeadm** **kubectl**
需要在每台机器上安装以下的软件包
#### Ubuntu/Debian
运行以下命令
```bash
$ apt-get update && apt-get install -y apt-transport-https
$ curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
@@ -24,6 +28,8 @@ $ apt-get install -y kubelet kubeadm kubectl
#### CentOS/Fedora
运行以下命令
```bash
$ cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
@@ -40,6 +46,8 @@ $ sudo yum install -y kubelet kubeadm kubectl
### 修改内核的运行参数
运行以下命令
```bash
$ cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1
@@ -48,17 +56,21 @@ net.bridge.bridge-nf-call-ip6tables = 1
EOF
## 应用配置
$ sysctl --system
```
### 配置 kubelet
为了让 kubelet 正确运行我们需要对其进行一些必要的配置
#### 修改 `kubelet.service`
`/etc/systemd/system/kubelet.service.d/10-proxy-ipvs.conf` 写入以下内容
```bash
## 启用 ipvs 相关内核模块
[Service]
ExecStartPre=-/sbin/modprobe ip_vs
ExecStartPre=-/sbin/modprobe ip_vs_rr
@@ -74,8 +86,12 @@ $ sudo systemctl daemon-reload
### 部署
安装配置完成后我们将分别在 Master 节点和 Worker 节点上进行部署操作
#### master
运行以下命令
```bash
$ sudo kubeadm init --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
--pod-network-cidr 10.244.0.0/16 \
@@ -116,7 +132,7 @@ kubeadm join 192.168.199.100:6443 --token cz81zt.orsy9gm9v649e5lf \
#### node 工作节点
**另一主机** 重复 **部署** 小节以前的步骤安装配置好 kubelet根据提示加入到集群
**另一主机**重复**部署** 小节以前的步骤安装配置好 kubelet根据提示加入到集群
```bash
$ kubeadm join 192.168.199.100:6443 --token cz81zt.orsy9gm9v649e5lf \
@@ -163,6 +179,7 @@ $ kubeadm join 192.168.199.100:6443 --token cz81zt.orsy9gm9v649e5lf \
$ kubectl get node -o yaml | grep CIDR
## 输出
podCIDR: 10.244.0.0/16
podCIDRs:
```
@@ -179,7 +196,11 @@ $ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.11.0/Docu
$ kubectl taint nodes --all node-role.kubernetes.io/master-
## 恢复默认值
## $ kubectl taint nodes NODE_NAME node-role.kubernetes.io/master=true:NoSchedule
具体内容如下:
```
### 参考文档

View File

@@ -1,4 +1,4 @@
## 使用 kubeadm 部署 kubernetes(CRI 使用 containerd)
## 使用 kubeadm 部署 kubernetesCRI 使用 containerd
`kubeadm` 提供了 `kubeadm init` 以及 `kubeadm join` 这两个命令作为快速创建 `kubernetes` 集群的最佳实践
@@ -10,9 +10,11 @@
```bash
## debian 系
$ sudo apt install containerd.io
## rhel 系
$ sudo yum install containerd.io
```
@@ -36,12 +38,16 @@ KillMode=process
Restart=always
RestartSec=5
## Having non-zero Limit*s causes performance problems due to accounting overhead
## in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=infinity
## Comment TasksMax if your systemd version does not supports it.
## Only systemd 226 and above support this version.
TasksMax=infinity
OOMScoreAdjust=-999
@@ -54,13 +60,16 @@ WantedBy=multi-user.target
```toml
version = 2
## persistent data location
root = "/var/lib/cri-containerd"
## runtime state information
state = "/run/cri-containerd"
plugin_dir = ""
disabled_plugins = []
required_plugins = []
## set containerd's OOM score
oom_score = 0
[grpc]
@@ -203,8 +212,12 @@ oom_score = 0
### 安装 **kubelet** **kubeadm** **kubectl** **cri-tools** **kubernetes-cni**
需要在每台机器上安装以下的软件包
#### Ubuntu/Debian
运行以下命令
```bash
$ apt-get update && apt-get install -y apt-transport-https
$ curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
@@ -219,6 +232,8 @@ $ apt-get install -y kubelet kubeadm kubectl
#### CentOS/Fedora
运行以下命令
```bash
$ cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
@@ -235,6 +250,8 @@ $ sudo yum install -y kubelet kubeadm kubectl
### 修改内核的运行参数
运行以下命令
```bash
$ cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1
@@ -243,17 +260,21 @@ net.bridge.bridge-nf-call-ip6tables = 1
EOF
## 应用配置
$ sysctl --system
```
### 配置 kubelet
为了让 kubelet 正确运行我们需要对其进行一些必要的配置
#### 修改 `kubelet.service`
`/etc/systemd/system/kubelet.service.d/10-proxy-ipvs.conf` 写入以下内容
```bash
## 启用 ipvs 相关内核模块
[Service]
ExecStartPre=-/sbin/modprobe ip_vs
ExecStartPre=-/sbin/modprobe ip_vs_rr
@@ -269,8 +290,12 @@ $ sudo systemctl daemon-reload
### 部署
安装配置完成后我们将分别在 Master 节点和 Worker 节点上进行部署操作
#### master
运行以下命令
```bash
$ systemctl enable cri-containerd
@@ -317,7 +342,7 @@ kubeadm join 192.168.199.100:6443 --token cz81zt.orsy9gm9v649e5lf \
#### node 工作节点
**另一主机** 重复 **部署** 小节以前的步骤安装配置好 kubelet根据提示加入到集群
**另一主机**重复**部署** 小节以前的步骤安装配置好 kubelet根据提示加入到集群
```bash
$ systemctl enable cri-containerd
@@ -374,6 +399,7 @@ CONTAINER_RUNTIME_ENDPOINT=/run/cri-containerd/cri-containerd.sock crictl ps -a
$ kubectl get node -o yaml | grep CIDR
## 输出
podCIDR: 10.244.0.0/16
podCIDRs:
```
@@ -390,7 +416,11 @@ $ kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/v0.26.1/
$ kubectl taint nodes --all node-role.kubernetes.io/master-
## 恢复默认值
## $ kubectl taint nodes NODE_NAME node-role.kubernetes.io/master=true:NoSchedule
具体内容如下:
```
### 参考文档