k8s 集群安装部署

https://blog.csdn.net/real_myth/article/details/78719244(集群安装)
https://yq.aliyun.com/articles/66474(阿里云安装方法)
https://yq.aliyun.com/articles/68921?spm=5176.100240.searchblog.7.yjlDST(在阿里云遇到问题)
https://dev.aliyun.com/search.html?spm=5176.1972344.0.1.awEW4a(镜像开发)
https://mritd.me/2016/10/29/set-up-kubernetes-cluster-by-kubeadm/#rpm
http://docs.kubernetes.org.cn/ 中文社区
https://www.kubernetes.org.cn/3682.html

架构说明:
主要有:master/node/Replication Controller/pod/service/Lable

一.master:k8s集群的管理节点,负责管理集群,提供集群的资源数据访问入口。
master进程服务{
1.API server           提供HTTP Rest接口的关键服务进程,是Kubernetes里所有资源的增、删、改、查等操作的唯一入口.也是集群控制的入口进程;
2.Controller Manager    Kubernetes Controller Manager是Kubernetes所有资源对象的自动化控制中心;
3.Scheduler服务        负责资源调度(Pod调度)的进程;
 }
二.node:Kubernetes集群架构中运行Pod的服务节点(亦叫agent或minion)
node进程服务{
1.kubelet:负责对Pod对于的容器的创建、启停等任务;
2.kube-proxy:实现Kubernetes Service的通信与负载均衡机制的重要组件;
3.Docker Engine(Docker):Docker引擎,负责本机容器的创建和管理工作;
}

三.Pod:运行于Node节点上,若干相关容器的组合;Pod其实有两种类型:普通Pod和静态Pod
四.Replication Controller用来管理Pod的副本,保证集群中存在指定数量的Pod副本.是实现弹性伸缩、动态扩容和滚动升级的核心;
五.service:Pod的逻辑集合和访问该集合的策略,是真实服务的抽象。Service提供了一个统一的服务访问入口以及服务代理和发现机制,关联多个相同Label的Pod,用户不需要了解后台Pod是如何运行
外部系统访问Service的问题:
{
Node IP:Node节点的IP地址  ,Node IP是Kubernetes集群中节点的物理网卡IP地址,所有属于这个网络的服务器之间都能通过这个网络直接通信;
    Pod IP: Pod的IP地址  Pod IP是每个Pod的IP地址,他是Docker Engine根据docker0网桥的IP地址段进行分配的,通常是一个虚拟的二层网络。
    Cluster IP:Service的IP地址  (1.Cluster IP仅仅作用于Kubernetes Service这个对象,并由Kubernetes管理和分配P地址;2.Cluster IP无法被ping,他没有一个“实体网络对象”来响应;3.Cluster IP只能结合Service Port组成一个具体的通信端口,单独的Cluster IP不具备通信的基础,并且他们属于Kubernetes集群这样一个封闭的空间)
}

六.Label:Kubernetes中的任意API对象都是通过Label进行标识,Label的实质是一系列的Key/Value键值对,其中key于value由用户自己指定;二者通过Label来进行关联Node上运行的Pod
    版本标签:"release":"stable","release":"canary"......
    环境标签:"environment":"dev","environment":"qa","environment":"production"
    架构标签:"tier":"frontend","tier":"backend","tier":"middleware"
    分区标签:"partition":"customerA","partition":"customerB"
    质量管控标签:"track":"daily","track":"weekly"

Kubernetes 组件:
  Kubernetes Master控制组件,调度管理整个系统(集群),包含如下组件:
  1.Kubernetes API Server
    作为Kubernetes系统的入口,其封装了核心对象的增删改查操作,以RESTful API接口方式提供给外部客户和内部组件调用。维护的REST对象持久化到Etcd中存储。
  2.Kubernetes Scheduler
    为新建立的Pod进行节点(node)选择(即分配机器),负责集群的资源调度。组件抽离,可以方便替换成其他调度器。
  3.Kubernetes Controller
    负责执行各种控制器,目前已经提供了很多控制器来保证Kubernetes的正常运行。
  4. Replication Controller
    管理维护Replication Controller,关联Replication Controller和Pod,保证Replication Controller定义的副本数量与实际运行Pod数量一致。
  5. Node Controller
    管理维护Node,定期检查Node的健康状态,标识出(失效|未失效)的Node节点。
  6. Namespace Controller
    管理维护Namespace,定期清理无效的Namespace,包括Namesapce下的API对象,比如Pod、Service等。
  7. Service Controller
    管理维护Service,提供负载以及服务代理。
  8.EndPoints Controller
    管理维护Endpoints,关联Service和Pod,创建Endpoints为Service的后端,当Pod发生变化时,实时更新Endpoints。
  9. Service Account Controller
    管理维护Service Account,为每个Namespace创建默认的Service Account,同时为Service Account创建Service Account Secret。
  10. Persistent Volume Controller
    管理维护Persistent Volume和Persistent Volume Claim,为新的Persistent Volume Claim分配Persistent Volume进行绑定,为释放的Persistent Volume执行清理回收。
  11. Daemon Set Controller
    管理维护Daemon Set,负责创建Daemon Pod,保证指定的Node上正常的运行Daemon Pod。
  12. Deployment Controller
    管理维护Deployment,关联Deployment和Replication Controller,保证运行指定数量的Pod。当Deployment更新时,控制实现Replication Controller和 Pod的更新。
  13.Job Controller
    管理维护Job,为Jod创建一次性任务Pod,保证完成Job指定完成的任务数目
  14. Pod Autoscaler Controller
    实现Pod的自动伸缩,定时获取监控数据,进行策略匹配,当满足条件时执行Pod的伸缩动作。
 
