风凉需暖心

导航

4.部署kubectl命令行工具

部署kubectl命令行工具

Kubectlkubernetes集群的命令行管理工具,kubectl默认从~/.kube/config文件读取kube-apiserver地址和认证信息,如果没有配置,执行kubectl命令时就会报错!Kubectl只需要部署一次,生成的kubeconfig文件是通用的,可以拷贝到需要执行kubectl命令的节点机器,重命名为~/.kube/config;这里我将kubectl节点之部署到三个master节点机器上,其他节点部署kubectl命令,也就是说,后续进行kubectl命令管理只能在master节点上操作,下面部署命令均在k8s-master01上执行,然后分发文件和执行命令。

如果没有部署kubectl工具,则执行时会报错说没有该命令

[root@k8s-master01 ~]# kubectl get pods

-bash: kubectl: command not found

1. 下载和分发kubectl二进制文件

安装包和文档放在一起

[root@k8s-master01 ~]# cd /opt/k8s/work

[root@k8s-master01 work]#wget https://dl.k8s.io/v1.14.2/kubernetes-client-linux-amd64.tar.gz

[root@k8s-master01 work]# tar -xzvf kubernetes-client-linux-amd64.tar.gz

分发到所有使用kubectl的节点,这里只分发到三个master节点

[root@k8s-master01 work]# cd /opt/k8s/work

[root@k8s-master01 work]# source /opt/k8s/bin/environment.sh

[root@k8s-master01 work]# for node_master_ip in ${NODE_MASTER_IPS[@]}

do

  echo ">>> ${node_master_ip}"

  scp kubernetes/client/bin/kubectl root@${node_master_ip}:/opt/k8s/bin/

  ssh root@${node_master_ip} "chmod +x /opt/k8s/bin/*"

done

 

2.创建admin证书和私钥

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

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

创建证书签名请求

[root@k8s-master01 work]# cd /opt/k8s/work

[root@k8s-master01 work]# cat > ca-csr.json <<EOF

{

  "CN": "kubernetes",

  "key": {

    "algo": "rsa",

    "size": 2048

  },

  "names": [

    {

      "C": "CN",

      "ST": "BeiJing",

      "L": "BeiJing",

      "O": "k8s",

      "OU": "4Paradigm"

    }

  ]

}

EOF

配置说明:

Osystemmasterskube-apiserver收到该证书后请求的Group设置为system:masters

预定义的ClusterRoleBinding cluster-admin Group systemmastersRole cluster-admin绑定,该Role授予所有API的权限;

该证书只会被kubectl当做client证书使用,所以hosts字段为空;

生成证书和私钥

[root@k8s-master01 work]# cd /opt/k8s/work

[root@k8s-master01 work]# cfssl gencert -ca=/opt/k8s/work/ca.pem \

  -ca-key=/opt/k8s/work/ca-key.pem \

  -config=/opt/k8s/work/ca-config.json \

  -profile=kubernetes admin-csr.json | cfssljson -bare admin

  

[root@k8s-master01 work]# ls admin*

admin.csr  admin-csr.json  admin-key.pem  admin.pem

3. 创建 kubeconfig 文件

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

[root@k8s-master01 work]# cd /opt/k8s/work

[root@k8s-master01 work]# source /opt/k8s/bin/environment.sh

  

设置集群参数

[root@k8s-master01 work]# kubectl config set-cluster kubernetes \

  --certificate-authority=/opt/k8s/work/ca.pem \

  --embed-certs=true \

  --server=${KUBE_APISERVER} \

  --kubeconfig=kubectl.kubeconfig

设置客户端认证参数

[root@k8s-master01 work]#kubectl config set-credentials admin \

  --client-certificate=/opt/k8s/work/admin.pem \

  --client-key=/opt/k8s/work/admin-key.pem \

  --embed-certs=true \

  --kubeconfig=kubectl.kubeconfig

设置上下文参数

[root@k8s-master01 work]# kubectl config set-context kubernetes \

  --cluster=kubernetes \

  --user=admin \

  --kubeconfig=kubectl.kubeconfig

  

设置默认上下文

[root@k8s-master01 work]# kubectl config use-context kubernetes --kubeconfig=kubectl.kubeconfig

配置说明

--certificate-authority:验证kube-apiserver证书的根证书:

--client-certificate --client-key:刚生成的admin证书和私钥,连接kube-apiserver时使用

--embed-certs=true:将ca.pemadmin.pem证书内容嵌入到生成的kubectl.kubeconfig文件中(不加时,写入的时证书文件路径,续拷贝kubeconfig到其他机器时,还需要单独拷贝证书文件,这很不方便)

分发kubeconfig文件,保存的文件名为~/.kube/config

发到所有使用kubectl命令的节点,即分发到三个master节点上

[root@k8s-master01 work]# cd /opt/k8s/work

[root@k8s-master01 work]# source /opt/k8s/bin/environment.sh

[root@k8s-master01 work]# for node_master_ip in ${NODE_MASTER_IPS[@]}

do

  echo ">>> ${node_master_ip}"

  ssh root@${node_master_ip} "mkdir -p ~/.kube"

  scp kubectl.kubeconfig root@${node_master_ip}:~/.kube/config

done

 

posted on 2021-06-25 10:58  风凉需暖心  阅读(715)  评论(0编辑  收藏  举报