• K8S概念梳理


    1、搭建环境变量 (重点:POD网络[二层网络],服务网络【三层网络IPVS负载】,第一个服务网络地址给了kubernetes 服务【猜想:集群内部组件之间交互,访问api-server,不出网关】)

         构建K8S集群,需要规划etcd数据存储节点 (K8S数据存储/WAL存储)---主节点(主服务组件--api-server---scheduler--controller-manage)

    #!/bin/bash
    
    #roopwd
    export ROOTPWD=A2qG*ctZNkFUL$X
    
    # 生成 EncryptionConfig 所需的加密 key
    export ENCRYPTION_KEY=$(head -c 32 /dev/urandom | base64)
    # 集群各机器 IP 数组
    export NODE_IPS=(123.57.217.206  123.57.217.207  123.57.217.208  123.57.217.200  123.57.217.202  123.57.217.203)
    
    #集群内网IP数组
    export NODE_IPS_INNER=(172.17.202.100  172.17.202.101  172.17.202.102  172.17.202.98   172.17.202.99   172.17.202.97)
    
    # 集群各 IP 对应的主机名数组
    export NODE_NAMES=('123.57.217.206 etcd0'  '123.57.217.207 etcd1'  '123.57.217.208 etcd2'  '123.57.217.200 kubnode1' '123.57.217.202 kubnode2' '123.57.217.203 kubnode3')
    # 集群MASTER机器 IP 数组
    export MASTER_IPS=(123.57.217.206 123.57.217.207 123.57.217.208)
    #
    export WORKER_IPS=(123.57.217.200 123.57.217.202 123.57.217.203)
    # 集群所有的master Ip对应的主机
    export MASTER_NAMES=(etcd0 etcd1 etcd2)
    # etcd 集群服务地址列表
    export ETCD_ENDPOINTS="https://172.17.202.100:2379,https://172.17.202.101:2379,https://172.17.202.102:2379"
    # etcd 集群间通信的 IP 和端口
    export ETCD_NODES="etcd0=https://172.17.202.100:2380,etcd1=https://172.17.202.101:2380,etcd2=https://172.17.202.102:2380"
    # etcd 集群所有node ip
    export ETCD_IPS=(192.168.4.110 192.168.4.111 192.168.4.112 192.168.4.221  192.168.4.222)
    # kube-apiserver 的反向代理(kube-nginx)地址端口
    export KUBE_APISERVER="https://172.17.202.100:8443"
    
    #keepalived vid
    export KUBE_KEEPLIVEDVIP="172.17.202.100"
    
    
    # 节点间互联网络接口名称
    export IFACE="eth0"
    # etcd 数据目录
    export ETCD_DATA_DIR="/root/k8s/etcd/data"
    # etcd WAL 目录,建议是 SSD 磁盘分区,或者和 ETCD_DATA_DIR 不同的磁盘分区
    export ETCD_WAL_DIR="/root/k8s/etcd/wal"
    # k8s 各组件数据目录
    export K8S_DATADIR="/root/k8s/data/k8s"
    # docker 数据目录
    #export DOCKER_DIR="/data/k8s/docker"
    ## 以下参数一般不需要修改
    # TLS Bootstrapping 使用的 Token,可以使用命令 head -c 16 /dev/urandom | od -An -t x | tr -d ' ' 生成
    #BOOTSTRAP_TOKEN="41f7e4ba8b7be874fcff18bf5cf41a7c"
    # 最好使用 当前未用的网段 来定义服务网段和 Pod 网段
    # 服务网段,部署前路由不可达,部署后集群内路由可达(kube-proxy 保证)
    SERVICE_CIDR="10.254.0.0/16"
    # Pod 网段,建议 /16 段地址,部署前路由不可达,部署后集群内路由可达(flanneld 保证)
    CLUSTER_CIDR="172.30.0.0/16"
    # 服务端口范围 (NodePort Range)
    export NODE_PORT_RANGE="1024-32767"
    # flanneld 网络配置前缀
    export FLANNEL_ETCD_PREFIX="/kubernetes/network"
    # kubernetes 服务 IP (一般是 SERVICE_CIDR 中第一个IP)
    export CLUSTER_KUBERNETES_SVC_IP="10.254.0.1"
    # 集群 DNS 服务 IP (从 SERVICE_CIDR 中预分配)
    export CLUSTER_DNS_SVC_IP="10.254.0.2"
    # 集群 DNS 域名(末尾不带点号)
    export CLUSTER_DNS_DOMAIN="cluster.local"

    2、程序交互式登录
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    yum install -y expect
    
    #分发公钥
    ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa
    for i in k8s-01 k8s-02 k8s-03 k8s-04;do
    expect -c "
    spawn ssh-copy-id -i /root/.ssh/id_rsa.pub root@$i
            expect {
                    "*yes/no*" {send "yes
    "; exp_continue}
                    "*password*" {send "123456
    "; exp_continue}
                    "*Password*" {send "123456
    ";}
            } "
    done 
    

     3、api-server访问度量服务器证书,证书CN

    #CN名称需要位于kube-apiserver的–requestheader-allowed-names参数中,否则后续访问metrics时会提示权限不足
     
    证书中CN是访问USER,O-group--->通过绑定与角色相关,k8存在预置绑定和角色。比如system:masters--组
    O 为system:masters,kube-apiserver收到该证书后将请求的Group设置为system:masters
    # ● 预定的ClusterRoleBinding cluster-admin将Group system:masters与Role cluster-admin绑定,该Role授予API的权限
     
    4、POD网络

    部署Flannel网络(172.30/16)

    Kubernetes要求集群内各个节点(包括master)能通过Pod网段互联互通,
    Flannel使用vxlan技术为各个节点创建一个互通的Pod网络,
    使用的端口为8472.第一次启动时,从etcd获取配置的Pod网络,
    为本节点分配一个未使用的地址段,然后创建flannel.1网络接口(也可能是其它名称)
    flannel将分配给自己的Pod网段信息写入/run/flannel/docker文件,
    docker后续使用这个文件中的环境变量设置Docker0网桥,从而从这个地址段为本节点的所有Pod容器分配IP
     
    启动后置脚本会设置/run/flannel/docker文件

    5、api-server启动后,自动创建kubernets服务--服务地址是服务网络第一个地址--目前没有域名与之映射 

    kubectl get svc kubernetes

    6、检查集群

    $ kubectl cluster-info
    Kubernetes master is running at https://192.168.0.54:8443
    
    To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
    $ kubectl get all --all-namespaces
    NAMESPACE   NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
    default     service/kubernetes   ClusterIP   10.254.0.1           443/TCP   3m5s
    
    $ kubectl get componentstatuses
    NAME                 STATUS      MESSAGE                                                                                     ERROR
    scheduler            Unhealthy   Get http://127.0.0.1:10251/healthz: dial tcp 127.0.0.1:10251: connect: connection refused
    controller-manager   Unhealthy   Get http://127.0.0.1:10252/healthz: dial tcp 127.0.0.1:10252: connect: connection refused
    etcd-2               Healthy     {"health":"true"}
    etcd-0               Healthy     {"health":"true"}
    etcd-1               Healthy     {"health":"true"}
    
    
    






  • 相关阅读:
    TextBox换行C#文本框换行.net文本框换行textarea换行
    日期控件 My97DatePicker WdatePicker 日期格式
    Python之面向对象:继承
    Python之面向对象:封装
    Python之面向对象:方法
    Python之面向对象:属性
    Python之面向对象:面向对象基础
    插入排序
    冒泡排序
    Python 安装MySQLdb模块遇到报错及解决方案:_mysql.c(42) : fatal error C1083: Cannot open include file: 'config-win.h': No such file or directory
  • 原文地址:https://www.cnblogs.com/justart/p/13197494.html
Copyright © 2020-2023  润新知