kubernetes 1.12 从零开始(初):课程介绍与官方文档汇总

目录

说明

为什么会有这门课?

大概从2014年6、7月份开始,Kubernetes开始被国内的一些互联网公司关注,并研究使用。 经过四年多的发展,Kubernetes已经奠定了在容器集群管理、PaaS平台等领域的主导地位,越来越多的公司都是在围绕Kubernetes打造自己的基础平台。 经过四年多的发展,关于Kubernetes的资料也非常丰富了,有很多非常好的教程,可以说现在是学习Kubernetes最好的时候,面对的痛苦要比几年前少太多太多。

美中不足的是,很多教程依旧是灌输式地讲述知识点,而没有传授方法。

IT技术的变化是非常快的,软件可能几个月发布一个变动比较大的版本,如果只是传授知识,而不讲述方法,那么今天掌握的知识很可能几个月后就过时了,到那时候遇到新情况,又会产生各种困惑,而且面对技术的飞速变化,始终没有参与感。

经过这几年对Kubernetes断断续续地学习使用,感觉自己可以做一点事情,更好地帮人入门

从一开始就告诉初学者可以从哪里找到答案、从哪里获得最新资讯、从哪里找到最完整、最权威的定义。从一开始就接触最权威的资料,可以大大减少对互联网上各种二手资料的依赖,节省大量的时间。

本课程没有正式的讲义,使用的资料是本站的相关文章,这些文章都是我个人在学习、工作过程中随手记录的笔记,你可以在系列教程汇总中找到它们。

资料和交流方式

相关文章系列教程汇总

本站上的技术文章都是我学习时记的笔记,其中一些整理汇总成了系列教程

演示视频网易云课堂·IT技术快速入门学院

制作视频需要准备环境和素材,录制讲解过程中往往要返工好多次,比较占用时间和精力,因此不是每一篇笔记都有视频演示(文档是一定有的,都是我自己在使用的笔记)。 视频力求精炼,附带一些不方便用文字记录的入门讲解,目标是成为比较好的辅助内容,帮助有困惑和疑问的朋友,打通关键环节。

QQ群947371129 (Kubernetes实践互助)

QQ群用于这门课程的学习者以及所有对Kubernetes感兴趣的人员的交流,注意不要灌水讨论无关话题和发广告。

知识星球我的网课

知识星球是一个知识社区,有网页版APP,类似于早期的BBS,可以发帖提问。相比QQ群,星球主题集中并且留有记录,容易查找。可以通过不贵、回报超高的,付费社区都有哪些?这篇文章了解知识星球。

知识星球早先创建的时候没搞清楚规则设置了一年的有效期,目前正在想办法解除,变更成永久有效,以防止球内人员失去联系。

微信公众号我的网课(公众号二维码在网页右下角)

关注微信公众号后,会自动回复我的个人微信,欢迎加好友,最好备注一下来自于哪里。公众号更新很不频繁,偶尔有时间、有话题了,会写一篇两篇的,以经验总结为主。

其它事项

我不是专门做教程的,也不是职业讲师,平时要上班,会有意防止微信、QQ、企业微信等将大块的时间分割成小块,导致一天做不了多少事,因此很少能够及时回复。并且通过QQ、微信私下交流,花费同样的时间,只对你我两个人有效,沟通的价值没有最大化,这非常不好。因此建议尽量使用知识星球,

另外,正在给站点添加的评论功能,也是非常好的沟通方式,区别是知识星球我使用的比较频繁,回复地更及时一些,并且星球里所有的人都可以参与解答。

Kubernetes的文档介绍

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 docsCommunity介绍了怎样参与社区开发。

Kubernetes中的术语与资源的操作方法

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

Kubernetes的API约定与启用方法

The Kubernetes API

Kubernetes中资源(Object)的定义

Understanding Kubernetes Objects中介绍了Kubernetes的设计原则:

Object的定义是`声明式`的,spec中记录的是期待达成状态,status中记录的是当前状态。

延伸:到哪找到每类Object的完整定义?Object的定义代码在哪里?

Namespaces:

