从零开始的云计算生活——第五十六天,临深履薄,kubernetes模块之etcd备份恢复和集群升级指南

目录

一.故事背景

[二. etcd备份恢复](#二. etcd备份恢复)

[1. 集群管理命令](#1. 集群管理命令)

环境变量

查看etcd版本

查看etcd集群节点信息

查看集群健康状态

查看告警事件

数据库操作命令

增加(put)

查询(get)

删除(del)

更新(put覆盖)

查询键历史记录查询

监听命令

同时监听多个键

租约命令

添加租约

查看租约

租约续约

删除租约

多key同一租约

备份恢复命令

生成快照

查看快照

恢复快照

[三. Kubernetes集群升级](#三. Kubernetes集群升级)

1.集群升级过程辅助命令

[2. 升级master节点](#2. 升级master节点)

2.1、升级kubeadm

2.2、验证升级计划

2.3、master节点升级

[3. 升级node节点](#3. 升级node节点)

[4. 总结](#4. 总结)

四.总结


一.故事背景

本次将结束k8s的所有内容的学习

二. etcd备份恢复

1. 集群管理命令

etcdctl是一个命令行的客户端,它提供了一些命令,可以方便我们在对服务进行测试或者手动修改数据库内容。etcdctl命令基本用法如下所示:

etcdctl [global options] command [command options] [args...]

具体的命令选项参数可以通过 etcdctl command --help来获取相关帮助

环境变量

获得etcd数据库的访问url

kubectl -n kube-system get pods etcd-k8s-master -o yaml | grep -A10 "containers:"

如果遇到使用了TLS加密的集群,通常每条指令都需要指定证书路径和etcd节点地址,可以把相关命令行参数添加在环境变量中,在**~/.bashrc**添加以下内容:

复制代码
HOST_1=https://192.168.71.128:2379
ENDPOINTS=${HOST_1}
# 如果需要使用原生命令,在命令开头加一个\ 例如:\etcdctl command
alias etcdctl="etcdctl --cert /etc/kubernetes/pki/etcd/peer.crt --key
 /etc/kubernetes/pki/etcd/peer.key --endpoints=https://192.168.158.6:2379  
--insecure-skip-tls-verify"

source ~/.bashrc

查看etcd版本

etcdctl version

查看etcd集群节点信息

etcdctl member list -w table

查看集群健康状态

etcdctl endpoint status -w table

####表格内容解析

ENDPOINT:节点的地址,这里是 https://192.168.158.6:2379。这表示该节点的网络地址和端口。

ID:节点的唯一标识符,这里是 6dc5c9ae772d8898。

VERSION:节点的版本号,这里是 3.5.9。

DB SIZE:数据库大小,这里是 9.1 MB。

IS LEADER:是否为集群的领导者节点。true 表示该节点是领导者。

IS LEARNER:是否为学习者节点。false 表示该节点不是学习者节点。

RAFT TERM:Raft协议中的任期编号,这里是 4。Raft协议用于分布式系统的共识机制,任期编号用于区分不同的选举周期。

RAFT INDEX:Raft协议中的日志索引,这里是 30622。它表示当前日志的最新位置。

RAFT APPLIED INDEX:Raft协议中已应用的日志索引,这里是 30622。它表示已提交并应用到状态机的日志位置。

ERRORS:错误信息,这里为空,表示没有错误

查看告警事件

如果内部出现问题,会触发告警,可以通过命令查看告警引起原因,命令如下所示:

etcdctl alarm <subcommand> [flags]

常用的子命令主要有两个:

查看所有告警

etcdctl alarm list

解除所有告警

etcdctl alarm disarm

以下是 `etcdctl` 命令和选项的中文翻译:

命令:

  • `alarm disarm` 停止所有告警

  • `alarm list` 列出所有告警

  • `auth disable` 禁用身份验证

  • `auth enable` 启用身份验证

  • `auth status` 返回身份验证状态

  • `check datascale` 检查给定服务器端点上不同工作负载的数据存储内存使用情况

  • `check perf` 检查 etcd 集群的性能

  • `compaction` 压缩 etcd 中的事件历史记录

  • `defrag` 对具有给定端点的 etcd 成员进行存储碎片整理

  • `del` 删除指定的键或键范围 [key, range_end)

  • `elect` 观察并参与领导者选举

  • `endpoint hashkv` 打印 `--endpoints` 中每个端点的 KV 历史记录哈希

  • `endpoint health` 检查 `--endpoints` 标志中指定的端点的健康状态

  • `endpoint status` 打印 `--endpoints` 标志中指定的端点的状态

  • `get` 获取键或键范围

  • `help` 任何命令的帮助

  • `lease grant` 创建租约

  • `lease keep-alive` 保持租约活跃(续租)

  • `lease list` 列出所有活跃的租约

  • `lease revoke` 撤销租约

  • `lease timetolive` 获取租约信息

  • `lock` 获取命名锁

  • `make-mirror` 在目标 etcd 集群创建镜像

  • `member add` 向集群中添加成员

  • `member list` 列出集群中的所有成员

  • `member promote` 将集群中的非投票成员提升为投票成员

  • `member remove` 从集群中移除成员

  • `member update` 更新集群中的成员

  • `move-leader` 将领导权转移到另一个 etcd 集群成员

  • `put` 将给定的键放入存储中

  • `role add` 添加新角色

  • `role delete` 删除角色

  • `role get` 获取角色的详细信息

  • `role grant-permission` 给角色授予键

  • `role list` 列出所有角色

  • `role revoke-permission` 从角色中撤销键

  • `snapshot restore` 将 etcd 成员快照恢复到 etcd 目录

  • `snapshot save` 将 etcd 节点后端快照存储到给定文件

  • `snapshot status` [已弃用] 获取给定文件的后端快照状态

  • `txn` 事务处理所有请求

  • `user add` 添加新用户

  • `user delete` 删除用户

  • `user get` 获取用户的详细信息

  • `user grant-role` 给用户授予角色

  • `user list` 列出所有用户

  • `user passwd` 更改用户密码

  • `user revoke-role` 从用户中撤销角色

  • `version` 打印 etcdctl 的版本

  • `watch` 监视键或前缀上的事件流

选项:

  • `--cacert=""` 使用此 CA 包验证启用了 TLS 的安全服务器的证书

  • `--cert=""` 使用此 TLS 证书文件标识安全客户端

  • `--command-timeout=5s` 短命令的超时时间(不包括拨号超时)

  • `--debug[=false]` 启用客户端调试日志记录

  • `--dial-timeout=2s` 客户端连接的拨号超时时间

  • `-d, --discovery-srv=""` 查询描述集群端点的 SRV 记录的域名

  • `--discovery-srv-name=""` 使用 DNS 发现时查询的服务名称

  • `--endpoints=[127.0.0.1:2379]` gRPC 端点

  • `-h, --help[=false]` etcdctl 的帮助

  • `--hex[=false]` 将字节字符串打印为十六进制编码的字符串

  • `--insecure-discovery[=true]` 接受描述集群端点的不安全 SRV 记录

  • `--insecure-skip-tls-verify[=false]` 跳过服务器证书验证(注意:此选项仅应在测试目的下启用)

  • `--insecure-transport[=true]` 禁用客户端连接的传输安全

  • `--keepalive-time=2s` 客户端连接的保活时间

  • `--keepalive-timeout=6s` 客户端连接的保活超时时间

  • `--key=""` 使用此 TLS 密钥文件标识安全客户端

  • `--password=""` 身份验证的密码(如果使用此选项,--user 选项不应包含密码)

  • `--user=""` 身份验证的用户名[:密码](如果未提供密码,将提示输入)

  • `-w, --write-out="simple"` 设置输出格式(字段,JSON,protobuf,简单,表格)

数据库操作命令

增加(put)

添加一个键值,基本用法如下所示:

etcdctl put [options] <key> <value> [flags]

常用参数如下所示:

参数 功能描述
--prev-kv 输出修改前的键值

注意事项:

  • 其中value接受从stdin的输入内容

  • 如果value是以横线-开始,将会被视为flag,如果不希望出现这种情况,可以使用两个横线代替--

  • 若键已经存在,则进行更新并覆盖原有值,若不存在,则进行添加

查询(get)

查询键值,基本用法如下所示:

etcdctl get [options] <key> [range_end] [flags]

常用参数如下所示:

参数 功能描述
--hex 以十六进制形式输出
--limit number 设置输出结果的最大值
--prefix 根据prefix进行匹配key
--order 对输出结果进行排序,ASCEND 或 DESCEND
--sort-by 按给定字段排序,CREATE, KEY, MODIFY, VALUE, VERSION
--print-value-only 仅输出value值
--from-key 按byte进行比较,获取大于等于指定key的结果
--keys-only 仅获取keys

示例

获取键值

只获取值

批量取从foo1到foo3的值,不包括foo3

批量获取前缀为foo的值

批量获取符合前缀的前两个值

批量获取前缀为foo的值,并排序

删除(del)

删除键值,基本用法如下所示:

etcdctl del [options] <key> [range_end] [flags]

常用参数如下所示:

参数 功能描述
--prefix 根据prefix进行匹配删除
--prev-kv 输出删除的键值
--from-key 按byte进行比较,删除大于等于指定key的结果

示例

删除name的键值

删除从foo1到foo3且不包含foo3的键值

删除前缀为foo的所有键值

更新(put覆盖)

若键已经存在,则进行更新并覆盖原有值,若不存在,则进行添加。

查询键历史记录查询

etcd在每次键值变更时,都会记录变更信息,便于我们查看键变更记录

监听命令

watch是监听键或前缀发生改变的事件流, 主要用法如下所示:

etcdctl watch [options] [key or prefix] [range_end] [--] [exec-command arg1 arg2 ...] [flags]

示例如下所示:

对某个key监听操作,当key1发生改变时,会返回最新值

etcdctl watch name

监听key前缀

etcdctl watch name --prefix

监听到改变后执行相关操作

etcdctl watch name -- etcdctl get age

复制代码
# 启动监听命令
[root@tiaoban etcd]# etcdctl watch foo

#另一个控制台执行新增命令
[root@tiaoban ~]# etcdctl put foo bar
OK

# 观察控制台监听输出
[root@tiaoban etcd]# etcdctl watch foo
PUT
foo
bar

#另一个控制台执行更新命令
[root@tiaoban ~]# etcdctl put foo bar123
OK

# 观察控制台监听输出
[root@tiaoban etcd]# etcdctl watch foo
PUT
foo
bar
PUT
foo
bar123

#另一个控制台执行删除命令
[root@tiaoban ~]# etcdctl del foo
1

# 观察控制台监听输出
[root@tiaoban etcd]# etcdctl watch foo
PUT
foo
bar
PUT
foo
bar123
DELETE
foo
同时监听多个键
复制代码
# 监听前缀为foo的键
[root@tiaoban etcd]# etcdctl watch --prefix foo
# 另一个控制台执行操作
[root@tiaoban ~]# etcdctl put foo1 bar1
OK
[root@tiaoban ~]# etcdctl put foo2 bar2
OK
[root@tiaoban ~]# etcdctl del foo1
1
# 观察控制台输出
[root@tiaoban etcd]# etcdctl watch --prefix foo
PUT
foo1
bar1
PUT
foo2
bar2
DELETE
foo1


# 监听指定的多个键
[root@tiaoban etcd]# etcdctl watch -i
watch name
watch location

# 另一个控制台执行操作
[root@tiaoban ~]# etcdctl put name cuiliang
OK
[root@tiaoban ~]# etcdctl del name
1
[root@tiaoban ~]# etcdctl put location beijing
OK
# 观察控制台输出
[root@tiaoban etcd]# etcdctl watch -i
watch name
watch location
PUT
name
cuiliang
DELETE
name

PUT
location
beijing

租约命令

租约具有生命周期,需要为租约授予一个TTL(time to live),将租约绑定到一个key上,则key的生命周期与租约一致,可续租,可撤销租约,类似于redis为键设置过期时间。其主要用法如下所示:

etcdctl lease <subcommand> [flags]

添加租约

主要用法如下所示:

etcdctl lease grant <ttl> [flags]

设置60秒后过期时间

root@tiaoban etcd\]# etcdctl lease grant 60 lease 6e1e86f4c6512a2b granted with TTL(60s) # 把foo和租约绑定,设置成60秒后过期 \[root@tiaoban etcd\]# etcdctl put --lease=6e1e86f4c6512a29 foo bar OK # 租约期内查询键值 \[root@tiaoban etcd\]# etcdctl get foo foo bar # 租约期外查询键值 \[root@tiaoban etcd\]# etcdctl get foo 返回为空

查看租约

查看租约信息,以便续租或查看租约是否仍然存在或已过期。 查看租约详情主要用法如下所示:

etcdctl lease timetolive <leaseID> [options] [flags]

复制代码
# 添加一个50秒的租约
[root@tiaoban etcd]# etcdctl lease grant 50
lease 6e1e86f4c6512a32 granted with TTL(50s)
# 将name键绑定到6e1e86f4c6512a32租约上
[root@tiaoban etcd]# etcdctl put --lease=6e1e86f4c6512a32 name cuiliang
OK
# 查看所有租约列表
[root@tiaoban etcd]# etcdctl lease list
found 1 leases
6e1e86f4c6512a32
# 查看租约详情,remaining(6s) 剩余有效时间6秒;--keys 获取租约绑定的 key
[root@tiaoban etcd]# etcdctl lease timetolive --keys 6e1e86f4c6512a32
lease 6e1e86f4c6512a32 granted with TTL(50s), remaining(6s), attached keys([name])
租约续约

通过刷新 TTL 值来保持租约的有效,使其不会过期。 主要用法如下所示:

etcdctl lease keep-alive [options] <leaseID> [flags]

复制代码
# 设置60秒后过期租约
[root@tiaoban etcd]# etcdctl lease grant 60
lease 6e1e86f4c6512a36 granted with TTL(60s)
# 把name和租约绑定,设置成 60 秒后过期
[root@tiaoban etcd]# etcdctl put --lease=6e1e86f4c6512a36 name cuiliang
OK
# 自动定时执行续约,续约成功后每次租约为60秒
[root@tiaoban etcd]# etcdctl lease keep-alive 6e1e86f4c6512a36
lease 6e1e86f4c6512a36 keepalived with TTL(60)
lease 6e1e86f4c6512a36 keepalived with TTL(60)
lease 6e1e86f4c6512a36 keepalived with TTL(60)
......
删除租约

通过租约 ID 撤销租约,撤销租约将删除其所有绑定的 key。 主要用法如下所示:

etcdctl lease revoke <leaseID> [flags]

复制代码
# 设置600秒后过期租约
[root@tiaoban etcd]# etcdctl lease grant 600
lease 6e1e86f4c6512a39 granted with TTL(600s)
# 把foo和租约绑定,600秒后过期
[root@tiaoban etcd]# etcdctl put --lease=6e1e86f4c6512a39 foo bar
OK
# 查看租约详情
[root@tiaoban etcd]# etcdctl lease timetolive --keys 6e1e86f4c6512a39
lease 6e1e86f4c6512a39 granted with TTL(600s), remaining(556s), attached keys([foo])
# 删除租约
[root@tiaoban etcd]# etcdctl lease revoke 6e1e86f4c6512a39
lease 6e1e86f4c6512a39 revoked
# 查看租约详情
[root@tiaoban etcd]# etcdctl lease timetolive --keys 6e1e86f4c6512a39
lease 6e1e86f4c6512a39 already expired
# 获取键值
[root@tiaoban etcd]# etcdctl get foo
返回为空
多key同一租约

一个租约支持绑定多个 key

复制代码
# 设置60秒后过期的租约
[root@tiaoban etcd]# etcdctl lease grant 60
lease 6e1e86f4c6512a3e granted with TTL(60s)
# foo1与租约绑定
[root@tiaoban etcd]# etcdctl put --lease=6e1e86f4c6512a3e foo1 bar1
OK
# foo2与租约绑定
[root@tiaoban etcd]# etcdctl put --lease=6e1e86f4c6512a3e foo2 bar2
OK
# 查看租约详情
[root@tiaoban etcd]# etcdctl lease timetolive --keys 6e1e86f4c6512a3e
lease 6e1e86f4c6512a3e granted with TTL(60s), remaining(14s), 
attached keys([foo1 foo2])

租约过期后,所有 key 值都会被删除,因此:

  • 当租约只绑定了一个 key 时,想删除这个 key,最好的办法是撤销它的租约,而不是直接删除这个 key。

  • 当租约没有绑定key时,应主动把它撤销掉,单纯删除 key 后,续约操作持续进行,会造成内存泄露。

直接删除key演示:

复制代码
# 设置租约并绑定 zoo1
[root@tiaoban etcd]# etcdctl lease grant 60
lease 6e1e86f4c6512a43 granted with TTL(60s)
[root@tiaoban etcd]# etcdctl --lease=6e1e86f4c6512a43 put zoo1 val1
OK
# 续约
[root@tiaoban etcd]# etcdctl lease keep-alive 6e1e86f4c6512a43
lease 6e1e86f4c6512a43 keepalived with TTL(60)

# 此时在另一个控制台执行删除key操作:
[root@tiaoban ~]# etcdctl del zoo1
1
# 单纯删除 key 后,续约操作持续进行,会造成内存泄露
[root@tiaoban etcd]# etcdctl lease keep-alive 6e1e86f4c6512a43
lease 6e1e86f4c6512a43 keepalived with TTL(60)
lease 6e1e86f4c6512a43 keepalived with TTL(60)
lease 6e1e86f4c6512a43 keepalived with TTL(60)
...

撤销key的租约演示:

复制代码
# 设置租约并绑定 zoo1
[root@tiaoban etcd]# etcdctl lease grant 50
lease 32698142c52a1717 granted with TTL(50s)
[root@tiaoban etcd]# etcdctl --lease=32698142c52a1717 put zoo1 val1
OK

# 续约
[root@tiaoban etcd]# etcdctl lease keep-alive 32698142c52a1717
lease 32698142c52a1717 keepalived with TTL(50)
lease 32698142c52a1717 keepalived with TTL(50)

# 另一个控制台执行:etcdctl lease revoke 32698142c52a1717

# 续约撤销并退出
lease 32698142c52a1717 expired or revoked.
[root@tiaoban etcd]# etcdctl get zoo1
# 返回空

备份恢复命令

主要用于管理节点的快照,其主要用法如下所示:

复制代码
etcdctl snapshot <subcommand> [flags]
生成快照

其主要用法如下所示:

复制代码
etcdctl snapshot save <filename> [flags]

示例如下所示:

复制代码
etcdctl snapshot save etcd-snapshot.db
查看快照

其主要用法如下所示:

复制代码
etcdctl snapshot status <filename> [flags]

示例如下所示:

复制代码
etcdctl snapshot status etcd-snapshot.db -w table
恢复快照

其主要用法如下所示:

复制代码
etcdctl snapshot restore <filename> [options] [flags]

三. Kubernetes集群升级

1.集群升级过程辅助命令

(1)查看节点上运行的pod。

(2)查看集群配置文件。

(3)查看当前集群节点。

2. 升级master节点

2.1、升级kubeadm

更新包管理器

yum update

查看可用版本

apt-cache madison kubeadm

yum list | grep kubeadm

更新

yum update -y kubeadm

验证版本

kubeadm version

修改仓库源版本(节点与master都改)

2.2、验证升级计划

(1)检查可升级到哪些版本,并验证你当前的集群是否可升级。

2.3、master节点升级

(1)升级到 1.29.15版本,此命令仅升级master节点(control plane)。

kubeadm upgrade apply v1.29.15

(2) 腾空节点,即将节点上除守护进程之外的其他进程调度到其他节点,同时将开启调度保护。

kubectl drain k8s-master --ignore-daemonsets

(3)升级kubelet与kubectl组件。

yum update -y kubelet

(4)重启 kubelet。

systemctl daemon-reload

systemctl restart kubelet

(5)解除调度保护。

kubectl uncordon k8s-master

3. 升级node节点

(1)升级节点kubelet 配置。

kubeadm upgrade node

(2)腾空节点,同时开启调度保护,此命令请在master节点操作

kubectl drain k8s-node1 --ignore-daemonsets

若有临时存贮pod使用该命令删除

复制代码
kubectl drain k8s-node1 \
  --ignore-daemonsets \
  --force \
  --delete-emptydir-data

(3)升级kubelet与kubectl组件。

yum update -y kubelet

(4)重启 kubelet。

systemctl daemon-reload

systemctl restart kubelet

(5)解除调度保护,master节点上执行该命令。

kubectl uncordon k8s-node1

kubectl uncordon k8s-node2

4. 总结

每个版本的升级都不一样,所以要根据版本进行适当调整,不作为万能指导。 升级过程:

  1. 升级master组件。

  2. 升级worker节点组件,调度保护、排空节点、worker节点组件升级、解除保护。

Kubernetes集群的升级可以分为以下几个步骤:

  1. 备份数据。在升级之前,需要备份Kubernetes集群的数据,包括访问控制、配置文件、数据卷等。

  2. 选择升级方式。Kubernetes集群的升级方式可以分为两种:滚动升级和强制替换。滚动升级是指逐个升级每个节点,直到所有节点都升级完成。强制替换是指一次性替换所有节点,将旧节点直接替换为新节点。

  3. 准备新版本。Kubernetes升级需要准备新版本的二进制文件和镜像文件。可以从Kubernetes官方网站下载最新版本的二进制文件和镜像文件,并上传到集群中的节点上。

  4. 升级Master节点。首先需要升级Master节点,使用新版本的二进制文件替换旧版本的二进制文件,并启动新版本的Kubernetes API Server、ControllerKubernetes是一个快速发展的开源项目,为了保持其功能和安全性,集群的升级是必须的。

    • 查看升级文档:首先需要查看官方的升级文档,了解升级过程中需要注意的事项。

    • 备份数据:在升级前需要备份当前的数据,以防升级过程中的意外情况导致数据丢失。

    • 准备好备份:在升级前需要确保备份的可用性,以便在需要时能够 Manager和Scheduler。

  5. 升级Node节点。接下来需要升级Node节点。首先需要将节点上的Kubelet和kube-proxy服务停止,使用新版本的二进制文件替换旧版本的二进制文件,然后启动新版本的Kubelet和kube-proxy服务。

  6. 验证升级结果。升级完成后,需要验证恢复数据。

    • 升级前的测试:可以在测试环境中进行升级测试,以确保升级过程和升级后的集群正常运行。

    • 升级Node:首先需要升级每个Node节点中的Kubernetes组件,包括kubelet和kube-proxy等。

    • 升级Control Plane:然后需要升级Control Plane中的Kubernetes组件,包括kube-apiserver、kube-controller-manager和kube-scheduler等。

    • 升级Kubernetes对象:升级完Control Plane后,需要升级Kubernetes对象,如Deployment集群是否正常运行。可以使用kubectl命令查看集群的状态和资源对象的状态,确保所有的服务都能够正常访问。

  7. 回滚升级。如果升级失败或出现问题,可以回滚到之前的版本。回滚的过程与升级的过程相同,只需要使用旧版本的二进制文件和镜像文件即可。

Kubernetes集群的升级需要仔细规划和准备,并按照一定的步骤进行操作。只有在备份数据、选择适当的升级方式、准备新版本、升级Master节点、升级Node节点、验证升级结果等步骤都完成后,才能确保集群的升级成功。、StatefulSet等。

升级后的检查:

  • 验证集群状态:升级后需要验证集群的状态,包括Node节点的状态、Pod的状态、Service的状态等。

  • 验证应用程序:升级后需要验证应用程序的运行状态,确保应用程序正常运行。

  • 观察日志:如果发现问题,可以通过查看日志来排查问题原因。

Kubernetes集群升级是一个需要谨慎处理的过程,需要充分准备和测试,以确保升级过程的顺利和集群的稳定。在升级过程中,需要注意备份数据和备份的可用性,升级顺序和升级后的检查等问题,以确保集群的正常运行和应用程序的稳定性。

四.总结

本文总结了Kubernetes集群管理的核心内容,重点介绍了etcd数据库的备份恢复操作和集群升级流程。在etcd部分,详细讲解了etcdctl命令行工具的使用方法,包括集群管理、数据操作、租约管理、快照备份等核心功能。在集群升级部分,系统阐述了master节点和worker节点的升级步骤,包括组件更新、节点排空、版本验证等关键操作。文章强调升级过程需要谨慎执行,建议提前备份数据并在测试环境验证升级方案,确保生产环境升级的平稳性和可靠性。这些内容为Kubernetes集群的日常运维提供了实用的技术指导。

相关推荐
2301_803554527 小时前
k8s(自写)
云原生·容器·kubernetes
swanwei10 小时前
技术人员突围之路(15年技术管理经验总结)之十
学习·程序人生·生活·求职招聘·交友
颖月石12 小时前
k8s控制器定时把k8s apiserver内存和cpu打得很高
kubernetes
富士康质检员张全蛋13 小时前
Velero 实现k8s跨集群迁移
docker·容器·kubernetes
程序员白话13 小时前
K8s公网集群内Pod无法跨节点通信排查案例
后端·kubernetes
Sweety丶╮79414 小时前
【Kubernetes】知识点2
云原生·容器·kubernetes
人生苦短12814 小时前
k8s常用命令
linux·容器·kubernetes
我真的是大笨蛋17 小时前
K8S笔记-容器和镜像
笔记·云原生·容器·kubernetes
Leo Kuo1 天前
ETCD学习笔记
分布式·系统架构·go·etcd