初始化令牌过期后加入群集?

时间:2017-11-05 21:23:41

标签: kubernetes

我几天前创建了一个Kubernetes集群,其中包含1个Master和1个worker Node。现在我想向集群添加另一个节点,但是主服务器上原始“kubeadm init”打印的令牌已过期(默认情况下,24小时后)。

“kubeadm join”命令有一个“--discovery-file”。它需要一个配置文件,我尝试了我在这里找到的格式:

https://github.com/kubernetes/kubeadm/blob/master/docs/design/design_v1.8.md

function wc_add_custom_order_column( $columns ) {

    $new_columns = array();

    foreach ( $columns as $column_name => $column_info ) {

        $new_columns[ $column_name ] = $column_info;

        if ( 'order_actions' === $column_name ) {
            $new_columns['custom_column'] = __( 'Custom Column', 'my-textdomain' );
        }
    }

    return $new_columns;
}

add_filter( 'manage_edit-shop_order_columns', 'wc_add_custom_order_column', 20 );

function wc_add_custom_order_column_content( $column ) {
    global $post;

    if ( 'custom_column' === $column ) {
        $data = get_post_meta( $post->ID );

        if( isset( $data['custom_column'] ) )
            echo $data['custom_column'];
    }
}

add_action( 'manage_shop_order_posts_custom_column', 'wc_add_custom_order_column_content' );

我从工作的kubectl配置文件中复制了相应的数据,并创建了一个本地文件“a.config”。

但是,当我尝试命令“sudo kubeadm join --discovery-file a.conf”时,它失败并显示以下错误消息:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: <really long certificate data>
    server: https://10.138.0.2:6443
  name: ""
contexts: []
current-context: ""
kind: Config
preferences: {}
users: []

我在这里缺少什么?

在我的情况下工作的程序是什么?我不想拆掉群集再重新加入群集。

4 个答案:

答案 0 :(得分:13)

创建一个新的引导令牌并加入

使用kubeadm token create创建新的引导令牌,请参阅kubeadm: Managing Tokens

# login to master node
# create a new bootstrap token
$ kubeadm token create
abcdef.1234567890abcdef

# get root ca cert fingerprint
$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
e18105ef24bacebb23d694dad491e8ef1c2ea9ade944e784b1f03a15a0d5ecea 

# login to the new worker node
# join to cluster 
$ kubeadm join --token abcdef.1234567890abcdef --discovery-token-ca-cert-hash sha256:e18105ef24bacebb23d694dad491e8ef1c2ea9ade944e784b1f03a15a0d5ecea 1.2.3.4:6443

注意:Kubernetes 1.8及以上版本中首选--discovery-token-ca-cert-hash

(备选方案)使用发现文件建立信任

  

--discovery-file提供了一种建立根目录的带外方式   主节点和自举节点之间的信任。

     

如果要构建自动配置,请考虑使用此模式   使用kubeadm。

发现文件未提供有效令牌,因此我们仍需要kubeadm token create来创建新令牌。

kubeadm join --token abcdef.1234567890abcdef --discovery-file a.conf

答案 1 :(得分:5)

我知道将新节点加入现有集群的最简单方法是

kubeadm token create --print-join-command

这将给出这样的输出。

kubeadm join 192.168.10.15:6443 --token l946pz.6fv0XXXXX8zry --discovery-token-ca-cert-hash sha256:e1e6XXXXXXXXXXXX9ff2aa46bf003419e8b508686af8597XXXXXXXXXXXXXXXXXXX

答案 2 :(得分:0)

感谢@silverfox的回答,但是手动键入这些命令仍然有些痛苦,因此我构建了以下命令来帮助我快速完成此操作。

此命令将创建一个令牌并生成加入命令:

echo sudo kubeadm join $(kubeadm config view | grep ^controlPlaneEndpoint | awk '{print $2}') --token $(kubeadm token create) --discovery-token-ca-cert-hash sha256:$(openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //')

答案 3 :(得分:0)

正如上面 Mansur's answer 中所建议的,能够运行以下命令来设置集群。

# command ran from master node:
kubeadm token create --print-join-command

# sample output
kubeadm join <IP_OF_MASTER_NODE>:6443 --token iic9jq.<redacted> --discovery-token-ca-cert-hash <redacted>

使用 sudo- 在另一个节点中运行上面的输出

sudo kubeadm join <IP_OF_MASTER_NODE>:6443 --token iic9jq.<redacted> --discovery-token-ca-cert-hash <redacted>

当我在没有 sudo 的情况下运行上述命令时,出现错误-

[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:
        [ERROR IsPrivilegedUser]: user is not running as root
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`

当我使用 sudo 运行时,收到此成功消息:


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.

从主节点运行 kubectl get nodes 并看到新节点已加入集群。

在运行上述命令之前,集群状态如下-

# ran on master node
$ kubectl get nodes
NAME            STATUS     ROLES    AGE   VERSION
ip-[REDACTED]   NotReady   master   20m   v1.14.5

运行上述命令后,集群状态如下:

# ran on master node
kubectl get nodes
NAME            STATUS     ROLES    AGE   VERSION
ip-[REDACTED]   NotReady   master   20m   v1.14.5
ip-[REDACTED]   NotReady   <none>   14s   v1.14.5