繼續部署。linux
3、kubernetes 二進制文件下載git
[k8s@k8s-m1 ~]$ mkdir -p /home/k8s/k8s/v1.11.2/server && cd /home/k8s/k8s/v1.11.2/server
[k8s@k8s-m1 server] wget https://dl.k8s.io/v1.11.2/kubernetes-server-linux-amd64.tar.gz
[k8s@k8s-m1 server] tar zxvf kubernetes-server-linux-amd64.tar.gz
3.2 部署kubectlgithub
kubectl是kubernetes集羣的命令行管理工具。默認從~/.kube/config文件讀取kube-apiserver地址、證書、用戶名等信息,若是沒有配置,執行命令的時候可能會出錯json
解壓二進制文件包 kubernetes-server-linux-amd64.tar.gzbootstrap
3.3 分發到全部使用kubectl的master節點api
[k8s@k8s-m1 server]$ source /opt/k8s/bin/environment.sh
[k8s@k8s-m1 server]$ for master_ip in ${MASTER_IPS[@]} do echo ">>> ${master_ip}" scp ~/k8s/v1.11.2/server/kubernetes/server/bin/kubectl k8s@${master_ip}:/opt/k8s/bin/ ssh k8s@${master_ip} "chmod +x /opt/k8s/bin/*" done
3.4 建立admin證書和私鑰安全
kubectl與apiserver https安全端口通訊,apiserver對提供的證書進行認證和受權app
kubectl做爲集羣的管理工具,須要被授予最高權限。這裏建立具備最高權限的admin證書。ssh
建立admin證書籤名請求文件工具
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
注意:這個admin證書是未來生成管理員用的kube config配置文件用的,如今咱們通常建議使用RBAC來對kubernetes進行角色權限控制,kubernetes將證書中的CN字段做爲User,O字段做爲Group
在搭建完 kubernetes 集羣后,咱們能夠經過命令: kubectl get clusterrolebinding cluster-admin -o yaml ,查看到 clusterrolebinding cluster-admin 的 subjects 的 kind 是 Group,name 是 system:masters。 roleRef 對象是 ClusterRole cluster-admin。 意思是凡是 system:masters Group 的 user 或者 serviceAccount 都擁有 cluster-admin 的角色。 所以咱們在使用 kubectl 命令時候,才擁有整個集羣的管理權限。可使用 kubectl get clusterrolebinding cluster-admin -o yaml 來查看。
$ kubectl get clusterrolebinding cluster-admin -o yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
annotations:
rbac.authorization.kubernetes.io/autoupdate: "true"
creationTimestamp: 2017-04-11T11:20:42Z
labels:
kubernetes.io/bootstrapping: rbac-defaults
name: cluster-admin
resourceVersion: "52"
selfLink: /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/cluster-admin
uid: e61b97b2-1ea8-11e7-8cd7-f4e9d49f8ed0
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: system:masters
3.5 生成證書和私鑰
[k8s@k8s-m1 cert]$ cfssl gencert -ca=/etc/kubernetes/cert/ca.pem \
-ca-key=/etc/kubernetes/cert/ca-key.pem \ -config=/etc/kubernetes/cert/ca-config.json \ -profile=kubernetes admin-csr.json | cfssljson -bare admin
[k8s@k8s-m1 cert]$ ls admin*
3.6 建立kubeconfig文件
kubeconfig爲kubectl的配置文件,包含訪問apiserver的全部信息,如apiserver的地址、CA證書和自身使用的證書
source /opt/k8s/bin/environment.sh
# 設置集羣參數
kubectl config set-cluster kubernetes \ --certificate-authority=/etc/kubernetes/cert/ca.pem \ --embed-certs=true \ --server=${KUBE_APISERVER} \ --kubeconfig=kubectl.kubeconfig # 設置客戶端認證參數 kubectl config set-credentials admin \ --client-certificate=admin.pem \ --client-key=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
3.7 分發kubeconfig文件
分發到全部使用kubectl的節點,保存到用戶的~/.kube/config
source /opt/k8s/bin/environment.sh
for master_ip in ${MASTER_IPS[@]}
do
echo ">>> ${master_ip}"
ssh k8s@${master_ip} "mkdir -p ~/.kube"
scp kubectl.kubeconfig k8s@${master_ip}:~/.kube/config ssh root@${master_ip} "mkdir -p ~/.kube" scp kubectl.kubeconfig root@${master_ip}:~/.kube/config done