通过上一篇文章“Kubernetes二进制安装之Master节点部署”的详细安装过程,我们清楚的了解到Kubernetes api-server,scheduler,controller-manager组件的工作原理,以及详细的配置参数。本篇文章我们着重介绍Kubernetes Node节点的安装过程。
- kublet 运行在每个node节点上,接收 kube-apiserver 发送的请求,管理 Pod 容器,执行交互式命令,如exec、run、logs 等;
- kublet 启动时自动向 kube-apiserver 注册节点信息,内置的 cadvisor 统计和监控节点的资源使用情况;
下面我们通过具体的步骤来描述下Node节点的安装过程。
步骤一:解压安装包,拷贝Kubernetes二进制文件到Node节点;
- 在node01,node02,node03上分别执行如下命令,创建安装目录:
mkdir /k8s/etcd/{bin,cfg,ssl} -pmkdir /k8s/kubernetes/{bin,cfg,ssl} -p
- 我们把所有需要用到的安装包都统一放到Master节点data目录存储,因此在Master节点执行如下命令解压缩包:
tar -zxvf kubernetes-node-linux-amd64.tar.gz
- 拷贝二进制文件到node01,node02,node03
cd kubernetes/node/bin/scp kubelet kube-proxy node01:/k8s/kubernetes/bin/scp kubelet kube-proxy node02:/k8s/kubernetes/bin/scp kubelet kube-proxy node03:/k8s/kubernetes/bin/
- 分别在node01,node02,node03上执行如下命令创建存放log目录:
mkdir /var/log/{kubernetes,etcd,flanneld} -p
步骤二:分发证书文件到Node节点;
- 在安装Master节点的过程中,我们已经生成了证书文件,在Node节点的安装时候,我们只需要把证书文件分别拷贝到node01,node02,node03就可以了,执行如下命令:
cd /k8s/kubernetes/sslscp *.pem root@node01:/k8s/kubernetes/sslscp *.pem root@node02:/k8s/kubernetes/sslscp *.pem root@node03:/k8s/kubernetes/ssl
步骤三:创建kubelet bootstrap kubeconfig文件;
- 在Master节点创建一个shell脚本用于生成配置文件:
vi env.sh# 创建kubelet bootstrapping kubeconfig BOOTSTRAP_TOKEN=cbe0a862edd731ae54b9dd147b054424KUBE_APISERVER="https://master:6443"# 设置集群参数kubectl config set-cluster kubernetes --certificate-authority=/k8s/kubernetes/ssl/ca.pem --embed-certs=true --server=${KUBE_APISERVER} --kubeconfig=bootstrap.kubeconfig# 设置客户端认证参数kubectl config set-credentials kubelet-bootstrap --token=${BOOTSTRAP_TOKEN} --kubeconfig=bootstrap.kubeconfig# 设置上下文参数kubectl config set-context default --cluster=kubernetes --user=kubelet-bootstrap --kubeconfig=bootstrap.kubeconfig# 设置默认上下文kubectl config use-context default --kubeconfig=bootstrap.kubeconfig#----------------------# 创建kube-proxy kubeconfig文件kubectl config set-cluster kubernetes --certificate-authority=/k8s/kubernetes/ssl/ca.pem --embed-certs=true --server=${KUBE_APISERVER} --kubeconfig=kube-proxy.kubeconfigkubectl config set-credentials kube-proxy --client-certificate=/k8s/kubernetes/ssl/kube-proxy.pem --client-key=/k8s/kubernetes/ssl/kube-proxy-key.pem --embed-certs=true --kubeconfig=kube-proxy.kubeconfigkubectl config set-context default --cluster=kubernetes --user=kube-proxy --kubeconfig=kube-proxy.kubeconfigkubectl config use-context default --kubeconfig=kube-proxy.kubeconfig
- 然后执行该shell脚本
./env.sh
- 将生成的配置文件分发到node01,node02,node03节点
cp bootstrap.kubeconfig kube-proxy.kubeconfig /k8s/kubernetes/cfg/scp bootstrap.kubeconfig kube-proxy.kubeconfig node01:/k8s/kubernetes/cfg/scp bootstrap.kubeconfig kube-proxy.kubeconfig node02:/k8s/kubernetes/cfg/scp bootstrap.kubeconfig kube-proxy.kubeconfig node03:/k8s/kubernetes/cfg/
步骤四:部署Kuberbetes kubelet组件
- 创建 kubelet 参数配置模板文件
vi /k8s/kubernetes/cfg/kubelet.config
- 创建node01 kubelet配置文件
vi /k8s/kubernetes/cfg/kubelet
- --logtostderr:log是否写入系统文件;
- --v:log级别;
- --address:绑定的ip地址,0.0.0.0表示监听所有的IP地址;
- --anonymous-auth:是否允许auth
- --authorization-mode:authorization认证模式,有如下值可选:AlwaysAllow,AlwaysDeny,ABAC,Webhook,RBAC,Node. (default [AlwaysAllow]);
- --enable-server:是否开启server模式;
- --healthz-bind-address:健康检查绑定的ip地址;
- --healthz-port:健康检查绑定的port;
- --node-ip:节点的ip地址;
- --port:节点的port,默认是10250;
- --read-only-port:只读端口;
- --register-node:是否向api server注册自己,这也是Kubernetes推荐的Node管理方式;
- --hostname-override:Node节点的hostname;
- --kubeconfig,--config:配置文件路径;
- --bootstrap-kubeconfig:bootstrap配置文件路径;
- --pod-infra-container-image:docker pull infra镜像的默认url;
- --log-dir:log目录;
- --log-file:完整的log文件存放位置;
- node02的配置文件如下:
- node03的配置文件如下:
步骤五:创建kubelet自启动脚本
- 创建启动脚本
vi /usr/lib/systemd/system/kubelet.service
- 将启动脚本分发到node02,node03
scp /usr/lib/systemd/system/kubelet.service root@node02:/usr/lib/systemd/system/scp /usr/lib/systemd/system/kubelet.service root@node03:/usr/lib/systemd/system/
- 将kubelet-bootstrap用户绑定到系统集群角色,在Master执行如下命令:
kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap
- 启动kubelet服务
systemctl daemon-reloadsystemctl enable kubeletsystemctl restart kubelet
- 查看kubelet是否启动成功
ps auwx | grep kubelet
- approve kubelet CSR 请求
kubectl get csrkubectl certificate approve node-csr-An1VRgJ7FEMMF_uyy6iPjyF5ahuLx6tJMbk2SMthwLskubectl certificate approve node-csr-dWPIyP_vD1w5gBS4iTZ6V5SJwbrdMx05YyybmbW3U5skubectl get nodes
步骤六:部署Kubernetes proxy组件
kube-proxy 运行在所有 node节点上,它监听 apiserver 中 service 和 Endpoint 的变化情况,创建路由规则来进行服务负载均衡;
- 创建kube-proxy配置文件
vi /k8s/kubernetes/cfg/kube-proxy
- --logtostderr:是否将log写入系统log文件;
- --v:log级别;
- --hostname-override: 参数值必须与kubelet的值一致,否则kube-proxy启动后会找不到该Node,从而不会创建任何 ipvs 规则;
- --cluster-cidr: kube-proxy根据cluster-cidr判断集群内部和外部流量,指定–cluster-cidr或–masquerade-all选项后kube-proxy才会对访问Service IP的请求做SNAT;
- --kubeconfig:配置文件;
- --log-dir:log存放目录;
- --log-file:log文件存放位置;
- 将kube-proxy分发到node01,node02,node03节点上
cd /k8s/kubernetes/cfg/scp kube-proxy root@node01:/k8s/kubernetes/cfg/scp kube-proxy root@node02:/k8s/kubernetes/cfg/scp kube-proxy root@node03:/k8s/kubernetes/cfg/
- 创建kube-proxy自启动脚本
vi /usr/lib/systemd/system/kube-proxy.service
- 将启动脚本分发到node01,node02,node03节点
scp /usr/lib/systemd/system/kube-proxy.service root@node01:/usr/lib/systemd/system/scp /usr/lib/systemd/system/kube-proxy.service root@node02:/usr/lib/systemd/system/scp /usr/lib/systemd/system/kube-proxy.service root@node03:/usr/lib/systemd/system/
- 启动kube-proxy服务
systemctl daemon-reloadsystemctl enable kube-proxysystemctl restart kube-proxy
- 查看kube-proxy服务是否启动成功
ps auwx | grep kube-proxy
步骤七:验证集群状态
kubectl get node,cs
到此,Kubernetes master节点和Node节点基本部署完成,在Node节点中我们主要部署了Kubernetes kubelet,kube-proxy组件;并且详细介绍了配置文件。通过验证node01,node02,node03都处于ready状态,一个4节点的最小化的Kubernetes cluster我们已经搭建起来了,下一期文章我们将介绍下Kubernetes的dashboard部署过程,也相当于我们部署一个service到我们的Kubernetes cluster中。敬请期待!
文章如有不妥之处,欢迎指正!谢谢!