nodes and persistentVolumes, are not in any namespace.

Labels and Selectors:

松耦合设计

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:

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.

Field Selectors:

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

Recommended Labels:

这只是建议使用的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

kubectl命令

kubectl管理命令

Kubernetes集群部署与各个组件的功能和参数详解

TODO

Kubernetes官网上的Task

Kubernetes Tasks中给出了很多的操作示例,涵盖了Kubernetes的绝大多数特性。

Pod和Container操作

Pod的内存设置

Pod的CPU设置

Pod的QOS策略

Guaranteed:  request == limit,            Pod分配的资源是固定受限的
Burstable:   request <  limit(包括未设置)  Pod分配的资源在request~limit之间变动
BestEffort:  request和limit均未设置        Pod的资源不受限也没有最低保证     

为Node声明扩展资源

扩展资源是CPU、Memory、磁盘等通用资源之外的、Kubernetes感知不到的资源,例如Node上的特殊硬件。

为Pod分配扩展资源

为Pod设置Volume(存储卷)

PV、PVC的创建,以及为Pod设置PVC(持久存储卷)

为Pod设置Projected Volume

Projected Volume可以将secret、configMap、serviceAccountToken、downwardAPI几种不同类型的Source挂载到同一个目录中。

为Pod设置Security Context

Security Context定义了Pod和Container的操作权限和访问控制。

为Pod设置Service Account

Service Account被挂载到Pod中,Pod中的进程可以用Service Account来通过其它服务的认证。

为Pod配置私有镜像仓库的访问凭证

将私有镜像仓库的账号和密码保存成Kubernetes中的secret,然后在Pod的声明中指定要使用的secret。

为Pod配置存活监听(liveness)和就绪监听(readiness)

liveness probes用来判定Container是否需要被重启
readiness probes 用来判定Container是否可以开始接收请求

将Pod调度到特定范围内的Node

为Pod设置Init Container

Init Container在Pod中的业务容器启动之前*完成运行*,可以用来为业务容器准备运行环境。

在Pod的生命周期中设置钩子(handler)

postStart:容器启动后执行的命令,与容器中的entrypoint异步执行
preStop:  容器停止前执行的命令,容器需要等到preStop指定的命令运行结束后才能终止,除非等待时间超过了grace period

为Pod设置ConfigMap

容器的环境变量的值可以从ConfigMap中读取,ConfigMap也可以被以volumn的形式挂载到容器中

Pod中多个容器进程空间的共享,以及访问其它容器中文件的方法

Kubernetes v1.11 alpha特性。

将Docker Compose文件转换Kubernetes file

一个名为Kompose的工具。

集群管理员操作

将Cluster切分成多个namespace提供给用户

Namespace介绍

在namespace中为容器设置默认内存配额

在namespace中为容器设置默认CPU配额

在namespace中设置单个容器内存配额的上限和下限

在namespace中设置单个容器CPU配额上限和下限

设置namespace的内存和CPU配额

设置namespace的Pod配额

设置namespace的PVC和Service配额

设置namespaces中单个PVC存储空间配额上限和下限、设置Namespace的存储空间配额

为Node设置扩展资源

PV的回收策略

Retain   :  用户删除PVC时,动态分配的PV保留,标记为released,不能被其它的PVC使用 
Delete   :  用户删除PVC时,动态分配的PV一同删除
Recycle  :  (deprecated)用户删除PVC时,对应PV中的数据被删除,PV可以再次用于其它PVC。

保护正在被使用的PVC和PV:完全释放后才能删除

设置默认的Storage Class

Storage Class的使用

Node资源不足时,Kubelet驱逐Pod的策略

启动多个调度器,为Pod分配指定的调度器

设置Node的CPU分配策略:支持CPU独占

NetworkPolicy的使用

Kubelet直接引导启动的static pod

保证关键Pod的运行

在Node上为宿主机进程保留资源

在Pod中设置内核参数

Master的高可用设置

安全地从集群中移除Node

Kubernetes集群的安全防护

Kubernetes集群的DNS服务配置

使用CoreDNS做服务发现

