初识Kubernetes

Kubernetes(K8s)是一个用于自动化部署、扩展和管理容器化应用程序的开源系统
2014年6月7日Google推出了Borg的开源版本
2015年7月21日Google与Linux基金会组建了CNCF基金会
2015年7月21日Kubernetes v1.0 发布,并捐献给CNCf基金会
2017年Docker宣布将原生支持 Kubernetes,包括Docker EE、Docker CE 以及 Docker for Mac/Windows 等全平台的支持
2017年Mesosphere也开始支持Kubernetes
每三个月发布一个新版本,目前最新的版本是1.17

image.png

项目地址:
https://github.com/kubernetes/kubernetes
image.png
官方文档**
https://kubernetes.io/zh/docs/home

image.png
https://mp.weixin.qq.com/s/Hh2KWt7F0ExUSJzVcTy8rQ
Kubernetes 1.13:Kubeadm简化群集管理、容器存储接口(CSI)和CoreDNS作为默认DNS现已普遍可用
https://mp.weixin.qq.com/s/eg26el8eUOmKcUDTuvl_KQ
【深度】Kubernetes v1.16 最值得工程师关注的改动
https://mp.weixin.qq.com/s/i4MfuvozyoIEhxeGL4Hxcw
回顾 Kubernetes 最近 6 个版本重点更新
https://mp.weixin.qq.com/s/fSqfHmG8Yrw_l9Yqir2Dxg
美国时间 12 月 9 日,Kubernetes 迎来了 2019 年的最后一个新版本 1.17
https://mp.weixin.qq.com/s/XPWjRa3V9asWSwDcNYyWYg
k8s v1.17 新特性预告: 拓扑感知服务路由
https://mp.weixin.qq.com/s/SxVUNKfOn8BvMQ8tFbcdZw

最新版本

image.png

云原生与CNCF
https://www.cncf.io/
Cloud Native Computing Foundation
云原生计算基金会(以下简称CNCF)是一个开源软件基金会,它致力于云原生(Cloud Native)技术的普及和可持续发展
https://www.kubernetes.org.cn/5482.html

CNCF项目
image.png

云原生应用之路
https://jimmysong.io/blog/from-kubernetes-to-cloud-native/

Kubernetes 简介 - 图7

云原生应用的三大特征:容器化封装、动态管理、面向微服务
https://www.jianshu.com/p/13251fd149a6

KubeCon 中国上海-2018

image.png

KubeCon 中国上海-2019
image.png

image.png

image.png

KubeCon 中国上海-2020 受疫情影响已取消

Docker容器
容器十年 ——一部软件交付编年史
https://mp.weixin.qq.com/s/O7pZGz5oQOdS1Yj1YiRm5w

复习Docker
早期架构
image.png

image.png

新架构
Docker简介
https://www.yuque.com/liweiming/gfe9m0/yp0tna

Kubernetes 简介 - 图14

https://www.docker.com/products/container-runtime

image.png

containerd
美国时间2019年2月28日,CNCF正式宣布containerd毕业https://blog.csdn.net/RancherLabs/article/details/88102538

https://www.cnblogs.com/xuxinkun/p/8036832.html
Kubernetes 简介 - 图16

CRI + shimv2: 一种 Kubernetes 集成容器运行时的新思路
https://mp.weixin.qq.com/s/rCyp_EbP46A5p9_XufNCQQ
Kubernetes 容器运行时演进
https://mp.weixin.qq.com/s/cf2jQ7pEHwZ2CGOjDhguSQ

Kubernetes 简介 - 图17

接触到时间
Docker 2017年7月
Kubernetes 2018年5月
image.png

image.png

image.png

image.png

image.png

image.png

Kubenetes架构

https://kubernetes.io/zh/docs/concepts/

image.png

image.png

Kubernetes 简介 - 图26

Kubenetes组件

