2024年最新Kubernetes 配置基本指南:关键集群设置_kubelet文件(5),2024年最新一次哔哩哔哩面试经历

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

在这篇博客中,我们将介绍每个 DevOps 工程师或 Kubernetes 管理员都应该了解的重要 Kubernetes 配置。

在本指南的最后,我添加了实际 Kubernetes 集群设置中涉及的配置。

注意:本指南中引用的所有配置位置都基于使用 kubeadm 的默认 Kubernetes 安装。

Kubernetes 集群配置

无论您是准备 Kubernetes 认证还是计划从事 Kubernetes 项目,了解 Kubernetes 集群的关键配置都非常重要。

此外,当涉及到 CKA 认证时,您将获得纠正集群中问题的方案。因此,了解集群配置将使您更容易以正确的方式对集群进行故障排除和查找问题。

让我们从与控制平面组件相关的配置开始。

静态 Pod 清单

正如我们在 Kubernetes 架构中所讨论的,所有控制平面组件都是由 kubelet 从目录中存在的静态 pod 清单启动的。Kubelet 管理从静态 Pod 清单创建的所有 Pod 的生命周期/etc/kubernetes/manifests

以下组件是从静态 Pod 清单部署的。

  1. etcd
  2. API 服务器
  3. Kube 控制器管理器
  4. Kube 调度器。
manifests
  ├── etcd.yaml
  ├── kube-apiserver.yaml
  ├── kube-controller-manager.yaml
  └── kube-scheduler.yaml

您可以从这些容器清单中获取这些组件的所有配置位置。

API 服务器配置

如果您查看 kube-apiserver.yaml,在容器规范下,您可以看到指向 TLS 证书的所有参数以及 API 服务器工作和与其他集群组件通信所需的其他参数。

apiVersion: v1
kind: Pod
metadata:
  annotations:
    kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint: 172.31.42.106:6443
  creationTimestamp: null
  labels:
    component: kube-apiserver
    tier: control-plane
  name: kube-apiserver
  namespace: kube-system
spec:
  containers:
  - command:
    - kube-apiserver
    - --advertise-address=172.31.42.106
    - --allow-privileged=true
    - --authorization-mode=Node,RBAC
    - --client-ca-file=/etc/kubernetes/pki/ca.crt
    - --enable-admission-plugins=NodeRestriction
    - --enable-bootstrap-token-auth=true
    - --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
    - --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt
    - --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key
    - --etcd-servers=https://127.0.0.1:2379
    - --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt
    - --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key
    - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
    - --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt
    - --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key
    - --requestheader-allowed-names=front-proxy-client
    - --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt
    - --requestheader-extra-headers-prefix=X-Remote-Extra-
    - --requestheader-group-headers=X-Remote-Group
    - --requestheader-username-headers=X-Remote-User
    - --secure-port=6443
    - --service-account-issuer=https://kubernetes.default.svc.cluster.local
    - --service-account-key-file=/etc/kubernetes/pki/sa.pub
    - --service-account-signing-key-file=/etc/kubernetes/pki/sa.key
    - --service-cluster-ip-range=10.96.0.0/12
    - --tls-cert-file=/etc/kubernetes/pki/apiserver.crt
    - --tls-private-key-file=/etc/kubernetes/pki/apiserver.key
    image: registry.k8s.io/kube-apiserver:v1.26.3

因此,如果要对集群组件配置进行故障排除或验证,首先应查看静态 Pod 清单配置。

etcd 配置

如果要与 etcd 组件交互,可以使用静态 pod YAML 中的详细信息。

例如,如果要备份 etcd,则需要知道 etcd 服务端点和相关证书,以便对 etcd 进行身份验证并创建备份。

如果打开 etcd.yaml 清单,可以查看所有与 etcd 相关的配置,如下所示。

TLS 证书

在 Kubernetes 中,所有组件都通过 mTLS 相互通信。在 PKI 文件夹下,您将找到所有 TLS 证书和密钥。Kubernetes 控制平面组件使用这些证书进行身份验证并相互通信。

此外,还有一个 etcd 子目录,其中包含特定于 etcd 的证书和私钥。它们用于保护 etcd 节点之间以及 API 服务器和 etcd 节点之间的通信。

下图显示了 PKI 文件夹的文件结构。

静态 Pod 清单引用此文件夹中所需的 TLS 证书和密钥。

当您使用 kubeadm 等工具在自托管集群上工作时,这些证书由该工具自动生成。在托管的 Kubernetes 集群中,云提供商负责管理控制平面组件,因此负责满足所有 TLS 要求。

但是,如果要设置用于生产的自承载群集,则必须向组织的网络或安全团队请求这些证书。他们将生成由组织的内部证书颁发机构签名的这些证书,并将其提供给您。

