基本问题:当我尝试在主节点上使用kube-apiserver时,我发现命令未找到错误.我如何安装/配置kube-apiserver?任何链接到示例都会有帮助.
$ kube-apiserver --enable-admission-plugins DefaultStorageClass
-bash: kube-apiserver: command not found
Run Code Online (Sandbox Code Playgroud)
详细信息:我是Kubernetes和Docker的新手,并尝试使用volumeClaimTemplates创建StatefulSet.我的问题是没有创建自动PV,我在PVC日志中收到此消息:"persistentvolume-controller等待创建卷".我不确定是否需要定义DefaultStorageClass,因此需要kube-apiserver来定义它.
Name: nfs
Namespace: default
StorageClass: example-nfs
Status: Pending
Volume:
Labels: <none>
Annotations: volume.beta.kubernetes.io/storage-provisioner=example.com/nfs
Finalizers: [kubernetes.io/pvc-protection]
Capacity:
Access Modes:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ExternalProvisioning 3m (x2401 over 10h) persistentvolume-controller waiting for a volume to be created, either by external provisioner "example.com/nfs" or manually created by system administrator
Run Code Online (Sandbox Code Playgroud)
这是获得pvc结果:
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
nfs Pending …
Run Code Online (Sandbox Code Playgroud) 我们刚刚收到一封来自 GCP 的电子邮件,通知我们我们的集群目前正在使用已弃用的 Beta API,我们需要升级到最新的 API 版本。
我们有 3 个集群在多个命名空间中运行多个资源,因此必须遍历所有集群来检测哪些资源已过时会有点痛苦。
我们控制的服务、部署、horizontalpodautoscalers、poddisruptionbudgets 等,这些都已经更新了。
但我们有很多服务的清单文件是自动生成的,比如 Halyard 生成的 Spinnaker 服务,或者 Elastic Operator 生成的 ElasticSearch 等。
有什么方法可以按 API 版本过滤所有资源,或者有什么方法可以检测所有命名空间中已弃用的资源?
根据参考资料,其中两个选项kube-apiserver
是--bind-address
和--advertise-address
在我看来,它们相互冲突。
两者之间的实际差异是什么?
是进程将侦听--bind-address
的地址吗?kube-apiserver
--advertise-address
将通告的地址是否是kube-apiserver
它将侦听的地址?如果有的话,怎么做广告呢?它是否通过网络进行某种广播?
我今天重新启动了我的系统。之后,我的主系统和 Web 浏览器未连接以查找 kubernetes GUI。
当我运行命令时systemctl status kube-apiserver.service
,它给出如下所示的输出:
kube-apiserver.service
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
Run Code Online (Sandbox Code Playgroud)
怎样才能api-server
重新启动?
有没有一种简单的方法来列出与 API 版本相关的所有 kubernetes 对象?可以说,API 版本apps/v1beta1
已被弃用,我想知道我的集群中是否有任何使用此版本的对象,如何找到这些对象?
我正在使用KubeSpray在 AWS 上配置一个两节点集群。默认情况下--kubelet-certificate-authority
不使用该参数。不过,我想设置一下。
我不知道 的正确设置--kubelet-certificate-authority
。当我将其设置为时,/etc/kubernetes/pki/ca.crt
我会在日志中看到如下消息:
TLS handshake error from 10.245.207.223:59278: remote error: tls: unknown certificate authority
Run Code Online (Sandbox Code Playgroud)
为了创建一个隔离的测试环境,我通过 SSH 连接到我的控制器节点来运行此命令,该命令在4667
. 我直接从 复制这些值/etc/kubernetes/manifests/kube-apiserver.yaml
。您需要调整该值以匹配您自己的集群。我特意以交互模式运行容器,以便可以看到日志消息。
TLS handshake error from 10.245.207.223:59278: remote error: tls: unknown certificate authority
Run Code Online (Sandbox Code Playgroud)
现在可以再次通过 SSH 连接到控制器并用于curl
与自定义 apiserver 容器进行交互。
advertise-address
。APISERVER=https://10.245.207.223:6447
Run Code Online (Sandbox Code Playgroud)
sudo docker run \
--name api-server-playground \
-it \
--rm \
--network host \
--volume /etc/kubernetes:/etc/kubernetes:ro \
--volume /etc/pki:/etc/pki:ro \
--volume /etc/ssl:/etc/ssl/:ro …
Run Code Online (Sandbox Code Playgroud) 如果我移动一个相关的配置文件并运行kubectl proxy
它,它将允许我通过这个 URL 访问 Kubernetes 仪表板:
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试直接访问节点,而没有kubectl proxy
,则会收到 403 Forbidden。
http://dev-master:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login
Run Code Online (Sandbox Code Playgroud)
我们的 kubernetes 集群隐藏在用户需要 VPN 的私有网络中;此外,在对 VPN 进行身份验证后,只有我们中的一些人可以与我们每个集群的主节点交谈。因此,运行kubectl proxy
是一个多余的步骤,为每个集群选择合适的配置文件是一个额外的痛苦,尤其是当我们想要比较不同集群的状态时。
需要更改哪些内容以允许“匿名”HTTP 访问这些已受保护的 kubernetes 主节点的仪表板?
kubernetes kubectl kube-proxy kubernetes-dashboard kube-apiserver
当我尝试启动 kube-apiserver 时,我收到以下日志:
I1215 14:18:23.130968 1 controller.go:83] Starting OpenAPI controller
I1215 14:18:23.131021 1 customresource_discovery_controller.go:208] Starting DiscoveryController
I1215 14:18:23.131047 1 naming_controller.go:288] Starting NamingConditionController
I1215 14:18:23.131067 1 establishing_controller.go:73] Starting EstablishingController
I1215 14:18:23.131084 1 nonstructuralschema_controller.go:191] Starting NonStructuralSchemaConditionController
I1215 14:18:23.149275 1 controller_utils.go:1036] Caches are synced for crd-autoregister controller
I1215 14:18:23.191491 1 client.go:354] parsed scheme: ""
I1215 14:18:23.191600 1 client.go:354] scheme "" not registered, fallback to default scheme
I1215 14:18:23.191681 1 asm_amd64.s:1337] ccResolverWrapper: sending new addresses to cc: [{127.0.0.1:2379 0 <nil>}]
I1215 14:18:23.206235 1 asm_amd64.s:1337] …
Run Code Online (Sandbox Code Playgroud) 我想获取最后一次通过 kube api 修改秘密的时间。我似乎无法找到访问此信息的方法。我查看了事件,但找不到任何有关秘密的信息。
一个例子是我创建一个名为 my-secret 的秘密,然后我在第二天更新它,但我想知道它的更新时间而不是创建时间。
任何帮助将非常感谢。
我无法启动需要特权安全上下文的 pod。Pod 安全策略:
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: pod-security-policy
spec:
privileged: true
allowPrivilegeEscalation: true
readOnlyRootFilesystem: false
allowedCapabilities:
- '*'
allowedProcMountTypes:
- '*'
allowedUnsafeSysctls:
- '*'
volumes:
- '*'
hostPorts:
- min: 0
max: 65535
hostIPC: true
hostPID: true
hostNetwork: true
runAsUser:
rule: 'RunAsAny'
seLinux:
rule: 'RunAsAny'
supplementalGroups:
rule: 'RunAsAny'
fsGroup:
rule: 'RunAsAny'
Run Code Online (Sandbox Code Playgroud)
集群角色:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: privileged
rules:
- apiGroups:
- '*'
resourceNames:
- pod-security-policy
resources:
- '*'
verbs:
- '*'
Run Code Online (Sandbox Code Playgroud)
集群角色绑定:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding …
Run Code Online (Sandbox Code Playgroud) kube-apiserver ×10
kubernetes ×9
docker ×1
kube-proxy ×1
kubeadm ×1
kubectl ×1
rbac ×1
volume ×1