kube-apiserver 位于何处
Where is kube-apiserver located
基本问题:当我尝试在我的主节点上使用 kube-apiserver 时,我收到命令未找到错误。我如何 install/configure kube-apiserver?任何 link 示例都会有所帮助。
$ 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
并获取存储类:
$ 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>
如何解决此问题(例如,记录存储未创建的原因)?
您在这里问了两个不同的问题,一个是关于 kube-apiserver 配置,一个是关于 StorageClass
.
的故障排除
这是第一个问题的答案:
kube-apiserver
是 运行 作为主节点上的 Docker 容器。因此,二进制文件 在 容器内,而不是在您的主机系统上。它由主人的 kubelet
从位于 /etc/kubernetes/manifests
的文件启动。 kubelet
正在监视此目录并将启动此处定义为 "static pods" 的任何 Pod。
要配置 kube-apiserver
命令行参数,您需要在您的主机上修改 /etc/kubernetes/manifests/kube-apiserver.yaml
。
要使存储 class "example-nfs" 默认,您需要 运行 以下命令:
kubectl patch storageclass example-nfs -p '{"metadata":
{"annotations": {"storageclass.kubernetes.io/is-default-class": "true"}}}'
我将参考有关 api-server 位置的问题。
基本答案(具体问题标题):
kube apiserver 位于主节点(称为控制平面)上。
可以执行:
1 ) 通过主机的初始化系统(如 systemd)。
2 ) 作为 pod(我将在下面解释)。
在这两种情况下,它将位于 control plane(下方左侧):
如果它 运行ning 在 systemD 下,您可以 运行: systemctl status api-server
查看配置 (drop-in) 文件的路径。
如果它是 运行ning 作为 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 在主节点上 运行ning。
2 ) Kubelet 不是 运行ning 作为 pod 并且当控制平面组件(加上 kube-proxy)作为 static pods 执行时 - 它是由 Kubelet 在主节点。
因此,我们可以通过调查 Kubelet 日志开始到达清单路径的旅程。
如果 Kubelet 运行ning 很长时间,它将是一个非常大的文件,我们需要将它转储到某个地方并开始 - 或者如果 Kubelet 在 5 分钟前启动,我们可以 运行:
sudo journalctl -u kubelet --since -5m >> kubelet_5_minutes.log
然后快速搜索 "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
我们还可以看到 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
基本问题:当我尝试在我的主节点上使用 kube-apiserver 时,我收到命令未找到错误。我如何 install/configure kube-apiserver?任何 link 示例都会有所帮助。
$ 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
并获取存储类:
$ 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>
如何解决此问题(例如,记录存储未创建的原因)?
您在这里问了两个不同的问题,一个是关于 kube-apiserver 配置,一个是关于 StorageClass
.
这是第一个问题的答案:
kube-apiserver
是 运行 作为主节点上的 Docker 容器。因此,二进制文件 在 容器内,而不是在您的主机系统上。它由主人的 kubelet
从位于 /etc/kubernetes/manifests
的文件启动。 kubelet
正在监视此目录并将启动此处定义为 "static pods" 的任何 Pod。
要配置 kube-apiserver
命令行参数,您需要在您的主机上修改 /etc/kubernetes/manifests/kube-apiserver.yaml
。
要使存储 class "example-nfs" 默认,您需要 运行 以下命令:
kubectl patch storageclass example-nfs -p '{"metadata":
{"annotations": {"storageclass.kubernetes.io/is-default-class": "true"}}}'
我将参考有关 api-server 位置的问题。
基本答案(具体问题标题):
kube apiserver 位于主节点(称为控制平面)上。
可以执行:
1 ) 通过主机的初始化系统(如 systemd)。
2 ) 作为 pod(我将在下面解释)。
在这两种情况下,它将位于 control plane(下方左侧):
如果它 运行ning 在 systemD 下,您可以 运行: systemctl status api-server
查看配置 (drop-in) 文件的路径。
如果它是 运行ning 作为 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 在主节点上 运行ning。
2 ) Kubelet 不是 运行ning 作为 pod 并且当控制平面组件(加上 kube-proxy)作为 static pods 执行时 - 它是由 Kubelet 在主节点。
因此,我们可以通过调查 Kubelet 日志开始到达清单路径的旅程。
如果 Kubelet 运行ning 很长时间,它将是一个非常大的文件,我们需要将它转储到某个地方并开始 - 或者如果 Kubelet 在 5 分钟前启动,我们可以 运行:
sudo journalctl -u kubelet --since -5m >> kubelet_5_minutes.log
然后快速搜索 "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
我们还可以看到 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