摘要:node
Kubelet组件运行在Node节点上,维持运行中的Pods以及提供kuberntes运行时环境,主要完成如下使命:
1.监视分配给该Node节点的pods
2.挂载pod所须要的volumes
3.下载pod的secret
4.经过docker/rkt来运行pod中的容器
5.周期的执行pod中为容器定义的liveness探针
6.上报pod的状态给系统的其余组件
7.上报Node的状态git
一、如下操做属于node节点上组件的部署,在master节点上只是进行文件配置,而后发布至各node节点。github
二、如果须要master也做为node节点加入集群,也须要在master节点部署docker、kubelet、kube-proxy。web
1)建立角色绑定docker
kubelet 启动时向 kube-apiserver 发送 TLS bootstrapping 请求,须要先将 bootstrap token 文件中的 kubelet-bootstrap 用户赋予 system:node-bootstrapper cluster 角色(role), 而后 kubelet 才能有权限建立认证请求(certificate signing requests):
[root@k8s-master01 ~]# kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap
--user=kubelet-bootstrap 是部署kube-apiserver时建立bootstrap-token.csv文件中指定的用户,同时也须要写入bootstrap.kubeconfig 文件
2)建立kubelet kubeconfig文件,设置集群参数shell
## 设置集群参数 [root@k8s-master01 ~]# kubectl config set-cluster kubernetes \ --certificate-authority=/etc/kubernetes/ssl/ca.pem \ --embed-certs=true \ --server=https://127.0.0.1:6443 \ --kubeconfig=bootstrap.kubeconfig Cluster "kubernetes" set. ## 设置客户端认证参数 ### tocker是前文提到的bootstrap-token.csv文件中token值 [root@k8s-master01 ~]# kubectl config set-credentials kubelet-bootstrap \ --token=fb8f04963e38858eab0867e8d2296d6b \ --kubeconfig=bootstrap.kubeconfig User "kubelet-bootstrap" set. ## 设置上下文参数 [root@k8s-master01 ~]# kubectl config set-context default \ --cluster=kubernetes \ --user=kubelet-bootstrap \ --kubeconfig=bootstrap.kubeconfig Context "default" created. ## 设置默认上下问参数 [root@k8s-master01 ~]# kubectl config use-context default --kubeconfig=bootstrap.kubeconfig Switched to context "default". ## 分发生成的集群配置文件到各node节点 [root@k8s-master01 ~]# ansible k8s-node -m copy -a 'src=/root/bootstrap.kubeconfig dest=/etc/kubernetes/config/'
3)建立系统核心配置文件服务bootstrap
咱们先在master节点配置好,而后用ansible分发至2各node节点,而后修改对应主机名及IP便可
[root@k8s-master01 ~]# vim /opt/k8s/cfg/kubelet.conf
## 分发至node节点(别忘了修改参数中对应的主机名、IP地址) [root@k8s-master01 ~]# ansible k8s-node -m copy -a 'src=/opt/k8s/cfg/kubelet.conf dest=/etc/kubernetes/config/'
[root@k8s-master01 ~]# vim /opt/k8s/unit/kubelet.service [Unit] Description=Kubernetes Kubelet Server Documentation=https://github.com/GoogleCloudPlatform/kubernetes After=docker.service Requires=docker.service [Service] WorkingDirectory=/var/lib/kubelet EnvironmentFile=-/etc/kubernetes/config/kubelet.conf ExecStart=/usr/local/bin/kubelet $KUBELET_ARGS Restart=on-failure KillMode=process [Install] WantedBy=multi-user.target
## 分发脚本配置文件 [root@k8s-master01 ~]# ansible k8s-node -m copy -a 'src=/opt/k8s/unit/kubelet.service dest=/usr/lib/systemd/system/' ## 建立kubelet数据目录 [root@k8s-master01 ~]# ansible k8s-node -m file -a 'path=/var/lib/kubelet state=directory'
[root@k8s-master01 ~]# ansible k8s-node -m shell -a 'systemctl daemon-reload' [root@k8s-master01 ~]# ansible k8s-node -m shell -a 'systemctl enable kubelet' [root@k8s-master01 ~]# ansible k8s-node -m shell -a 'systemctl start kubelet'
查看未受权的csr请求,处于”Pending”状态
[root@k8s-master01 ~]# kubectl get csr NAME AGE REQUESTOR CONDITION csr-5m922 100s kubelet-bootstrap Pending csr-k4v2g 99s kubelet-bootstrap Pending
kubelet 首次启动向 kube-apiserver 发送证书签名请求,必须由 kubernetes 系统容许经过后,才会将该 node 加入到集群。
## 批准后 node节点就加入集群了 [root@k8s-master01 ~]# kubectl certificate approve csr-5m922 [root@k8s-master01 ~]# kubectl certificate approve csr-k4v2g ## 查看node节点就绪状态 ### 因为咱们尚未安装网络,因此node节点还处于NotReady状态 [root@k8s-master01 ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-node01 NotReady <none> 49m v1.14.1 k8s-node02 NotReady <none> 6m15s v1.14.1