文章记录下下载和配置 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命令行工具