【问题标题】:How do I find the join command for kubeadm on the master?如何在 master 上找到 kubeadm 的 join 命令?
【发布时间】:2018-12-10 02:10:44
【问题描述】:

当我之前运行 kubeadm init 时,我丢失了原始的“kubeadm join”命令。

如何再次检索此值?

【问题讨论】:

    标签: kubernetes kubeadm


    【解决方案1】:
    kubeadm token create --print-join-command
    

    【讨论】:

    • 我可以获得令牌,但它会打印一个警告。是否可以只打印令牌?没有任何警告,只是令牌本身?
    • 错误可能转到stderr。你可以试试2> /dev/null
    • 哇!你太棒了。它正在工作,但我不确定这是否能保证它每次都能正常工作?
    • 感谢您的帮助
    【解决方案2】:

    这可能不适用于旧 Kubernetes 版本,但我尝试使用新版本,它对我有用。

    要打印工作/从节点的连接命令,
    kubeadm token create --print-join-command

    但是,如果您需要加入新的控制平面节点,那将不起作用,因为您需要为控制平面加入命令重新创建新密钥。这可以通过三个简单的步骤来完成。

    01.) 在已经工作的主节点中重新上传证书
    sudo kubeadm init phase upload-certs --upload-certs
    它将生成一个新的证书密钥。

    02.) 在已经工作的主节点中打印加入命令
    kubeadm token create --print-join-command

    03.) 添加--control-plane --certificate-key 并执行。
    <join command from step 02> --control-plane --certificate-key <key from step 01>

    完成。

    【讨论】:

    • 这是一个非常棒且优雅的解决方案。谢谢它完美无缺。
    【解决方案3】:

    要创建kubeadm join 命令,请运行以下命令:

    第 1 步 - 检索令牌 CA 哈希:

    openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt \
        | openssl rsa -pubin -outform der 2>/dev/null \
        | openssl dgst -sha256 -hex \
        | sed 's/^.* //'
    

    此命令将为您提供公钥。

    第 2 步 - 检索引导令牌:

    kubeadm token list
    

    这将打印所有令牌,因此复制TOKEN 下的令牌值,并附上描述“kubeadm init 生成的默认引导令牌。”

    第 3 步 - 创建kubeadm init 命令:

    现在使用以下语法创建join 命令而不创建新令牌:

    kubeadm join <ip-address>:6443\
        --token=<token-from-step-2> \
        --discovery-token-ca-cert-hash sha256:<ca-hash-from-step-1>
    

    kubeadm token create 命令创建一个新的令牌,在这种情况下没有任何描述,所以你不需要创建任何额外的令牌,只需选择具有DESCRIPTION 的令牌,如 步骤 2 中所述.

    【讨论】:

    • 在步骤 1 中出现此错误:sed: -e expression #1, char 9: unknown option to `s'
    • 必须从命令中删除尾随的一对**,然后它才能工作
    【解决方案4】:

    以@Abhishek Jain 的回答为基础,这是一个在jq 的帮助下打印kubeadm join 命令的脚本:

    # get the join command from the kube master
    CERT_HASH=$(openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt \
    | openssl rsa -pubin -outform der 2>/dev/null \
    | openssl dgst -sha256 -hex \
    | sed 's/^.* //')
    TOKEN=$(kubeadm token list -o json | jq -r '.token' | head -1)
    IP=$(kubectl get nodes -lnode-role.kubernetes.io/master -o json \
    | jq -r '.items[0].status.addresses[] | select(.type=="InternalIP") | .address')
    PORT=6443
    echo "sudo kubeadm join $IP:$PORT \
    --token=$TOKEN --discovery-token-ca-cert-hash sha256:$CERT_HASH"
    

    【讨论】:

      【解决方案5】:

      如果您要加入控制平面节点,您还需要在命令中使用证书密钥:

      kubeadm token create \
      --print-join-command \
      --certificate-key \
      $(kubeadm alpha certs certificate-key)
      

      kubeadm alpha certs certificate-key 命令将根据文档here 按需生成新的证书密钥

      要加入工作节点,接受答案中给出的命令kubeadm token create --print-join-command就足够了

      【讨论】:

        【解决方案6】:

        在您的主节点机器上运行以下命令。

        kubeadm token create --print-join-command
        

        此命令将生成新令牌以及您可以在工作节点上使用的加入命令来加入集群。

        【讨论】:

          猜你喜欢
          • 2019-09-01
          • 2017-02-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-15
          • 2017-03-31
          • 2018-08-05
          • 2020-08-29
          相关资源
          最近更新 更多