node加入集群
环境:
1.已经有个control plane节点(前三节步骤)
2.新的ubuntu16.04虚拟机
3.已经安装完容器运行环境和kubeadm, kubelet and kubectl(参照一二步骤)
1.加入集群
运行命令
kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>
如果不知道token,可以在control plane节点运行
kubeadm token list
获取。
master-ip是control plane节点的ip
master-port默认是6443
默认情况下,token在24小时后过期。如果在当前token过期后将想节点加入群集,则可以通过在control plane节点上运行以下命令来创建新token:
kubeadm token create
如果没有--discovery-token-ca-cert-hash的值,则可以通过在control plane节点上运行以下命令链来获取它:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
openssl dgst -sha256 -hex | sed 's/^.* //'
可能出现问题:
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR Swap]: running with swap on is not supported. Please disable swap
需要关闭虚拟内存
swapoff -a
运行kubeadm join命令成功后会出现
[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
[kubelet-start] Downloading configuration for the kubelet from the "kubelet-config-1.15" ConfigMap in the kube-system namespace
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Activating the kubelet service
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
root@ubuntu-node1:~# kubectl get nodes
几秒钟后,在control plane节点上运行kubectl get nodes命令会输出此节点。证明加入成功
2.(可选)让control plane节点以外的机器控制集群
为了在其他机器(例如笔记本电脑)上获取kubectl与群集通信,需要将管理员kubeconfig文件从control plane节点复制到工作机器上,如下所示:
scp root@<master ip>:/etc/kubernetes/admin.conf .
kubectl --kubeconfig ./admin.conf get nodes
注意:
上面的示例假定为root启用了SSH访问。如果不是这种情况,您可以复制admin.conf文件到其他用户有访问权限的目录,使用scp通过其他用户访问。
admin.conf文件为用户提供了群集的root用户权限。应谨慎使用此文件。对于普通用户,建议生成将白名单特权列入其中的唯一凭据。您可以使用kubeadm alpha kubeconfig用户--client-name <CN>命令执行此操作。该命令将打印出一个KubeConfig文件到STDOUT,您应将其保存到文件并分发给您的用户。之后,使用kubectl创建(群集)角色绑定的白名单权限。
3.(可选)将API服务器代理到localhost
如果要从群集外部连接到API服务器,可以使用kubectl proxy
scp root@<master ip>:/etc/kubernetes/admin.conf .
kubectl --kubeconfig ./admin.conf proxy
您现在可以在http:// localhost:8001:api /v1本地访问API服务器