From fe4a72915db848ba809e1d32d17945b03c19e7fc Mon Sep 17 00:00:00 2001 From: Jimmy Song Date: Tue, 15 Aug 2017 18:12:04 +0800 Subject: [PATCH] =?UTF-8?q?fix=20https://github.com/rootsongjc/kubernetes-?= =?UTF-8?q?handbook/issues/32=20=E5=A2=9E=E5=8A=A0kubelet=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加对kubelet配置中的cluster-domain和cgroup-driver的配置描述。 --- practice/node-installation.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/practice/node-installation.md b/practice/node-installation.md index d488b885c..3f130a6bd 100644 --- a/practice/node-installation.md +++ b/practice/node-installation.md @@ -288,15 +288,17 @@ KUBELET_API_SERVER="--api-servers=http://172.20.0.113:8080" KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=sz-pg-oam-docker-hub-001.tendcloud.com/library/pod-infrastructure:rhel7" # ## Add your own! -KUBELET_ARGS="--cgroup-driver=systemd --cluster-dns=10.254.0.2 --experimental-bootstrap-kubeconfig=/etc/kubernetes/bootstrap.kubeconfig --kubeconfig=/etc/kubernetes/kubelet.kubeconfig --require-kubeconfig --cert-dir=/etc/kubernetes/ssl --cluster-domain=cluster.local. --hairpin-mode promiscuous-bridge --serialize-image-pulls=false" +KUBELET_ARGS="--cgroup-driver=systemd --cluster-dns=10.254.0.2 --experimental-bootstrap-kubeconfig=/etc/kubernetes/bootstrap.kubeconfig --kubeconfig=/etc/kubernetes/kubelet.kubeconfig --require-kubeconfig --cert-dir=/etc/kubernetes/ssl --cluster-domain=cluster.local --hairpin-mode promiscuous-bridge --serialize-image-pulls=false" ``` + `--address` 不能设置为 `127.0.0.1`,否则后续 Pods 访问 kubelet 的 API 接口时会失败,因为 Pods 访问的 `127.0.0.1` 指向自己而不是 kubelet; + 如果设置了 `--hostname-override` 选项,则 `kube-proxy` 也需要设置该选项,否则会出现找不到 Node 的情况; ++ `"--cgroup-driver` 配置成 `systemd`,不要使用`cgroup`,否则在 CentOS 系统中 kubelet 讲启动失败。 + `--experimental-bootstrap-kubeconfig` 指向 bootstrap kubeconfig 文件,kubelet 使用该文件中的用户名和 token 向 kube-apiserver 发送 TLS Bootstrapping 请求; + 管理员通过了 CSR 请求后,kubelet 自动在 `--cert-dir` 目录创建证书和私钥文件(`kubelet-client.crt` 和 `kubelet-client.key`),然后写入 `--kubeconfig` 文件; + 建议在 `--kubeconfig` 配置文件中指定 `kube-apiserver` 地址,如果未指定 `--api-servers` 选项,则必须指定 `--require-kubeconfig` 选项后才从配置文件中读取 kube-apiserver 的地址,否则 kubelet 启动后将找不到 kube-apiserver (日志中提示未找到 API Server),`kubectl get nodes` 不会返回对应的 Node 信息; + `--cluster-dns` 指定 kubedns 的 Service IP(可以先分配,后续创建 kubedns 服务时指定该 IP),`--cluster-domain` 指定域名后缀,这两个参数同时指定后才会生效; ++ `--cluster-domain` 指定 pod 启动时 `/etc/resolve.conf` 文件中的 `search domain` ,起初我们将其配置成了 `cluster.local`,这样在解析 service 的 DNS 名称时是正常的,可是在解析 headless service 中的 FQDN pod name 的时候却错误,因此我们讲其修改为 `cluster.local`,可以解决该问题,关于 kubernetes 中的域名/服务名称解析请参见我的另一篇文章。 + `—kubeconfig=/etc/kubernetes/kubelet.kubeconfig `中指定的`kubelet.kubeconfig`文件在第一次启动kubelet之前并不存在,请看下文,当通过CSR请求后会自动生成`kubelet.kubeconfig`文件,如果你的节点上已经生成了`~/.kube/config`文件,你可以将该文件拷贝到该路径下,并重命名为`kubelet.kubeconfig`,所有node节点可以共用同一个kubelet.kubeconfig文件,这样新添加的节点就不需要再创建CSR请求就能自动添加到kubernetes集群中。同样,在任意能够访问到kubernetes集群的主机上使用`kubectl —kubeconfig`命令操作集群时,只要使用`~/.kube/config`文件就可以通过权限认证,因为这里面已经有认证信息并认为你是admin用户,对集群拥有所有权限。 完整 unit 见 [kubelet.service](./systemd/kubelet.service)