文章记录下下载和配置 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/目录下
[[email protected] ~]# cat token.csv
21dff4b6cf336cb6c132855d6f6b3931,kubelet-bootstrap,10001,"system:kubelet-bootstrap"
[[email protected] ~]# 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/ 目录下
[[email protected] 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节点:
[[email protected] kubernetes]# for host in node01 node02 ;do scp /etc/kubernetes/*.kubeconfig $host:/etc/kubernetes/ ;done