kubenetes 集群二进制安装之安装kubectl命令行工具 – 21运维
通知: .-...

kubenetes 集群二进制安装之安装kubectl命令行工具

K8S 21运维 16675浏览

文章记录下下载和配置 kubernetes 集群命令行工具 kubectl 的步骤,这个命令只需要在master节点安装就可以了。

这个工具在安装包里边就已经有了,我们需要下载对应版本里边的kubectl工具,本文记录的是kubenets 1.12.2版本。
一,下载安装包部署kubectl命令到master

 wget https://dl.k8s.io/v1.12.2/kubernetes-server-linux-amd64.tar.gz
tar  zxvf  kubernetes-server-linux-amd64.tar.gz
cp kubernetes/server/bin/kubectl  /usr/bin/
chmod  a+x  /usr/bin/kubectl

操作完成。

二,创建 kubectl kubeconfig 文件

export KUBE_APISERVER="https://10.1.14.21:6443"
# 设置集群参数
kubectl config set-cluster kubernetes \
  --certificate-authority=/etc/kubernetes/ssl/ca.pem \
  --embed-certs=true \
  --server=${KUBE_APISERVER}

# 设置客户端认证参数
kubectl config set-credentials admin \
  --client-certificate=/etc/kubernetes/ssl/admin.pem \
  --embed-certs=true \
  --client-key=/etc/kubernetes/ssl/admin-key.pem

# 设置上下文参数
kubectl config set-context kubernetes \
  --cluster=kubernetes \
  --user=admin

# 设置默认上下文
kubectl config use-context kubernetes

(1)admin.pem 证书 OU 字段值为 system:masters,kube-apiserver 预定义的 RoleBinding cluster-admin 将 Group system:masters 与 Role cluster-admin 绑定,该 Role 授予了调用kube-apiserver 相关 API 的权限;
(2)生成的 kubeconfig 被保存到 ~/.kube/config 文件。注意:~/.kube/config文件拥有对该集群的最高权限,请妥善保管。

三,创建 kubeconfig 文件
kubelet、kube-proxy 等 Node 机器上的进程与 Master 机器的 kube-apiserver 进程通信时需要认证和授权;kubernetes 1.4 开始支持由 kube-apiserver 为客户端生成 TLS 证书的 TLS Bootstrapping 功能,这样就不需要为每个客户端生成证书了;该功能当前仅支持为 kubelet 生成证书.
以下操作只需要在master节点上执行,生成的*.kubeconfig文件可以直接拷贝到node节点的/etc/kubernetes目录下。
1,创建 TLS Bootstrapping Token
Token可以是任意的包含128 bit的字符串,可以使用安全的随机数发生器生成。

export BOOTSTRAP_TOKEN=$(head -c 16 /dev/urandom | od -An -t x | tr -d ' ')
cat > token.csv < < EOF
${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,"system:kubelet-bootstrap"
EOF

由于编辑器的原因,这里的箭头有问题,需注意更改。
查看token.csv内容,如正常,则将其拷贝到/etc/kubernetes/目录下

[root@master01 ~]# cat  token.csv 
21dff4b6cf336cb6c132855d6f6b3931,kubelet-bootstrap,10001,"system:kubelet-bootstrap"
[root@master01 ~]# cp token.csv /etc/kubernetes/

注意:在进行后续操作前请检查 token.csv 文件,确认其中的 ${BOOTSTRAP_TOKEN} 环境变量已经被真实的值替换。

BOOTSTRAP_TOKEN 将被写入到 kube-apiserver 使用的 token.csv 文件和 kubelet 使用的 bootstrap.kubeconfig 文件,如果后续重新生成了 BOOTSTRAP_TOKEN,则需要:
更新 token.csv 文件,分发到所有机器 (master 和 node)的 /etc/kubernetes/ 目录下,分发到node节点上非必需;
重新生成 bootstrap.kubeconfig 文件,分发到所有 node 机器的 /etc/kubernetes/ 目录下;
重启 kube-apiserver 和 kubelet 进程;
重新 approve kubelet 的 csr 请求;

2,创建 kubelet bootstrapping.kubeconfig 文件

cd /etc/kubernetes
export KUBE_APISERVER="https://10.1.14.21:6443"

# 设置集群参数
kubectl config set-cluster kubernetes \
  --certificate-authority=/etc/kubernetes/ssl/ca.pem \
  --embed-certs=true \
  --server=${KUBE_APISERVER} \
  --kubeconfig=bootstrap.kubeconfig

# 设置客户端认证参数
kubectl config set-credentials kubelet-bootstrap \
  --token=${BOOTSTRAP_TOKEN} \
  --kubeconfig=bootstrap.kubeconfig

# 设置上下文参数
kubectl config set-context default \
  --cluster=kubernetes \
  --user=kubelet-bootstrap \
  --kubeconfig=bootstrap.kubeconfig

# 设置默认上下文
kubectl config use-context default --kubeconfig=bootstrap.kubeconfig

说明:
–embed-certs 为 true 时表示将 certificate-authority 证书写入到生成的 bootstrap.kubeconfig 文件中;
设置客户端认证参数时没有指定秘钥和证书,后续由 kube-apiserver 自动生成;

3,创建 kube-proxy kubeconfig 文件

export KUBE_APISERVER="https://10.1.14.21:6443"
# 设置集群参数
kubectl config set-cluster kubernetes \
  --certificate-authority=/etc/kubernetes/ssl/ca.pem \
  --embed-certs=true \
  --server=${KUBE_APISERVER} \
  --kubeconfig=kube-proxy.kubeconfig
# 设置客户端认证参数
kubectl config set-credentials kube-proxy \
  --client-certificate=/etc/kubernetes/ssl/kube-proxy.pem \
  --client-key=/etc/kubernetes/ssl/kube-proxy-key.pem \
  --embed-certs=true \
  --kubeconfig=kube-proxy.kubeconfig
# 设置上下文参数
kubectl config set-context default \
  --cluster=kubernetes \
  --user=kube-proxy \
  --kubeconfig=kube-proxy.kubeconfig
# 设置默认上下文
kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig

说明:
(1)设置集群参数和客户端认证参数时 –embed-certs 都为 true,这会将 certificate-authority、client-certificate 和 client-key 指向的证书文件内容写入到生成的 kube-proxy.kubeconfig 文件中;
(2)kube-proxy.pem 证书中 CN 为 system:kube-proxy,kube-apiserver 预定义的 RoleBinding cluster-admin 将User system:kube-proxy 与 Role system:node-proxier 绑定,该 Role 授予了调用 kube-apiserver Proxy 相关 API 的权限;

4,查看这几个kubeconfig文件并将其分发到其他node节点的 /etc/kubernetes/ 目录下

[root@master01 kubernetes]# ll  /etc/kubernetes/
total 16
-rw-------. 1 root root 2164 Nov 12 08:28 bootstrap.kubeconfig
-rw-------. 1 root root 6266 Nov 12 08:29 kube-proxy.kubeconfig
drwxr-xr-x. 2 root root  172 Nov 12 01:23 ssl
-rw-r--r--. 1 root root   84 Nov 12 08:20 token.csv

分发到node节点:

[root@master01 kubernetes]# for host in node01 node02 ;do  scp  /etc/kubernetes/*.kubeconfig   $host:/etc/kubernetes/ ;done

转载请注明:21运维 » kubenetes 集群二进制安装之安装kubectl命令行工具