部署环境


IP地址 主机名 功能
10.1.32.230 k8s-deploy-test 部署节点,不承担实际作用
10.1.32.231 k8s-master-test01 master节点
10.1.32.232 k8s-master-test02 master节点
10.1.32.233 k8s-master-test03 master节点
10.1.32.240 k8s-nginx-test 负载均衡节点,实际生产中应为HA架构
10.1.32.234 k8s-node01-test01 node节点
10.1.32.235 k8s-node02-test02 node节点
10.1.32.236 k8s-node03-test03 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.18/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
文档更新时间: 2021-09-02 17:22   作者:闻骏