kubeadm:明确设置要加入的节点的令牌
kubeadm: Explicitly set token for nodes to join with
我已经使用kubeadm
设置了我的主节点。
现在我想 运行 在我的节点上执行 join
命令,以便稍后加入集群。
我要做的就是运行
kubeadm join --token <token> --discovery-token-ca-cert-hash <sha256>
其中 <token>
和 是先前由以下命令返回的值:
kubeadm init
我也在尝试编写上述过程的脚本,我发现从最后一个命令解析实际标记有点困难;
所以我在想是否有一种方法可以在集群初始化期间显式指定 <token>
和 <sha256>
,以避免必须对 init
命令执行 hacky 解析。
我也在尝试为它制作一个脚本。
为了获得所需的值,我正在使用这些命令:
TOKEN=$(sshpass -p $PASSWORD ssh -o StrictHostKeyChecking=no root@$MASTER_IP sudo kubeadm token list | tail -1 | cut -f 1 -d " ")
HASH=$(sshpass -p $PASSWORD ssh -o StrictHostKeyChecking=no root@$MASTER_IP openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' )
基本上我使用这个命令在 master 上 ssh 并获取这个值。
我还没有找到更简单的方法来实现这一点。
实际上似乎有办法解决这个问题:
(我将它放在 ansible
任务中,因为这是我计划使用它的地方)
- name: kubernetes.yml --> Initiate kubernetes cluster
shell: 'kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address={{ ansible_facts[if_name]["ipv4"]["address"] }}'
become: yes
when: inventory_hostname in groups['masters']
- name: kubernetes.yml --> Get the join command
shell: kubeadm token create --print-join-command
register: rv_join_command
when: inventory_hostname in (groups['masters'] | last)
become: yes
- name: kubernetes.yml --> Print the join command
debug:
var: rv_join_command.stdout
输出:
TASK [kubernetes.yml --> Print the join command] *******************************
ok: [kubernetes-master-1] =>
rv_join_command.stdout: 'kubeadm join 192.168.30.1:6443 --token ah0dbr.grxg9fke3c28dif3i --discovery-token-ca-cert-hash sha256:716712ca7f07bfb4aa7df9a8b30ik3t0k3t2259b8c6fc7b68f50334356078 '
我已经使用kubeadm
设置了我的主节点。
现在我想 运行 在我的节点上执行 join
命令,以便稍后加入集群。
我要做的就是运行
kubeadm join --token <token> --discovery-token-ca-cert-hash <sha256>
其中 <token>
和 是先前由以下命令返回的值:
kubeadm init
我也在尝试编写上述过程的脚本,我发现从最后一个命令解析实际标记有点困难;
所以我在想是否有一种方法可以在集群初始化期间显式指定 <token>
和 <sha256>
,以避免必须对 init
命令执行 hacky 解析。
我也在尝试为它制作一个脚本。
为了获得所需的值,我正在使用这些命令:
TOKEN=$(sshpass -p $PASSWORD ssh -o StrictHostKeyChecking=no root@$MASTER_IP sudo kubeadm token list | tail -1 | cut -f 1 -d " ")
HASH=$(sshpass -p $PASSWORD ssh -o StrictHostKeyChecking=no root@$MASTER_IP openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' )
基本上我使用这个命令在 master 上 ssh 并获取这个值。
我还没有找到更简单的方法来实现这一点。
实际上似乎有办法解决这个问题:
(我将它放在 ansible
任务中,因为这是我计划使用它的地方)
- name: kubernetes.yml --> Initiate kubernetes cluster
shell: 'kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address={{ ansible_facts[if_name]["ipv4"]["address"] }}'
become: yes
when: inventory_hostname in groups['masters']
- name: kubernetes.yml --> Get the join command
shell: kubeadm token create --print-join-command
register: rv_join_command
when: inventory_hostname in (groups['masters'] | last)
become: yes
- name: kubernetes.yml --> Print the join command
debug:
var: rv_join_command.stdout
输出:
TASK [kubernetes.yml --> Print the join command] *******************************
ok: [kubernetes-master-1] =>
rv_join_command.stdout: 'kubeadm join 192.168.30.1:6443 --token ah0dbr.grxg9fke3c28dif3i --discovery-token-ca-cert-hash sha256:716712ca7f07bfb4aa7df9a8b30ik3t0k3t2259b8c6fc7b68f50334356078 '