为什么会有这门课?
大概从2014年6、7月份开始,Kubernetes开始被国内的一些互联网公司关注,并研究使用。 经过四年多的发展,Kubernetes已经奠定了在容器集群管理、PaaS平台等领域的主导地位,越来越多的公司都是在围绕Kubernetes打造自己的基础平台。 经过四年多的发展,关于Kubernetes的资料也非常丰富了,有很多非常好的教程,可以说现在是学习Kubernetes最好的时候,面对的痛苦要比几年前少太多太多。
美中不足的是,很多教程依旧是灌输式地讲述知识点,而没有传授方法。
IT技术的变化是非常快的,软件可能几个月发布一个变动比较大的版本,如果只是传授知识,而不讲述方法,那么今天掌握的知识很可能几个月后就过时了,到那时候遇到新情况,又会产生各种困惑,而且面对技术的飞速变化,始终没有参与感。
经过这几年对Kubernetes断断续续地学习使用,感觉自己可以做一点事情,更好地帮人入门
。
从一开始就告诉初学者可以从哪里找到答案、从哪里获得最新资讯、从哪里找到最完整、最权威的定义。从一开始就接触最权威的资料,可以大大减少对互联网上各种二手资料的依赖,节省大量的时间。
本课程没有正式的讲义,使用的资料是本站的相关文章,这些文章都是我个人在学习、工作过程中随手记录的笔记,你可以在系列教程汇总中找到它们。
相关文章:系列教程汇总
本站上的技术文章都是我学习时记的笔记,其中一些整理汇总成了系列教程。
演示视频:网易云课堂·IT技术快速入门学院
制作视频需要准备环境和素材,录制讲解过程中往往要返工好多次,比较占用时间和精力,因此不是每一篇笔记都有视频演示(文档是一定有的,都是我自己在使用的笔记)。 视频力求精炼,附带一些不方便用文字记录的入门讲解,目标是成为比较好的辅助内容,帮助有困惑和疑问的朋友,打通关键环节。
QQ群:947371129
(Kubernetes实践互助)
QQ群用于这门课程的学习者以及所有对Kubernetes感兴趣的人员的交流,注意不要灌水讨论无关话题和发广告。
知识星球:我的网课
知识星球是一个知识社区,有网页版和APP,类似于早期的BBS,可以发帖提问。相比QQ群,星球主题集中并且留有记录,容易查找。可以通过不贵、回报超高的,付费社区都有哪些?这篇文章了解知识星球。
知识星球早先创建的时候没搞清楚规则设置了一年的有效期,目前正在想办法解除,变更成永久有效,以防止球内人员失去联系。
微信公众号:我的网课
(公众号二维码在网页右下角)
关注微信公众号后,会自动回复我的个人微信
,欢迎加好友,最好备注一下来自于哪里。公众号更新很不频繁,偶尔有时间、有话题了,会写一篇两篇的,以经验总结为主。
其它事项
我不是专门做教程的,也不是职业讲师,平时要上班,会有意防止微信、QQ、企业微信等将大块的时间分割成小块,导致一天做不了多少事,因此很少能够及时回复。并且通过QQ、微信私下交流,花费同样的时间,只对你我两个人有效,沟通的价值没有最大化,这非常不好。因此建议尽量使用知识星球,
另外,正在给站点添加的评论功能
,也是非常好的沟通方式,区别是知识星球我使用的比较频繁,回复地更及时一些,并且星球里所有的人都可以参与解答。
kubectl-commands是kubectl所有子命令的用法,有例子,非常好的文档。
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/ 是v1.12的API索引手册。
Kubernetes网站的域名是kubernetes.io,可以用短域名k8s.io直接访问。 Kubernetes的官方文档,应当是学习工作中最常使用的,其它所有的资料都是二手的,包括这篇文章。
能够使用官方文档,是开始掌握Kubernetes的第一步,因为只有这样才能独立解决问题,才能第一时间得知了解到Kubernetes的最新变化。Kubernetes的官方文档虽然完善了很多,但是对初学者还是不够友好,有必要专门介绍一下。
Kubernetes Documentation相比以前已经完善太多了,如果英文还可以,只学习它的文档应该是足够的。
Kubernetes Documentation Home页面中最有价值的部分是底部经过分类整理的页面链接。
Kubernetes的安装部署文档:Kubernetes Setup,包括通过kubeadm、在aws上直接部署、在托管于云上的CoreOS上部署、 在CloudStack上部署、使用Salt部署、从零开始部署Kubernetes,或者通过Minikube在本地运行Kubernetes。
大规模Kubernetes集群时需要注意的问题:Building Large Clusters。
跨可用区部署时需要注意的问题:kubernetes Running in Multiple Zones,源代码编译。
Kubernetes集群中证书的使用:Kubernetes PKI Certificates and Requirements。
集群节点Node的验证方法:Validate Node Setup。
Kubernetes的基本概念:Kubernetes Concepts,这是非常重要的文档,解释了Kubernetes使用的术语以及对应的使用方法,包括Kubernetes的系统架构介绍。
Kubernetes的常用操作:Kubernetes Tasks,比较有用,演示了很多操作,也建议通读一遍,对Kubernetes能做到的事情有所了解。
Kubernetes的API手册和命令手册:Kubernetes Reference,包括一些使用技巧,譬如设置kubelet的命令提示:Kubectl Cheat Sheet。
Kubernetes官方提供的教学材料,Tutorials,适合初学者。
社区:Contribute to Kubernetes docs和Community介绍了怎样参与社区开发。
Concepts中罗列了Kubernetes中的所有术语,并介绍了这些术语对应的对象的使用方法。
Kubernetes组件中介绍了几个主要组件:
Master的组件:
kube-apiserver、etcd、kube-scheduler、kube-controller-manager、cloud-controller-manager、
Node的组件:
kubelet、kube-proxy、Container Runtime
可选插件:
DNS、Web UI、Container Resource Monitoring、Cluster-level Logging
Understanding Kubernetes Objects中介绍了Kubernetes的设计原则:
Object的定义是`声明式`的,spec中记录的是期待达成状态,status中记录的是当前状态。
延伸:到哪找到每类Object的完整定义?Object的定义代码在哪里?
nodes and persistentVolumes, are not in any namespace.
松耦合设计
We don’t want to pollute labels with non-identifying,
especially large and/or structured, data. Non-identifying information should be recorded using annotations.
Equality-based requirement: Three kinds of operators are admitted =,==,!=
Set-based requirement: Three kinds of operators are supported: in,notin and exists (only the key identifier)
Similarly the comma separator acts as an AND operator: partition,environment notin (qa)
Set-based requirements can be mixed with equality-based requirements: partition in (customerA, customerB),environment!=qa
kubectl get pods -l 'environment in (production, qa)'
Service and ReplicationController: equality-based requirement selectors are supported
Newer resources, such as Job, Deployment, Replica Set, and Daemon Set, support set-based requirements as well.
Annotations are not used to identify and select objects.
The metadata in an annotation can be small or large, structured or unstructured, and can include characters not permitted by labels.
Supported operators: =, ==, and !=
field selectors can be chained together as a comma-separated list
use field selectors across multiple resource types:
kubectl get statefulsets,services --field-selector metadata.namespace!=default
这只是建议使用的labels
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app.kubernetes.io/name: mysql
app.kubernetes.io/instance: wordpress-abcxzy
app.kubernetes.io/version: "5.7.21"
app.kubernetes.io/component: database
app.kubernetes.io/part-of: wordpress
app.kubernetes.io/managed-by: helm
TODO
Kubernetes Tasks中给出了很多的操作示例,涵盖了Kubernetes的绝大多数特性。
Guaranteed: request == limit, Pod分配的资源是固定受限的
Burstable: request < limit(包括未设置) Pod分配的资源在request~limit之间变动
BestEffort: request和limit均未设置 Pod的资源不受限也没有最低保证
扩展资源是CPU、Memory、磁盘等通用资源之外的、Kubernetes感知不到的资源,例如Node上的特殊硬件。
Projected Volume可以将secret、configMap、serviceAccountToken、downwardAPI几种不同类型的Source挂载到同一个目录中。
Security Context定义了Pod和Container的操作权限和访问控制。
Service Account被挂载到Pod中,Pod中的进程可以用Service Account来通过其它服务的认证。
将私有镜像仓库的账号和密码保存成Kubernetes中的secret,然后在Pod的声明中指定要使用的secret。
为Pod配置存活监听(liveness)和就绪监听(readiness)
liveness probes用来判定Container是否需要被重启
readiness probes 用来判定Container是否可以开始接收请求
Init Container在Pod中的业务容器启动之前*完成运行*,可以用来为业务容器准备运行环境。
postStart:容器启动后执行的命令,与容器中的entrypoint异步执行
preStop: 容器停止前执行的命令,容器需要等到preStop指定的命令运行结束后才能终止,除非等待时间超过了grace period
容器的环境变量的值可以从ConfigMap中读取,ConfigMap也可以被以volumn的形式挂载到容器中
Pod中多个容器进程空间的共享,以及访问其它容器中文件的方法
Kubernetes v1.11 alpha特性。
将Docker Compose文件转换Kubernetes file
一个名为Kompose的工具。
设置namespaces中单个PVC存储空间配额上限和下限、设置Namespace的存储空间配额
Retain : 用户删除PVC时,动态分配的PV保留,标记为released,不能被其它的PVC使用
Delete : 用户删除PVC时,动态分配的PV一同删除
Recycle : (deprecated)用户删除PVC时,对应PV中的数据被删除,PV可以再次用于其它PVC。
正在开发中的Cloud Controller Manager
使用PodDisruptionBudget防止Pod数量过低
为集群内的应用创建Service,通过Service访问应用
Starting from Kubernetes 1.8, resource usage metrics, such as container CPU and memory usage, are available in Kubernetes through the Metrics API.
These metrics can be either accessed directly by user, for example by using kubectl top command, or used by a controller in the cluster, e.g. Horizontal Pod Autoscaler, to make decisions.
aggregation layer配置和apiserver扩展
PKI Certificates and Requirements
Manage TLS Certificates in a Cluster
Kubelet通过bootstrap申请证书:TLS bootstrapping
Kubelet的证书轮转更替:Certificate Rotation
Authenticating with Bootstrap Tokens