又到开学季
9月心声
首先非常感谢关注公众号的朋友,最近关注的朋友慢慢变多了,后台朋友的私信我都看见了,需要领取资料的可以后台留言,如果没有及时回复消息,可以添加我的微信。欢迎大家技术交流。
8月已过去,原打算是主要分享前端相关知识,但是实际发现,因为上班业余时间不多,没有整块的时间去研究然后做很好的分享。但是又不能断更,我担心新关注的朋友以为我三天打鱼两天晒网。所以我基本上是每天有什么能分享就不断分享,后期分享到一定量了,我再根据分类进行分享,所以关注我的朋友,可以将想了解的后台私信,我都会看并回复的。
近日见闻
微软发布了 Visual Studio for Mac 停用的公告。 具体政策是,自2024年8月31日起,Visual Studio for Mac 将不会再获得任何支持。届时,Visual Studio for Mac 将只能通过 my.visualstudio.com,为已订阅 Visual Studio 的用户提供旧版安装,但不再提供服务或维护。
Notary Project 维护人员自豪地宣布了一项重大发布,包括Notary Project 规范 v1.0.0[1]、notation v1.0.0[2]、notation-go v1.0.0[3] 和notation-core-go v1.0.0[4],已经可以用于生产环境!Notary Project 是一套旨在通过签名和验证、签名可移植性以及密钥/证书管理,为软件供应链提供跨行业标准的规范和工具。Notation 是 Notary Project 的一个子项目,包括 notation CLI 和两个实现最新Notary Project 规范[5]的 Golang 库。Notation 项目始于2019 年 12 月[6],经过几年的小版本和 RC 版本的发布,代码已经成熟;CLI 和库的第一个版本 v0.7.0-alpha.1[7] 在 2021 年 10 月发布。经过几个 alpha、beta 和 RC 版本的发布,二进制文件最终在 2023 年 5 月发布了最终版本 v1.0.0-RC.7[8]。
Rust版本的sudo出道了!互联网安全研究小组(ISRG)的Prossimo项目最近宣布了sudo-rs的第一个稳定版本。没错就是那个“sudo rm -rf”中的sudo命令。
k8s中的daemonset、statfulset、以及deployment有什么区别
当使用 Kubernetes (K8s) 时,了解 DaemonSet、StatefulSet 和 Deployment 的详细特点和用途是很重要的。
DaemonSet (守护进程集)
DaemonSet 用于确保在集群的每个节点上都运行一个或多个副本的 Pod 实例。这意味着每个节点上都会有一个相同的 Pod 运行,无论集群中有多少个节点,DaemonSet 都会维护所需的 Pod 副本数量。
用途:
DaemonSet 通常用于部署系统级别的服务或守护进程,这些服务需要在每个节点上都有一个实例。例如,日志收集代理、监控代理、网络代理等。适用于需要在每个节点上运行的任务,以确保集群中的每个节点都具有特定的功能或服务。
特点:
当节点添加或删除时,DaemonSet 会自动调整 Pod 的数量,以确保在每个节点上都有一个实例运行。
Pod 的调度是基于节点的标签选择器来进行的,可以选择在特定类型的节点上运行 DaemonSet。 通常不支持有状态的应用,因为每个节点上的 Pod 实例都是相同的,没有唯一标识符。 StatefulSet (有状态集)
StatefulSet 用于管理有状态应用程序的部署,这些应用程序通常需要持久性存储和稳定的网络标识符。每个 StatefulSet 创建的 Pod 都有唯一的标识符,可以稳定地在节点之间迁移。
用途:
StatefulSet 适用于需要持久性存储和有序部署的应用程序,如数据库、消息队列、分布式存储等。
每个 Pod 都有一个唯一的标识符,通常通过名称来表示,这对于有状态应用程序非常重要。
StatefulSet 还支持有序的 Pod 启动和终止,确保应用在升级或扩展时的稳定性。
特点:
每个 Pod 都有一个稳定的网络标识符,通常以有序的方式命名,例如,pod-0, pod-1,这有助于维护有状态应用程序的稳定性。
StatefulSet 支持持久性存储卷的声明,以确保数据的持久性。
稳定的网络标识符和有序的启动/停止使得 StatefulSet 适用于需要节点间通信或数据复制的应用程序。
Deployment (部署)
Deployment 用于部署无状态应用程序,它负责在滚动升级、回滚和扩展应用时维护所需的 Pod 副本数量。
用途:
Deployment 适用于无状态的应用程序,如 web 服务器、API 服务、微服务等,这些应用程序不需要持久性存储或有状态的标识符。 通常,Deployment 使用 ReplicaSet 来管理 Pod 副本,以确保应用程序的高可用性和扩展性。
特点:
Deployment 允许您轻松进行滚动升级和回滚,以确保应用程序的连续可用性。 您可以定义所需的 Pod 副本数量,Deployment 会自动维护这个数量,可以根据需要扩展或收缩。 通常不支持有状态应用,因为 Pod 可能会在集群中的不同节点之间重新调度,没有稳定的标识符。 总的来说,DaemonSet 用于确保在每个节点上运行相同的 Pod,StatefulSet 用于有状态应用程序的管理,Deployment 用于无状态应用程序的管理。选择正确的资源控制器取决于您的应用的性质和需求。
DaemonSet 详细示例 YAML:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: my-daemonset
spec:
selector:
matchLabels:
app: my-daemon-app
template:
metadata:
labels:
app: my-daemon-app
spec:
containers:
- name: my-container
image: my-image:latest
ports:
- containerPort: 80
nodeSelector:
disk: ssd
- 这个示例创建了一个名为
my-daemonset
的 DaemonSet,确保在每个节点上都运行一个 Pod 实例。 - Pod 使用了一个名为
my-container
的容器,该容器基于镜像my-image:latest
运行,并打开了端口 80。 - 通过
nodeSelector
字段,我们指定了一个节点标签选择器disk: ssd
,只有带有disk=ssd
标签的节点才会运行这个 DaemonSet。
StatefulSet 详细示例 YAML:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: my-statefulset
spec:
serviceName: "my-stateful-service"
replicas: 3
selector:
matchLabels:
app: my-stateful-app
template:
metadata:
labels:
app: my-stateful-app
spec:
containers:
- name: my-container
image: my-image:latest
ports:
- containerPort: 8080
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 10Gi
- 这个示例创建了一个名为
my-statefulset
的 StatefulSet,它会创建 3 个有状态的 Pod。 - 每个 Pod 使用了一个名为
my-container
的容器,该容器基于镜像my-image:latest
运行,并打开了端口 8080。 - StatefulSet 使用了
volumeClaimTemplates
字段,为每个 Pod 创建一个持久性存储卷,大小为 10Gi,访问模式为 ReadWriteOnce。
Deployment 详细示例 YAML:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 2
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: my-image:latest
ports:
- containerPort: 8080
readinessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
- 这个示例创建了一个名为
my-deployment
的 Deployment,它会创建 2 个无状态的 Pod。 - 每个 Pod 使用了一个名为
my-container
的容器,该容器基于镜像my-image:latest
运行,并打开了端口 8080。 - Deployment 使用了
readinessProbe
字段,定期检查 Pod 的健康状态,确保它们可以正常处理请求。在这个示例中,健康检查路径是/health
,端口是 8080,初始延迟为 5 秒,每 10 秒检查一次。
掌握这些理论知识,再去测试环境实践,相信一定会收获更多。