部署环境
IP地址 | 主机名 | 功能 |
---|---|---|
10.1.104.200 | k8s-deploy | 部署节点,不承担实际作用 |
10.1.104.201 | k8s-master01 | master节点 |
10.1.104.202 | k8s-master02 | master节点 |
10.1.104.203 | k8s-master03 | master节点 |
10.1.104.204 | k8s-nginx | 负载均衡节点,实际生产中应为HA架构 |
10.1.104.205 | k8s-node01 | node节点 |
10.1.104.206 | k8s-node02 | node节点 |
10.1.104.207 | k8s-node03 | node节点 |
部署kubectl命令行工具
kubectl是用户与apiserver交互的工具,其配置文件位于~/.kube/config;一般而言,~/.kube/config配置文件是通用的,将其复制到其他节点上即可使用。
部署kubectl工具及分发到各节点(k8s-deploy):
下载并解压kubernetes-client-linux:
cd /opt/k8s/work
wget http://download.wenjun1984.cn/Kubernetes/Kubernetes/1.14/kubernetes-client-linux-amd64.tar.gz
tar -xzvf kubernetes-client-linux-amd64.tar.gz
将kubectl文件分发到各节点:
cd /opt/k8s/work
source /opt/k8s/bin/environment.sh
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
- 可以允许所有节点都使用kubectl命令,也可以仅允许master节点使用kubectl命令,方法是替换${NODE_IPS[@]}为${NODE_MASTER_IPS[@]}。
将kubectl文件分发到k8s-deploy的本地工作路径:
cp /opt/k8s/work/kubernetes/client/bin/kubectl /opt/k8s/bin/
export PATH=/opt/k8s/bin:$PATH
创建admin证书和私钥(k8s-deploy)
kubectl需要与apiserver进行通信,因此需要对其使用的用户进行认证与授权。
创建admin的证书签名请求:
cd /opt/k8s/work
source /opt/k8s/bin/environment.sh
cat > admin-csr.json << EOF
{
"CN": "admin",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "Shanghai",
"L": "Shanghai",
"O": "system:masters",
"OU": "ops"
}
]
}
EOF
- O,必须为system:master,预定义的 ClusterRoleBinding将system:masters与cluster-admin绑定,该Role授予所有 API的权限。
- 该证书只会被kubectl当做client证书使用,所以hosts字段为空。
通过CA生成admin证书和私钥,结构如下图:
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
创建kubeconfig文件(k8s-deploy):
设置集群参数:
cd /opt/k8s/work
source /opt/k8s/bin/environment.sh
kubectl config set-cluster kubernetes \
--certificate-authority=/opt/k8s/work/ca.pem \
--embed-certs=true \
--server=${KUBE_APISERVER} \
--kubeconfig=kubectl.kubeconfig
- 其变量KUBE_APISERVER为apiserver的监听地址(高可用的vip),确保其正确。
创建admin名用户,其名称必须与证书名称相同:
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
配置上下文参数,使用admin用户:
kubectl config set-context kubernetes \
--cluster=kubernetes \
--user=admin \
--kubeconfig=kubectl.kubeconfig
设置默认上下文:
kubectl config use-context kubernetes --kubeconfig=kubectl.kubeconfig
分发kubeconfig到各节点(k8s-deploy):
将生成的kubectl.kubeconfig分发到对应的节点:
cd /opt/k8s/work
source /opt/k8s/bin/environment.sh
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
在每个对应节点上执行查看命令,确保每个节点下指定路径中有config文件:
ll /root/.kube/config
文档更新时间: 2020-10-22 15:55 作者:闻骏