十一.部署kubelet

接下来两个章节是部署Kube-Node相关的服务,包含:kubelet,kube-proxy。

1. TLS bootstrap用户授权

# kubelet采用TLS Bootstrapping 机制,自动完成到kube-apiserver的注册,在node节点量较大或者后期自动扩容时非常有用。
# kubelet 启动时向 kube-apiserver 发送 TLS bootstrapping 请求,需要先将 bootstrap token 文件中的 kubelet-bootstrap 用户赋予ClusterRole system:node-bootstrapper 角色(通过kubectl get clusterroles可查询),然后 kubelet 才有权限创建认证请求,通过创建ClusterRoleBinding可实现;
# --user=kubelet-bootstrap 指定用户名,这里即文件 /etc/kubernetes/bootstrap/token.csv (前文创建)中指定的用户名,同时也需要写入kubeconfig文件 /etc/kubernetes/bootstrap.kubeconfig;
[root@kubenode1 ~]# kubectl create clusterrolebinding kubelet-bootstrap \
--clusterrole=system:node-bootstrapper \
--user=kubelet-bootstrap

# ClusterRoleBinding:kubelet-bootstrap创建成功
[root@kubenode1 ~]# kubectl get clusterrolebinding

2. 创建kube-scheduler kubeconfig文件

[root@kubenode1 ~]# cd /etc/kubernetes/bootstrap/

# 配置集群参数;
# --embed-certs:设置为 true 表示将 certificate-authority 证书写入到生成的 bootstrap.kubeconfig 文件中
[root@kubenode1 bootstrap]# kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/ssl/ca.pem \
--embed-certs=true \
--server=https://172.30.200.10:6443 \
--kubeconfig=bootstrap.kubeconfig # 配置客户端认证参数;
# 认证用户为前文token.csv文件中的“kubelet-bootstrap”;
# 指定token,前文中已设定的token的环境变量,证书与私钥由kube-apiserver在kubeler首次注册是自动生成
[root@kubenode1 bootstrap]# kubectl config set-credentials kubelet-bootstrap \
--token=${BOOTSTRAP_TOKEN} \
--kubeconfig=bootstrap.kubeconfig # 配置上下文参数
[root@kubenode1 bootstrap]# kubectl config set-context default \
--cluster=kubernetes \
--user=kubelet-bootstrap \
--kubeconfig=bootstrap.kubeconfig # 配置默认上下文
[root@kubenode1 bootstrap]# kubectl config use-context default --kubeconfig=bootstrap.kubeconfig

# 分发bootstrap.kubeconfig到所有node节点
[root@kubenode1 bootstrap]# scp bootstrap.kubeconfig root@172.30.200.22:/etc/kubernetes/bootstrap/
[root@kubenode1 bootstrap]# scp bootstrap.kubeconfig root@172.30.200.23:/etc/kubernetes/bootstrap/

3. 配置kubelet的systemd unit文件

相关可执行文件在部署kubectl时已部署完成。