https://mp.weixin.qq.com/s/xjaVVOMyH1JiVjQUdwMdGQ
kube-apiserver 用于暴露Kubernetes API。任何的资源请求/调用操作都是通过kube-apiserver提供的接口进行
ETCD 是Kubernetes提供默认的存储系统,保存所有集群数据,使用时需要为etcd数据提供备份计划
kube-controller-manager 管理控制器,是集群中处理常规任务的后台线程;这些控制器包括:
节点 (Node)控制器
副本(Replication)控制器:负责维护系统中每个副本中的pod
端点(Endpoints)控制器:填充Endpoints对象(即连接Services&Pods)
Service Account和Token控制器:为新的Namespaces创建默认帐户访问API Token
kube-scheduler 监视新创建没有分配到Node的Pod,为Pod选择一个Node
kube-proxy 通过在主机上维护网络规则,并执行连接转发来实现service(Iptables/ipvs)
Kubelet 负责维护容器的生命周期
Addons:
coredns负责为整个集群提供DNS服务
Ingress对外提供七层服务的访问
metries-server提供资源监控
Dashboard提供GUI

Kubernetes 简介 - 图27Kubernetes 简介 - 图28

image.png
Kubectl
image.png
Kubernetes接口
CRI(Container Runtime Interface):容器引擎接口,提供计算资源
CNI(Container Network Interface):容器网络接口,提供网络资源
CSI(Container Storage Interface):容器存储接口,提供存储资源
image.png

kubectl 创建pod 流程

image.png

image.png

image.png

image.png

image.png

Kubenetes资源对象


image.png

image.png

Pod
image.png

