• 高可用Kubernetes集群-9. 部署kubelet


     十一.部署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/

  • 相关阅读:
    云计算和大数据时代网络技术揭秘(八)数据中心存储FCoE
    云计算和大数据时代网络技术揭秘(七)大二层网络
    云计算和大数据时代网络技术揭秘(六)LISP协议
    云计算和大数据时代网络技术揭秘(五)可靠的网络
    云计算和大数据时代网络技术揭秘(四)网络加密
    云计算和大数据时代网络技术揭秘(三)安全的网络准入
    python3练习100题——027
    python3练习100题——026
    python3练习100题——025
    python3练习100题--024
  • 原文地址:https://www.cnblogs.com/netonline/p/8795838.html
Copyright © 2020-2023  润新知