Kubernetes 配置基本指南:关键集群设置_kubelet文件(1)
识点,真正体系化!**
因此,如果要对集群组件配置进行故障排除或验证,首先应查看静态 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 文件)中。您将找到以下文件。
- admin.conf
- controller-manager.conf
- kubelet.conf
- 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 配置。
- kubelet kubeconfig 文件:/etc/kubernetes/kubelet.conf
- kubelet 配置文件:/var/lib/kubelet/config.yaml
- 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配置
CoreDNS插件组件处理集群DNS配置。
所有 CoreDNS 配置都是 kubesystem 命名空间中名为 CoreDNS 的 configmap 的一部分。
如果在 kube-system 命名空间中列出 Configmap,则可以看到 CoreDNS configmap
。
kubectl get configmap --namespace=kube-system
使用以下命令查看 CoreDNS configmap 内容。
kubectl edit configmap coredns --namespace=kube-system
您将看到以下内容。
apiVersion: v1
data:
Corefile: |
.:53 {
errors
health {
lameduck 5s
}
ready
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
prometheus :9153
forward . /etc/resolv.conf {
max_concurrent 1000
}
cache 30
loop
reload
loadbalance
}
当涉及到 DNS 连接时,应用程序可能需要注意到:
- 使用 Kubernetes 服务端点的内部服务。
- 使用公共 DNS 终结点的公开可用服务。
- 在混合云环境中,服务使用私有 DNS 端点托管在本地环境中。
如果您的用例需要自定义 DNS 服务器,例如,集群中的应用程序需要连接到本地数据中心的私有 DNS 端点,则可以将自定义 DNS 服务器添加到核心 DNS configmap 配置中。
例如,假设自定义DNS服务器IP是10.45.45.34,你的DNS后缀是 dns-onprem.com,我们必须添加一个块,如下所示。以便将与该域终结点相关的所有 DNS 请求转发到 10.45.45.34 DNS 服务器。
dns-onprem.com:53 {
errors
cache 30
forward . 10.45.45.34
}
这是完整的 configmap 配置。
apiVersion: v1
data:
Corefile: |
.:53 {
errors
health {
lameduck 5s
}
ready
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
prometheus :9153
forward . /etc/resolv.conf {
max_concurrent 1000
}
cache 30
loop
reload
loadbalance
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Go语言工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Go语言全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Golang知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Go)
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
识点,真正体系化!**
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Go)
[外链图片转存中…(img-eknfETmg-1712975546905)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)