kubeconfig文件

任何需要向 API 服务器进行身份验证的组件都需要 kubeconfig 文件

所有集群 Kubeconfig 文件都存在于 **/etc/kubernetes** 文件夹(.conf 文件)中。您将找到以下文件。

  1. admin.conf
  2. controller-manager.conf
  3. kubelet.conf
  4. scheduler.conf

它包含 API 服务器端点、集群 CA 证书、集群客户端证书和其他信息。

admin.conf 文件,这是最终用户用于访问 API 服务器以管理集群的管理 kubeconfig 文件。您可以使用此文件从远程工作站连接群集。

Controller 管理器、调度器和 Kubelet 的 Kubeconfig 用于 API 服务器身份验证和授权。

例如,如果检查 Controller Manager 静态 Pod 清单文件,则可以看到 controller-manager.conf 已添加为 authentication 和 authorization 参数。

Kubelet 配置

Kubelet 服务作为系统服务在所有集群节点上运行。

您可以在 /etc/systemd/system/kubelet.service.d 下查看 kubelet systemd 服务

以下是系统文件内容。

[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
EnvironmentFile=-/etc/default/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS

我用粗体突出显示了两个重要的 kubelet 配置。

  1. kubelet kubeconfig 文件:/etc/kubernetes/kubelet.conf
  2. kubelet 配置文件:/var/lib/kubelet/config.yaml
  3. EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env

kubeconfig 文件将用于 API 服务器身份验证和授权。

/var/lib/kubelet/config.yaml 包含所有与 kubelet 相关的配置。静态 Pod 清单位置作为 staticPodPath 参数的一部分添加。

staticPodPath: /etc/kubernetes/manifests

/var/lib/kubelet/kubeadm-flags.env 文件包含容器运行时环境 Linux 套接字和基础结构容器(暂停容器)映像。

例如,下面是使用 CRI-O 容器运行时的 kubelet 配置,如 Unix 套接字和 pause 容器镜像所示。

KUBELET_KUBEADM_ARGS="--container-runtime-endpoint=unix:///var/run/crio/crio.sock --pod-infra-container-image=registry.k8s.io/pa

pause 容器是一个最小的容器,它是第一个在 Kubernetes Pod 中启动的容器。然后,pause 容器的作用是保存同一 Pod 中所有其他容器的网络命名空间和其他共享资源。

如果你看一下托管的 k8s 集群中的 kubelet 配置,它看起来与 kubeadm 设置略有不同。

例如,下面是 AWS EKS 集群的 kubelet 服务文件。

这里可以看到容器运行时是 containerd,它的 Unix 套接字标志直接添加到服务文件中

与 kubeadm 配置相比,kubelet kubeconfig 文件位于不同的目录中。

CoreDNS配置

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

img-kQ7tw2xq-1715741952966)]
[外链图片转存中…(img-BrrkhDmc-1715741952966)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

### 关于ArcGIS License Server无法启动的解决方案 当遇到ArcGIS License Server无法启动的情况,可以从以下几个方面排查并解决问题: #### 1. **检查网络配置** 确保License Server所在的计算机能够被其他客户端正常访问。如果是在局域网环境中部署了ArcGIS Server Local,则需要确认该环境下的网络设置是否允许远程连接AO组件[^1]。 #### 2. **验证服务状态** 检查ArcGIS Server Object Manager (SOM) 的运行情况。通常情况下,在Host SOM机器上需将此服务更改为由本地系统账户登录,并重启相关服务来恢复其正常工作流程[^2]。 #### 3. **审查日志文件** 查看ArcGIS License Manager的日志记录,寻找任何可能指示错误原因的信息。这些日志可以帮助识别具体是什么阻止了许可服务器的成功初始化。 #### 4. **权限问题** 确认用于启动ArcGIS License Server的服务账号具有足够的权限执行所需操作。这包括但不限于读取/写入特定目录的权利以及与其他必要进程通信的能力。 #### 5. **软件版本兼容性** 保证所使用的ArcGIS产品及其依赖项之间存在良好的版本匹配度。不一致可能会导致意外行为完全失败激活license server的功能。 #### 示例代码片段:修改服务登录身份 以下是更改Windows服务登录凭据的一个简单PowerShell脚本例子: ```powershell $serviceName = "ArcGISServerObjectManager" $newUsername = ".\LocalSystemUser" # 替换为实际用户名 $newPassword = ConvertTo-SecureString "" -AsPlainText -Force Set-Service -Name $serviceName -StartupType Automatic New-ServiceCredential -ServiceName $serviceName -Account $newUsername -Password $newPassword Restart-Service -Name $serviceName ``` 上述脚本仅作为示范用途,请依据实际情况调整参数值后再实施。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值