我正在使用Kubernetes一个 Pod,它由不同的容器组成。
当两个特定事件发生时,我需要应用不同的行为:
根据我对这两种情况的理解,kubernetes 都会调用preStop钩子并发送 a SIGTERM,所以我不可能理解我处于这两种情况中的哪一种。是对的吗?我错过了什么吗?
谢谢
我正在尝试在三个虚拟机上设置 kubernetes(来自 centos7 的教程),\n不幸的是工作线程的加入失败。我希望有人已经遇到过这个问题(在网上发现了两次但没有答案),或者可能猜出出了什么问题。
\n\n这是我通过 kubeadm join 得到的结果:
\n\n[preflight] running pre-flight checks\n [WARNING RequiredIPVSKernelModulesAvailable]: the IPVS proxier will not be used, because the following required kernel modules are not loaded: [ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh] or no builtin kernel ipvs support: map[ip_vs:{} ip_vs_rr:{} ip_vs_wrr:{} ip_vs_sh:{} nf_conntrack_ipv4:{}]\nyou can solve this problem with following methods:\n 1. Run \'modprobe -- \' to load missing kernel modules;\n2. Provide the missing builtin kernel ipvs support\n\nI0902 20:31:15.401693 2032 kernel_validator.go:81] Validating kernel version\nI0902 20:31:15.401768 2032 kernel_validator.go:96] …Run Code Online (Sandbox Code Playgroud) 我有一个下面描述的设置 - 所以一个简单的复制控制器,服务和在谷歌云上部署kubernetes的https入口.
我需要杀死我的应用程序,以便我可以测试我的堆栈的其余部分如何反应 - 这是一个好方法吗?
我已经尝试删除该服务,但是当我重新创建它时,它不会获取后端服务(复制控制器和pod已创建,我可以在内部访问它们,但不能通过入口访问 - 服务没有看见.
echo "
apiVersion: v1
kind: Service
metadata:
name: nodeapp-https
labels:
app: nodeapp-https
spec:
type: NodePort
ports:
- port: 80
targetPort: 8080
protocol: TCP
name: http
selector:
app: nodeapp-https
---
apiVersion: v1
kind: ReplicationController
metadata:
name: nodeapp-https
spec:
replicas: 1
template:
metadata:
labels:
app: nodeapp-https
spec:
containers:
- name: nodeapp-https
image: gcr.io/my-project/node-app:v84
ports:
- containerPort: 8080
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nodeapp-httpss
spec:
tls:
- secretName: node-app-secret
backend:
serviceName: nodeapp-https …Run Code Online (Sandbox Code Playgroud) google-compute-engine kubernetes kubernetes-health-check kubectl
如果是 K8S,监控节点运行状况文档中提到了节点问题检测器。如果GCE中没有,我们如何使用它?它是否向仪表板提供信息或提供 API 指标?
monitoring automation kubernetes kubernetes-health-check kubernetes-helm
在对kubernetes吊舱进行健康检查时,即使我们已经准备就绪探针,为什么还需要活动探针?
准备就绪探针已经在继续检查Pod中的应用程序是否准备好处理请求,这意味着Pod处于活动状态。但是,为什么还需要进行活力探测?
我正在编写一个 grpc 服务并在 Kubernetes ( https://github.com/grpc-ecosystem/grpc-health-probe )上使用 gRPC 健康检查。在我的服务器中,我添加了不同的端点实现(一个用于活动,另一个用于准备)。我想知道这个探针实用程序二进制文件如何区分活动检查与准备检查?在 yaml 中应该有一些其他的方式来定义它,而不仅仅是 ["bin/grpc_health_probe", "-addr=:8801"]
server = ServerBuilder.forPort(port)
.addService(new GrpcModuleHealthCheck())
.addService(new GrpcModuleReadinessCheck())
.addService(ProtoReflectionService.newInstance())
.build.start
Run Code Online (Sandbox Code Playgroud)
在 kubernetes 部署 yaml 中,我使用以下配置
livenessProbe:
failureThreshold: 3
exec:
command: ["bin/grpc_health_probe", "-addr=:8801"]
initialDelaySeconds: 240
periodSeconds: 20
successThreshold: 1
timeoutSeconds: 15
readinessProbe:
failureThreshold: 3
exec:
command: ["bin/grpc_health_probe", "-addr=:8801"]
initialDelaySeconds: 20
periodSeconds: 20
successThreshold: 1
timeoutSeconds: 15
Run Code Online (Sandbox Code Playgroud)
我刚刚测试并发现“GrpcModuleReadinessCheck”(我最后添加的健康类)实现在我刚刚执行我的 kubernetes pod 时生效
kubectl exec -it <MY_POD_NAME> -- /bin/bash
bash-4.4$ ./grpc_health_probe -addr=localhost:8801
status: SERVING
Run Code Online (Sandbox Code Playgroud) 问题正如标题所问。对数据库操作、查询、命令和事件存储执行检查很简单,但我不知道如何/什么是对托管服务执行运行状况检查的最佳方法。有人可以建议吗?
我有kubernetes作业,需要花费大量时间才能完成。在4至8分钟之间。我有什么办法可以知道什么时候完成工作,而不是假设最坏的情况下要等8分钟。我有一个执行以下操作的测试用例:
1) Submits the kubernetes job.
2) Waits for its completion.
3) Checks whether the job has had the expected affect.
Run Code Online (Sandbox Code Playgroud)
问题是,在我的Java测试中,它在kubernetes中提交了部署作业,即使该作业花费的时间少于完成该作业的时间,我仍要等待8分钟,因为我没有办法从Java监视作业的状态测试。
我一直在探索Kubernetes-Client/Java 库,但我无法弄清楚获取所有部署的 API 调用。
我正在寻找此命令的 K8-Client/Java API 调用:
kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
appservice1 3 3 3 3 5d
appservice2 3 3 3 3 1d
appservice3 1 1 1 1 22d
Run Code Online (Sandbox Code Playgroud)
更具体地说,我有兴趣确定每个部署所需的和当前 pod 的数量(如上)。
我正在尝试使用双向 TLS 身份验证在 GKE (v1.11.2-gke.18) 上实现 gRPC 服务。
当不强制执行客户端身份验证时,GKE 自动创建的 HTTP2 运行状况检查会响应,并且一切都连接问题。
当我打开相互身份验证时,运行状况检查失败 - 大概是因为它无法完成连接,因为它缺少客户端证书和密钥。
与往常一样,文档很简单而且相互矛盾。我需要一个完全编程的解决方案(即没有控制台调整),但除了手动将运行状况检查更改为 TCP 之外,我一直无法找到解决方案。
从我所见,我猜我要么需要:
service.alpha.kubernetes.io/app-protocols: '{"grpc":"HTTP2"}'专有注释的容器上进行 SSL 终止或者也许还有其他我没有考虑过的东西?下面的配置非常适用于带有 TLS 的 REST 和 gRPC,但会与 mTLS 中断。
服务.yaml
apiVersion: v1
kind: Service
metadata:
name: grpc-srv
labels:
type: grpc-srv
annotations:
service.alpha.kubernetes.io/app-protocols: '{"grpc":"HTTP2"}'
spec:
type: NodePort
ports:
- name: grpc
port: 9999
protocol: TCP
targetPort: 9999
- name: http
port: 8080
protocol: …Run Code Online (Sandbox Code Playgroud) mutual-authentication google-kubernetes-engine grpc kubernetes-health-check kubernetes-ingress
kubernetes ×7
.net-core ×1
automation ×1
docker ×1
grpc ×1
grpc-java ×1
java ×1
kubeadm ×1
kubectl ×1
monitoring ×1