github地址: https://github.com/kubernetes/kubernetes/
官方网站: kubernets.io
pod使用接口技术
CNI: container network interface
CSI: container storage interface
CRI: container runtime interface
CVI: container volume interface
pod:k8s中运行容器的最小单元
k8s如果向替换CRI的话(替换容器技术),只需要讲POD使用相关的容器技术(docker,podman)封装即可
service: 实现了从宿主机外层访问k8s内部不同的容器的访问方式,还实现了pod的动态发现;因此可以说Service是k8s内部的负载均衡器
实现方式: 早期是iptable,在1.11之后支持ipvs(轮训算法)
replicationcontroller/deployment: 已废弃,POD控制器; 通过环境检测,保证pod的正常运行
master: 主节点
kube-apiserver: https://k8smeetup.github.io/docs/admin/kube-apiserver/
为api对象验证并配置数据,包括pods,services,APIserver提供Restful操作和到集群共享状态的前端,所有其它组件通过apiserver进行交互
kube-scheduler:https://k8smeetup.github.io/docs/admin/kube-scheduler/
具有丰富的资源策略,能够感知拓扑变化,支持特定负载的功能组件,它对集群的可用性,性能表现以及容量都影响巨大,scheduler需要考虑独立的和集体的资源需求,服务质量需求,硬件、软件,策略限制,亲和与反亲和规范,数据位置吗内部负载接口,截止时间等等,如有特定的负载需求可以通过apiserver暴露出来
kube-controller-manager: https://k8smeetup.github.io/docs/admin/kube-controller-manager/
作为集群内部的控制中心,负责集群内部的Node,Pod副本,服务端点,命名空间,服务账号,资源配额的管理,当某个Node意外宕机时,controller-manager会及时发现并执行自动修复,确保集群始终处于预期的工作状态
Node节点
kube-proxy: https://k8smeetup.github.io/docs/admin/kube-proxy/
维护node节点上的网络规则,实现用户访问请求的转发,其实就是转发给service,需要管理员指定service和NodePort的对应关系
Kubernetes 网络代理运行在 node 上。它反映了 node 上 Kubernetes API 中定义的服务,并可以通过一组后端进行简单的 TCP、UDP 流转发或循环模式(round robin))的 TCP、UDP 转发。目前,服务的集群 IP 和端口是通过 Docker-links 兼容的环境变量发现的,这些环境变量指定了服务代码打开的端口。有一个可选的 addon 为这些集群 IP 提供集群 DNS。用户必须使用 apiserver API 创建一个服务来配置代理。
kubelet: https://k8smeetup.github.io/docs/admin/kubelet/
kubelet 是运行在每个节点上的主要的“节点代理”,它按照 PodSpec 中的描述工作。 PodSpec 是用来描述一个 pod 的 YAML 或者 JSON 对象。kubelet 通过各种机制(主要通过 apiserver )获取一组 PodSpec 并保证在这些 PodSpec 中描述的容器健康运行。kubelet 不管理不是由 Kubernetes 创建的容器。
除了来自 apiserver 的 PodSpec ,还有 3 种方式可以将容器清单提供给 kubelet 。
文件:在命令行指定的一个路径,在这个路径下的文件将被周期性的监视更新,默认监视周期是 20 秒并可以通过参数配置。
HTTP端点:在命令行指定的一个HTTP端点,该端点每 20 秒被检查一次并且可以通过参数配置检查周期。
HTTP服务:kubelet 还可以监听 HTTP 服务并响应一个简单的 API 来创建一个新的清单
ETCD: 存储所有集群数据
组件官网参考: https://kubernetes.io/zh/docs/concepts/overview/components/
角色
主机名
ip地址
软件
master-1
centos7-node1
192.168.56.11
docker,kube-comtroller-manager,kube-apiserver,kube-schduler
master-2
centos7-node2
192.168.56.12
master-3
centos7-node3
192.168.56.13
ha-1
centos7-node4
192.168.56.14
haproxy,keepalived
ha-2
centos7-node5
192.168.56.15
harbor-1
centos7-node6
192.168.56.16
docker,docker-compose,harbor
node-1
centos7-node7
192.168.56.17
kubelet,kube-proxy
node-2
centos7-node8
192.168.56.18
服务器使用centos7.6以及以上,配置阿里云仓库
关闭防火墙&selinux&swap
自动更新时间
设置主机名&hosts解析
系统参数优化(ip地址转发)
开启ipvs
重启服务器
基础docker安装
harbor
创建baseimages镜像仓库
haproxy&keepalived
master节点安装
开启 master命令补全
通过配置文件初始化master
安装网络插件flannel
创建kubernetes的流程: https://k8smeetup.github.io/docs/reference/setup-tools/kubeadm/kubeadm-init/#init-workflow
使用2.0.0-rc6版本
访问任意主机的https://192.168.56.12:30002 即可
获取访问token即可登陆
升级时间: 业务低峰期
升级方式
ansible
kubeadm
升级步骤
在所有master节点进行升级,升级管理断服务kube-controller-manager,kube-apiserver,kube-scheduler,kube-proxy
检查可升级的软件版本
所有master节点都安装1.17.4的kubeadm
更新master节点的kubectl,kubelet
更新node节点
验证升级结果
参考用例: https://kubernetes.io/zh/docs/concepts/workloads/controllers/deployment/
Nginx用例
haproxy和keepalived配置
需要新增一个VIP(LB)
将LB映射到haproxy对应的nodeport上
tomcat配置
测试访问 http://192.168.56.11:8080/app/
在harbor创建linux公开仓库
准备dockerfile
业务pod创建
nginx代理请求到tomcat