我知道它kubelet负责获取 PodSpecs(通常来自 API 服务器)并运行 Pod。
Kubernetes 组件 > 节点组件 > kubelet
“kubelet 采用一组通过各种机制提供的 PodSpecs,并确保这些 PodSpecs 中描述的容器正在运行和健康。”
但是 API Server 如何跟踪每个 Pod 的状态(例如运行/失败)?是否kubelet向 API 服务器发送常规请求?还是 API Server 会kubelet定期轮询?还是其他什么机制?
我正在尝试启用“审核”。https://kubernetes.io/docs/tasks/debug-application-cluster/audit/提到:
您可以使用 --audit-policy-file 标志将带有策略的文件传递给 kube-apiserver。如果省略该标志,则不会记录任何事件。
我使用 kubeadm 来配置集群(总共在 3 个虚拟机中运行)。
但是使用 kubeadm 时这个设置在哪里?我没有看到它在哪里与 kube-apiserver 交互。
我一直在仔细研究与 kubeadm 相关的链接,尝试更改 Kubernetes 集群证书上的密码。问题是我需要禁用 DES/3DES,这样该命令就会失败:
openssl s_client -connect IP:2379 -cipher "DES:3DES" -tls1_2
Run Code Online (Sandbox Code Playgroud)
到目前为止我浏览过的一些链接(如果我把它们全部列出来,这篇文章会太长):
我希望更改kube-apiserver配置以使用这些标志(在/etc/kubernetes/manifests/kube-apiserver.yaml文件中)会有所帮助,但事实并非如此(请原谅拼写错误,我无法从我必须使用的客户端中复制/粘贴):
...
spec:
containers:
- command:
- kube-apiserver
- ...
- --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
- --tls-min-version=VersionTLS12
image: k8s.gcr.io/kube-apiserver:v1.18.6
...
Run Code Online (Sandbox Code Playgroud)
/etc/kubernetes/pki我可以按照这些指南手动重新生成所有证书,但我希望坚持使用 Kuberneteskubeadm或其他 Kubernetes 提供的工具来自动处理它。我找不到任何关于手动生成每个文件的文档,这些文件是为完全不熟悉管理的人设置的。
感谢帮助、链接、建议等!不幸的是,在完成此操作之前,我不允许使用集群,甚至不能向人们演示功能。
kube-apiserver 未运行
/var/log/kube-apiserver.log 有以下内容:
Flag --address has been deprecated, see --insecure-bind-address instead.
Run Code Online (Sandbox Code Playgroud)
这些值存储/配置在哪里?
我的意思是来自我的 kops 配置,我现在已经修改了。但我无法反映这些变化:
kops rolling-update cluster
Using cluster from kubectl context: uuuuuuuuuuuuuuuuuuuuuu
Unable to reach the kubernetes API.
Use --cloudonly to do a rolling-update without confirming progress with the k8s API
error listing nodes in cluster: Get https://api.uuuuuuuuuu/api/v1/nodes: dial tcp eeeeeeeeeeeeeee:443: connect: connection refused
Run Code Online (Sandbox Code Playgroud) 例如,我从 Kubernetes 官方 javascript 客户端运行以下函数:
.listNamespacedPod("default", null, "false", "smth=test", null, null, null, null, null, null)
Run Code Online (Sandbox Code Playgroud)
或任何其他功能。
有一个参数称为标签选择器。
现在我想使用以下标签选择器查找 Pod(如 HTTP 请求中):
smth=test
Run Code Online (Sandbox Code Playgroud)
但我无法smth=test作为字符串发送。
如何通过标签选择器进行过滤?
这是我来自 YAML 的元数据:
metadata:
name: label-demo
labels:
smth: test
app: nginx
Run Code Online (Sandbox Code Playgroud)
我可以通过以下方式运行kubectl:
kubectl -n="namespace" get deployments -l=smth=test
Run Code Online (Sandbox Code Playgroud)
所以它只会返回匹配的标签。