0%

前言

在我之前的项目中,对微服务升级采用的做法是删除整个namespace, 再重新应用所有yaml。 这种方式简单粗暴,但是不可避免的导致服务中断,影响了用户体验
为了解决更新服务导致的服务中断问题, Kubernetes提供了一种有效的服务升级方式 —— 滚动更新(Rolling Update)

什么是滚动更新(RollingUpdate)

滚动更新是一种部署策略。 允许用户逐步替换旧的Pod实例为新版本,而不是一次性替换所有Pod,从而实现零停机时间的部署更新。 解决了如下问题:

  • 最小化停机时间, 滚动更新可以在不完全停止服务情况下进行,提高用户体验
  • 故障恢复, 如果新版本出现问题,可以迅速回滚到之前的稳定版本
  • 平滑流量迁移, 避免瞬间全部更新导致的流量冲击和服务中断

RollingUpdate策略有两个重要参数:

  • maxUnavailable, 滚动更新时最多可以有多少个Pod不可用。 默认值为25%,这意味着如果有一个包含4个Pod的服务, 更新期间至少有3个Pod可用
  • maxSurge, 滚动更新时可以临时超出期望副本数的额外Pod数, 默认值为25%

说明: 对于关键业务, 可以用保守的设置, 比如maxUnavailable=0, maxSurge=1; 较大的maxSurge可以加快更新速度,但增加了集群压力; 根据实际情况调整这两个参数

实践案例

写一个简单的微服务, Pod副本数设置为5, 观察Kubernetes滚动更新过程

阅读全文 »

环境准备

Rocky Linux 9

安装步骤

安装Signing Keys(签名密钥)

1
2
3
rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
rpm --import https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key
rpm --import https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key

创建repo文件

在/etc/yum.repos.d/目录下创建一个名为rabbitmq.repo的文件,并添加以下内容:

阅读全文 »

问题描述

我在VMware ESXi上,用官方Rockylinux minimal ISO装了一台Linux机器。导出OVA文件发现大小有3个G。查看OVA文件,发现有个ISO文件占了2G,这个ISO文件用不到,如何删除?

1
2
3
4
5
6
# tar tvf va.ova
-rw-r--r-- someone/someone 9876 2024-12-17 02:27 va.ovf
-rw-r--r-- someone/someone 345 2024-12-17 02:27 va.mf
-rw-r--r-- someone/someone 1829634048 2024-12-17 02:27 va-file1.iso
-rw-r--r-- someone/someone 1332535296 2024-12-17 02:28 va-disk1.vmdk
-rw-r--r-- someone/someone 8684 2024-12-17 02:28 va-file2.nvram

解决方法

Poweroff虚拟机,修改虚拟机配置,把光驱删掉,再重新导出OVA即可

阅读全文 »

使用sshkey-gen命令判断

使用ssh-keygen -y命令可以从私钥文件中提取公钥。例如: 你的私钥文件是id_rsa,执行如下命令:

1
ssh-keygen -y -f id_rsa > extracted_pubkey.pub

将提取的公钥保存到extracted_pubkey.pub文件。再和你的公钥文件比较,看文件内容是否相同

1
diff extracted_pubkey.pub id_rsa.pub

整理如下内容:

  • 数据结构和算法
  • 常用库和使用方法示例
  • Flask cheetsheet
    阅读全文 »

ConfigMap简介, 为什么设计ConfigMap

在k8s中, ConfigMap是一种API对象, 用于将非机密的配置数据存储到键值对中。
Configmap作用是, 把配置数据从应用代码中分隔开, 让镜像和配置文件解耦,实现了镜像的可移植性。

举例:
我有一个Squid(正向代理)的Pod, 需要获取用户配置的白名单做访问控制。 每个用户设置的白名单都不一样, 而且用户可以随时对白名单做增、删、改,所以这个白名单的配置不能写死在代码里。
可以把白名单配置存储到k8s的ConfigMap, 这样配置数据和镜像就实现了解耦,Pod中可以动态地获取白名单的配置。

如何使用ConfigMap

使用ConfigMap时, Pod可以将其用作环境变量、命令行参数或存储卷中的配置文件。
下面给出一个具体的案例,将ConfigMap用作存储卷中的配置文件,Pod中通过读取配置文件的内容,就获取到了配置信息。

阅读全文 »

前言

k8s中的Pod由容器组成,容器运行的时候可能因为意外情况挂掉。为了保证服务的稳定性,在容器出现问题后能进行重启,k8s提供了3种探针

k8s的三种探针

为了探测容器状态,k8s提供了两个探针: LivenessProbe和ReadinessProbe

  • LivenessProbe 存活性探针, 如果探测失败, 就根据Pod重启策略,判断是否要重启容器。
  • ReadinessProbe 就绪性探针,如果检测失败,将Pod的IP:Port从对应endpoint列表中删除,防止流量转发到不可用Pod上

对于启动非常慢的应用, LivenessProbe和ReadinessProbe可能会一直检测失败,这会导致容器不停地重启。 所以k8s设计了第三种探针StartupProbe解决这个问题

  • StartupProbe探针会阻塞LivenessProbe和ReadinessProbe, 直到满足StartupProbe(Pod完成启动),再启用LivenessProbe和ReadinessProbe
阅读全文 »

配置Nginx自签名SSL证书的流程

  • 生成一个SSL自签名证书
  • 客户端机器信任这个自签名证书
  • 修改RHEL服务器的Nginx配置
  • 在客户机用curl测试HTTPS

生成一个SSL自签名证书

在RHEL服务器上, 用openssl命令生成一个自签名证书

1
2
openssl genrsa -out server.key 2048 #生成一个2048位的RSA私钥,保存到server.key
openssl req -x509 -new -nodes -key server.key -sha256 -days 3650 -out server.crt -subj "/C=CN/CN=www.petertest.com/O=MyRootCA" # 使用私钥server.key, 生成一个自签名的根证书server.crt, 有效期10年

注: CN=www.petertest.com需要换成你的服务器域名, 否则curl测试会报错

阅读全文 »