kube-apiserver在哪里?

raj*_*rni 13 volume persistent-storage docker kubernetes kube-apiserver

基本问题:当我尝试在主节点上使用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                                       example-nfs    10h
Run Code Online (Sandbox Code Playgroud)

并获得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>
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题(例如,为什么没有创建存储的日志)?

小智 26

你在这里问两个不同的问题,一个是关于kube-apiserver配置,另一个是关于你的问题排查StorageClass.

以下是您的第一个问题的答案:

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

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


Rtm*_*tmY 10

我将参考有关 api 服务器位置的问题。

基本答案(针对问题标题):

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

可以执行:

1 ) 通过主机的 init 系统(如systemd)。

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

在这两种情况下,它都位于控制平面上(下方左侧):

在此输入图像描述

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

$ 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
Run Code Online (Sandbox Code Playgroud)

你可以运行:

kubectl describe pod/kube-apiserver-my-master -n kube-system
Run Code Online (Sandbox Code Playgroud)

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

更高级一点的答案:

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

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

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

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

2 ) Kubelet 不作为 pod 运行,并且当控制平面组件(加上 kube-proxy)作为静态 pod执行时- 这是由主节点上的 Kubelet 完成的。

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

sudo journalctl -u kubelet --since -5m >> kubelet_5_minutes.log
Run Code Online (Sandbox Code Playgroud)

快速搜索“api-server”将带我们到下面两行,其中提到了清单的路径:

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
Run Code Online (Sandbox Code Playgroud)

我们还可以看到 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
Run Code Online (Sandbox Code Playgroud)