# kubelet依赖于docker.service服务,在其启动之后启动;
# 可通过ExecStartPost设置iptables开放tcp 4194端口,为cAdvisor做准备
[root@kubenode1 ~]# touch /usr/lib/systemd/system/kubelet.service
[root@kubenode1 ~]# vim /usr/lib/systemd/system/kubelet.service
[Unit]
Description=Kubernetes Kubelet
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=docker.service
Requires=docker.service [Service]
WorkingDirectory=/var/lib/kubelet
EnvironmentFile=/usr/local/kubernetes/kubelet.conf
ExecStart=/usr/local/kubernetes/bin/kubelet $KUBELET_ARGS
Restart=on-failure
RestartSec=5 [Install]
WantedBy=multi-user.target # 创建工作目录
[root@kubenode1 ~]# mkdir -p /var/lib/kubelet # 配置启动参数文件;
# --address:绑定主机ip地址,默认值”0.0.0.0”表示使用全部网络接口;
# --hostname-override:设置node在集群中的主机名,默认使用主机hostname;如果设置了此项参数,kube-proxy服务也需要设置此项参数;
# --pod-infra-container-image:用于Pod内namespace共享的基础pause镜像,默认值即” gcr.io/google_containers/pause-amd64:3.0”;建议节点上提前pull相关镜像以提升部署效率;
# --bootstrap-kubeconfig:kubelet首次启动在没有客户端证书文件时,将使用指定的kubeconfig配置到kube-apiserver获取客户端证书;通过csr请求,成功获取后在--kubeconfig指定的路径生成kubeconfig文件;证书与私钥文件将被保存到--cert-dir指定的目录下;
# --cluster-dns:指定集群内dns服务器,以逗号分隔;kubelet在新创建的Pod中设DNS域名解析配置文件/etc/resolv.conf文件,写入nameserver与search配置;
# --cluster-domain:集群内dns服务器域名;
# --allow-privileged:是否允许以特权模式启动容器,默认false;
# --serialize-image-pulls:按顺序pull镜像,默认值true;
# --fail-swap-on=false:如果节点开启了swap,节点不能启动kubelet服务,默认值true,在v1.8.x与v1.9.x版本时注意
[root@kubenode1 ~]# touch /usr/local/kubernetes/kubelet.conf
[root@kubenode1 ~]# vim /usr/local/kubernetes/kubelet.conf
KUBELET_ARGS="--address=172.30.200.21 \
--hostname-override=172.30.200.21 \
--pod-infra-container-image=gcr.io/google_containers/pause-amd64:3.0 \
--bootstrap-kubeconfig=/etc/kubernetes/bootstrap/bootstrap.kubeconfig \
--kubeconfig=/etc/kubernetes/bootstrap/kubelet.kubeconfig \
--cert-dir=/etc/kubernetes/bootstrap \
--cluster-dns=169.169.0.11 \
--cluster-domain=cluster.local. \
--allow-privileged=true \
--serialize-image-pulls=false \
--fail-swap-on=false \
--logtostderr=false \
--log-dir=/var/log/kubernetes/kubelet \
--v=2" # 创建日志目录
[root@kubenode1 ~]# mkdir -p /var/log/kubernetes/kubelet

4. 启动并验证

1)kubelet状态验证

[root@kubenode1 ~]# systemctl daemon-reload
[root@kubenode1 ~]# systemctl enable kubelet
[root@kubenode1 ~]# systemctl start kubelet
[root@kubenode1 ~]# systemctl status kubelet

2)通过kubelet的TLS证书请求

kubelet 首次启动向 kube-apiserver 发送证书签名请求,必须由 kubernetes 系统允许通过后,才会将该 node 加入到集群。

以kubenode1为例,其余节点类似。

# 查看未授权的csr请求,处于”Pending”状态
[root@kubenode1 ~]# kubectl get csr

# 通过csr请求,状态变更为”Approved, Issued”;
# 集群节点已“Ready”
[root@kubenode1 ~]# kubectl certificate approve node-csr-Gl5zdgp6IZYQBAV1S59vXDZzHbirH9qDMb0xHaDnDIA
[root@kubenode1 ~]# kubectl get nodes

3)kubelet证书与私钥

# 在指定的目录,可查询自动生成的kubelet证书,私钥及kubeconfig文件等;
[root@kubenode1 ~]# ll /etc/kubernetes/bootstrap/

