More: master节点安装请参考
1、部署kubernetes node节点
Kubernetes node节点包含如下组件:
- Flanneld: 之前单机节点安装没有配置TLS,现在需要在service配置文件中增加TLS配置
- Docker: version 18.06.2-ce
- kubelet
- kube-proxy
1 | # ls /etc/kubernetes/ |
增加docker 源
1 | # yum-config-manager \ |
根据实际查找当前版本 (可选)
1
# yum list docker-ce --showduplicates | sort -r
如果确定了版本,直接安装,如果要装17。03直接修改下面数字即可
1
# yum -y install docker-ce-18.06.2.ce-3.el7 # 主意版本填写包名的格式.
启docker服务,和开机启动
1
# systemctl start docker && systemctl enable docker
1.1、安装flanneld
1 | # mv kubernetes /etc/ && chown -R root: /etc/kubernetes |
1.1.1、flanneld启动配置文件
1 | # cat /lib/systemd/system/flanneld.service |
1.1.2、flanneld配置文件
flanneld 配置文件连接了etcd,而在配置etcd的时候需要证书,所以记的吧证书copy到node节点上去
1 | # cat /etc/sysconfig/flanneld |
- 在启动flanneld之前,需要在etcd中添加一条网络配置记录,这个配置将用于flanneld分配给每个docker的虚拟ip地址段,
- 在任意一台master执行
1
2
3
4# etcdctl set /coreos.com/network/config '{ "Network": "10.254.0.0/16" }'
{ "Network": "10.254.0.0/16" }
# etcdctl get /coreos.com/network/config
{ "Network": "10.254.0.0/16" }
在执行的时候我们需要创建一个配置文件,因为前面etcd是启用了https的,否则的话,会报Error: client: etcd cluster is unavailable or misconfigured; error #0: x509: certificate signed by unknown authority
的错误。
1 | # etcd.rc |
1.1.3、启动flanneld
在启动flanneld之前,我们需要修改docker的配置文件
1 | # cat /lib/systemd/system/docker.service |
重启了docker和flanneld以后,我们在任意一台node节点上通过ip add s可以查看。flanneld 和docker 网络绑定的情况
1 | # ip add s |
2、安装和配置kubelet
kubelet启动时向kube-apiserver发送tls bootstrapping请求,需要将bootstrap token文件中kube-bootsrap用户授予system:node-bootstrapper cluster角色(role),然后kubelet才能有权限创建认证请求(certificate signing requests)
2.1、安装kubelet
1 | # wget https://dl.k8s.io/v1.13.3/kubernetes-server-linux-amd64.tar.gz |
2.2、创建kubelet启动文件
1 | # cat /usr/lib/systemd/system/kubelet.service |
2.3、kubelet配置文件
1 | # cat /etc/kubernetes/kubelet |
2.4、启动kubelet
1 | # mkdir /var/lib/kubelet -p |
3、通过kubelet的tls请求
kubelet首次启动时像kube-apiserver发送证书签名请求,必须通过后kubernetes系统才会将该node加入集群:
3.1、查看未授权csr请求
- 任意master节点均可
1 | # kubectl get csr |
3.2、通过csr请求
1 | # kubectl certificate approve csr-kxfql |
- 自动生成kubelet kubeconfig文件和公私钥,新版本 kubelet server 的证书自动签发已经被关闭,所以对于 kubelet server 的证书仍需要手动签署
4、配置kube-proxy
4.1、kupe-proxy 启动文件
1 | # cat /usr/lib/systemd/system/kube-proxy.service |
4.2、kube-proxy配置文件
1 | # cat /etc/kubernetes/proxy |
4.3、启动kube-proxy
1 | # systemctl daemon-reload |
4.4 在kube-proxy和kubelet启动之前
由于 kubelet 组件是采用 TLS Bootstrap 启动,所以需要预先创建相关配置
- 创建用于 tls bootstrap 的 token secret
master节点操作
1
# kubectl create -f bootstrap.secret.yaml
为了能让 kubelet 实现自动更新证书,需要配置相关 clusterrolebinding
允许 kubelet tls bootstrap 创建 csr 请求
1
2
3kubectl create clusterrolebinding create-csrs-for-bootstrapping \
--clusterrole=system:node-bootstrapper \
--group=system:bootstrappers自动批准 system:bootstrappers 组用户 TLS bootstrapping 首次申请证书的 CSR 请求
1
2
3kubectl create clusterrolebinding auto-approve-csrs-for-group \
--clusterrole=system:certificates.k8s.io:certificatesigningrequests:nodeclient \
--group=system:bootstrappers自动批准 system:nodes 组用户更新 kubelet 自身与 apiserver 通讯证书的 CSR 请求
1
2
3kubectl create clusterrolebinding auto-approve-renewals-for-nodes \
--clusterrole=system:certificates.k8s.io:certificatesigningrequests:selfnodeclient \
--group=system:nodes在 kubelet server 开启 api 认证的情况下,apiserver 反向访问 kubelet 10250 需要此授权(eg: kubectl logs)
1
2
3kubectl create clusterrolebinding system:kubelet-api-admin \
--clusterrole=system:kubelet-api-admin \
--user=system:kubelet-api-admin
- 问题:
在启动kubelet的时候,node节点在master节点无法查看,查看kubelet的日志提示如下: - 查看kubelet的日志方式有两种
1 | # journalctl -f -u kubelet |
- 查看nodes
1
2
3# kubectl get nodes
NAME STATUS ROLES AGE VERSION
172.21.16.244 Ready <none> 12m v1.13.3
验证测试集群
创建一个nginx测试集群是否可用1
2
3
4
5# kubectl run nginx --image=docker.io/nginx:latest --replicas=2 --labels run=nginx
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/nginx created
# kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposed查看pod情况
1 | # kubectl get pod -o wide |
- 查看对外的服务
1 | # kubectl get svc nginx |
部署完成后,通过任意node节点IP的地址加端口48713即可访问
http://node-ip:48713/