部署 kubectl 命令行工具
阿新 • • 發佈:2019-05-13
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?
註意:
- 如果沒有特殊指明,本文檔的所有操作均在 m7-autocv-gpu01 節點上執行,然後遠程分發文件和執行命令。
- 本文檔只需要部署一次,生成的 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
將 Groupsystem:masters
與 Rolecluster-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 命令行工具