【问题标题】:Where is kube-apiserver locatedkube-apiserver 位于哪里
【发布时间】:2018-10-25 10:19:35
【问题描述】:

基本问题:当我尝试在我的主节点上使用 kube-apiserver 时,我收到 command not found 错误。如何安装/配置 kube-apiserver?任何指向示例的链接都会有所帮助。

$ kube-apiserver --enable-admission-plugins DefaultStorageClass
-bash: kube-apiserver: command not found

详细信息:我是 Kubernetes 和 Docker 的新手,正在尝试使用 volumeClaimTemplates 创建 StatefulSet。我的问题是未创建自动 PV,并且我在 PVC 日志中收到此消息:“persistentvolume-controller waiting for a volume to be created”。我不确定是否需要定义 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                                       example-nfs    10h

并获取 storageclass:

$ kubectl describe storageclass example-nfs
Name:                  example-nfs
IsDefaultClass:        No
Annotations:           <none>
Provisioner:           example.com/nfs
Parameters:            <none>
AllowVolumeExpansion:  <unset>
MountOptions:          <none>
ReclaimPolicy:         Delete
VolumeBindingMode:     Immediate
Events:                <none>

如何解决此问题(例如,有关未创建存储原因的日志)?

【问题讨论】:

  • 这真的取决于你的 kubernetes 集群是如何部署的。通常将 apiserver 部署为静态 pod。在这种情况下,您应该在运行 kubectl get po -n kube-system 时看到它已列出。
  • @whites11 只是一个后续问题:如果 k8s 集群使用 kubeadm 部署,当相应的清单 yaml 文件更新时,静态 pod(例如,kube-scheduler)是否会重新启动?谢谢!
  • 是的。您还可以通过将 yml 文件从静态清单文件夹中移开并将其放回原处来强制重启。

标签: docker kubernetes volume persistent-storage kube-apiserver


【解决方案1】:

你在这里问了两个不同的问题,一个是关于 kube-apiserver 配置的,一个是关于你的StorageClass 的故障排除。

这是您第一个问题的答案:

kube-apiserver 在您的主节点上作为 Docker 容器运行。因此,二进制文件容器中,而不是在您的主机系统上。它由主人的kubelet 从位于/etc/kubernetes/manifests 的文件启动。 kubelet 正在监视此目录,并将启动此处定义为“静态 Pod”的任何 Pod。

要配置kube-apiserver 命令行参数,您需要在您的主服务器上修改/etc/kubernetes/manifests/kube-apiserver.yaml

【讨论】:

  • 谢谢。这就是我要找的。​​span>
  • @embik。只是一个后续问题:如果相应的kube-scheduler.yaml文件已更新,您的意思是master节点上的kubelete进程将自动重启任何组件pod(例如kube-scheduler)?
  • @kz28 是的,您可以通过检查“docker ps”来验证这一点
  • 如何访问我的master上的文件系统?我只能访问吊舱
  • 我和上面有同样的问题。当您说在您的主节点上修改/etc/kubernetes/manifests/kube-apiserver.yaml 时,您是指主节点的物理文件系统吗?如果我使用 Docker Desktop,那会在哪里?
【解决方案2】:

我会参考关于 api-server 位置的问题。

基本答案(具体问题标题):

kube apiserver 位于主节点(称为控制平面)上。

可以执行:

1 ) 通过主机的初始化系统(如systemd)。

2) 作为一个 pod(我将在下面解释)。

在这两种情况下,它将位于control plane(下方左侧):

如果它在 systemD 下运行,您可以运行:systemctl status api-server 以查看配置(插入)文件的路径。
如果它作为 pod 运行,您可以在 kube-system 命名空间下查看它以及所有其他控制面板组件(加上 kube-proxy 以及可能像下面的编织这样的网络解决方案):

$ kubectl get pods -n kube-system
NAME                                      READY   STATUS    RESTARTS   AGE
coredns-f9fd979d6-lpdlc                   1/1     Running   1          2d22h
coredns-f9fd979d6-vcs7g                   1/1     Running   1          2d22h
etcd-my-master                            1/1     Running   1          2d22h
kube-apiserver-my-master                  1/1     Running   1          2d22h #<----Here
kube-controller-manager-my-master         1/1     Running   1          2d22h
kube-proxy-kh2lc                          1/1     Running   1          2d22h
kube-scheduler-my-master                  1/1     Running   1          2d22h
weave-net-59r5b                           2/2     Running   3          2d22h

你可以运行:

kubectl describe pod/kube-apiserver-my-master -n kube-system

为了获得有关 pod 的更多详细信息。

更高级的答案:

(关于 /etc/kubernetes/manifests 的位置)

假设我们不知道在哪里可以找到 kube-api-server 配置文件的相关路径。

但我们需要记住两件重要的事情:

1 ) kube-api-server 在主节点上运行。

2 ) Kubelet 不作为 pod 运行,当控制平面组件(加上 kube-proxy)以 static pods 执行时 - 它由主节点上的 Kubelet 完成。

因此,我们可以通过调查 Kubelet 日志来开始到达清单路径的旅程。
如果 Kubelet 运行了很长时间,它将是一个非常大的文件,我们需要将它转储到某个地方并去乞求 - 或者如果 Kubelet 是在 5 分钟前启动的,我们可以运行:

sudo journalctl -u kubelet --since -5m >> kubelet_5_minutes.log

快速搜索 "api-server" 会将我们带到下面提到的清单路径的 2 行:

my-master kubelet[71..]: 00:03:21 kubelet.go:261] Adding pod path: /etc/kubernetes/manifests
my-master kubelet[71..]: 00:03:21 kubelet.go:273] Watching apiserver

我们还可以看到 Kubelet 正在尝试在 my-master 节点和 kube-system 命名空间内创建 kube-apiserver pod:

my-master kubelet[71..]: 00:03:29.05  kubelet.go:1576] ..
           Creating a  mirror pod for "kube-apiserver-my-master_kube-system

【讨论】:

    【解决方案3】:

    要使存储类“example-nfs”默认,您需要运行以下命令:

    kubectl patch storageclass example-nfs -p '{"metadata": 
      {"annotations": {"storageclass.kubernetes.io/is-default-class": "true"}}}'
    

    【讨论】:

      猜你喜欢
      • 2019-05-08
      • 2020-12-31
      • 2021-02-17
      • 1970-01-01
      • 2019-06-06
      • 2020-06-16
      • 2017-08-06
      • 2018-11-28
      • 2021-01-02
      相关资源
      最近更新 更多