03. 安装和配置 kubectl

    注意:

    1. 如果没有特殊指明,本文档的所有操作均在 zhangjun-k8s-01 节点上执行
    2. 本文档只需要部署一次,生成的 kubeconfig 文件是通用的,可以拷贝到需要执行 kubectl 命令的机器的 位置;

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

    1. cd /opt/k8s/work
    2. source /opt/k8s/bin/environment.sh
    3. for node_ip in ${NODE_IPS[@]}
    4. do
    5. echo ">>> ${node_ip}"
    6. ssh root@${node_ip} "chmod +x /opt/k8s/bin/*"
    7. done

    kubectl 后续用于集群管理,所以这里创建具有最高权限的 admin 证书。

    创建证书签名请求:

    • O: system:masters:kube-apiserver 收到使用该证书的客户端请求后,为请求添加组(Group)认证标识 system:masters
    • 预定义的 ClusterRoleBinding cluster-admin 将 Group 与 Role cluster-admin 绑定,该 Role 授予操作集群所需的最高权限;
    • 该证书只会被 kubectl 当做 client 证书使用,所以 hosts 字段为空;
    1. cd /opt/k8s/work
    2. cfssl gencert -ca=/opt/k8s/work/ca.pem \
    3. -ca-key=/opt/k8s/work/ca-key.pem \
    4. -config=/opt/k8s/work/ca-config.json \
    5. -profile=kubernetes admin-csr.json | cfssljson -bare admin
    6. ls admin*

    kubectl 使用 kubeconfig 文件访问 apiserver,该文件包含 kube-apiserver 的地址和认证信息(CA 证书和客户端证书):

    • --certificate-authority:验证 kube-apiserver 证书的根证书;
    • --client-certificate、:刚生成的 admin 证书和私钥,与 kube-apiserver https 通信时使用;
    • --embed-certs=true:将 ca.pem 和 admin.pem 证书内容嵌入到生成的 kubectl.kubeconfig 文件中(否则,写入的是证书文件路径,后续拷贝 kubeconfig 到其它机器时,还需要单独拷贝证书文件,不方便。);
    • --server:指定 kube-apiserver 的地址,这里指向第一个节点上的服务;

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

    1. cd /opt/k8s/work
    2. source /opt/k8s/bin/environment.sh
    3. for node_ip in ${NODE_IPS[@]}
    4. do
    5. echo ">>> ${node_ip}"
    6. ssh root@${node_ip} "mkdir -p ~/.kube"
    7. scp kubectl.kubeconfig root@${node_ip}:~/.kube/config