美文网首页Linux系统工程师Linux我用 Linux
Kubernetes.的node节点组件部署

Kubernetes.的node节点组件部署

作者: 小短腿电工 | 来源:发表于2019-03-19 07:10 被阅读12次

    第七节在Node节点部署组件

    Master apiserver启用TLS认证后,Node节点kubelet组件想要加入集群,必须使用CA签发的有效证书才能与apiserver通信,当Node节点很多时,签署证书是一件很繁琐的事情,因此有了TLS Bootstrapping机制,kubelet会以一个低权限用户自动向apiserver申请证书,kubelet的证书由apiserver动态签署。

    认证大致工作流程如图所示:

    图片.png

    1 将kubelet-bootstrap用户绑定到系统集群角色

    kubectl create clusterrolebinding kubelet-bootstrap \
      --clusterrole=system:node-bootstrapper \
      --user=kubelet-bootstrap
    

    创建kubeconfig文件

    在生成kubernetes证书的目录下执行以下命令生成kubeconfig文件:

    # 创建kubelet bootstrapping kubeconfig 
    BOOTSTRAP_TOKEN=674c457d4dcf2eefe4920d7dbb6b0ddc
    KUBE_APISERVER="https://192.168.31.63:6443"
    

    设置集群参数

    kubectl config set-cluster kubernetes \
      --certificate-authority=./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
    
    #----------------------
    
    # 创建kube-proxy kubeconfig文件
    
    kubectl config set-cluster kubernetes \
      --certificate-authority=./ca.pem \
      --embed-certs=true \
      --server=${KUBE_APISERVER} \
      --kubeconfig=kube-proxy.kubeconfig
    
    kubectl config set-credentials kube-proxy \
      --client-certificate=./kube-proxy.pem \
      --client-key=./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
    # ls
    bootstrap.kubeconfig  kube-proxy.kubeconfig
    将这两个文件拷贝到Node节点/opt/kubernetes/cfg目录下。
    

    2 部署kubelet组件

    将前面下载的二进制包中的kubelet和kube-proxy拷贝到/opt/kubernetes/bin目录下。

    创建kubelet配置文件:

    # cat /opt/kubernetes/cfg/kubelet
    KUBELET_OPTS="--logtostderr=true \
    --v=4 \
    --hostname-override=192.168.31.65 \
    --kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig \
    --bootstrap-kubeconfig=/opt/kubernetes/cfg/bootstrap.kubeconfig \
    --config=/opt/kubernetes/cfg/kubelet.config \
    --cert-dir=/opt/kubernetes/ssl \
    --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0"
    

    参数说明:

    • —hostname-override 在集群中显示的主机名
      —kubeconfig 指定kubeconfig文件位置,会自动生成
      —bootstrap-kubeconfig 指定刚才生成的bootstrap.kubeconfig文件
      —cert-dir 颁发证书存放位置
      —pod-infra-container-image 管理Pod网络的镜像

    其中/opt/kubernetes/cfg/kubelet.config配置文件如下:

    kind: KubeletConfiguration
    apiVersion: kubelet.config.k8s.io/v1beta1
    address: 192.168.31.65
    port: 10250
    readOnlyPort: 10255
    cgroupDriver: cgroupfs
    clusterDNS: ["10.0.0.2"]
    clusterDomain: cluster.local.
    failSwapOn: false
    authentication:
      anonymous:
        enabled: true
    systemd管理kubelet组件:
    
    # cat /usr/lib/systemd/system/kubelet.service 
    [Unit]
    Description=Kubernetes Kubelet
    After=docker.service
    Requires=docker.service
    
    [Service]
    EnvironmentFile=/opt/kubernetes/cfg/kubelet
    ExecStart=/opt/kubernetes/bin/kubelet $KUBELET_OPTS
    Restart=on-failure
    KillMode=process
    
    [Install]
    WantedBy=multi-user.target
    

    启动kubelet:

    # systemctl daemon-reload
    # systemctl enable kubelet
    # systemctl restart kubelet
    

    在Master审批Node加入集群:

    启动后还没加入到集群中,需要手动允许该节点才可以。
    在Master节点查看请求签名的Node:

    # kubectl get csr
    # kubectl certificate approve XXXX
    # kubectl get node
    

    3 部署kube-proxy组件

    创建kube-proxy配置文件:

    # cat /opt/kubernetes/cfg/kube-proxy
    KUBE_PROXY_OPTS="--logtostderr=true \
    --v=4 \
    --hostname-override=192.168.31.65 \
    --cluster-cidr=10.0.0.0/24 \
    --kubeconfig=/opt/kubernetes/cfg/kube-proxy.kubeconfig"
    

    systemd管理kube-proxy组件:

    # cat /usr/lib/systemd/system/kube-proxy.service 
    [Unit]
    Description=Kubernetes Proxy
    After=network.target
    
    [Service]
    EnvironmentFile=-/opt/kubernetes/cfg/kube-proxy
    ExecStart=/opt/kubernetes/bin/kube-proxy $KUBE_PROXY_OPTS
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    

    启动kube-proxy:

    # systemctl daemon-reload
    # systemctl enable kube-proxy
    # systemctl restart kube-proxy
    Node2部署方式一样。
    

    查看集群状态

    # kubectl get node
    NAME             STATUS    ROLES     AGE       VERSION
    192.168.31.65   Ready     <none>    1d       v1.12.0
    192.168.31.66   Ready     <none>    1d       v1.12.0
    # kubectl get cs
    NAME                 STATUS    MESSAGE             ERROR
    controller-manager   Healthy   ok                  
    scheduler            Healthy   ok                  
    etcd-2               Healthy   {"health":"true"}   
    etcd-1               Healthy   {"health":"true"}   
    etcd-0               Healthy   {"health":"true"}
    

    运行一个测试示例

    创建一个Nginx Web,测试集群是否正常工作:
    
    # kubectl run nginx --image=nginx --replicas=3
    # kubectl expose deployment nginx --port=88 --target-port=80 --type=NodePort
    查看Pod,Service:
    
    # kubectl get pods
    NAME                     READY     STATUS    RESTARTS   AGE
    nginx-64f497f8fd-fjgt2   1/1       Running   3          1d
    nginx-64f497f8fd-gmstq   1/1       Running   3          1d
    nginx-64f497f8fd-q6wk9   1/1       Running   3          1d
    # kubectl get svc
    NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                        AGE
    kubernetes   ClusterIP   10.0.0.1     <none>        443/TCP                        28d
    nginx        NodePort    10.0.0.175   <none>        88:38696/TCP                   28d
    

    访问集群中部署的Nginx,打开浏览器输入:http://192.168.31.66:38696 ,看到以下界面说明部署成功

    图片.png

    相关文章

      网友评论

        本文标题:Kubernetes.的node节点组件部署

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