高可用Kubernetes集群-9. 部署kubelet的更多相关文章

  1. 高可用Kubernetes集群-15. 部署Kubernetes集群统一日志管理

    参考文档: Github:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/fluentd-elasticsear ...

  2. 高可用Kubernetes集群-14. 部署Kubernetes集群性能监控平台

    参考文档: Github介绍:https://github.com/kubernetes/heapster Github yaml文件: https://github.com/kubernetes/h ...

  3. 高可用Kubernetes集群-11. 部署kube-dns

    参考文档: Github介绍:https://github.com/kubernetes/dns Github yaml文件:https://github.com/kubernetes/kuberne ...

  4. 高可用Kubernetes集群-12. 部署kubernetes-ingress

    参考文档: Github:https://github.com/kubernetes/ingress-nginx Kubernetes ingress:https://kubernetes.io/do ...

  5. 高可用Kubernetes集群-7. 部署kube-controller-manager

    九.部署kube-controller-manager kube-controller-manager是Kube-Master相关的3个服务之一,是有状态的服务,会修改集群的状态信息. 如果多个mas ...

  6. 高可用Kubernetes集群-6. 部署kube-apiserver

    八.部署kube-apiserver 接下来3章节是部署Kube-Master相关的服务,包含:kube-apiserver,kube-controller-manager,kube-schedule ...

  7. 高可用Kubernetes集群-8. 部署kube-scheduler

    十.部署kube-scheduler kube-scheduler是Kube-Master相关的3个服务之一,是有状态的服务,会修改集群的状态信息. 如果多个master节点上的相关服务同时生效,则会 ...

  8. 高可用Kubernetes集群-10. 部署kube-proxy

    十二.部署kube-proxy 1. 创建kube-proxy证书 1)创建kube-proxy证书签名请求 # kube-proxy提取CN作为客户端的用户名,即system:kube-proxy. ...

  9. 高可用Kubernetes集群-13. 部署kubernetes-dashboard

    参考文档: Github介绍:https://github.com/kubernetes/dashboard Github yaml文件:https://github.com/kubernetes/d ...

随机推荐

  1. Asp.net MVC使用FormsAuthentication,MVC和WEB API可以共享身份认证 (转载)

    在实际的项目应用中,很多时候都需要保证数据的安全和可靠,如何来保证数据的安全呢?做法有很多,最常见的就是进行身份验证.验证通过,根据验证过的身份给与对应访问权限.同在Web Api中如何实现身份认证呢 ...

  2. luogu11月月赛T3咕咕咕(组合数学)

    题目描述 小 F 是一个能鸽善鹉的同学,他经常把事情拖到最后一天才去做,导致他的某些日子总是非常匆忙. 比如,时间回溯到了 2018 年 11 月 3 日.小 F 望着自己的任务清单: 看 iG 夺冠 ...

  3. linux查看网卡地址和硬盘序列号

    linux查看网卡地址命令:ifconfig linux查看硬盘序列号命令:hdparm -i /dev/sda

  4. 前端基础-jQuery的内容之选择器

    阅读目录 ID选择器 类选择器 元素选择器 通配符选择器 层级选择器 基本筛选器 内容筛选器 可见性筛选器 属性筛选器 子元素筛选器 表单元素筛选器 表单对象筛选器 this和$(this) 一.jQ ...

  5. 我的 Delphi 学习之路 —— Delphi 的认识

    标题:我的 Delphi 学习之路 -- Delphi 的认识 作者:断桥烟雨旧人伤 1. 什么是 Delphi Delphi 是 Windows 平台下著名的快速应用程序开发工具(Rapid App ...

  6. 《转》Pycharm创建py文件时自定义头部模板

    File->settings->Editor->File and Code Templates->Python Script #!/usr/bin/env python # - ...

  7. go学习之文件读取问题(需更新)

    go学习之文件读取问题(需更新) 一,问题: 今天做一个GO广度迷宫问题时,出现了一个奇怪的问题. 就是通过fmt.Fscanf()读取文件时,每行末尾多出一个0. 二,问题代码: 1,输入文件maz ...

  8. 为树莓派添加一个强实时性前端[原创cnblogs.com/helesheng]

    树莓派是最近流行嵌入式平台,其自由的开源特性以及低廉的价格,吸引了来 自全球的大量极客和计算机大咖的关注.来自各大树莓派社区的幕后英雄,无私地在这个开源硬件平台上做了大量的工作,将其打造成了世界上通用 ...

  9. Matlab调用C语言函数

    Matlab调用C语言函数 如果我有一个用C语言写的函数,实现了一个功能,如一个简单的函数:double add(double x, double y) { return x + y ;}现在我想要在 ...

  10. #ifdef 支持Mac #ifndef 支持Windows #if defined (Q_OS_WIN) 应该可以再两个系统通用

    //mac qt可以运行 #ifdef Q_OS_MAC qDebug()<<QSysInfo::MacintoshVersion; #endif //Mac不运行 #ifndef Q_O ...