Kubernetes.的master节点组件部署

作者: 小短腿电工 | 来源:发表于2019-03-18 19:24 被阅读11次

    第六节Master节点部署组件

    • 前提
      在部署Kubernetes之前一定要确保etcd、flannel、docker是正常工作的,否则先解决问题再继续。

    1 生成证书

    创建CA证书:

    # cat ca-config.json
    {
      "signing": {
        "default": {
          "expiry": "87600h"
        },
        "profiles": {
          "kubernetes": {
             "expiry": "87600h",
             "usages": [
                "signing",
                "key encipherment",
                "server auth",
                "client auth"
            ]
          }
        }
      }
    }
    
    # cat ca-csr.json
    {
        "CN": "kubernetes",
        "key": {
            "algo": "rsa",
            "size": 2048
        },
        "names": [
            {
                "C": "CN",
                "L": "Beijing",
                "ST": "Beijing",
                "O": "k8s",
                "OU": "System"
            }
        ]
    }
    # cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
    

    生成apiserver证书:

    # cat server-csr.json
    {
        "CN": "kubernetes",
        "hosts": [
          "10.0.0.1",
          "127.0.0.1",
          "192.168.31.63",
          "kubernetes",
          "kubernetes.default",
          "kubernetes.default.svc",
          "kubernetes.default.svc.cluster",
          "kubernetes.default.svc.cluster.local"
        ],
        "key": {
            "algo": "rsa",
            "size": 2048
        },
        "names": [
            {
                "C": "CN",
                "L": "BeiJing",
                "ST": "BeiJing",
                "O": "k8s",
                "OU": "System"
            }
        ]
    }
    cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes server-csr.json | cfssljson -bare server
    生成kube-proxy证书:
    
    # cat kube-proxy-csr.json
    {
      "CN": "system:kube-proxy",
      "hosts": [],
      "key": {
        "algo": "rsa",
        "size": 2048
      },
      "names": [
        {
          "C": "CN",
          "L": "BeiJing",
          "ST": "BeiJing",
          "O": "k8s",
          "OU": "System"
        }
      ]
    }
    
    # cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy
    最终生成以下证书文件:
    

    ls *pem

    ca-key.pem  ca.pem  kube-proxy-key.pem  kube-proxy.pem  server-key.pem  server.pem
    

    2 部署apiserver组件

    下载二进制包:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.12.md

    下载这个包(kubernetes-server-linux-amd64.tar.gz)就够了,包含了所需的所有组件。

    # mkdir /opt/kubernetes/{bin,cfg,ssl} -p
    # tar zxvf kubernetes-server-linux-amd64.tar.gz
    # cd kubernetes/server/bin
    # cp kube-apiserver kube-scheduler kube-controller-manager kubectl /opt/kubernetes/bin
    创建token文件,用途后面会讲到:
    
    # cat /opt/kubernetes/cfg/token.csv
    674c457d4dcf2eefe4920d7dbb6b0ddc,kubelet-bootstrap,10001,"system:kubelet-bootstrap"
    
    • 第一列:随机字符串,自己可生成
    • 第二列:用户名
    • 第三列:UID
    • 第四列:用户组

    创建apiserver配置文件:

    # cat /opt/kubernetes/cfg/kube-apiserver 
    
    KUBE_APISERVER_OPTS="--logtostderr=true \
    --v=4 \
    --etcd-servers=https://192.168.31.63:2379,https://192.168.31.65:2379,https://192.168.31.66:2379 \
    --bind-address=192.168.31.63 \
    --secure-port=6443 \
    --advertise-address=192.168.31.63 \
    --allow-privileged=true \
    --service-cluster-ip-range=10.0.0.0/24 \
    --enable-admission-plugins=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota,NodeRestriction \
    --authorization-mode=RBAC,Node \
    --enable-bootstrap-token-auth \
    --token-auth-file=/opt/kubernetes/cfg/token.csv \
    --service-node-port-range=30000-50000 \
    --tls-cert-file=/opt/kubernetes/ssl/server.pem  \
    --tls-private-key-file=/opt/kubernetes/ssl/server-key.pem \
    --client-ca-file=/opt/kubernetes/ssl/ca.pem \
    --service-account-key-file=/opt/kubernetes/ssl/ca-key.pem \
    --etcd-cafile=/opt/etcd/ssl/ca.pem \
    --etcd-certfile=/opt/etcd/ssl/server.pem \
    --etcd-keyfile=/opt/etcd/ssl/server-key.pem"
    配置好前面生成的证书,确保能连接etcd。
    

    参数说明:

    • —logtostderr 启用日志
      —-v 日志等级
      —etcd-servers etcd集群地址
      —bind-address 监听地址
      —secure-port https安全端口
      —advertise-address 集群通告地址
      —allow-privileged 启用授权
      —service-cluster-ip-range Service虚拟IP地址段
      —enable-admission-plugins 准入控制模块
      —authorization-mode 认证授权,启用RBAC授权和节点自管理
      —enable-bootstrap-token-auth 启用TLS bootstrap功能,后面会讲到
      —token-auth-file token文件
      —service-node-port-range Service Node类型默认分配端口范围

    systemd管理apiserver:

    # cat /usr/lib/systemd/system/kube-apiserver.service 
    [Unit]
    Description=Kubernetes API Server
    Documentation=https://github.com/kubernetes/kubernetes
    
    [Service]
    EnvironmentFile=-/opt/kubernetes/cfg/kube-apiserver
    ExecStart=/opt/kubernetes/bin/kube-apiserver $KUBE_APISERVER_OPTS
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    

    启动 kube-apiserver:

    # systemctl daemon-reload
    # systemctl enable kube-apiserver
    # systemctl restart kube-apiserver
    

    3 部署scheduler组件

    创建schduler配置文件:

    # cat /opt/kubernetes/cfg/kube-scheduler 
    
    KUBE_SCHEDULER_OPTS="--logtostderr=true \
    --v=4 \
    --master=127.0.0.1:8080 \
    --leader-elect"
    
    

    参数说明:

    • —master 连接本地apiserver
      —leader-elect 当该组件启动多个时,自动选举(HA)

    systemd管理schduler组件:

    # cat /usr/lib/systemd/system/kube-scheduler.service 
    [Unit]
    Description=Kubernetes Scheduler
    Documentation=https://github.com/kubernetes/kubernetes
    
    [Service]
    EnvironmentFile=-/opt/kubernetes/cfg/kube-scheduler
    ExecStart=/opt/kubernetes/bin/kube-scheduler $KUBE_SCHEDULER_OPTS
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    

    启动kube-scheduler:

    # systemctl daemon-reload
    # systemctl enable kube-scheduler
    # systemctl restart kube-scheduler
    

    4 部署controller-manager组件

    创建controller-manager配置文件:
    
    # cat /opt/kubernetes/cfg/kube-controller-manager 
    KUBE_CONTROLLER_MANAGER_OPTS="--logtostderr=true \
    --v=4 \
    --master=127.0.0.1:8080 \
    --leader-elect=true \
    --address=127.0.0.1 \
    --service-cluster-ip-range=10.0.0.0/24 \
    --cluster-name=kubernetes \
    --cluster-signing-cert-file=/opt/kubernetes/ssl/ca.pem \
    --cluster-signing-key-file=/opt/kubernetes/ssl/ca-key.pem  \
    --root-ca-file=/opt/kubernetes/ssl/ca.pem \
    --service-account-private-key-file=/opt/kubernetes/ssl/ca-key.pem"
    
    

    systemd管理controller-manager组件:

    # cat /usr/lib/systemd/system/kube-controller-manager.service 
    [Unit]
    Description=Kubernetes Controller Manager
    Documentation=https://github.com/kubernetes/kubernetes
    
    [Service]
    EnvironmentFile=-/opt/kubernetes/cfg/kube-controller-manager
    ExecStart=/opt/kubernetes/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_OPTS
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    
    

    启动kube-controller-manager:

    # systemctl daemon-reload
    # systemctl enable kube-controller-manager
    # systemctl restart kube-controller-manager
    
    

    所有组件都已经启动成功,通过kubectl工具查看当前集群组件状态:

    # /opt/kubernetes/bin/kubectl get cs
    NAME                 STATUS    MESSAGE             ERROR
    scheduler            Healthy   ok                  
    etcd-0               Healthy   {"health":"true"}   
    etcd-2               Healthy   {"health":"true"}   
    etcd-1               Healthy   {"health":"true"}   
    controller-manager   Healthy   ok
    
    

    如上输出说明组件都正常。

    相关文章

      网友评论

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

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