一、部署Node组件
1.将kubelet-bootstrap用户绑定到系统集群角色(Master上执行)
#为token.csv赋予权限
kubectl create clusterrolebinding kubelet-bootstrap \
--clusterrole=system:node-bootstrapper \
--user=kubelet-bootstrap
2.创建kubeconfig文件(Master上执行)
##sh kubeconfig.sh APISERVER 证书目录
rz #上传脚本,修改BOOTSTRAP_TOKEN这个位置填写生成token.csv时的那段随机字符
sh kubeconfig.sh 192.168.31.63 /root/k8s/k8s-cert/
###会生成 bootstrap.kubeconfig 、kube-proxy.kubeconfig 后 拷贝到node###
#拷贝到node1:
scp bootstrap.kubeconfig kube-proxy.kubeconfig root@192.168.31.65:/opt/kubernetes/cfg/
#拷贝到node2:
scp bootstrap.kubeconfig kube-proxy.kubeconfig root@192.168.31.66:/opt/kubernetes/cfg/
# 找到刚才上传的kubernetes-server-linux-amd64.tar.gz中,我的在下面目录
cd /root/k8s/k8s-cert/kubernetes/server/bin
##节点kubelet kube-proxy 也拷贝过去()
scp kubelet kube-proxy root@192.168.31.65:/opt/kubernetes/bin/
#拷贝到node2:
##节点kubelet kube-proxy 也拷贝过去(在kubernetes-server-linux-amd64.tar.gz中)
scp kubelet kube-proxy root@192.168.31.66:/opt/kubernetes/bin/
二、部署 Kubelet、proxy组件
3.部署kubelet,kube-proxy组件(192.168.31.65 Node上执行
加入master)
脚本已上传到QQ群共享:(kubelet.sh proxy.sh)
chmod +x kubelet.sh proxy.sh
sh kubelet.sh 192.168.31.65
sh proxy.sh 192.168.31.65
4.master节点执行命令批准证书
kubectl get csr #查看申请节点
kubectl certificate approve node-csr-FLaxv4tLHKcLTga2hIYytnzQ40Uqqu9KoFGhVFk3KU8 #添加节点
kubectl get node #查看节点,node2同理上面操作
NAME STATUS ROLES AGE VERSION
192.168.31.65 NotReady <none> 3s v1.13.4
kubectl get csr 显示No Resources Found的解决记录
5,node节点验证
在node节点ssl目录可以看到,多了4个kubelet的证书文件
ll /opt/kubernetes/ssl
#########默认日志保存在/var/log/meesgess下,如需要自定义如下:
$vim /opt/kubernetes/cfg/kubelet
$vim /opt/kubernetes/cfg/kube-proxy
$mkdir -p /opt/kubernetes/logs
KUBELET_OPTS="--logtostderr=true \ 改为
KUBELET_OPTS="--logtostderr=false \
--log-dir=/opt/kubernetes/logs \
6,Node2部署方式一样。
- 加入master,不需要从新生成token。
-
Master 查看集群状态
[root@k8s-master bin]# kubectl get node
NAME STATUS ROLES AGE VERSION
192.168.31.65 Ready <none> 33m v1.13.4
192.168.31.66 Ready <none> 6m34s v1.13.4
[root@k8s-master bin]# kubectl get cs
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-2 Healthy {"health":"true"}
etcd-0 Healthy {"health":"true"}
etcd-1 Healthy {"health":"true"}
node 重新加入集群需删除 kubelet.kubeconfig与ssl证书
三、测试K8S集群
7,运行一个测试示例
[root@k8s-master bin]# kubectl run nginx --image=nginx --replicas=3
[root@k8s-master bin]# kubectl expose deployment nginx --port=88 --target-port=80 --type=NodePort
查看Pod,Service状态:
[root@k8s-master bin]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-7cdbd8cdc9-cfmdq 0/1 ImagePullBackOff 0 3m10s
nginx-7cdbd8cdc9-lgd8l 1/1 Running 0 3m9s
nginx-7cdbd8cdc9-wt5s2 1/1 Running 0 3m10s
[root@k8s-master bin]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 5h5m
nginx NodePort 10.0.0.143 <none> 88:39500/TCP 2m20s
# 88是内部访问端口
# 39500是外部访问端口
授权:不然无法exec 登录容器,查看容器日志等问题。
kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous
手工启动
/opt/kubernetes/bin/kubelet --logtostderr=false --log-dir=/opt/kubernetes/logs --v=4 --hostname-override=192.168.1.246 --kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig --bootstrap-kubeconfig=/opt/kubernetes/cfg/bootstrap.kubeconfig --config=/opt/kubernetes/cfg/kubelet.config --cert-dir=/opt/kubernetes/ssl --pod-infra-container-image=docker.io/kubernetes/pause:latest
四、 删除K8S 节点从新加入Master
### Master执行 ###
kubectl delete nodes 192.168.31.66
### Node 执行 ###
systemctl stop kubelet kube-proxy
#ssl证书
rm -fr /opt/kubernetes/ssl/*
#重新生成证书加入并启动
sh kubelet.sh 192.168.1.246
sh proxy.sh 192.168.1.246
#许可加入master
$kubectl get csr
$kubectl certificate approve node-csr-NK3xFo5gaa3-k6gLyytKmUW2sUHZxnouyD9Kn2arJmk
至此K8s二进制部署完成。
- QQ精品交流群
-
- 微信公众号
-