1. 程式人生 > >部署 kubectl 命令行工具

部署 kubectl 命令行工具

cal server 鏈接 admin env 上下文 設置 網絡 分享圖片

說明:本部署文章參照了 https://github.com/opsnull/follow-me-install-kubernetes-cluster ,歡迎給作者star

上一篇:創建 CA 證書和秘鑰

kubectl 是 kubernetes 集群的命令行管理工具,本文檔介紹安裝和配置它的步驟。

kubectl 默認從 ~/.kube/config 文件讀取 kube-apiserver 地址、證書、用戶名等信息,如果沒有配置,執行 kubectl 命令時可能會出錯:

$ kubectl get pods
The connection to the server localhost:8080 was refused - did you specify the right host or port?

註意:

  1. 如果沒有特殊指明,本文檔的所有操作均在 m7-autocv-gpu01 節點上執行,然後遠程分發文件和執行命令。
  2. 本文檔只需要部署一次,生成的 kubeconfig 文件是通用的,可以拷貝到需要執行 kubeclt 命令的機器上。

以下步驟在192.168.161.150上進行操作.

1.下載和分發 kubectl 二進制文件

下載和解壓:

cd /opt/k8s/work
wget https://dl.k8s.io/v1.12.3/kubernetes-client-linux-amd64.tar.gz
tar -xzvf kubernetes-client-linux-amd64.tar.gz

由於網絡原因:kubernetes-client-linux-amd64.tar.gz 可能不能下載,可以從以下地址下載

鏈接:https://pan.baidu.com/s/1NLCEl-_c6QjupbUgTqDpMw
提取碼:d0c6

分發到所有使用 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 [email protected]${node_ip}:/opt/k8s/bin/
    ssh [email protected]${node_ip} 
"chmod +x /opt/k8s/bin/*" done

2.創建 admin 證書和私鑰

kubectl 與 apiserver https 安全端口通信,apiserver 對提供的證書進行認證和授權。

kubectl 作為集群的管理工具,需要被授予最高權限。這裏創建具有最高權限的 admin 證書。

創建證書簽名請求:

cd /opt/k8s/work
cat > admin-csr.json <<EOF
{
  "CN": "admin",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "system:masters",
      "OU": "4Paradigm"
    }
  ]
}
EOF
  • O 為 system:masters,kube-apiserver 收到該證書後將請求的 Group 設置為 system:masters;
  • 預定義的 ClusterRoleBinding cluster-admin 將 Group system:masters 與 Role cluster-admin 綁定,該 Role 授予所有 API的權限;
  • 該證書只會被 kubectl 當做 client 證書使用,所以 hosts 字段為空;

生成證書和私鑰:

cd /opt/k8s/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
ls admin*

3.創建 kubeconfig 文件

kubeconfig 為 kubectl 的配置文件,包含訪問 apiserver 的所有信息,如 apiserver 地址、CA 證書和自身使用的證書;

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

# 設置客戶端認證參數
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

# 設置上下文參數
kubectl config set-context kubernetes   --cluster=kubernetes   --user=admin   --kubeconfig=kubectl.kubeconfig
  
# 設置默認上下文
kubectl config use-context kubernetes --kubeconfig=kubectl.kubeconfig

  • --certificate-authority:驗證 kube-apiserver 證書的根證書;
  • --client-certificate--client-key:剛生成的 admin 證書和私鑰,連接 kube-apiserver 時使用;
  • --embed-certs=true:將 ca.pem 和 admin.pem 證書內容嵌入到生成的 kubectl.kubeconfig 文件中(不加時,寫入的是證書文件路徑);

4.分發 kubeconfig 文件

分發到所有使用 kubectl 命令的節點:

cd /opt/k8s/work
source /opt/k8s/bin/environment.sh
for node_ip in ${NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    ssh [email protected]${node_ip} "mkdir -p ~/.kube"
    scp kubectl.kubeconfig [email protected]${node_ip}:~/.kube/config
  done
  • 保存到用戶的 ~/.kube/config 文件;

5.測試

選擇任意一節點,輸入

kubectl --help

技術分享圖片

部署 kubectl 命令行工具