k8s v1.9.9 二进制部署高可用(3)部署kubectl命令行工具

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

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

下载和分发 kubectl 二进制文件

cd /root/work
wget https://dl.k8s.io/v1.9.9/kubernetes-server-linux-amd64.tar.gz
tar zxvf kubernetes-server-linux-amd64.tar.gz
#分发到需要使用 kubectl 的master节点:
cp kubernetes/server/bin/kubectl /usr/bin
scp kubernetes/server/bin/kubectl root@10.0.0.11:/usr/bin
scp kubernetes/server/bin/kubectl root@10.0.0.12:/usr/bin

创建 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=/root/work/ca.pem 
  -ca-key=/root/work/ca-key.pem 
  -config=/root/work/ca-config.json 
  -profile=kubernetes admin-csr.json | cfssljson -bare admin
ls admin*

创建 kubeconfig 文件

kubeconfig 为 kubectl 的配置文件,包含访问 apiserver 的所有信息,如 apiserver 地址、CA 证书和自身使用的证书;
https://10.0.0.252:8443 后续apiserver的vip地址


# 设置集群参数
$kubectl config set-cluster kubernetes 
  --certificate-authority=/root/work/ca.pem 
  --embed-certs=true 
  --server=https://10.0.0.252:8443 
  --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 文件到所有master,并保存到用户的 ~/.kube/config 文件

mkdir -p ~/.kube #所有节点执行
scp kubectl.kubeconfig root@10.0.0.10:~/.kube/config
scp kubectl.kubeconfig root@10.0.0.11:~/.kube/config
scp kubectl.kubeconfig root@10.0.0.12:~/.kube/config

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?
原文地址:https://www.cnblogs.com/you-xiaoqing/p/14410967.html