k8s原理及使用kubeadm安装
介绍:
Kubernetes(k8s)是自动化容器操作的开源平台。这些容器操作包括:部署,调度和节点集群间扩展。
功能:
- 服务发现与调度
- 负载均衡
- 服务自愈
- 服务弹性扩容
- 横向扩容
- 存储卷挂载
组成:
- kubectl: 客户端命令行工具,作为整个系统的操作入口。
- kube-apiserver:以REST API服务形式提供接口,作为整个系统的控制入口。
- kube-controller-manager:执行整个系统的后台任务,包括节点状态状况、Pod个数、Pods和Service的关联等。
- kube-scheduler:负责节点资源管理,接收来自kube-apiserver创建Pods任务,并分配到某个节点。
- etcd:负责节点间的服务发现和配置共享。
- kube-proxy:运行在每个计算节点上,负责Pod网络代理。定时从etcd获取到service信息来做相应的策略。
- kubelet:运行在每个计算节点上,作为agent,接收分配该节点的Pods任务及管理容器,周期性获取容器状态,反馈给kube-apiserver。
- DNS:一个可选的DNS服务,用于为每个Service对象创建DNS记录,这样所有的Pod就可以通过DNS访问服务了。
架构:
master节点
kubernets cluster的大脑,运行着各种daemon服务,比如:kube-apiserver、kube-secheduler、kube-controller-manager、etcd和pod网络。
- apiserver : 提供restful api的接口各种客户端工具以及kubernets其他组件可以通过这个来管理
- secheduler :调度的意思,负责决定将这个pod放在哪个节点上,他调度会根据各个节点上的负载,高可用,性能,数据亲和性的需求 来决定到底放在哪个节点上
- controller-manager: 负责管理cluster的各种资源,保证资源处于预期状态
- etcd: 负责保存cluster的配置信息和各种状态信息,当数据发生变化是,etcd快速通知kubernets相关组件
node节点
node节点是存放pod运行的地方,支持docker,rkt等容器,运行的相关组件有kubelet、kube-proxy和pod网络
kubelet : node的agent,当scheduler确定某个node上运行pod后,会将pod的具体配置信息发送给该节点kubelet , kubelet根据这些信息创建和运行容器,并向Master报告运行状态
kub-proxy:每个node上都会运行kube-proxy服务,它负责访问service的tcp/upd数据流转发到后端的容器,如果有多个副本,kub-proxy会实现负载均衡
pod网络:如果要使pod能够相互通信.kubernets cluster 必须部署pod网络,flannel是其中一个可选方案
pod创建流程 :
分析:
- 如果输入一条指令,首先通过API接收到用户输入的指令,
- 将它发送到etcd进行注册,注册完成后,etcd又反馈给用户,
- 如果是创建的是一个新的pod,这个API通知controller manager 创建deployment资源
- 然后通过scheduler的执行调度任务,将这个pod分发到node节点上
- 然后通过node节点上的kublet服务进行创建并运行
- 最后创建完成后会在etcd里保存一份pod的应用的配置和当前的状态信息
开始搭建:
官网搭建文档:
https://kubernetes.io/zh/docs/tasks/tools/install-kubectl-linux/
1.先升级系统中的软解包
yum -y update ###升级所有包同时也升级软件和系统内核;
或
yum -y upgrade ###只升级所有包,不升级软件和系统内核。
2.修改主机名
- master:
hostnamectl set-hostname k8s-master
- node1:
hostnamectl set-hostname k8s-node1
- node2:
hostnamectl set-hostname k8s-node2sb
3.修改域名解析
cat >> /etc/hosts << EOF
192.168.42.1 k8s-master
192.168.42.2 k8s-node1
192.168.42.3 k8s-node2
EOF
确保每个节点上的MAC地址的唯一性
- master:
ifc