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可以看到详细的信息)

 

posted @ 2019-01-18 17:46  TonyHuang123  阅读(473)  评论(0编辑  收藏  举报