Kubernetes

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

架构:node

       

 

知识点总结:web

0)k8s中的难点:算法

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

K8S各组件解释: docker

 

  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关系简单说明vim

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  再关闭防火墙,还须要修改,若是能够访问则api

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能够看到详细的信息)
相关文章
相关标签/搜索