基本问题:当我尝试在主节点上使用kube-apiserver时,我发现命令未找到错误.我如何安装/配置kube-apiserver?任何链接到示例都会有帮助.
$ kube-apiserver --enable-admission-plugins DefaultStorageClass
-bash: kube-apiserver: command not found
详细信息:我是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
这是获得pvc结果:
$ kubectl get pvc
NAME      STATUS    VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
nfs       Pending …我们刚刚收到一封来自 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)
怎样才能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
为了创建一个隔离的测试环境,我通过 SSH 连接到我的控制器节点来运行此命令,该命令在4667. 我直接从 复制这些值/etc/kubernetes/manifests/kube-apiserver.yaml。您需要调整该值以匹配您自己的集群。我特意以交互模式运行容器,以便可以看到日志消息。
TLS handshake error from 10.245.207.223:59278: remote error: tls: unknown certificate authority
现在可以再次通过 SSH 连接到控制器并用于curl与自定义 apiserver 容器进行交互。
advertise-address。APISERVER=https://10.245.207.223:6447
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 …如果我移动一个相关的配置文件并运行kubectl proxy它,它将允许我通过这个 URL 访问 Kubernetes 仪表板:
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
但是,如果我尝试直接访问节点,而没有kubectl proxy,则会收到 403 Forbidden。
http://dev-master:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login
我们的 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] …我想获取最后一次通过 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'
集群角色:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: privileged
rules:
- apiGroups:
  - '*'
  resourceNames:
  - pod-security-policy
  resources:
  - '*'
  verbs:  
  - '*'
集群角色绑定:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding …kube-apiserver ×10
kubernetes ×9
docker ×1
kube-proxy ×1
kubeadm ×1
kubectl ×1
rbac ×1
volume ×1