美文网首页
kubernetes高可用集群部署 - 3. kubectl工具

kubernetes高可用集群部署 - 3. kubectl工具

作者: 殷临风 | 来源:发表于2017-09-28 15:15 被阅读4820次

    kubectlk8s集群的命令行工具, 基本上整个集群的运维操作都靠它, 所以需要事先配置好它

    1. k8s运行环境配置

    # 下载k8s相关的二进制包解压
    wget https://dl.k8s.io/v1.6.1/kubernetes-server-linux-amd64.tar.gz
    tar -xzvf kubernetes-server-linux-amd64.tar.gz
    
    # 里面还有一层压缩包
    cd kubernetes
    tar -xzvf kubernetes-src.tar.gz
    
    # 将相关的工具复制到指定目录
    mkdir -p /opt/k8s/bin
    cp -r server/bin/{kube-apiserver,kube-controller-manager,kube-scheduler,kubelet,kube-proxy,kubectl} /opt/k8s/bin/
    
    # 设置环境变量, 底部追加
    vi /etc/profile
    ##############################################
    export PATH=$PATH:/opt/k8s/bin
    ##############################################
    
    # 使之生效
    source /etc/profile
    

    Master只需要启动3个服务, 分别为kube-apiserver, kube-controller-manager, kube-scheduler
    Node只需要启动2个服务, 分别为kubelet, kube-proxy

    2. 创建kubectl kubeconfig文件
    mkdir -p /etc/kubernetes
    cd /etc/kubernetes
    export KUBE_APISERVER="https://192.168.1.88:6443"
    
    # 设置集群参数
    kubectl config set-cluster kubernetes \
      --certificate-authority=/etc/kubernetes/ssl/ca.pem \
      --embed-certs=true \
      --server=${KUBE_APISERVER}
    
    # 设置客户端认证参数
    kubectl config set-credentials admin \
      --client-certificate=/etc/kubernetes/ssl/admin.pem \
      --embed-certs=true \
      --client-key=/etc/kubernetes/ssl/admin-key.pem
    
    # 设置上下文参数
    kubectl config set-context kubernetes \
      --cluster=kubernetes \
      --user=admin
    
    # 设置默认上下文
    kubectl config use-context kubernetes
    
    • KUBE_APISERVER 这里指定SLB的地址, 因为我们是通过SLB来请求masterkube-apiserver.
    • admin.pem 证书 OU 字段值为 system:masterskube-apiserver 预定义的 RoleBinding cluster-adminGroup system:mastersRole cluster-admin 绑定,该 Role 授予了调用kube-apiserver 相关 API 的权限;
    • 生成的 kubeconfig 被保存到 ~/.kube/config 文件;

    可以将~/.kube/config文件复制到其他用户目录下, 这样其他用户也可以使用kubectl命令了

    3. 创建TLS Bootstrapping Token
    cd /etc/kubernetes
    # 随机生成token值
    export BOOTSTRAP_TOKEN=$(head -c 16 /dev/urandom | od -An -t x | tr -d ' ')
    # 写入文件
    tee token.csv << EOF
    ${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,"system:kubelet-bootstrap"
    EOF
    

    尽量不要更新BOOTSTRAP_TOKEN值, 如果要更新, kube-apiserver使用的token.csv文件和kubelet使用的bootstrap.kubeconfig文件都需要更新, 更新后还需要重启kube-apiserverkube-proxy服务

    4. 创建kubelet bootstrapping kubeconfig文件
    cd /etc/kubernetes
    # 设置集群参数
    kubectl config set-cluster kubernetes \
      --certificate-authority=/etc/kubernetes/ssl/ca.pem \
      --embed-certs=true \
      --server=${KUBE_APISERVER} \
      --kubeconfig=bootstrap.kubeconfig
    
    # 设置客户端认证参数
    kubectl config set-credentials kubelet-bootstrap \
      --token=${BOOTSTRAP_TOKEN} \
      --kubeconfig=bootstrap.kubeconfig
    
    # 设置上下文参数
    kubectl config set-context default \
      --cluster=kubernetes \
      --user=kubelet-bootstrap \
      --kubeconfig=bootstrap.kubeconfig
    
    # 设置默认上下文
    kubectl config use-context default --kubeconfig=bootstrap.kubeconfig
    

    --embed-certstrue时, 表示将certificate-authority证书写入到生成的bootstrap.kubeconfig文件中;

    5. 创建kube-proxy kubeconfig文件
    cd /etc/kubernetes
    # 设置集群参数
    kubectl config set-cluster kubernetes \
      --certificate-authority=/etc/kubernetes/ssl/ca.pem \
      --embed-certs=true \
      --server=${KUBE_APISERVER} \
      --kubeconfig=kube-proxy.kubeconfig
    
    # 设置客户端认证参数
    kubectl config set-credentials kube-proxy \
      --client-certificate=/etc/kubernetes/ssl/kube-proxy.pem \
      --client-key=/etc/kubernetes/ssl/kube-proxy-key.pem \
      --embed-certs=true \
      --kubeconfig=kube-proxy.kubeconfig
    
    # 设置上下文参数
    kubectl config set-context default \
      --cluster=kubernetes \
      --user=kube-proxy \
      --kubeconfig=kube-proxy.kubeconfig
    
    # 设置默认上下文
    kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig
    
    • 设置集群参数和客户端认证参数时 --embed-certs 都为 true,这会将 certificate-authority、client-certificate 和 client-key 指向的证书文件内容写入到生成的 kube-proxy.kubeconfig 文件中;
    • kube-proxy.pem 证书中 CN 为 system:kube-proxy,kube-apiserver 预定义的 RoleBinding cluster-admin 将User system:kube-proxy 与 Role system:node-proxier 绑定,该 Role 授予了调用 kube-apiserver Proxy 相关 API 的权限;
    6. 分发kubeconfig文件

    如果一切顺利的话, 在/etc/kubernetes文件夹和用户文件夹可以看到这些

    ll ~/.kube
    
    ll /etc/kubernetes
    

    确定无误之后

    • token.csv复制到其他master相对应的/etc/kubernetes中, 供kube-apiserver使用;
    • bootstrap.kubeconfigkube-proxy.kubeconfig复制到其他node节点的/etc/kubernetes中, 供kubelekube-proxy使用
    • ~/.kube/config复制到任意想使用kubectl命令行工具的服务器中

    高可用部署系列

    Kubernetes高可用集群部署 - 1. 生成证书
    Kubernetes高可用集群部署 - 2. ETCD集群
    -> Kubernetes高可用集群部署 - 3. kubectl工具配置
    Kubernetes高可用集群部署 - 4. master集群
    Kubernetes高可用集群部署 - 5. node集群
    Kubernetes高可用集群部署 - 6. DNS配置

    相关服务

    Kubernetes配置secret拉取私仓镜像
    Kubernetes目录挂载
    Kubernetes Ingress使用
    Kubernetes限制pod的cpu和内存
    Helm部署Kubernetes应用
    Kubernetes监控(Heapster)
    Kubernetes监控(coreos/prometheus-operator)

    相关文章

      网友评论

          本文标题:kubernetes高可用集群部署 - 3. kubectl工具

          本文链接:https://www.haomeiwen.com/subject/fvrmextx.html