kubernetes - 如何在 GKE 1.16 上启用启动探测?
问题描述
我创建了一个带有活动性和就绪性探测以及初始延迟的部署,效果很好。如果我想用启动探测替换初始延迟,则startupProbe
密钥及其嵌套元素在创建时永远不会包含在部署描述符中,kubectl apply
并在保存后从 GKE 部署编辑器中的部署 yaml 中删除。
一个例子:
apiVersion: v1
kind: Namespace
metadata:
name: "test"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres-sleep
namespace: test
spec:
selector:
matchLabels:
app: postgres-sleep
replicas: 2
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 50%
template:
metadata:
labels:
app: postgres-sleep
spec:
containers:
- name: postgres-sleep
image: krichter/microk8s-startup-probe-ignored:latest
ports:
- name: postgres
containerPort: 5432
readinessProbe:
tcpSocket:
port: 5432
periodSeconds: 3
livenessProbe:
tcpSocket:
port: 5432
periodSeconds: 3
startupProbe:
tcpSocket:
port: 5432
failureThreshold: 60
periodSeconds: 10
---
apiVersion: v1
kind: Service
metadata:
name: postgres-sleep
namespace: test
spec:
selector:
app: httpd
ports:
- protocol: TCP
port: 5432
targetPort: 5432
---
与krichter/microk8s-startup-probe-ignored:latest
存在
FROM postgres:11
CMD sleep 30 && postgres
我正在从与 microk8s 相同的问题中重用此示例,我可以通过更改kubelet
和kubeapi-server
配置文件来解决它(如果您有兴趣,请参阅https://github.com/ubuntu/microk8s/issues/770 )。我认为这对于 GKE 集群是不可能的,因为它们不会公开这些文件,这可能是有充分理由的。
我假设该功能需要启用,因为它位于功能门之后。如何在版本 >= 1.16 的 Google Kubernetes Engine (GKE) 集群上启用它?目前我正在使用常规频道 1.16.8-gke.15 的默认值。
解决方案
正如我在评论中提到的,我能够在我的测试环境中重现相同的行为,经过一些研究,我找到了原因。
在 GKE 中,仅当您使用 Alpha 集群时才允许使用功能门。您可以在此处查看功能门的完整列表
我创建了一个 alpha 集群并应用了相同的 yaml,它对我有用,就startupProbe
在这个地方。
因此,您将只能startupProbe
在 GKE Alpha 集群中使用,请按照此文档创建一个新集群。
请注意 alpha 集群中的限制:
- Alpha 集群有以下限制:
- GKE SLA未涵盖
- 无法升级
- 在 alpha 集群上禁用节点自动升级和自动修复
- 30天后自动删除
- 不接收安全更新
此外,Google 不建议将其用于生产工作负载:
警告:不要将 Alpha 集群或 Alpha 功能用于生产工作负载。Alpha 集群在 30 天后到期,并且不会收到安全更新。您必须在 alpha 集群过期之前迁移您的数据。GKE 不会自动保存存储在 alpha 集群上的数据。
推荐阅读
- hive - 如何在 Cloudera 中建立 Grafana 和 Hive 连接
- react-native - 无法读取未定义的属性“getTrackDrawable”
- javascript - 节点:getaddrinfo ENOTFOUND (localhost:5000) 在不同的 localhost:8888 上运行
- optaplanner - 使用 optaplanner 解决 VRPMT 问题的最佳实践是什么?
- installation - 来自 nrf528040 的北欧半导体广告
- angular - 为什么 openapi-generator 不使用 typescript-angular 创建 package.json?
- reactjs - React 渐进式 Web 应用程序中的 Google 登录问题
- validation - Laravel 验证:仅在字段存在时验证
- spring-boot - 如何在使用弹簧数据 jpa 时包含边界值
- javascript - 无法在 SetupTest.js 的模块外使用 import 语句