这一篇是二进制部署高可用 K8s 集群系列的第三步,内容只有一件事:把所有节点上的 kubectl 命令行工具装好,并让它有权限访问 API Server。流程分五步:分发二进制、签 admin 证书、生成 kubeconfig、分发配置、验证。
下载和分发 kubectl 二进制
把下载好的二进制包上传到 Master1 节点,再拷贝到其他节点:
[root@k8s-master1 ~]# cd /opt/k8s/work
[root@k8s-master1 work]# tar -zxvf kubernetes-client-linux-amd64.tar.gz
kubernetes/
kubernetes/client/
kubernetes/client/bin/
kubernetes/client/bin/kubectl
kubernetes/client/bin/kubectl-convert
[root@k8s-master1 work]# for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
scp kubernetes/client/bin/kubectl root@${node_ip}:/opt/k8s/bin/
ssh root@${node_ip} "chmod +x /opt/k8s/bin/*"
done
创建 admin 证书和私钥
先创建证书签名请求,注意 O 字段是 system:masters,这决定了 admin 拥有集群最高权限:
[root@k8s-master1 ~]# cd /opt/k8s/work
[root@k8s-master1 work]# cat > admin-csr.json <<EOF
{
"CN": "admin",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "ShangHai",
"L": "ShangHai",
"O": "system:masters",
"OU": "dqz"
}
]
}
EOF
用前面生成的 CA 签发证书和私钥:
[root@k8s-master1 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-master1 work]# ls admin*
admin.csr admin-csr.json admin-key.pem admin.pem
创建 kubeconfig 文件
分四步:设置集群参数、客户端认证参数、上下文参数,最后把默认上下文切过去。其中 ${KUBE_APISERVER} 指向 API Server 的负载均衡地址(前面篇子里通过 HAProxy+Keepalived 提供):
[root@k8s-master1 work]# kubectl config set-cluster kubernetes
--certificate-authority=/opt/k8s/work/ca.pem
--embed-certs=true
--server=${KUBE_APISERVER}
--kubeconfig=kubectl.kubeconfig
[root@k8s-master1 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-master1 work]# kubectl config set-context kubernetes
--cluster=kubernetes
--user=admin
--kubeconfig=kubectl.kubeconfig
[root@k8s-master1 work]# kubectl config use-context kubernetes --kubeconfig=kubectl.kubeconfig
分发 kubeconfig 并验证
把配置发到所有 Master 和 Work 节点的 ~/.kube/config:
[root@k8s-master1 work]# for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
ssh root@${node_ip} "mkdir -p ~/.kube"
scp kubectl.kubeconfig root@${node_ip}:~/.kube/config
done
每个节点执行 kubectl --help 确认命令可用。再给所有节点配上命令补全:
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
注意事项
admin 证书没有绑定 hosts,属于高权限通用凭证,只放在自己管理的节点上;kubeconfig 分发后如果某个节点执行 kubectl 报证书错误,优先检查该节点时间同步和 ${KUBE_APISERVER} 变量是否和负载均衡 VIP 一致。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END















暂无评论内容