• 03.部署 kubectl 命令行工具


    03.部署 kubectl 命令行工具

    kubectl 是 kubernetes 集群的命令行管理工具,本文档介绍安装和配置它的步骤。

    kubectl 默认从 ~/.kube/config 文件读取 kube-apiserver 地址、证书、用户名等信息,如果没有配置,执行 kubectl 命令时可能会出错:

    $ kubectl get pods
    The connection to the server localhost:8080 was refused - did you specify the right host or port?
    

    本文档只需要部署一次,生成的 kubeconfig 文件与机器无关。

    下载和分发 kubectl 二进制文件

    下载和解压:

    wget https://dl.k8s.io/v1.10.4/kubernetes-client-linux-amd64.tar.gz
    tar -xzvf kubernetes-client-linux-amd64.tar.gz
    

    分发到所有使用 kubectl 的节点:

    source /opt/k8s/bin/environment.sh
    for node_ip in ${NODE_IPS[@]}
      do
        echo ">>> ${node_ip}"
        scp kubernetes/client/bin/kubectl k8s@${node_ip}:/opt/k8s/bin/
        ssh k8s@${node_ip} "chmod +x /opt/k8s/bin/*"
      done
    

    创建 admin 证书和私钥

    kubectl 与 apiserver https 安全端口通信,apiserver 对提供的证书进行认证和授权。

    kubectl 作为集群的管理工具,需要被授予最高权限。这里创建具有最高权限的 admin 证书。

    创建证书签名请求:

    cat > admin-csr.json <<EOF
    {
      "CN": "admin",
      "hosts": [],
      "key": {
        "algo": "rsa",
        "size": 2048
      },
      "names": [
        {
          "C": "CN",
          "ST": "BeiJing",
          "L": "BeiJing",
          "O": "system:masters",
          "OU": "4Paradigm"
        }
      ]
    }
    EOF
    
    • O 为 system:masters,kube-apiserver 收到该证书后将请求的 Group 设置为 system:masters;
    • 预定义的 ClusterRoleBinding cluster-admin 将 Group system:masters 与 Role cluster-admin 绑定,该 Role 授予所有 API的权限;
    • 该证书只会被 kubectl 当做 client 证书使用,所以 hosts 字段为空;

    生成证书和私钥:

    cfssl gencert -ca=/etc/kubernetes/cert/ca.pem 
      -ca-key=/etc/kubernetes/cert/ca-key.pem 
      -config=/etc/kubernetes/cert/ca-config.json 
      -profile=kubernetes admin-csr.json | cfssljson -bare admin
    ls admin*
    

    创建 kubeconfig 文件

    kubeconfig 为 kubectl 的配置文件,包含访问 apiserver 的所有信息,如 apiserver 地址、CA 证书和自身使用的证书;

    source /opt/k8s/bin/environment.sh
    # 设置集群参数
    kubectl config set-cluster kubernetes 
      --certificate-authority=/etc/kubernetes/cert/ca.pem 
      --embed-certs=true 
      --server=${KUBE_APISERVER} 
      --kubeconfig=kubectl.kubeconfig
    
    # 设置客户端认证参数
    kubectl config set-credentials admin 
      --client-certificate=admin.pem 
      --client-key=admin-key.pem 
      --embed-certs=true 
      --kubeconfig=kubectl.kubeconfig
    
    # 设置上下文参数
    kubectl config set-context kubernetes 
      --cluster=kubernetes 
      --user=admin 
      --kubeconfig=kubectl.kubeconfig
    
    # 设置默认上下文
    kubectl config use-context kubernetes --kubeconfig=kubectl.kubeconfig
    
    • --certificate-authority:验证 kube-apiserver 证书的根证书;
    • --client-certificate--client-key:刚生成的 admin 证书和私钥,连接 kube-apiserver 时使用;
    • --embed-certs=true:将 ca.pem 和 admin.pem 证书内容嵌入到生成的 kubectl.kubeconfig 文件中(不加时,写入的是证书文件路径);

    分发 kubeconfig 文件

    分发到所有使用 kubectl 命令的节点:

    source /opt/k8s/bin/environment.sh
    for node_ip in ${NODE_IPS[@]}
      do
        echo ">>> ${node_ip}"
        ssh k8s@${node_ip} "mkdir -p ~/.kube"
        scp kubectl.kubeconfig k8s@${node_ip}:~/.kube/config
        ssh root@${node_ip} "mkdir -p ~/.kube"
        scp kubectl.kubeconfig root@${node_ip}:~/.kube/config
      done
    
    • 保存到用户的 ~/.kube/config 文件;



    链接:https://www.orchome.com/655
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
     
  • 相关阅读:
    使用代理加快SDK Manager的下载速度
    ADT-Bundle运行的错误的排错
    转:Android开发之JNI入门-NDK从入门到精通
    Android NDK的总总误解
    mysql 数据库 一些常用语句 查内存 索引内存
    递归方法 练习编写
    ES 搜索概述
    PHP 数字类型 加 减 乘 除运算 bc函数
    php 控制反转 和 依赖注入
    Thinkphp 3 和 Thinkphp5 区别
  • 原文地址:https://www.cnblogs.com/linux20190409/p/10976561.html
Copyright © 2020-2023  润新知