pod健康检查与生命周期
[

](https://hugo-picture.oss-cn-beijing.aliyuncs.com/what-happens-when-k8s.svg)
image.png

image.png

kubectl 创建 Pod 背后到底发生了什么?
https://mp.weixin.qq.com/s/ctdvbasKE-vpLRxDJjwVMw
高清版
https://hugo-picture.oss-cn-beijing.aliyuncs.com/what-happens-when-k8s.svg

image.png

深入剖析Kubernetes
kubernetes的调度机制工作原理
Informer Path:
监听Etcd中Pod、Node、Service
PriorityQueue scheduler cache
Scheduling Path:Predicates Bind

image.png

image.png

Service

iptable
image.png

ipvs

image.png

Kubenetes网络

https://mp.weixin.qq.com/s/X43vIG3hE635DiPozvhsGA

网络方案介绍之Overlay网络-Flannel(vxlan)
image.png

Flannel 是由CoreOS维护的一个容器跨主机网络方案,由golang语言编写,后端支持多种网络模式。
VxLAN模式:Linux内核3.7+以上版本支持vxlan,使用linux内核中的VxLAN模块封装报文。也是默认模式。
Host-gw模式:即Host Gateway,它是通过在节点上,创建到达目标容器地址的路由直接完成报文转发。但是这种模式要求所有节点必须在同一个二层网络,不太适用于集群跨需要跨子网环境。
UDP模式:使用普通的UDP协议完成对于报文的封装,实现overlay网络的转发。转发性能最差。

Flannel默认网络模式。
每个节点部署一个flanneld作为agent,用于生成vtep设备和从etcd获取和上传subnet信息;
从一个大网段划分子网每个主机对应一个子网;
通过veth-pair网卡连接宿主机和POD;
同子网直接通过CNI0进行数据包转发,不同子网,封装vxlan通过flannel.1这个vtep设备建立的vxlan隧道进行传输。
访问集群外部网络经过iptables做Snat。
image.png
优势
基于VxLAN的Overlay网络虚拟化技术简化网络结构,对底层网络侵入性和依赖性小。
保证整个集群中所有容器能够获得同属一个内网且不重复的IP地址。
学习成本低,应用范围广,用户只需要一些基础知识就可以设置适合大多数用例的环境

缺点
由于利用linux内核的VxLAN模块使用CPU进行数据包的解封装操作,会带来一定的性能损耗。
本身没有网络隔离组件,没有办法进行安全策略控制。使用flanel变种canal可实现隔离,flannel+calico Network policy

网络方案介绍之undelay网络——Calico(BGP)
image.png

Calico是一种开源网络和网络安全解决方案,适用于容器,虚拟机和基于主机的本机工作负载。Calico支持广泛的平台,包括Kubernetes,docker,OpenStack和裸机服务。Calico后端支持两种网络模式。
BGP模式:将节点做为虚拟路由器通过BGP路由协议来实现集群内容器之间的网络访问。
IPIP模式:在原有IP报文中封装一个新的IP报文,新的IP报文中将源地址IP和目的地址IP都修改为对端宿主机IP。

每个节点部署一个calico-node作为agent,从etcd获取和上传subnet信息;
从一个大网段划分子网每个主机对应一个子网;
通过veth-pair网卡连接宿主机和POD;
生成明细路由,同子网直接通过明细路由进行数据包转发
将宿主机做为一个虚拟路由器,整个集群节点默认在一个自治域内,通过BGP路由协议将宿主机上路由条目互相宣告学习,这样整个集群主机都有到对应POD路由信息,不同集群通过生成的BGP路由转发。
访问集群外部网络经过iptables做Snat。
网络策略使用calico-networkpolicy组件生成对应的iptables规则。
image.png

网络方案介绍之undelay网络——Calico(BGP)路由反射
为了防止BGP路由环路,BGP协议规定在一个AS(自治系统)内部,IBGP路由器之间只能传一跳路由信息,所以在一个AS内部,IBGP路由器之间为了学习路由信息需要建立全互联的对等体关系,但是当一个AS规模很大的时候,这种全互联的对等体关系维护会大量消耗网络和CPU资源,所以这种情况下就需要建立路由反射器以减少IBGP路由器之间的对等体关系数量。

image.png

Calico(BGP)网络模型优势:
数据包采用纯三层网络协议转发,没有封装和解封装数据包的过程,传输性能几乎接近于物理网络本身的传输性能。
集群中运行的容器是以独立的IP协议栈进行数据转发,可以通过calico提供的基于iptables的安全管理功能对于集群内的容器进行网络安全防护。
Calico(BGP)网络模型劣势:
需要集群内所有节点在同一个二层网络中,或对应的三层路由转发设备支持并打开BGP路由来学习对应路由条目,对底层网络侵入性较大。
学习成本较高,用户需要具备一定的BGP知识才能完成对一些用例的支持。
若需要硬件设备学习BGP路由,则需要考虑硬件路由器本身性能和最大路由条目数。

Canal是一种将Calico和Flannel网络部署在一起的统一的联合网络解决方案,在Canal网络体系中,由Flannel提供网络解决方案,由Calico提供网络策略支持(例如:对POD之间进行网络流量隔离等),因为Canal底层是flannel,所以Canal一样支持flannel的多种网络模式。
image.png
复习Docker 网络图片来自极客时间:深入剖析Kubernetes
image.png

image.png

image.png

image.png

image.png

image.png

image.png

Kubernetes集群部署

*二进制部署
Saltstack部署
https://github.com/unixhot/salt-kubebin
Ansible部署
https://github.com/lizhenliang/ansible-install-k8s
kubeasz
https://github.com/easzlab/kubeasz
二进制安装k8s集群
https://mp.weixin.qq.com/s/tU7DJXHL4bIyJETmtl0cYA
跟我一步步二进制部署高可用kubernetes集群
https://mp.weixin.qq.com/s/MOo9wTlQRdzEWwr0nA204g
kubernetes一键高可用安装
https://github.com/fanux/sealos
image.png
https://www.funtl.com/zh/service-mesh-kubernetes/%E9%AB%98%E5%8F%AF%E7%94%A8%E9%9B%86%E7%BE%A4.html
image.png

离线部署
Breeze
https://github.com/wise2c-devops/breeze
image.png

容器化部署

RKE部署Kubernetes集群高可用架构
https://www.yuque.com/liweiming/xzgi37/tth7l6
kubeadm
https://www.yuque.com/liweiming/k8s/bdl9um
kubernetes管理平面
rancher
https://www.rancher.cn/
wayne
https://360yun.org
https://github.com/Qihoo360/wayne
kubesphere
https://kubesphere.io/
https://kubesphere.com.cn/docs/zh-CN/installation/all-in-one/

Kubernetes日志

kubernetes日志平台建设最佳实践-元乙.pdf

kubernetes监控

……
Kubernetes 简介 - 图63

prometheus 普罗米修斯监控系统.pdf

云原生应用自动化引擎-OpenKruise

https://github.com/openkruise
https://openkruise.io/en-us/

进阶知识

image.png

image.png

image.png

troubleshooting-kubernetes.v2.pdf

Redhat openshift

20200305-红帽的企业级PaaS平台特性.pdf

容器云未来:Kubernetes、Istio 和 Knative
https://mp.weixin.qq.com/s/r1o64hqrc2IOdWmrswj-ww

image.png

微服务

国内首发 | Istio服务网格,再次引领云原生领域风向标
https://mp.weixin.qq.com/s/DtxB83pDO6pTju1mvMpCTw

Istio架构转变

旧:
image.png

新:

image.png

Serverless 编排框架

Knative系列—-IBM_OpenTech
https://www.bilibili.com/video/av68335390/?redirectFrom=h5

Knative 云原生应用开发指南.pdf

Knative 云原生应用开发指南.pdf

Serverless函数计算介绍以及典型场景实践
https://mp.weixin.qq.com/s/ynCAAdmq0jkJUinmCbD7IQ
了解Serverless,以腾讯地图、微信小程序为例
https://mp.weixin.qq.com/s/drgofr5dlVEtzfh95KzNrw
image.png

image.png

image.png

image.png

image.png

image.png

image.png

Serverless 知识库
https://mp.weixin.qq.com/s/U5Nk-DM19R8ugUrgg5A7TQ

image.png

image.png

边缘计算

rancher/k3s
https://github.com/rancher/k3s
k3s进阶之路
https://space.bilibili.com/430496045/channel/detail?cid=103026

image.png

image.png

image.png

image.png

推荐书籍

image.png

image.png

image.png

阿里云 开发者社区 -声东

深入浅出Kuberne.pdf

推荐资料

CNCF / Presentation
Docker 入门到实践
从Docker到Kubernetes进阶
Kubernetes 指南
K8S训练营
Introduction to Kubernetes (LFS158)
CKA Self-Study Course
深入剖析Kubernetes 张磊
Kubernetes中文指南/云原生应用架构实践手册
Kubernetes指南
才云开源内部 Kubernetes 学习路径
走进k8s
k8s源码学习
CNCF x Alibaba 云原生技术公开课 - 云原生教程 - 阿里云大学
华为云社区 Cloud Native Lives
华为云kubernetes管理员实训课
如何入门 Kubernetes
10分钟看懂Docker和K8S
漫画 | Kubernetes带你一帆风顺去远航
这里有最全的Kubernetes初学者指南
Kubernetes 系列微讲堂(IBM)
【(千锋教育)服务网格化 Service Mesh】Kubernetes 视频版
Spring Cloud & Kubernetes
Learn Kubernetes using Interactive Browser-Based Scenarios
使用Rook+Ceph在Kubernetes上作持久存储
模块四-Kubernetes 架构原则和对象设计.pdf
博客园
https://www.cnblogs.com/dukuan/category/1320955.html
https://www.cnblogs.com/tylerzhou/p/10969041.html
https://www.cnblogs.com/zisefeizhu/category/1513596.html
https://www.cnblogs.com/linuxk/category/1248289.html
https://www.cnblogs.com/weiyiming007/category/1379897.html
https://www.cnblogs.com/linuxk/category/1248289.html
https://www.cnblogs.com/breezey/tag/kubernetes/default.html?page=1