美文网首页
kubernetes高可用集群部署 - 4. master集群

kubernetes高可用集群部署 - 4. master集群

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

    1. 检查环境

    请先确保前面的环境正常, 再进行这一步, 否则出现的各种错误很难定位

    检查证书环境

    ls /etc/kubernetes/ssl
    

    检查kubectl工具类环境

    检查当前用户的信息

    检查服务环境

    ll /opt/k8s/bin
    

    2. 配置和启动kube-apiserver

    vi /usr/lib/systemd/system/kube-apiserver.service
    ############################################## 
    [Unit]
    Description=Kubernetes API Service
    Documentation=https://github.com/GoogleCloudPlatform/kubernetes
    After=network.target
    After=etcd.service
    
    [Service]
    EnvironmentFile=-/etc/kubernetes/config
    EnvironmentFile=-/etc/kubernetes/apiserver
    ExecStart=/opt/k8s/bin/kube-apiserver \
        $KUBE_LOGTOSTDERR \
        $KUBE_LOG_LEVEL \
        $KUBE_ETCD_SERVERS \
        $KUBE_API_ADDRESS \
        $KUBE_API_PORT \
        $KUBELET_PORT \
        $KUBE_ALLOW_PRIV \
        $KUBE_SERVICE_ADDRESSES \
        $KUBE_ADMISSION_CONTROL \
        $KUBE_API_ARGS
    Restart=on-failure
    Type=notify
    LimitNOFILE=65536
    
    [Install]
    WantedBy=multi-user.target
    ############################################## 
    

    配置config

    vi /etc/kubernetes/config
    ##############################################
    KUBE_LOGTOSTDERR="--logtostderr=true"
    KUBE_LOG_LEVEL="--v=0"
    KUBE_ALLOW_PRIV="--allow-privileged=true"
    KUBE_MASTER="--master=http://192.168.1.100:8080"
    ##############################################
    

    --master 配置成自己的8080端口就可以了

    vi /etc/kubernetes/apiserver
    ##############################################
    KUBE_API_ADDRESS="--advertise-address=192.168.1.100 --bind-address=192.168.1.100 --insecure-bind-address=192.168.1.100"
    KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.1.50:2379,http://192.168.1.51:2379"
    KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
    KUBE_ADMISSION_CONTROL="--admission-control=ServiceAccount,NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota"
    KUBE_API_ARGS="--authorization-mode=RBAC --runtime-config=rbac.authorization.k8s.io/v1beta1 --kubelet-https=true --experimental-bootstrap-token-auth --token-auth-file=/etc/kubernetes/token.csv --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kubernetes.pem --tls-private-key-file=/etc/kubernetes/ssl/kubernetes-key.pem --client-ca-file=/etc/kubernetes/ssl/ca.pem --service-account-key-file=/etc/kubernetes/ssl/ca-key.pem --enable-swagger-ui=true --apiserver-count=3 --audit-log-maxage=30 --audit-log-maxbackup=3 --audit-log-maxsize=100 --audit-log-path=/var/lib/audit.log --event-ttl=1h"
    ##############################################
    
    • KUBE_API_ADDRESS: 注意绑定的IP地址 不要 写成127.0.0.1, 要写成具体的IP地址(如果是阿里云的经典网络, 最好选择内网地址, 提升网络传输)
    • KUBE_ETCD_SERVERS: 注意ETCD集群地址写法
    • KUBE_SERVICE_ADDRESSES: 这个统一固定就好, 要和前面生成证书所指定的地址段一致
    # 保存配置文件, 并启动kube-apiserver
    systemctl daemon-reload
    systemctl enable kube-apiserver
    systemctl start kube-apiserver
    systemctl status kube-apiserver -l
    

    3. 配置和启动kube-controller-manager

    vi /usr/lib/systemd/system/kube-controller-manager.service
    ##############################################
    Description=Kubernetes Controller Manager
    Documentation=https://github.com/GoogleCloudPlatform/kubernetes
    
    [Service]
    EnvironmentFile=-/etc/kubernetes/config
    EnvironmentFile=-/etc/kubernetes/controller-manager
    ExecStart=/opt/k8s/bin/kube-controller-manager \
        $KUBE_LOGTOSTDERR \
        $KUBE_LOG_LEVEL \
        $KUBE_MASTER \
        $KUBE_CONTROLLER_MANAGER_ARGS
    Restart=on-failure
    LimitNOFILE=65536
    
    [Install]
    WantedBy=multi-user.target
    ##############################################
    
    
    vi /etc/kubernetes/controller-manager。
    ##############################################
    KUBE_CONTROLLER_MANAGER_ARGS="--address=127.0.0.1 --service-cluster-ip-range=10.254.0.0/16 --cluster-name=kubernetes --cluster-signing-cert-file=/etc/kubernetes/ssl/ca.pem --cluster-signing-key-file=/etc/kubernetes/ssl/ca-key.pem  --service-account-private-key-file=/etc/kubernetes/ssl/ca-key.pem --root-ca-file=/etc/kubernetes/ssl/ca.pem --leader-elect=true"
    ##############################################
    
    • --cluster-signing-* 指定的证书和私钥文件用来签名为 TLS BootStrap 创建的证书和私钥;
    • --root-ca-file 用来对 kube-apiserver 证书进行校验,指定该参数后,才会在Pod 容器的 ServiceAccount 中放置该 CA 证书文件;
    • --address 值必须为 127.0.0.1,因为当前 kube-apiserver 期望 scheduler 和 controller-manager 在同一台机器
    # 保存配置并启动
    systemctl daemon-reload
    systemctl enable kube-controller-manager
    systemctl start kube-controller-manager
    systemctl status kube-controller-manager -l
    

    4. 配置和启动kube-scheduler

    vi /usr/lib/systemd/system/kube-scheduler.service
    ##############################################
    [[Unit]
    Description=Kubernetes Scheduler Plugin
    Documentation=https://github.com/GoogleCloudPlatform/kubernetes
    
    [Service]
    EnvironmentFile=-/etc/kubernetes/config
    EnvironmentFile=-/etc/kubernetes/scheduler
    ExecStart=/opt/k8s/bin/kube-scheduler \
            $KUBE_LOGTOSTDERR \
            $KUBE_LOG_LEVEL \
            $KUBE_MASTER \
            $KUBE_SCHEDULER_ARGS
    Restart=on-failure
    LimitNOFILE=65536
    
    [Install]
    WantedBy=multi-user.target
    ##############################################
    
    
    vi /etc/kubernetes/scheduler
    ##############################################
    KUBE_SCHEDULER_ARGS="--leader-elect=true --address=127.0.0.1"
    ##############################################
    
    • --address 值必须为 127.0.0.1,因为当前 kube-apiserver 期望 scheduler 和 controller-manager 在同一台机器;
    # 保存配置并启动
    systemctl daemon-reload
    systemctl enable kube-scheduler
    systemctl start kube-scheduler
    systemctl status kube-scheduler -l
    

    5. 验证master节点功能

    如果上述配置好, 会新增加4个配置文件

    # 查看节点状态
    kubectl get componentstatuses
    
    # 查看端口情况
    netstat -nltp
    

    其他几台master也需要按照上述相同的配置, 只需要把相对应的ip地址换成自己的, 记住, 证书一定要相同

    6. 配置SLB

    配置SLB的目的是为了保证kube-apiserver接口可用性, 所以当node节点连接master接口时, 通过SLB转发, 而不是单独指定一台master服务器. 这样当其中一台master挂掉时, SLB会将请求转发到另一台, 由于两台master的证书配置一致, 从而达到master高可用性.

    这里采用阿里云的SLB, 或者大家按照自身需要, 准备一台服务器安装Nginx.

    创建SLB, 加入两台master服务器

    配置端口映射

    这里将SLB的6443转向8080端口, 另外6443端口配置HTTPS协议. 这个时候, 按要求把公钥/etc/kubernetes/ssl/kubernetes.pem和私钥/etc/kubernetes/ssl/kubernetes-key.pem分别推送到SLB, 以保证6443端口的安全性

    验证SLB配置成功, 在浏览器中访问 (这里会报安全问题, 不理会, 因为证书是我们自己生成的, 直接访问)

    https://192.168.1.88:6443
    

    断开其中一台继续访问

    systemctl stop kube-apiserver
    

    高可用部署系列

    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高可用集群部署 - 4. master集群

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