•Kubernetes Node运行节点,运行管理业务容器,包含如下组件:
  1.Kubelet
    负责管控容器,Kubelet会从Kubernetes API Server接收Pod的创建请求,启动和停止容器,监控容器运行状态并汇报给Kubernetes API Server。
  2.Kubernetes Proxy
    负责为Pod创建代理服务,Kubernetes Proxy会从Kubernetes API Server获取所有的Service信息,并根据Service的信息创建代理服务,实现Service到Pod的请求路由和转发,从而实现Kubernetes层级的虚拟转发网络。
  3.Docker
    Node上需要运行容器服务

环境:
centos7系统机器三台:
    10.0.0.81: 用来安装kubernetes master
    10.0.0.82: 用作kubernetes minion (minion1)
    10.0.0.83: 用作kubbernetes minion (minion2)
 
一、关闭系统运行的防火墙及selinux
1。如果系统开启了防火墙则按如下步骤关闭防火墙(所有机器)
# systemctl stop firewalld # systemctl disable firewalld
2.关闭selinux
1
2
    
#setenforce 0
#sed -i '/^SELINUX=/cSELINUX=disabled' /etc/sysconfig/selinux

  
 
二、MASTER安装配置
1. 安装并配置Kubernetes master(yum 方式)    
# yum -y install etcd kubernetes

 配置etcd。确保列出的这些项都配置正确并且没有被注释掉,下面的配置都是如此     
#vim /etc/etcd/etcd.conf
 
ETCD_NAME=default
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"

配置kubernetes
    
vim /etc/kubernetes/apiserver
 
KUBE_API_ADDRESS="--address=0.0.0.0"KUBE_API_PORT="--port=8080"
KUBELET_PORT="--kubelet_port=10250"
KUBE_ETCD_SERVERS="--etcd_servers=http://127.0.0.1:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
KUBE_API_ARGS=""

   
2. 启动etcd, kube-apiserver, kube-controller-manager and kube-scheduler服务
    
# for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do systemctl restart $SERVICES systemctl enable $SERVICES systemctl status $SERVICES done

3.设置etcd网络
    
#etcdctl -C 10.0.0.81:2379 set /atomic.io/network/config '{"Network":"10.1.0.0/16"}'
4. 至此master配置完成,运行kubectl get nodes可以查看有多少minion在运行,以及其状态。这里我们的minion还都没有开始安装配置,所以运行之后结果为空
    
# kubectl get nodes NAME LABELS STATUS

  
三、MINION安装配置(每台minion机器都按如下安装配置)
 
1. 环境安装和配置
    
# yum -y install flannel kubernetes

  配置kubernetes连接的服务端IP
    
#vim /etc/kubernetes/config
KUBE_MASTER="--master=http://10.0.0.81:8080"
KUBE_ETCD_SERVERS="--etcd_servers=http://10.0.0.81:2379"

  配置kubernetes  ,(请使用每台minion自己的IP地址比如10.0.0.81:代替下面的$LOCALIP)
    
#vim /etc/kubernetes/kubelet<br>KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT="--port=10250"
# change the hostname to this host’s IP address KUBELET_HOSTNAME="--hostname_override=$LOCALIP"
KUBELET_API_SERVER="--api_servers=http://10.0.0.81:8080"
KUBELET_ARGS=""

  
2. 准备启动服务(如果本来机器上已经运行过docker的请看过来,没有运行过的请忽略此步骤)
    运行ifconfig,查看机器的网络配置情况(有docker0)
    
# ifconfig docker0
Link encap:Ethernet HWaddr 02:42:B2:75:2E:67 inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0 UP
BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0
errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

warning:在运行过docker的机器上可以看到有docker0,这里在启动服务之前需要删掉docker0配置,在命令行运行:sudo ip link delete docker0

3.配置flannel网络    
#vim /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://10.0.0.81:2379"
FLANNEL_ETCD_PREFIX="/atomic.io/network"  
PS:其中atomic.io与上面etcd中的Network对应
 
4. 启动服务    
# for SERVICES in flanneld kube-proxy kubelet docker; do systemctl restart $SERVICES systemctl enable $SERVICES systemctl status $SERVICES done

四、配置完成验证安装
    确定两台minion(10.0.0.82和10.0.0.83)和一台master(10.0.0.81)都已经成功的安装配置并且服务都已经启动了。
    切换到master机器上,运行命令kubectl get nodes
    
# kubectl get nodes
NAME STATUS AGE
10.0.0.82 Ready 1m
10.0.0.83 Ready 1m
可以看到配置的两台minion已经在master的node列表中了。如果想要更多的node,只需要按照minion的配置,配置更多的机器就可以了。

五.注意事项:{etcd的核心算法是raft算法,强一致性算法}
etcd的存储分为内部存储和持久化(硬盘)存储两部分。内存中的存储除了顺序化地记录所有用户对节点数据变更的记录外,还会对用户数据进行索引、建堆等方便查询的操作。而持久化则使用WAL进行记录存储。在k8s中,所有数据的存储以及操作记录都在etcd中进行存储,所以对于k8s集群来说,etcd是相当重要的,一旦故障,可能导致整个集群的瘫痪或者数据丢失。
在WAL体系中,所有的数据在提交之前都会进行日志记录。持久化存储的目录分为两个:snap和wal。snapshot相当于数据压缩,默认会将10000条wal操作记录merge成snapshot,节省存储,又保证数据不会丢失。
{
   WAL:存储所有事务的变化记录
   Snapshot:用于存放某一时刻etcd所有目录的数据
}


搭建完成之后,命令行执行:kubectl  get  no    查看节点状态是否ready。








posted @ 2018-04-13 13:25  运维之洞见  阅读(333)  评论(0编辑  收藏  举报