• Kubernetes


    链接:原理及架构流程图 介绍安装使用其他1)    操作命令汇总      K8S基础概念其他1)  etcd概念介绍与用法  k8ss上webUI    获取k8s镜像   kubernetes nodes notready 解决思路   k8s学习博客   etcd的 解释 ,  功能  ,参数配置        k8s创建pod时没有安全账户的报错问题   docker+k8s基础篇二(精炼) 

    架构:

           

     

    知识点总结:

    0)k8s中的难点:

    • Service的概念     
    • Fluentd(网络组建,主要用于连接分配pod网络端口),etcd (主要负责资源调度,比如Fluentd连接到etcd上便于集权对nodes中各pods的网络IP分配资源调度存储等) 

    K8S各组件解释: 

      etcd: 高可用存储共享配置和服务发现,作为与minion机器上的flannel配套使用,作用是使每台 minion上运行的docker拥有不同的ip段,最终目的是使不同minion上正在运行的docker containner都有一个与别的任意一个containner(别的minion上运行的docker containner)不一样的IP地址。
      flannel: 网络结构支持
      kube-apiserver: 不论通过kubectl还是使用remote api 直接控制,都要经过apiserver
      kube-controller-manager: 对replication controller, endpoints controller, namespace controller, and serviceaccounts controller的循环控制,与kube-apiserver交互,保证这些controller工作
      kube-scheduler: Kubernetes scheduler的作用就是根据特定的调度算法将pod调度到指定的工作节点(minion)上,这一过程也叫绑定(bind)
      kubelet: Kubelet运行在Kubernetes Minion Node上. 它是container agent的逻辑继任者
      kube-proxy: kube-proxy是kubernetes 里运行在minion节点上的一个组件, 它起的作用是一个服务代理的角色
    View Code

    1) k8s的好处在哪里(相比较只使用docker)    k8s和Docker关系简单说明

    1、故障迁移:当某一个node节点关机或挂掉后,node节点上的服务会自动转移到另一个node节点上,这个过程所有服务不中断。这是docker或普通云主机是不能做到的;
    2、资源调度:当node节点上的cpu、内存不够用的时候,可以扩充node节点,新建的pod就会被kube-schedule调度到新扩充的node节点上;
    3、资源隔离:创建开发、运维、测试三个命名空间,切换上下文后,开发人员就只能看到开发命名空间的所有pod,看不到运维命名空间的pod,这样就不会造成影响,互不干扰。传统的主机或只有docker环境中,登录进去就会看到所有的服务或者容器;
    4、因为采用docker容器,进程之间互不影响;
    5、安全:不同角色有不同的权限,查看pod、删除pod等操作;RBAC认证增加了k8s的安全
    View Code

    2) 如果需要外部可以访问,先curl http://localhost:8080 再curl http://【IP】:8080  再关闭防火墙,还需要修改,如果可以访问则

    3) kubernetes其实是一个高度自动化的资源控制系统,通过跟踪对比etcd库里保存的“资源期望状态”与当前环境中的“实际资源状态”的差异来实现自动控制和自动纠错的高级功能。

    4)容器可以为应用提供隔离的环境,在这个环境里应用就能运行起来。但是这些相互隔离的容器需要管理,也需要跟外面的世界沟通。共享的文件系统、网络、调度、负载均衡和资源分配等都是挑战。Kubernetes就可以管理这些容器。

    5) docker通过进程隔离,k8s通过namespace隔离。

    6) node上必须启动flanneld才能载入集群中!!

    7)  k8s上的pod是运行在容器上的,删除k8s并不能删除pod上的内容,这也是为什么运行pod必须要容器的理由。

    8) k8s相关配置文件运用与解释:  

    /etc/kubernetes/config:  (master、node必须) 
    /etc/etcd/etcd.conf:(master必须)
    /etc/kubernetes/apiserver : (master必须) 
    /etc/kubernetes/controller-manager: (master必须) 
    /etc/kubernetes/scheduler : (master必须) 
    /etc/kubernetes/kubelet、(node必须)
    /etc/sysconfig/flanneld (node必须)
    /etc/kubernetes/proxy  (node必须)
    
    master生效的修改方式:
    ---使master能被其他机器发现需要如下配置(在/etc/kubernetes/apiserver中):
    echo 'KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"' >> /etc/kubernetes/apiserver;
    systemctl 且  stop firewalld;
    
    node生效的修改方式:
    1)/etc/kubernetes/config 中 KUBE_MASTER="--master=http://master的IP:8080" 为指定master所在的地址
    2)vim /etc/kubernetes/kubelet 中KUBELET_HOSTNAME="--hostname-override=node的名字" 和KUBELET_API_SERVER="--api-servers=http://master的IP:8080"
    修改完成后,重启node(proxy和kubelet)可在master中看到能生效的node。
    3) 修改/etc/sysconfig/flanneld 中FLANNEL_ETCD_ENDPOINTS="http://ETCD的IP:2379"
    View Code

    9)针对自写脚本完成k8s上mater和node的安装复制粘贴(假定所有脚本已经在当前目录下):

     Master  重建: renew_k8s_master.sh     (重建需要修改的配置文件: echo 'KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"' >> /etc/kubernetes/apiserver;)

    Node 重建:需要修改的配置文件: 

    ./remove_k8s_all.sh ;   ./install_k8s_node.sh ; 
    sed -i s/127.0.0.1:8080/{MasterIP}:8080/g /etc/kubernetes/config ;
    sed -i s/hostname-override=127.0.0.1/hostname-override={NodeName}/g /etc/kubernetes/kubelet ;
    sed -i s/127.0.0.1:8080/{MasterIP}:8080/g /etc/kubernetes/kubelet ;
    sed -i s/127.0.0.1:8080/{MasterIP}:8080/g /etc/sysconfig/flanneld ;

    历史错误总结:

    •   如果出现:kubectl error: The connection to the server localhost:8080 was refused  可能是/etc/kubernetes/apiserver 中  KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"  没有设置正确。 表示任何地址可访问。
    •   停滞在k8s的node状态NotReady,且无法查看master状态是,是由于:node上代理没有启动:systemctl start kubelet kube-proxy    
    • Mater必须有以下组建:apiserver,scheduler,controller-manager,etcd,flannel;  在Node必须有:flannel, docker, kubelet, kube-proxy ,要想将其他机器的nodes加入mater需要在/etc/kubernetes目录下配置kubelet,proxy和config文件,以连接master。
    • 疑问:不删除node,用kubectl显示note中的notReady哪来的? (原因:只要master曾经载入过这个node,即使这个node关机不存在,中通过kubetctl get nodes任然能显示这个node为notReady状态,通过kubectl describe nodes可以看到详细的信息)
  • 相关阅读:
    纯CSS打造好看的按钮样式
    jQuery手机端触摸卡片切换效果
    CSS手动改变DIV高宽
    Windows 10 的音频和 MIDI API将统一
    美食网站响应式精美模板
    三道Javascript的练习题
    html5手机端遮罩弹出菜单代码
    CSS的::selection使用方法
    Html5绘制饼图统计图
    JQuery实现一个简单的鼠标跟随提示效果
  • 原文地址:https://www.cnblogs.com/xhuangtao/p/10289007.html
Copyright © 2020-2023  润新知