敏感数据的加密存放

设置NAT转换,隐藏Pod的IP地址

Kubelet从文件中加载参数

Kubelet配置参数的热更新

访问cluster api的几种方法

访问cluster中的服务的几种方法

Cluster生命周期管理:维护、升级等

DNS调试方法

正在开发中的Cloud Controller Manager

Etcd集群的管理

使用KMS管理用于数据加密的密钥

数据注入应用的方法

通过容器的命令行参数注入

通过环境变量注入

将Pod和Container的信息通过环境变量注入

将Pod和Container的信息通过文件注入

将Secret注入到容器中

用ProdPreset在Pod创建时注入

部署应用

用Deployment部署无状态应用

应用PVC,部署单个有状态应用

使用StatefulSet部署多副本的有状态应用

StatefulSet的扩张

StatefulSet删除时应当注意的事项

用Kubectl Patch更新

滚动升级

Pod自动水平扩展

Pod自动水平扩展示例

使用PodDisruptionBudget防止Pod数量过低

部署任务

定时任务CronJob

并行运行的Job

通过消息队列为多个并行运行Job分配不同的任务

通过Redis队列为多个并行运行Job分配不通的任务

访问集群和集群内的应用

集群Dashboard

集群的访问方式配置

同时配置多个集群的访问方式

用端口转发的方式从本地访问集群中的应用

为集群内的应用创建Service,通过Service访问应用

应用之间通过Service地址访问彼此

创建外部负载均衡器

LoadBalancer对接防火墙

几个查看集群内容器的技巧

同一个Pod中的容器通过存储卷通信

为集群配置DNS服务

监控、日志、调试

用describe命令查看详情

操作审计

Metric Server

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.

Service调试

使用crictl调试Kubernetes node

Pod调试

登陆容器

使用ELK采集日志

部署日志采集Agent

node状态检查

常用的监控工具

应用故障排查方法

集群故障排查方法

Kubernetes集群扩展

添加自定义的资源

aggregation layer配置apiserver扩展

TLS证书

证书轮替

集群使用的证书管理

Kubernetes集群联邦

跨集群服务发现

设置集群联邦

CoreDNS作为联邦集群的DNS服务

联邦集群的放置策略

联邦集群的系列操作

DaemonSet管理

DaemonSet回滚

Daemonset更新

添加外部服务目录Catalog

用Helm安装服务目录

用sc安装服务目录

其它

hugepage的管理使用

gpu

关于TLS证书文档

PKI Certificates and Requirements

Certificates

Manage TLS Certificates in a Cluster

Kubelet通过bootstrap申请证书:TLS bootstrapping

Kubelet的证书轮转更替:Certificate Rotation

Authenticating with Bootstrap Tokens

参考

  1. Kubernetes website
  2. Kubernetes documentation
  3. Kubernetes documentation home
  4. Kubernetes Setup
  5. Deploy Kubernetes by kubeadm
  6. Deploy Kubernetes on aws
  7. Deploy Kubernetes on CoreOS on AWS or GCE
  8. Deploy Kubernetes on CloudStack
  9. Deploy Kubernetes by salt
  10. Kubernetes Building Large Clusters
  11. Kubernetes Running in Multiple Zones
  12. Deploy Kubernetes from Scratch
  13. Kubernetes Building
  14. Kubernetes PKI Certificates and Requirements
  15. Running Kubernetes Locally via Minikube
  16. Validate Node Setup
  17. Kubernetes Concepts
  18. Kubernetes Tasks
  19. Kubernetes Reference
  20. Kubectl Cheat Sheet
  21. Contribute to Kubernetes docs
  22. Community
  23. Tutorials
  24. Concepts

作者微信

推荐阅读

Copyright @2011-2019 All rights reserved. 转载请添加原文连接,合作请加微信lijiaocn或者发送邮件: [email protected],备注网站合作

友情链接:  李佶澳的博客  小鸟笔记  软件手册  编程手册  运营手册  爱马影视  网络课程  奇技淫巧  课程文档  精选文章  发现知识星球  百度搜索 谷歌搜索