• 4、安装部署Node节点


         0、将用户绑定到系统集群角色,至/opt/kubernetes/cfg/下执行【master】

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

    #删除上面创建的kubelet-bootstrap【仅创建错误时或启动失败kubelet、时删除
    kubectl delete clusterrolebinding kubelet-bootstrap

         1、创建kubeconfig文件,写入以下配置【master】

    vi /opt/kubernetes/cfg/kubernetes.sh
    
    # 创建kubelet bootstrapping kubeconfig
    BOOTSTRAP_TOKEN=b2h326jj2sns6bryahz4i1m6cklesj9o #/opt/kubernetes/cfg/token.csv token一致
    KUBE_APISERVER="https://172.17.217.232:6443"     #apiserver地址
    
    
    # 设置集群参数
    kubectl config set-cluster kubernetes 
      --certificate-authority=/opt/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
    
    #-------------------------------------------------------------------
    #-------------------------------------------------------------------
    
    # 创建kube-proxy kubeconfig文件
    
    kubectl config set-cluster kubernetes 
      --certificate-authority=/opt/kubernetes/ssl/ca.pem 
      --embed-certs=true 
      --server=${KUBE_APISERVER} 
      --kubeconfig=kube-proxy.kubeconfig
    
    kubectl config set-credentials kube-proxy 
      --client-certificate=/opt/kubernetes/ssl/kube-proxy.pem 
      --client-key=/opt/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

          2、设置权限,执行脚本、生成配置【master】

    #设置权限
    chmod
    777 /opt/kubernetes/cfg/kubernetes.sh
    #执行脚本 生成bootstrap.kubeconfig  kube-proxy.kubeconfig两个配置文件 .
    /kubernetes.sh

         3、将生成配置文件发送至Node节点【master】

    
    
    #将生成配置拷贝到226,node节点
    scp /opt/kubernetes/cfg/bootstrap.kubeconfig kube-proxy.kubeconfig root@172.17.217.226:/opt/kubernetes/cfg
    #将生成配置拷贝到228,node节点
    scp /opt/kubernetes/cfg/bootstrap.kubeconfig kube-proxy.kubeconfig root@172.17.217.228:/opt/kubernetes/cfg

         4、将kubelet、kube-proxy复制至Node节点【master】

    #kubelet kube-proxy复制至226节点【找到kubernetes解压文件里面这两个二进制文件】
    scp /usr/local/bin/kubernetes/server/bin/{kubelet,kuber-proxy} root@172.17.217.226:/opt/kubernetes/bin
    #kubelet kube-proxy 复制至228节点
    scp /usr/local/bin/kubernetes/server/bin/{kubelet,kuber-proxy} root@172.17.217.228:/opt/kubernetes/bin

         5、将server.pem、server-key.pem复制至Node节点【master】

    scp /opt/kubernetes/ssl/{server,server-key}.pem root@172.17.217.226:/opt/kubernetes/ssl

          6、创建kubelet配置文件【Node】

    #创建配置文件
    vi /opt/kubernetes/cfg/kubelet.conf

    #写入配置
    KUBELET_OPTS="--logtostderr=true --v=4 --log-dir=/opt/kubernetes/logs --hostname-override=k8s-node-1 #本机主机名【或IP】 --kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig #【kubeconfig配置文件,会自动生成】 --bootstrap-kubeconfig=/opt/kubernetes/cfg/bootstrap.kubeconfig #bootstrap配置 --config=/opt/kubernetes/cfg/kubelet.yml #kubelet配置 --cert-dir=/opt/kubernetes/ssl #证书地址 --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0"

          7、创建kublet.yml配置文件【Node】

    #创建配置文件
    vi /opt/kubernetes/cfg/kubelet.yml

    #写入配置
    kind: KubeletConfiguration apiVersion: kubelet.config.k8s.io
    /v1beta1 address: 172.17.217.226 #本节点IP port: 10250 readOnlyPort: 10255 cgroupDriver: cgroupfs clusterDNS: ["10.0.0.2"] clusterDomain: cluster.local. failSwapOn: false authentication: anonymous: enabled: true

         8 、创建kubelet.service服务文件【Node】

    #创建服务文件
    vi /opt/kubernetes/kubelet.service
    #写入配置
    [Unit]
    Description=Kubernetes Kubelet
    After=docker.service #依赖docker
    Requires=docker.service
    
    [Service]
    EnvironmentFile=/opt/kubernetes/cfg/kubelet.conf #指定配置文件
    ExecStart=/opt/kubernetes/bin/kubelet $KUBELET_OPTS
    Restart=on-failure
    KillMode=process
    
    [Install]
    WantedBy=multi-user.target

    #复制至系统服务启动地址
    cp /opt/kubernetes/kubelet.service /usr/bin/systemd/system/

          9、安装docker【k8s版本不一样安装docker版本不一样、传送门,当前k8s版本:1.16.2,Node】

    #卸载旧版本docker【如有安装请卸载重装】
    yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
    #安装docker所需的软件包
    yum install -y yum-utils device-mapper-persistent-data lvm2
    #配置镜像仓库
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    #列出docker的版本 yum list docker-ce --showduplicates |sort -r
    #安装指定版本的docker
    yum install docker-ce-18.06.3.ce-3.el7
    #启动docker systemctl start docker
    #设置开机启动 systemctl enable docker

       10、添加docker配置【Node】

    #创建配置文件
    vi /etc/docker/daemon.json

    #写入配置
    {
    "exec-opts": ["native.cgroupdriver=cgroupfs"],#执行配置 "log-driver": "json-file",#日志 "log-opts": { "max-size": "100m" #日志文件大小 }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ], "registry-mirrors":["https://o06qyoz6.mirror.aliyuncs.com"]#阿里云镜像 }

    #服务重新加载配置
    systemctl daemon.json

    #重启docker
    systemctl restart docker

        11、启动、开机自启kubelet 【Node】

    #启动kubelet
    systemctl  start kubelet
    
    #设置开机自启
    systemctl enable kubelet
    
    #查看日志
    journalctl -xe
    
    #查看kubelet日志
    journalctl  -amu kubelet

       12、启动kubelet出错【Node】

               大致错误:

    #错误信息
     misconfiguration: kubelet cgroup driver: "cgroupfs" is different from docker cgroup driver: "systemd"
    
    #解决方案
       修改docker配置
       vi  /etc/docker/daemon.json
       "exec-opts": ["native.cgroupdriver=cgroupfs"],#将systemd改成cgroupfs
    #重启docker
    systemctl restart docker

    #重启kubelet
    systemctl restart kubelet

       13、在master节点将启动的所有Node节点加入集群【所有Node节点都要加入,Master】

    #查询所有Node 
    kubectl get cs
    #condtion approve 后Approved,Issued kubectl certificate approve node
    -csr-jbk21dTsMgMt-12jKUkpPCZySDnARPk1tU5Li8F_Ypg【对应Node-->Name】

    #查看node 【Ready为正常状态】
    kubectl get node

        14、Node节点配置kubelet-proxy【Node】

    #创建配置文件
    vi /opt/kubernetes/cfg/kubelet-proxy.conf

    #写入配置
    KUBE_PROXY_OPTS="--logtostderr=true
    --v=4
    --log-dir=/opt/kubernetes/logs
    --hostname-override=172.17.217.226 #或k8s-node-1 HostName
    --cluster-cidr=10.0.0.0/24
    --kubeconfig=/opt/kubernetes/cfg/kube-proxy.kubeconfig"

       15、创建kubelet-proxy启动服务【Node】

    #创建服务文件
    vi /usr/lib/systemd/system/kubelet-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

       16、启动kubelet-proxy【Node】

    systemctl daemon-reload
    
    systemctl start kubelet-proxy
    
    systemctl enable kubelet-proxy

       17、安装flannel【Node】

    #安装wget
    yum install wget -y

    #下载安装包
    wget https://github.com/coreos/flannel/releases/download/v0.10.0/flannel-v0.10.0-linux-amd64.tar.gz -o /opt/flannel/flannel-v0.10.0-linux-amd64.tar.gz
    #解压文件 tar -vxf /opt/flannel/flannel-v0.10.0-linux-amd64.tar.gz

    #将执行文件移动至/opt/flannel/bin
    mv /opt/flannel/flanneld mk-docker-opts.sh /opt/flannel/bin

       18、创建flannel配置文件、服务文件【Node】

    #创建配置文件
    vi
    /opt/flannel/cfg/flanneld.conf
    #写入配置 FLANNEL_OPTIONS
    ="--etcd-endpoints=https://172.17.217.226:2379,https://172.17.217.228:2379 --etcd-cafile=/opt/etcd/ssl/ca.pem --etcd-certfile=/opt/etcd/ssl/server.pem --etcd-keyfile=/opt/etcd/ssl/server-key.pem" #创建服务启动文件 vi /opt/flannel/service/flanneld.service
    #写入配置 [Unit] Description
    =Flanneld overlay address etcd agent After=network-online.target network.target Before=docker.service [Service] Type=notify EnvironmentFile=/opt/flannel/cfg/flanneld.conf ExecStart=/opt/flannel/bin/flanneld --ip-masq $FLANNEL_OPTIONS ExecStartPost=/opt/flannel/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/subnet.env Restart=on-failure [Install] WantedBy=multi-user.target

    #复制服务至服务启动位置
    cp /opt/flannel/flanneld.service /usr/lib/systemd/system/

       19、启动flannel【Node】

     #启动flanneld
     systemctl start flanneld
    
      #开机自启
     systemctl enable flanneld

                可能出现问题:

                1)、etcd还未将flannel存储至子网

                解决【单个节点执行即可,Node】:

    # etcd V3  --endpoint:Node节点,Network:docker网段【flannel默认不支持V3版本可直接使用下面第2)-->②点解决方案】
    /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.2.110:2379" put /coreos.com/network/config  '{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}'
    
    #etcd v2 
    /opt/etcd/bin/etcdctl --ca-file=/opt/etcd/ssl/ca.pem --cert-file=/opt/etcd/ssl/server.pem --key-file=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.2.110:2379" set /coreos.com/network/config  '{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}'

                查看加入状态【单个节点执行即可,Node】:

    #查看加入状态 --endpoint:Node节点
    /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.2.110:2379" get /coreos.com/network/config

               2)、 启动flannel错误:

                解决,参考地址

    #给用户授集群管理权限【master】
    kubectl create clusterrolebinding kube-proxy-cluster-admin --clusterrole=cluster-admin --user=kube-proxy

    #重新启动proxy【Node】
    systemctl restart kubelet-proxy

                再次启动flannel出现如下错误【flanneld目前不能与etcdV3直接交互】:

                解决,参考地址

               ①、删除原来配置【Node】 

     /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.2.110:2379" del /coreos.com/network/config

               ②、设置etcd支持V2功能【master、Node】

     #编辑etcd服务
    vi /usr/lib/systemd/system/etcd.service
    
    [Unit]
    Description=Etcd Server
    After=network.target
    After=network-online.target
    Wants=network-online.target
    
    [Service]
    Type=notify
    EnvironmentFile=/opt/etcd/etcd.conf
    ExecStart=/opt/etcd/bin/etcd 
    --cert-file=/opt/etcd/ssl/server.pem 
    --key-file=/opt/etcd/ssl/server-key.pem 
    --peer-cert-file=/opt/etcd/ssl/server.pem 
    --peer-key-file=/opt/etcd/ssl/server-key.pem 
    --trusted-ca-file=/opt/etcd/ssl/ca.pem 
    --peer-trusted-ca-file=/opt/etcd/ssl/ca.pem 
    --enable-v2 #开启支持V2
    Restart=on-failure
    LimitNOFILE=65536
    
    [Install]
    WantedBy=multi-user.target
    
     #重新加载配置
    systemctl daemon-reload
     
     #重启服务
    systemctl restart etcd
    
    
     #查看集群状态
    /opt/etcd/bin/etcdctl   --cacert=/opt/etcd/ssl/ca.pem --key=/opt/etcd/ssl/server-key.pem --cert=/opt/etcd/ssl/server.pem --endpoints="https://192.168.2.200:2379,https://192.168.2.110:2379" endpoint health

              ③、重新使用V2写入子网信息

     # 指定使用v2版本命令
    ETCDCTL_API=2 /opt/etcd/bin/etcdctl --ca-file=/opt/etcd/ssl/ca.pem --cert-file=/opt/etcd/ssl/server.pem --key-file=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.2.110:2379" get /coreos.com/network/config '{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}'

    #重新加载配置
    systemctl daemon-reload

    #重启flanneld
    systemctl restart flanneld

    #查看flanned状态
    systemctl status flanneld

    #设置开机自启
    systemctl enable flanneld

    #重启docker
    systemctl restart docker

    #查看启动状态
    systemctl status docker

               查看确保docker与flanneld处于同一网段:

       20、安装Kubernetes 集群概览【master】

              ①、安装 kuboard

    kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml

             ②、查看运行状态

     kubectl get pods  -n kube-system

              ③、查看kuboard暴露端口

    kubectl get svc -n kube-system

              ④、获取登录Token

    kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d

              ⑤、查看运行状态

     #Node节点IP:kuboard端口
    192.168.2.11032567

  • 相关阅读:
    付宇泽20190912-1 每周例行报告
    付宇泽20190912-3 词频统计
    付宇泽20190912-2 命令行
    付宇泽20190905-1 每周例行报告
    付宇泽20190905-2 博客作业
    付宇泽20190905-3 命令行和控制台编程
    罗杨美慧 20190905-3 命令行和控制台编程
    【Linux运维】Centos7上借助ansible搭建LVS+Keepalived
    【shell 练习1】编写Shell条件句练习
    【第四章】Shell 条件测试表达式
  • 原文地址:https://www.cnblogs.com/study10000/p/13189002.html
Copyright © 2020-2023  润新知